summaryrefslogtreecommitdiffstats
path: root/chromium/gpu/command_buffer
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-08-08 14:30:41 +0200
committerJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-08-12 13:49:54 +0200
commitab0a50979b9eb4dfa3320eff7e187e41efedf7a9 (patch)
tree498dfb8a97ff3361a9f7486863a52bb4e26bb898 /chromium/gpu/command_buffer
parent4ce69f7403811819800e7c5ae1318b2647e778d1 (diff)
Update Chromium to beta version 37.0.2062.68
Change-Id: I188e3b5aff1bec75566014291b654eb19f5bc8ca Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'chromium/gpu/command_buffer')
-rw-r--r--chromium/gpu/command_buffer/OWNERS1
-rwxr-xr-xchromium/gpu/command_buffer/build_gles2_cmd_buffer.py2218
-rw-r--r--chromium/gpu/command_buffer/client/BUILD.gn165
-rw-r--r--chromium/gpu/command_buffer/client/buffer_tracker.cc22
-rw-r--r--chromium/gpu/command_buffer/client/buffer_tracker.h26
-rw-r--r--chromium/gpu/command_buffer/client/buffer_tracker_unittest.cc29
-rw-r--r--chromium/gpu/command_buffer/client/client_context_state_autogen.h5
-rw-r--r--chromium/gpu/command_buffer/client/client_context_state_impl_autogen.h50
-rw-r--r--chromium/gpu/command_buffer/client/client_test_helper.cc41
-rw-r--r--chromium/gpu/command_buffer/client/client_test_helper.h30
-rw-r--r--chromium/gpu/command_buffer/client/cmd_buffer_helper.cc196
-rw-r--r--chromium/gpu/command_buffer/client/cmd_buffer_helper.h121
-rw-r--r--chromium/gpu/command_buffer/client/cmd_buffer_helper_test.cc400
-rw-r--r--chromium/gpu/command_buffer/client/context_support.h15
-rw-r--r--chromium/gpu/command_buffer/client/fenced_allocator.cc17
-rw-r--r--chromium/gpu/command_buffer/client/fenced_allocator.h16
-rw-r--r--chromium/gpu/command_buffer/client/fenced_allocator_test.cc75
-rw-r--r--chromium/gpu/command_buffer/client/gl_in_process_context.cc105
-rw-r--r--chromium/gpu/command_buffer/client/gl_in_process_context.h29
-rw-r--r--chromium/gpu/command_buffer/client/gl_in_process_context_export.h29
-rw-r--r--chromium/gpu/command_buffer/client/gles2_c_lib_autogen.h1667
-rw-r--r--chromium/gpu/command_buffer/client/gles2_cmd_helper.h40
-rw-r--r--chromium/gpu/command_buffer/client/gles2_cmd_helper_autogen.h3893
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation.cc640
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation.h123
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation_autogen.h673
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation_impl_autogen.h1133
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation_unittest.cc818
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h219
-rw-r--r--chromium/gpu/command_buffer/client/gles2_interface_autogen.h526
-rw-r--r--chromium/gpu/command_buffer/client/gles2_interface_stub_autogen.h642
-rw-r--r--chromium/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h965
-rw-r--r--chromium/gpu/command_buffer/client/gles2_trace_implementation_autogen.h642
-rw-r--r--chromium/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h905
-rw-r--r--chromium/gpu/command_buffer/client/gpu_control.h (renamed from chromium/gpu/command_buffer/common/gpu_control.h)35
-rw-r--r--chromium/gpu/command_buffer/client/gpu_memory_buffer_factory.h8
-rw-r--r--chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.cc10
-rw-r--r--chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.h5
-rw-r--r--chromium/gpu/command_buffer/client/mapped_memory.cc19
-rw-r--r--chromium/gpu/command_buffer/client/mapped_memory.h39
-rw-r--r--chromium/gpu/command_buffer/client/mapped_memory_unittest.cc117
-rw-r--r--chromium/gpu/command_buffer/client/program_info_manager.cc4
-rw-r--r--chromium/gpu/command_buffer/client/query_tracker.cc20
-rw-r--r--chromium/gpu/command_buffer/client/query_tracker.h12
-rw-r--r--chromium/gpu/command_buffer/client/query_tracker_unittest.cc40
-rw-r--r--chromium/gpu/command_buffer/client/ring_buffer.cc19
-rw-r--r--chromium/gpu/command_buffer/client/ring_buffer.h121
-rw-r--r--chromium/gpu/command_buffer/client/ring_buffer_test.cc141
-rw-r--r--chromium/gpu/command_buffer/client/share_group.cc220
-rw-r--r--chromium/gpu/command_buffer/client/share_group.h27
-rw-r--r--chromium/gpu/command_buffer/client/transfer_buffer.cc54
-rw-r--r--chromium/gpu/command_buffer/client/transfer_buffer.h38
-rw-r--r--chromium/gpu/command_buffer/client/transfer_buffer_unittest.cc28
-rw-r--r--chromium/gpu/command_buffer/client/vertex_array_object_manager.h3
-rw-r--r--chromium/gpu/command_buffer/cmd_buffer_functions.txt13
-rw-r--r--chromium/gpu/command_buffer/command_buffer_nacl.gyp (renamed from chromium/gpu/command_buffer/command_buffer_untrusted.gyp)6
-rw-r--r--chromium/gpu/command_buffer/common/BUILD.gn42
-rw-r--r--chromium/gpu/command_buffer/common/buffer.cc42
-rw-r--r--chromium/gpu/command_buffer/common/buffer.h71
-rw-r--r--chromium/gpu/command_buffer/common/capabilities.cc1
-rw-r--r--chromium/gpu/command_buffer/common/capabilities.h3
-rw-r--r--chromium/gpu/command_buffer/common/cmd_buffer_common.cc2
-rw-r--r--chromium/gpu/command_buffer/common/cmd_buffer_common.h189
-rw-r--r--chromium/gpu/command_buffer/common/command_buffer.h44
-rw-r--r--chromium/gpu/command_buffer/common/command_buffer_mock.cc2
-rw-r--r--chromium/gpu/command_buffer/common/command_buffer_mock.h13
-rw-r--r--chromium/gpu/command_buffer/common/constants.h12
-rw-r--r--chromium/gpu/command_buffer/common/debug_marker_manager.cc2
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_format.h307
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_format_autogen.h7554
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_format_test.cc67
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h4342
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_ids_autogen.h443
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_utils.cc46
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_utils.h86
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_utils_autogen.h115
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h3798
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_utils_unittest.cc53
-rw-r--r--chromium/gpu/command_buffer/common/gpu_memory_allocation.h43
-rw-r--r--chromium/gpu/command_buffer/common/id_allocator.h6
-rw-r--r--chromium/gpu/command_buffer/common/mailbox.cc25
-rw-r--r--chromium/gpu/command_buffer/common/mailbox.h26
-rw-r--r--chromium/gpu/command_buffer/common/mailbox_holder.cc18
-rw-r--r--chromium/gpu/command_buffer/common/mailbox_holder.h28
-rw-r--r--chromium/gpu/command_buffer/common/types.h186
-rw-r--r--chromium/gpu/command_buffer/common/unittest_main.cc2
-rw-r--r--chromium/gpu/command_buffer/service/BUILD.gn155
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.cc47
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.h33
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc15
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager.h5
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc12
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc60
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.h1
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc94
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h7
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_mock.h1
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc60
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h1
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc3
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h1
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc7
-rw-r--r--chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h1
-rw-r--r--chromium/gpu/command_buffer/service/buffer_manager_unittest.cc11
-rw-r--r--chromium/gpu/command_buffer/service/cmd_buffer_engine.h2
-rw-r--r--chromium/gpu/command_buffer/service/command_buffer_service.cc71
-rw-r--r--chromium/gpu/command_buffer/service/command_buffer_service.h51
-rw-r--r--chromium/gpu/command_buffer/service/command_buffer_service_unittest.cc10
-rw-r--r--chromium/gpu/command_buffer/service/common_decoder.cc29
-rw-r--r--chromium/gpu/command_buffer/service/common_decoder.h2
-rw-r--r--chromium/gpu/command_buffer/service/common_decoder_unittest.cc23
-rw-r--r--chromium/gpu/command_buffer/service/context_group.cc37
-rw-r--r--chromium/gpu/command_buffer/service/context_group.h10
-rw-r--r--chromium/gpu/command_buffer/service/context_group_unittest.cc29
-rw-r--r--chromium/gpu/command_buffer/service/context_state.cc247
-rw-r--r--chromium/gpu/command_buffer/service/context_state.h72
-rw-r--r--chromium/gpu/command_buffer/service/context_state_autogen.h79
-rw-r--r--chromium/gpu/command_buffer/service/context_state_impl_autogen.h288
-rw-r--r--chromium/gpu/command_buffer/service/error_state.cc38
-rw-r--r--chromium/gpu/command_buffer/service/error_state.h35
-rw-r--r--chromium/gpu/command_buffer/service/error_state_mock.h11
-rw-r--r--chromium/gpu/command_buffer/service/feature_info.cc211
-rw-r--r--chromium/gpu/command_buffer/service/feature_info.h15
-rw-r--r--chromium/gpu/command_buffer/service/feature_info_unittest.cc96
-rw-r--r--chromium/gpu/command_buffer/service/framebuffer_manager.cc76
-rw-r--r--chromium/gpu/command_buffer/service/framebuffer_manager.h17
-rw-r--r--chromium/gpu/command_buffer/service/framebuffer_manager_unittest.cc319
-rw-r--r--chromium/gpu/command_buffer/service/gl_state_restorer_impl.cc19
-rw-r--r--chromium/gpu/command_buffer/service/gl_state_restorer_impl.h5
-rw-r--r--chromium/gpu/command_buffer/service/gl_surface_mock.h2
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc472
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.h30
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc1832
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder.h31
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h1598
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_mock.h21
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc8720
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.h80
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h53
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc30
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h1078
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc429
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h1418
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3.cc6
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h63
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc388
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc485
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc605
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h161
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc428
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc2284
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc2331
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc1046
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc2831
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_validation_autogen.h8
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h797
-rw-r--r--chromium/gpu/command_buffer/service/gpu_control_service.cc101
-rw-r--r--chromium/gpu/command_buffer/service/gpu_control_service.h47
-rw-r--r--chromium/gpu/command_buffer/service/gpu_memory_buffer_manager.h4
-rw-r--r--chromium/gpu/command_buffer/service/gpu_scheduler.cc19
-rw-r--r--chromium/gpu/command_buffer/service/gpu_scheduler.h8
-rw-r--r--chromium/gpu/command_buffer/service/gpu_scheduler_unittest.cc31
-rw-r--r--chromium/gpu/command_buffer/service/gpu_service_test.cc50
-rw-r--r--chromium/gpu/command_buffer/service/gpu_service_test.h42
-rw-r--r--chromium/gpu/command_buffer/service/gpu_switches.cc10
-rw-r--r--chromium/gpu/command_buffer/service/gpu_switches.h2
-rw-r--r--chromium/gpu/command_buffer/service/gpu_tracer.cc373
-rw-r--r--chromium/gpu/command_buffer/service/gpu_tracer.h118
-rw-r--r--chromium/gpu/command_buffer/service/gpu_tracer_unittest.cc209
-rw-r--r--chromium/gpu/command_buffer/service/image_manager.cc11
-rw-r--r--chromium/gpu/command_buffer/service/image_manager.h4
-rw-r--r--chromium/gpu/command_buffer/service/in_process_command_buffer.cc557
-rw-r--r--chromium/gpu/command_buffer/service/in_process_command_buffer.h106
-rw-r--r--chromium/gpu/command_buffer/service/mailbox_manager.cc90
-rw-r--r--chromium/gpu/command_buffer/service/mailbox_manager.h64
-rw-r--r--chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc401
-rw-r--r--chromium/gpu/command_buffer/service/mailbox_synchronizer.cc226
-rw-r--r--chromium/gpu/command_buffer/service/mailbox_synchronizer.h96
-rw-r--r--chromium/gpu/command_buffer/service/memory_program_cache_unittest.cc14
-rw-r--r--chromium/gpu/command_buffer/service/mocks.h2
-rw-r--r--chromium/gpu/command_buffer/service/program_cache.cc2
-rw-r--r--chromium/gpu/command_buffer/service/program_manager.cc134
-rw-r--r--chromium/gpu/command_buffer/service/program_manager.h24
-rw-r--r--chromium/gpu/command_buffer/service/program_manager_unittest.cc74
-rw-r--r--chromium/gpu/command_buffer/service/query_manager.cc156
-rw-r--r--chromium/gpu/command_buffer/service/query_manager.h28
-rw-r--r--chromium/gpu/command_buffer/service/query_manager_unittest.cc63
-rw-r--r--chromium/gpu/command_buffer/service/renderbuffer_manager_unittest.cc11
-rw-r--r--chromium/gpu/command_buffer/service/safe_shared_memory_pool.cc149
-rw-r--r--chromium/gpu/command_buffer/service/safe_shared_memory_pool.h82
-rw-r--r--chromium/gpu/command_buffer/service/shader_manager_unittest.cc15
-rw-r--r--chromium/gpu/command_buffer/service/shader_translator.cc75
-rw-r--r--chromium/gpu/command_buffer/service/shader_translator.h6
-rw-r--r--chromium/gpu/command_buffer/service/shader_translator_cache.cc5
-rw-r--r--chromium/gpu/command_buffer/service/shader_translator_cache.h17
-rw-r--r--chromium/gpu/command_buffer/service/shader_translator_unittest.cc11
-rw-r--r--chromium/gpu/command_buffer/service/stream_texture.h32
-rw-r--r--chromium/gpu/command_buffer/service/stream_texture_manager.h36
-rw-r--r--chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.cc141
-rw-r--r--chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.h55
-rw-r--r--chromium/gpu/command_buffer/service/stream_texture_manager_mock.cc15
-rw-r--r--chromium/gpu/command_buffer/service/stream_texture_manager_mock.h32
-rw-r--r--chromium/gpu/command_buffer/service/stream_texture_mock.cc15
-rw-r--r--chromium/gpu/command_buffer/service/stream_texture_mock.h28
-rw-r--r--chromium/gpu/command_buffer/service/test_helper.cc139
-rw-r--r--chromium/gpu/command_buffer/service/test_helper.h25
-rw-r--r--chromium/gpu/command_buffer/service/texture_definition.cc456
-rw-r--r--chromium/gpu/command_buffer/service/texture_definition.h127
-rw-r--r--chromium/gpu/command_buffer/service/texture_manager.cc308
-rw-r--r--chromium/gpu/command_buffer/service/texture_manager.h100
-rw-r--r--chromium/gpu/command_buffer/service/texture_manager_unittest.cc276
-rw-r--r--chromium/gpu/command_buffer/service/transfer_buffer_manager.cc47
-rw-r--r--chromium/gpu/command_buffer/service/transfer_buffer_manager.h14
-rw-r--r--chromium/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc104
-rw-r--r--chromium/gpu/command_buffer/service/vertex_array_manager.cc20
-rw-r--r--chromium/gpu/command_buffer/service/vertex_array_manager.h10
-rw-r--r--chromium/gpu/command_buffer/service/vertex_array_manager_unittest.cc23
-rw-r--r--chromium/gpu/command_buffer/service/vertex_attrib_manager.cc5
-rw-r--r--chromium/gpu/command_buffer/service/vertex_attrib_manager.h2
-rw-r--r--chromium/gpu/command_buffer/service/vertex_attrib_manager_unittest.cc16
220 files changed, 38577 insertions, 31442 deletions
diff --git a/chromium/gpu/command_buffer/OWNERS b/chromium/gpu/command_buffer/OWNERS
index bb8ea76f760..cd07f4dafa3 100644
--- a/chromium/gpu/command_buffer/OWNERS
+++ b/chromium/gpu/command_buffer/OWNERS
@@ -2,3 +2,4 @@ piman@chromium.org
jbauman@chromium.org
bajones@chromium.org
zmo@chromium.org
+vmiura@chromium.org
diff --git a/chromium/gpu/command_buffer/build_gles2_cmd_buffer.py b/chromium/gpu/command_buffer/build_gles2_cmd_buffer.py
index 0f2e49a31f1..1c7b0199371 100755
--- a/chromium/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/chromium/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -11,12 +11,13 @@ import os.path
import sys
import re
from optparse import OptionParser
+from subprocess import call
_SIZE_OF_UINT32 = 4
_SIZE_OF_COMMAND_HEADER = 4
_FIRST_SPECIFIC_COMMAND_ID = 256
-_LICENSE = """// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+_LICENSE = """// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -24,6 +25,8 @@ _LICENSE = """// Copyright (c) 2012 The Chromium Authors. All rights reserved.
_DO_NOT_EDIT_WARNING = """// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
"""
@@ -53,9 +56,17 @@ _GL_TYPES = {
'GLclampf': 'float',
'GLvoid': 'void',
'GLfixed': 'int',
- 'GLclampx': 'int',
+ 'GLclampx': 'int'
+}
+
+_GL_TYPES_32 = {
'GLintptr': 'long int',
- 'GLsizeiptr': 'long int',
+ 'GLsizeiptr': 'long int'
+}
+
+_GL_TYPES_64 = {
+ 'GLintptr': 'long long int',
+ 'GLsizeiptr': 'long long int'
}
# Capabilites selected with glEnable
@@ -67,8 +78,7 @@ _CAPABILITY_FLAGS = [
{'name': 'polygon_offset_fill'},
{'name': 'sample_alpha_to_coverage'},
{'name': 'sample_coverage'},
- {'name': 'scissor_test',
- 'state_flag': 'framebuffer_state_.clear_state_dirty'},
+ {'name': 'scissor_test'},
{'name': 'stencil_test',
'state_flag': 'framebuffer_state_.clear_state_dirty'},
]
@@ -98,10 +108,30 @@ _STATES = {
'func': 'ColorMask',
'enum': 'GL_COLOR_WRITEMASK',
'states': [
- {'name': 'color_mask_red', 'type': 'GLboolean', 'default': 'true'},
- {'name': 'color_mask_green', 'type': 'GLboolean', 'default': 'true'},
- {'name': 'color_mask_blue', 'type': 'GLboolean', 'default': 'true'},
- {'name': 'color_mask_alpha', 'type': 'GLboolean', 'default': 'true'},
+ {
+ 'name': 'color_mask_red',
+ 'type': 'GLboolean',
+ 'default': 'true',
+ 'cached': True
+ },
+ {
+ 'name': 'color_mask_green',
+ 'type': 'GLboolean',
+ 'default': 'true',
+ 'cached': True
+ },
+ {
+ 'name': 'color_mask_blue',
+ 'type': 'GLboolean',
+ 'default': 'true',
+ 'cached': True
+ },
+ {
+ 'name': 'color_mask_alpha',
+ 'type': 'GLboolean',
+ 'default': 'true',
+ 'cached': True
+ },
],
'state_flag': 'framebuffer_state_.clear_state_dirty',
},
@@ -251,12 +281,14 @@ _STATES = {
'type': 'GLuint',
'enum': 'GL_STENCIL_WRITEMASK',
'default': '0xFFFFFFFFU',
+ 'cached': True,
},
{
'name': 'stencil_back_writemask',
'type': 'GLuint',
'enum': 'GL_STENCIL_BACK_WRITEMASK',
'default': '0xFFFFFFFFU',
+ 'cached': True,
},
],
},
@@ -400,7 +432,12 @@ _STATES = {
'func': 'DepthMask',
'enum': 'GL_DEPTH_WRITEMASK',
'states': [
- {'name': 'depth_mask', 'type': 'GLboolean', 'default': 'true'},
+ {
+ 'name': 'depth_mask',
+ 'type': 'GLboolean',
+ 'default': 'true',
+ 'cached': True
+ },
],
'state_flag': 'framebuffer_state_.clear_state_dirty',
},
@@ -470,9 +507,16 @@ _STATES = {
},
}
-# This is a list of enum names and their valid values. It is used to map
-# GLenum arguments to a specific set of valid values.
-_ENUM_LISTS = {
+# Named type info object represents a named type that is used in OpenGL call
+# arguments. Each named type defines a set of valid OpenGL call arguments. The
+# named types are used in 'cmd_buffer_functions.txt'.
+# type: The actual GL type of the named type.
+# valid: The list of values that are valid for both the client and the service.
+# invalid: Examples of invalid values for the type. At least these values
+# should be tested to be invalid.
+# is_complete: The list of valid values of type are final and will not be
+# modified during runtime.
+_NAMED_TYPE_INFO = {
'BlitFilter': {
'type': 'GLenum',
'valid': [
@@ -579,6 +623,7 @@ _ENUM_LISTS = {
'GL_UNPACK_FLIP_Y_CHROMIUM',
'GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM',
'GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM',
+ 'GL_BIND_GENERATES_RESOURCE_CHROMIUM',
# we can add this because we emulate it if the driver does not support it.
'GL_VERTEX_ARRAY_BINDING_OES',
'GL_VIEWPORT',
@@ -829,6 +874,7 @@ _ENUM_LISTS = {
'GL_LATENCY_QUERY_CHROMIUM',
'GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM',
'GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM',
+ 'GL_COMMANDS_COMPLETED_CHROMIUM',
],
},
'RenderBufferParameter': {
@@ -1113,6 +1159,7 @@ _ENUM_LISTS = {
},
'TextureBorder': {
'type': 'GLint',
+ 'is_complete': True,
'valid': [
'0',
],
@@ -1135,6 +1182,7 @@ _ENUM_LISTS = {
},
'ZeroOnly': {
'type': 'GLint',
+ 'is_complete': True,
'valid': [
'0',
],
@@ -1144,6 +1192,7 @@ _ENUM_LISTS = {
},
'FalseOnly': {
'type': 'GLboolean',
+ 'is_complete': True,
'valid': [
'false',
],
@@ -1171,10 +1220,14 @@ _PEPPER_INTERFACES = [
{'name': 'ChromiumEnableFeature', 'dev': False},
{'name': 'ChromiumMapSub', 'dev': False},
{'name': 'Query', 'dev': False},
+ {'name': 'DrawBuffers', 'dev': True},
]
-# This table specifies types and other special data for the commands that
-# will be generated.
+# A function info object specifies the type and other special data for the
+# command that will be generated. A base function info object is generated by
+# parsing the "cmd_buffer_functions.txt", one for each function in the
+# file. These function info objects can be augmented and their values can be
+# overridden by adding an object to the table below.
#
# Must match function names specified in "cmd_buffer_functions.txt".
#
@@ -1189,16 +1242,19 @@ _PEPPER_INTERFACES = [
# a NonImmediate type is a type that stays a pointer even in
# and immediate version of acommand.
# gen_cmd: Whether or not this function geneates a command. Default = True.
-# immediate: Whether or not to generate an immediate command for the GL
-# function. The default is if there is exactly 1 pointer argument
-# in the GL function an immediate command is generated.
-# bucket: True to generate a bucket version of the command.
+# data_transfer_methods: Array of methods that are used for transfering the
+# pointer data. Possible values: 'immediate', 'shm', 'bucket'.
+# The default is 'immediate' if the command has one pointer
+# argument, otherwise 'shm'. One command is generated for each
+# transfer method. Affects only commands which are not of type
+# 'HandWritten', 'GETn' or 'GLcharN'.
+# Note: the command arguments that affect this are the final args,
+# taking cmd_args override into consideration.
# impl_func: Whether or not to generate the GLES2Implementation part of this
# command.
# impl_decl: Whether or not to generate the GLES2Implementation declaration
# for this command.
# needs_size: If true a data_size field is added to the command.
-# data_type: The type of data the command uses. For PUTn or PUT types.
# count: The number of units per element. For PUTn or PUT types.
# unit_test: If False no service side unit test will be generated.
# client_test: If False no client side unit test will be generated.
@@ -1212,6 +1268,7 @@ _PEPPER_INTERFACES = [
# valid_args: A dictionary of argument indices to args to use in unit tests
# when they can not be automatically determined.
# pepper_interface: The pepper interface that is used for this extension
+# pepper_name: The name of the function as exposed to pepper.
# pepper_args: A string representing the argument list (what would appear in
# C/C++ between the parentheses for the function declaration)
# that the Pepper API expects for this function. Use this only if
@@ -1221,6 +1278,11 @@ _PEPPER_INTERFACES = [
# first_element_only: For PUT types, True if only the first element of an
# array is used and we end up calling the single value
# corresponding function. eg. TexParameteriv -> TexParameteri
+# extension: Function is an extension to GL and should not be exposed to
+# pepper unless pepper_interface is defined.
+# extension_flag: Function is an extension and should be enabled only when
+# the corresponding feature info flag is enabled. Implies
+# 'extension': True.
_FUNCTION_INFO = {
'ActiveTexture': {
@@ -1232,9 +1294,8 @@ _FUNCTION_INFO = {
'AttachShader': {'decoder_func': 'DoAttachShader'},
'BindAttribLocation': {
'type': 'GLchar',
- 'bucket': True,
+ 'data_transfer_methods': ['bucket'],
'needs_size': True,
- 'immediate': False,
},
'BindBuffer': {
'type': 'Bind',
@@ -1246,6 +1307,7 @@ _FUNCTION_INFO = {
'decoder_func': 'DoBindFramebuffer',
'gl_test_func': 'glBindFramebufferEXT',
'gen_func': 'GenFramebuffersEXT',
+ 'trace_level': 1,
},
'BindRenderbuffer': {
'type': 'Bind',
@@ -1259,25 +1321,28 @@ _FUNCTION_INFO = {
'gen_func': 'GenTextures',
# TODO(gman): remove this once client side caching works.
'client_test': False,
+ 'trace_level': 1,
},
'BlitFramebufferCHROMIUM': {
'decoder_func': 'DoBlitFramebufferCHROMIUM',
'unit_test': False,
- 'extension': True,
+ 'extension_flag': 'chromium_framebuffer_multisample',
'pepper_interface': 'FramebufferBlit',
+ 'pepper_name': 'BlitFramebufferEXT',
'defer_reads': True,
'defer_draws': True,
+ 'trace_level': 1,
},
'BufferData': {
'type': 'Manual',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'client_test': False,
},
'BufferSubData': {
'type': 'Data',
'client_test': False,
'decoder_func': 'DoBufferSubData',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
},
'CheckFramebufferStatus': {
'type': 'Is',
@@ -1289,6 +1354,7 @@ _FUNCTION_INFO = {
'Clear': {
'decoder_func': 'DoClear',
'defer_draws': True,
+ 'trace_level': 1,
},
'ClearColor': {
'type': 'StateSet',
@@ -1311,10 +1377,22 @@ _FUNCTION_INFO = {
},
'ConsumeTextureCHROMIUM': {
'decoder_func': 'DoConsumeTextureCHROMIUM',
+ 'impl_func': False,
'type': 'PUT',
- 'data_type': 'GLbyte',
- 'count': 64,
+ 'count': 64, # GL_MAILBOX_SIZE_CHROMIUM
+ 'unit_test': False,
+ 'client_test': False,
+ 'extension': True,
+ 'chromium': True,
+ 'trace_level': 1,
+ },
+ 'CreateAndConsumeTextureCHROMIUM': {
+ 'decoder_func': 'DoCreateAndConsumeTextureCHROMIUM',
+ 'impl_func': False,
+ 'type': 'HandWritten',
+ 'data_transfer_methods': ['immediate'],
'unit_test': False,
+ 'client_test': False,
'extension': True,
'chromium': True,
},
@@ -1324,7 +1402,7 @@ _FUNCTION_INFO = {
},
'EnableFeatureCHROMIUM': {
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'decoder_func': 'DoEnableFeatureCHROMIUM',
'expectation': False,
'cmd_args': 'GLuint bucket_id, GLint* result',
@@ -1336,14 +1414,12 @@ _FUNCTION_INFO = {
'CompileShader': {'decoder_func': 'DoCompileShader', 'unit_test': False},
'CompressedTexImage2D': {
'type': 'Manual',
- 'immediate': False,
- 'bucket': True,
+ 'data_transfer_methods': ['bucket', 'shm'],
},
'CompressedTexSubImage2D': {
'type': 'Data',
- 'bucket': True,
+ 'data_transfer_methods': ['bucket', 'shm'],
'decoder_func': 'DoCompressedTexSubImage2D',
- 'immediate': False,
},
'CopyTexImage2D': {
'decoder_func': 'DoCopyTexImage2D',
@@ -1356,7 +1432,8 @@ _FUNCTION_INFO = {
},
'CreateImageCHROMIUM': {
'type': 'Manual',
- 'cmd_args': 'GLsizei width, GLsizei height, GLenum internalformat',
+ 'cmd_args':
+ 'GLsizei width, GLsizei height, GLenum internalformat, GLenum usage',
'result': ['GLuint'],
'client_test': False,
'gen_cmd': False,
@@ -1366,7 +1443,6 @@ _FUNCTION_INFO = {
},
'DestroyImageCHROMIUM': {
'type': 'Manual',
- 'immediate': False,
'client_test': False,
'gen_cmd': False,
'extension': True,
@@ -1480,7 +1556,7 @@ _FUNCTION_INFO = {
'decoder_func': 'DoDeleteSharedIdsCHROMIUM',
'impl_func': False,
'expectation': False,
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'extension': True,
'chromium': True,
},
@@ -1513,6 +1589,7 @@ _FUNCTION_INFO = {
'type': 'Manual',
'cmd_args': 'GLenumDrawMode mode, GLint first, GLsizei count',
'defer_draws': True,
+ 'trace_level': 2,
},
'DrawElements': {
'type': 'Manual',
@@ -1520,6 +1597,7 @@ _FUNCTION_INFO = {
'GLenumIndexType type, GLuint index_offset',
'client_test': False,
'defer_draws': True,
+ 'trace_level': 2,
},
'Enable': {
'decoder_func': 'DoEnable',
@@ -1547,13 +1625,15 @@ _FUNCTION_INFO = {
'FramebufferTexture2D': {
'decoder_func': 'DoFramebufferTexture2D',
'gl_test_func': 'glFramebufferTexture2DEXT',
+ 'trace_level': 1,
},
'FramebufferTexture2DMultisampleEXT': {
'decoder_func': 'DoFramebufferTexture2DMultisample',
'gl_test_func': 'glFramebufferTexture2DMultisampleEXT',
'expectation': False,
'unit_test': False,
- 'extension': True,
+ 'extension_flag': 'multisampled_render_to_texture',
+ 'trace_level': 1,
},
'GenerateMipmap': {
'decoder_func': 'DoGenerateMipmap',
@@ -1567,7 +1647,6 @@ _FUNCTION_INFO = {
},
'GenMailboxCHROMIUM': {
'type': 'HandWritten',
- 'immediate': False,
'impl_func': False,
'extension': True,
'chromium': True,
@@ -1594,44 +1673,42 @@ _FUNCTION_INFO = {
'decoder_func': 'DoGenSharedIdsCHROMIUM',
'impl_func': False,
'expectation': False,
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'extension': True,
'chromium': True,
},
'GetActiveAttrib': {
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'cmd_args':
- 'GLidProgram program, GLuint index, uint32 name_bucket_id, '
+ 'GLidProgram program, GLuint index, uint32_t name_bucket_id, '
'void* result',
'result': [
- 'int32 success',
- 'int32 size',
- 'uint32 type',
+ 'int32_t success',
+ 'int32_t size',
+ 'uint32_t type',
],
},
'GetActiveUniform': {
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'cmd_args':
- 'GLidProgram program, GLuint index, uint32 name_bucket_id, '
+ 'GLidProgram program, GLuint index, uint32_t name_bucket_id, '
'void* result',
'result': [
- 'int32 success',
- 'int32 size',
- 'uint32 type',
+ 'int32_t success',
+ 'int32_t size',
+ 'uint32_t type',
],
},
'GetAttachedShaders': {
'type': 'Custom',
- 'immediate': False,
- 'cmd_args': 'GLidProgram program, void* result, uint32 result_size',
+ 'data_transfer_methods': ['shm'],
+ 'cmd_args': 'GLidProgram program, void* result, uint32_t result_size',
'result': ['SizedResult<GLuint>'],
},
'GetAttribLocation': {
'type': 'HandWritten',
- 'immediate': False,
- 'bucket': True,
'needs_size': True,
'cmd_args':
'GLidProgram program, const char* name, NonImmediate GLint* location',
@@ -1688,7 +1765,7 @@ _FUNCTION_INFO = {
},
'GetMultipleIntegervCHROMIUM': {
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'expectation': False,
'extension': True,
'chromium': True,
@@ -1702,17 +1779,16 @@ _FUNCTION_INFO = {
},
'GetProgramInfoCHROMIUM': {
'type': 'Custom',
- 'immediate': False,
'expectation': False,
'impl_func': False,
'extension': True,
'chromium': True,
'client_test': False,
- 'cmd_args': 'GLidProgram program, uint32 bucket_id',
+ 'cmd_args': 'GLidProgram program, uint32_t bucket_id',
'result': [
- 'uint32 link_status',
- 'uint32 num_attribs',
- 'uint32 num_uniforms',
+ 'uint32_t link_status',
+ 'uint32_t num_attribs',
+ 'uint32_t num_uniforms',
],
},
'GetProgramInfoLog': {
@@ -1738,15 +1814,15 @@ _FUNCTION_INFO = {
},
'GetShaderPrecisionFormat': {
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'cmd_args':
'GLenumShaderType shadertype, GLenumShaderPrecision precisiontype, '
'void* result',
'result': [
- 'int32 success',
- 'int32 min_range',
- 'int32 max_range',
- 'int32 precision',
+ 'int32_t success',
+ 'int32_t min_range',
+ 'int32_t max_range',
+ 'int32_t precision',
],
},
'GetShaderSource': {
@@ -1757,12 +1833,20 @@ _FUNCTION_INFO = {
'client_test': False,
},
'GetString': {
- 'type': 'Custom',
- 'client_test': False,
- 'cmd_args': 'GLenumStringType name, uint32 bucket_id',
+ 'type': 'Custom',
+ 'client_test': False,
+ 'cmd_args': 'GLenumStringType name, uint32_t bucket_id',
+ },
+ 'GetTexParameterfv': {
+ 'type': 'GETn',
+ 'decoder_func': 'DoGetTexParameterfv',
+ 'result': ['SizedResult<GLfloat>']
+ },
+ 'GetTexParameteriv': {
+ 'type': 'GETn',
+ 'decoder_func': 'DoGetTexParameteriv',
+ 'result': ['SizedResult<GLint>']
},
- 'GetTexParameterfv': {'type': 'GETn', 'result': ['SizedResult<GLfloat>']},
- 'GetTexParameteriv': {'type': 'GETn', 'result': ['SizedResult<GLint>']},
'GetTranslatedShaderSourceANGLE': {
'type': 'STRn',
'get_len_func': 'DoGetShaderiv',
@@ -1772,18 +1856,16 @@ _FUNCTION_INFO = {
},
'GetUniformfv': {
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'result': ['SizedResult<GLfloat>'],
},
'GetUniformiv': {
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'result': ['SizedResult<GLint>'],
},
'GetUniformLocation': {
'type': 'HandWritten',
- 'immediate': False,
- 'bucket': True,
'needs_size': True,
'cmd_args':
'GLidProgram program, const char* name, NonImmediate GLint* location',
@@ -1808,7 +1890,7 @@ _FUNCTION_INFO = {
},
'GetVertexAttribPointerv': {
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'result': ['SizedResult<GLuint>'],
'client_test': False,
},
@@ -1889,12 +1971,25 @@ _FUNCTION_INFO = {
},
'ProduceTextureCHROMIUM': {
'decoder_func': 'DoProduceTextureCHROMIUM',
+ 'impl_func': False,
'type': 'PUT',
- 'data_type': 'GLbyte',
- 'count': 64,
+ 'count': 64, # GL_MAILBOX_SIZE_CHROMIUM
'unit_test': False,
+ 'client_test': False,
'extension': True,
'chromium': True,
+ 'trace_level': 1,
+ },
+ 'ProduceTextureDirectCHROMIUM': {
+ 'decoder_func': 'DoProduceTextureDirectCHROMIUM',
+ 'impl_func': False,
+ 'type': 'PUT',
+ 'count': 64, # GL_MAILBOX_SIZE_CHROMIUM
+ 'unit_test': False,
+ 'client_test': False,
+ 'extension': True,
+ 'chromium': True,
+ 'trace_level': 1,
},
'RenderbufferStorage': {
'decoder_func': 'DoRenderbufferStorage',
@@ -1908,8 +2003,9 @@ _FUNCTION_INFO = {
'gl_test_func': 'glRenderbufferStorageMultisampleCHROMIUM',
'expectation': False,
'unit_test': False,
- 'extension': True,
+ 'extension_flag': 'chromium_framebuffer_multisample',
'pepper_interface': 'FramebufferMultisample',
+ 'pepper_name': 'RenderbufferStorageMultisampleEXT',
},
'RenderbufferStorageMultisampleEXT': {
'cmd_comment':
@@ -1918,7 +2014,7 @@ _FUNCTION_INFO = {
'gl_test_func': 'glRenderbufferStorageMultisampleEXT',
'expectation': False,
'unit_test': False,
- 'extension': True,
+ 'extension_flag': 'multisampled_render_to_texture',
},
'ReadPixels': {
'cmd_comment':
@@ -1926,16 +2022,16 @@ _FUNCTION_INFO = {
'// it is easier to specify the result going to some specific place\n'
'// that exactly fits the rectangle of pixels.\n',
'type': 'Custom',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'impl_func': False,
'client_test': False,
'cmd_args':
'GLint x, GLint y, GLsizei width, GLsizei height, '
'GLenumReadPixelFormat format, GLenumReadPixelType type, '
- 'uint32 pixels_shm_id, uint32 pixels_shm_offset, '
- 'uint32 result_shm_id, uint32 result_shm_offset, '
+ 'uint32_t pixels_shm_id, uint32_t pixels_shm_offset, '
+ 'uint32_t result_shm_id, uint32_t result_shm_offset, '
'GLboolean async',
- 'result': ['uint32'],
+ 'result': ['uint32_t'],
'defer_reads': True,
},
'RegisterSharedIdsCHROMIUM': {
@@ -1943,7 +2039,7 @@ _FUNCTION_INFO = {
'decoder_func': 'DoRegisterSharedIdsCHROMIUM',
'impl_func': False,
'expectation': False,
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'extension': True,
'chromium': True,
},
@@ -1957,8 +2053,7 @@ _FUNCTION_INFO = {
},
'ShaderSource': {
'type': 'Manual',
- 'immediate': False,
- 'bucket': True,
+ 'data_transfer_methods': ['bucket'],
'needs_size': True,
'client_test': False,
'cmd_args':
@@ -1984,15 +2079,15 @@ _FUNCTION_INFO = {
'unit_test': False,
'client_test': False,
'extension': True,
+ 'trace_level': 1,
},
'TexImage2D': {
'type': 'Manual',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'client_test': False,
},
'TexParameterf': {
'decoder_func': 'DoTexParameterf',
- 'gl_test_func': 'glTexParameteri',
'valid_args': {
'2': 'GL_NEAREST'
},
@@ -2005,16 +2100,14 @@ _FUNCTION_INFO = {
},
'TexParameterfv': {
'type': 'PUT',
- 'data_type': 'GLfloat',
'data_value': 'GL_NEAREST',
'count': 1,
'decoder_func': 'DoTexParameterfv',
- 'gl_test_func': 'glTexParameteri',
+ 'gl_test_func': 'glTexParameterf',
'first_element_only': True,
},
'TexParameteriv': {
'type': 'PUT',
- 'data_type': 'GLint',
'data_value': 'GL_NEAREST',
'count': 1,
'decoder_func': 'DoTexParameteriv',
@@ -2023,7 +2116,7 @@ _FUNCTION_INFO = {
},
'TexSubImage2D': {
'type': 'Manual',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'client_test': False,
'cmd_args': 'GLenumTextureTarget target, GLint level, '
'GLint xoffset, GLint yoffset, '
@@ -2031,78 +2124,67 @@ _FUNCTION_INFO = {
'GLenumTextureFormat format, GLenumPixelType type, '
'const void* pixels, GLboolean internal'
},
- 'Uniform1f': {'type': 'PUTXn', 'data_type': 'GLfloat', 'count': 1},
+ 'Uniform1f': {'type': 'PUTXn', 'count': 1},
'Uniform1fv': {
'type': 'PUTn',
- 'data_type': 'GLfloat',
'count': 1,
'decoder_func': 'DoUniform1fv',
},
'Uniform1i': {'decoder_func': 'DoUniform1i', 'unit_test': False},
'Uniform1iv': {
'type': 'PUTn',
- 'data_type': 'GLint',
'count': 1,
'decoder_func': 'DoUniform1iv',
'unit_test': False,
},
- 'Uniform2i': {'type': 'PUTXn', 'data_type': 'GLint', 'count': 2},
- 'Uniform2f': {'type': 'PUTXn', 'data_type': 'GLfloat', 'count': 2},
+ 'Uniform2i': {'type': 'PUTXn', 'count': 2},
+ 'Uniform2f': {'type': 'PUTXn', 'count': 2},
'Uniform2fv': {
'type': 'PUTn',
- 'data_type': 'GLfloat',
'count': 2,
'decoder_func': 'DoUniform2fv',
},
'Uniform2iv': {
'type': 'PUTn',
- 'data_type': 'GLint',
'count': 2,
'decoder_func': 'DoUniform2iv',
},
- 'Uniform3i': {'type': 'PUTXn', 'data_type': 'GLint', 'count': 3},
- 'Uniform3f': {'type': 'PUTXn', 'data_type': 'GLfloat', 'count': 3},
+ 'Uniform3i': {'type': 'PUTXn', 'count': 3},
+ 'Uniform3f': {'type': 'PUTXn', 'count': 3},
'Uniform3fv': {
'type': 'PUTn',
- 'data_type': 'GLfloat',
'count': 3,
'decoder_func': 'DoUniform3fv',
},
'Uniform3iv': {
'type': 'PUTn',
- 'data_type': 'GLint',
'count': 3,
'decoder_func': 'DoUniform3iv',
},
- 'Uniform4i': {'type': 'PUTXn', 'data_type': 'GLint', 'count': 4},
- 'Uniform4f': {'type': 'PUTXn', 'data_type': 'GLfloat', 'count': 4},
+ 'Uniform4i': {'type': 'PUTXn', 'count': 4},
+ 'Uniform4f': {'type': 'PUTXn', 'count': 4},
'Uniform4fv': {
'type': 'PUTn',
- 'data_type': 'GLfloat',
'count': 4,
'decoder_func': 'DoUniform4fv',
},
'Uniform4iv': {
'type': 'PUTn',
- 'data_type': 'GLint',
'count': 4,
'decoder_func': 'DoUniform4iv',
},
'UniformMatrix2fv': {
'type': 'PUTn',
- 'data_type': 'GLfloat',
'count': 4,
'decoder_func': 'DoUniformMatrix2fv',
},
'UniformMatrix3fv': {
'type': 'PUTn',
- 'data_type': 'GLfloat',
'count': 9,
'decoder_func': 'DoUniformMatrix3fv',
},
'UniformMatrix4fv': {
'type': 'PUTn',
- 'data_type': 'GLfloat',
'count': 16,
'decoder_func': 'DoUniformMatrix4fv',
},
@@ -2133,36 +2215,31 @@ _FUNCTION_INFO = {
'pepper_interface': 'ChromiumMapSub',
},
'UseProgram': {
+ 'type': 'Bind',
'decoder_func': 'DoUseProgram',
- 'impl_func': False,
- 'unit_test': False,
},
'ValidateProgram': {'decoder_func': 'DoValidateProgram'},
'VertexAttrib1f': {'decoder_func': 'DoVertexAttrib1f'},
'VertexAttrib1fv': {
'type': 'PUT',
- 'data_type': 'GLfloat',
'count': 1,
'decoder_func': 'DoVertexAttrib1fv',
},
'VertexAttrib2f': {'decoder_func': 'DoVertexAttrib2f'},
'VertexAttrib2fv': {
'type': 'PUT',
- 'data_type': 'GLfloat',
'count': 2,
'decoder_func': 'DoVertexAttrib2fv',
},
'VertexAttrib3f': {'decoder_func': 'DoVertexAttrib3f'},
'VertexAttrib3fv': {
'type': 'PUT',
- 'data_type': 'GLfloat',
'count': 3,
'decoder_func': 'DoVertexAttrib3fv',
},
'VertexAttrib4f': {'decoder_func': 'DoVertexAttrib4f'},
'VertexAttrib4fv': {
'type': 'PUT',
- 'data_type': 'GLfloat',
'count': 4,
'decoder_func': 'DoVertexAttrib4fv',
},
@@ -2190,17 +2267,15 @@ _FUNCTION_INFO = {
'GetRequestableExtensionsCHROMIUM': {
'type': 'Custom',
'impl_func': False,
- 'immediate': False,
- 'cmd_args': 'uint32 bucket_id',
+ 'cmd_args': 'uint32_t bucket_id',
'extension': True,
'chromium': True,
},
'RequestExtensionCHROMIUM': {
'type': 'Custom',
'impl_func': False,
- 'immediate': False,
'client_test': False,
- 'cmd_args': 'uint32 bucket_id',
+ 'cmd_args': 'uint32_t bucket_id',
'extension': True,
'chromium': True,
},
@@ -2211,23 +2286,12 @@ _FUNCTION_INFO = {
'client_test': False,
},
'CreateStreamTextureCHROMIUM': {
- 'type': 'Custom',
- 'cmd_args': 'GLuint client_id, void* result',
- 'result': ['GLuint'],
- 'immediate': False,
- 'impl_func': False,
- 'expectation': False,
- 'extension': True,
- 'chromium': True,
- 'client_test': False,
- },
- 'DestroyStreamTextureCHROMIUM': {
- 'type': 'Custom',
+ 'type': 'HandWritten',
'impl_func': False,
- 'expectation': False,
+ 'gen_cmd': False,
'extension': True,
'chromium': True,
- },
+ },
'TexImageIOSurface2DCHROMIUM': {
'decoder_func': 'DoTexImageIOSurface2DCHROMIUM',
'unit_test': False,
@@ -2257,11 +2321,13 @@ _FUNCTION_INFO = {
'DrawBuffersEXT': {
'type': 'PUTn',
'decoder_func': 'DoDrawBuffersEXT',
- 'data_type': 'GLenum',
'count': 1,
'client_test': False,
'unit_test': False,
+ # could use 'extension_flag': 'ext_draw_buffers' but currently expected to
+ # work without.
'extension': True,
+ 'pepper_interface': 'DrawBuffers',
},
'DrawElementsInstancedANGLE': {
'type': 'Manual',
@@ -2304,7 +2370,7 @@ _FUNCTION_INFO = {
'BeginQueryEXT': {
'type': 'Manual',
'cmd_args': 'GLenumQueryTarget target, GLidQuery id, void* sync_data',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'gl_test_func': 'glBeginQuery',
'pepper_interface': 'Query',
},
@@ -2330,10 +2396,9 @@ _FUNCTION_INFO = {
'BindUniformLocationCHROMIUM': {
'type': 'GLchar',
'extension': True,
- 'bucket': True,
+ 'data_transfer_methods': ['bucket'],
'needs_size': True,
'gl_test_func': 'DoBindUniformLocationCHROMIUM',
- 'immediate': False,
},
'InsertEventMarkerEXT': {
'type': 'GLcharN',
@@ -2416,7 +2481,6 @@ _FUNCTION_INFO = {
'TraceBeginCHROMIUM': {
'type': 'Custom',
'impl_func': False,
- 'immediate': False,
'client_test': False,
'cmd_args': 'GLuint bucket_id',
'extension': True,
@@ -2424,7 +2488,6 @@ _FUNCTION_INFO = {
},
'TraceEndCHROMIUM': {
'impl_func': False,
- 'immediate': False,
'client_test': False,
'decoder_func': 'DoTraceEndCHROMIUM',
'unit_test': False,
@@ -2433,21 +2496,41 @@ _FUNCTION_INFO = {
},
'AsyncTexImage2DCHROMIUM': {
'type': 'Manual',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'client_test': False,
+ 'cmd_args': 'GLenumTextureTarget target, GLint level, '
+ 'GLintTextureInternalFormat internalformat, '
+ 'GLsizei width, GLsizei height, '
+ 'GLintTextureBorder border, '
+ 'GLenumTextureFormat format, GLenumPixelType type, '
+ 'const void* pixels, '
+ 'uint32_t async_upload_token, '
+ 'void* sync_data',
'extension': True,
'chromium': True,
},
'AsyncTexSubImage2DCHROMIUM': {
'type': 'Manual',
- 'immediate': False,
+ 'data_transfer_methods': ['shm'],
'client_test': False,
+ 'cmd_args': 'GLenumTextureTarget target, GLint level, '
+ 'GLint xoffset, GLint yoffset, '
+ 'GLsizei width, GLsizei height, '
+ 'GLenumTextureFormat format, GLenumPixelType type, '
+ 'const void* data, '
+ 'uint32_t async_upload_token, '
+ 'void* sync_data',
'extension': True,
'chromium': True,
},
'WaitAsyncTexImage2DCHROMIUM': {
'type': 'Manual',
- 'immediate': False,
+ 'client_test': False,
+ 'extension': True,
+ 'chromium': True,
+ },
+ 'WaitAllAsyncTexImage2DCHROMIUM': {
+ 'type': 'Manual',
'client_test': False,
'extension': True,
'chromium': True,
@@ -2455,17 +2538,16 @@ _FUNCTION_INFO = {
'DiscardFramebufferEXT': {
'type': 'PUTn',
'count': 1,
- 'data_type': 'GLenum',
'cmd_args': 'GLenum target, GLsizei count, '
'const GLenum* attachments',
'decoder_func': 'DoDiscardFramebufferEXT',
'unit_test': False,
'client_test': False,
- 'extension': True,
+ 'extension_flag': 'ext_discard_framebuffer',
},
'LoseContextCHROMIUM': {
- 'type': 'Manual',
- 'impl_func': True,
+ 'decoder_func': 'DoLoseContextCHROMIUM',
+ 'unit_test': False,
'extension': True,
'chromium': True,
},
@@ -2480,6 +2562,7 @@ _FUNCTION_INFO = {
'impl_func': True,
'extension': True,
'chromium': True,
+ 'trace_level': 1,
},
'DiscardBackbufferCHROMIUM': {
'type': 'Custom',
@@ -2487,6 +2570,14 @@ _FUNCTION_INFO = {
'extension': True,
'chromium': True,
},
+ 'ScheduleOverlayPlaneCHROMIUM': {
+ 'type': 'Custom',
+ 'impl_func': True,
+ 'unit_test': False,
+ 'client_test': False,
+ 'extension': True,
+ 'chromium': True,
+ },
}
@@ -2536,6 +2627,11 @@ def ToUnderscore(input_string):
words = SplitWords(input_string)
return Lower(words)
+def CachedStateName(item):
+ if item.get('cached', False):
+ return 'cached_' + item['name']
+ return item['name']
+
class CWriter(object):
"""Writes to a file formatting it for Google's style guidelines."""
@@ -2554,72 +2650,9 @@ class CWriter(object):
lines = string.splitlines()
num_lines = len(lines)
for ii in range(0, num_lines):
- self.__WriteLine(lines[ii], ii < (num_lines - 1) or string[-1] == '\n')
-
- def __FindSplit(self, string):
- """Finds a place to split a string."""
- splitter = string.find('=')
- if splitter >= 1 and not string[splitter + 1] == '=' and splitter < 80:
- return splitter
- # parts = string.split('(')
- parts = re.split("(?<=[^\"])\((?!\")", string)
- fptr = re.compile('\*\w*\)')
- if len(parts) > 1:
- splitter = len(parts[0])
- for ii in range(1, len(parts)):
- # Don't split on the dot in "if (.condition)".
- if (not parts[ii - 1][-3:] == "if " and
- # Don't split "(.)" or "(.*fptr)".
- (len(parts[ii]) > 0 and
- not parts[ii][0] == ")" and not fptr.match(parts[ii]))
- and splitter < 80):
- return splitter
- splitter += len(parts[ii]) + 1
- done = False
- end = len(string)
- last_splitter = -1
- while not done:
- splitter = string[0:end].rfind(',')
- if splitter < 0 or (splitter > 0 and string[splitter - 1] == '"'):
- return last_splitter
- elif splitter >= 80:
- end = splitter
- else:
- return splitter
-
- def __WriteLine(self, line, ends_with_eol):
- """Given a signle line, writes it to a file, splitting if it's > 80 chars"""
- if len(line) >= 80:
- i = self.__FindSplit(line)
- if i > 0:
- line1 = line[0:i + 1]
- if line1[-1] == ' ':
- line1 = line1[:-1]
- lineend = ''
- if line1[0] == '#':
- lineend = ' \\'
- nolint = ''
- if len(line1) > 80:
- nolint = ' // NOLINT'
- self.__AddLine(line1 + nolint + lineend + '\n')
- match = re.match("( +)", line1)
- indent = ""
- if match:
- indent = match.group(1)
- splitter = line[i]
- if not splitter == ',':
- indent = " " + indent
- self.__WriteLine(indent + line[i + 1:].lstrip(), True)
- return
- nolint = ''
- if len(line) > 80:
- nolint = ' // NOLINT'
- self.__AddLine(line + nolint)
- if ends_with_eol:
- self.__AddLine('\n')
-
- def __AddLine(self, line):
- self.content.append(line)
+ self.content.append(lines[ii])
+ if ii < (num_lines - 1) or string[-1] == '\n':
+ self.content.append('\n')
def Close(self):
"""Close the file."""
@@ -2678,20 +2711,9 @@ class TypeHandler(object):
if func.GetInfo('needs_size') and not func.name.endswith('Bucket'):
func.AddCmdArg(DataSizeArgument('data_size'))
- def AddImmediateFunction(self, generator, func):
- """Adds an immediate version of a function."""
- # Generate an immediate command if there is only 1 pointer arg.
- immediate = func.GetInfo('immediate') # can be True, False or None
- if immediate == True or immediate == None:
- if func.num_pointer_args == 1 or immediate:
- generator.AddFunction(ImmediateFunction(func))
-
- def AddBucketFunction(self, generator, func):
- """Adds a bucket version of a function."""
- # Generate an immediate command if there is only 1 pointer arg.
- bucket = func.GetInfo('bucket') # can be True, False or None
- if bucket:
- generator.AddFunction(BucketFunction(func))
+ def NeedsDataTransferFunction(self, func):
+ """Overriden from TypeHandler."""
+ return func.num_pointer_args >= 1
def WriteStruct(self, func, file):
"""Writes a structure that matches the arguments to a function."""
@@ -2702,6 +2724,7 @@ class TypeHandler(object):
file.Write(" typedef %s ValueType;\n" % func.name)
file.Write(" static const CommandId kCmdId = k%s;\n" % func.name)
func.WriteCmdArgFlag(file)
+ func.WriteCmdFlag(file)
file.Write("\n")
result = func.GetInfo('result')
if not result == None:
@@ -2722,6 +2745,12 @@ class TypeHandler(object):
args = func.GetCmdArgs()
for arg in args:
file.Write(" %s %s;\n" % (arg.cmd_type, arg.name))
+
+ consts = func.GetCmdConstants()
+ for const in consts:
+ file.Write(" static const %s %s = %s;\n" %
+ (const.cmd_type, const.name, const.GetConstantValue()))
+
file.Write("};\n")
file.Write("\n")
@@ -2774,7 +2803,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
for value, arg in enumerate(args):
file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 11))
file.Write(");\n")
- file.Write(" EXPECT_EQ(static_cast<uint32>(cmds::%s::kCmdId),\n" %
+ file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" %
func.name)
file.Write(" cmd.header.command);\n")
func.type_handler.WriteCmdSizeTest(func, file)
@@ -2818,8 +2847,9 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
file.Write(
"error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
file.Write(
- " uint32 immediate_data_size, const gles2::cmds::%s& c) {\n" %
+ " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" %
func.name)
+ self.WriteHandlerExtensionCheck(func, file)
self.WriteHandlerDeferReadWrite(func, file);
if len(func.GetOriginalArgs()) > 0:
last_arg = func.GetLastOriginalArg()
@@ -2839,8 +2869,9 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
file.Write(
"error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
file.Write(
- " uint32 immediate_data_size, const gles2::cmds::%s& c) {\n" %
+ " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" %
func.name)
+ self.WriteHandlerExtensionCheck(func, file)
self.WriteHandlerDeferReadWrite(func, file);
last_arg = func.GetLastOriginalArg()
all_but_last_arg = func.GetOriginalArgs()[:-1]
@@ -2859,8 +2890,9 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
file.Write(
"error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
file.Write(
- " uint32 immediate_data_size, const gles2::cmds::%s& c) {\n" %
+ " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" %
func.name)
+ self.WriteHandlerExtensionCheck(func, file)
self.WriteHandlerDeferReadWrite(func, file);
last_arg = func.GetLastOriginalArg()
all_but_last_arg = func.GetOriginalArgs()[:-1]
@@ -2874,6 +2906,14 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
file.Write("}\n")
file.Write("\n")
+ def WriteHandlerExtensionCheck(self, func, file):
+ if func.GetInfo('extension_flag'):
+ file.Write(" if (!features().%s) {\n" % func.GetInfo('extension_flag'))
+ file.Write(" LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, \"gl%s\","
+ " \"function not available\");\n" % func.original_name)
+ file.Write(" return error::kNoError;")
+ file.Write(" }\n\n")
+
def WriteHandlerDeferReadWrite(self, func, file):
"""Writes the code to handle deferring reads or writes."""
defer_draws = func.GetInfo('defer_draws')
@@ -2890,16 +2930,18 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
file.Write(" return error;\n")
def WriteValidUnitTest(self, func, file, test, extra = {}):
- """Writes a valid unit test."""
+ """Writes a valid unit test for the service implementation."""
if func.GetInfo('expectation') == False:
test = self._remove_expected_call_re.sub('', test)
name = func.name
- arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()):
- arg_strings.append(arg.GetValidArg(func, count, 0))
- gl_arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()):
- gl_arg_strings.append(arg.GetValidGLArg(func, count, 0))
+ arg_strings = [
+ arg.GetValidArg(func) \
+ for arg in func.GetOriginalArgs() if not arg.IsConstant()
+ ]
+ gl_arg_strings = [
+ arg.GetValidGLArg(func) \
+ for arg in func.GetOriginalArgs()
+ ]
gl_func_name = func.GetGLTestFunctionName()
vars = {
'test_name': 'GLES2DecoderTest%d' % file.file_num,
@@ -2916,19 +2958,26 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
file.Write(test % vars)
def WriteInvalidUnitTest(self, func, file, test, extra = {}):
- """Writes a invalid unit test."""
- for arg_index, arg in enumerate(func.GetOriginalArgs()):
- num_invalid_values = arg.GetNumInvalidValues(func)
+ """Writes an invalid unit test for the service implementation."""
+ for invalid_arg_index, invalid_arg in enumerate(func.GetOriginalArgs()):
+ # Service implementation does not test constants, as they are not part of
+ # the call in the service side.
+ if invalid_arg.IsConstant():
+ continue
+
+ num_invalid_values = invalid_arg.GetNumInvalidValues(func)
for value_index in range(0, num_invalid_values):
arg_strings = []
parse_result = "kNoError"
gl_error = None
- for count, arg in enumerate(func.GetOriginalArgs()):
- if count == arg_index:
+ for arg in func.GetOriginalArgs():
+ if arg.IsConstant():
+ continue
+ if invalid_arg is arg:
(arg_string, parse_result, gl_error) = arg.GetInvalidArg(
- count, value_index)
+ value_index)
else:
- arg_string = arg.GetValidArg(func, count, 0)
+ arg_string = arg.GetValidArg(func)
arg_strings.append(arg_string)
gl_arg_strings = []
for arg in func.GetOriginalArgs():
@@ -2941,7 +2990,7 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
vars = {
'test_name': 'GLES2DecoderTest%d' % file.file_num ,
'name': func.name,
- 'arg_index': arg_index,
+ 'arg_index': invalid_arg_index,
'value_index': value_index,
'gl_func_name': gl_func_name,
'args': ", ".join(arg_strings),
@@ -2955,8 +3004,32 @@ COMPILE_ASSERT(offsetof(%(cmd_name)s::Result, %(field_name)s) == %(offset)d,
def WriteServiceUnitTest(self, func, file):
"""Writes the service unit test for a command."""
- valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+
+ if func.name == 'Enable':
+ valid_test = """
+TEST_P(%(test_name)s, %(name)sValidArgs) {
+ SetupExpectationsForEnableDisable(%(gl_args)s, true);
+ SpecializedSetup<cmds::%(name)s, 0>(true);
+ cmds::%(name)s cmd;
+ cmd.Init(%(args)s);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+"""
+ elif func.name == 'Disable':
+ valid_test = """
+TEST_P(%(test_name)s, %(name)sValidArgs) {
+ SetupExpectationsForEnableDisable(%(gl_args)s, false);
+ SpecializedSetup<cmds::%(name)s, 0>(true);
+ cmds::%(name)s cmd;
+ cmd.Init(%(args)s);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+"""
+ else:
+ valid_test = """
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
SpecializedSetup<cmds::%(name)s, 0>(true);
cmds::%(name)s cmd;
@@ -2968,7 +3041,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
self.WriteValidUnitTest(func, file, valid_test)
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
@@ -3076,7 +3149,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
for arg in func.GetOriginalArgs():
arg.WriteClientSideValidationCode(file, func)
file.Write(" helper_->%s(%s);\n" %
- (func.name, func.MakeOriginalArgString("")))
+ (func.name, func.MakeHelperArgString("")))
file.Write(" CheckGLError();\n")
self.WriteClientGLReturnLog(func, file)
file.Write("}\n")
@@ -3122,18 +3195,46 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
"""
- cmd_arg_strings = []
- for count, arg in enumerate(func.GetCmdArgs()):
- cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func, count, 0))
- count += 1
- gl_arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()):
- gl_arg_strings.append(arg.GetValidClientSideArg(func, count, 0))
+ cmd_arg_strings = [
+ arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs()
+ ]
+
+ gl_arg_strings = [
+ arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs()
+ ]
+
file.Write(code % {
'name': func.name,
'args': ", ".join(gl_arg_strings),
'cmd_args': ", ".join(cmd_arg_strings),
})
+
+ # Test constants for invalid values, as they are not tested by the
+ # service.
+ constants = [arg for arg in func.GetOriginalArgs() if arg.IsConstant()]
+ if constants:
+ code = """
+TEST_F(GLES2ImplementationTest, %(name)sInvalidConstantArg%(invalid_index)d) {
+ gl_->%(name)s(%(args)s);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(%(gl_error)s, CheckError());
+}
+"""
+ for invalid_arg in constants:
+ gl_arg_strings = []
+ invalid = invalid_arg.GetInvalidArg(func)
+ for arg in func.GetOriginalArgs():
+ if arg is invalid_arg:
+ gl_arg_strings.append(invalid[0])
+ else:
+ gl_arg_strings.append(arg.GetValidClientSideArg(func))
+
+ file.Write(code % {
+ 'name': func.name,
+ 'invalid_index': func.GetOriginalArgs().index(invalid_arg),
+ 'args': ", ".join(gl_arg_strings),
+ 'gl_error': invalid[2],
+ })
else:
if client_test != False:
file.Write("// TODO: Implement unit test for %s\n" % func.name)
@@ -3149,8 +3250,8 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
def WriteImmediateCmdComputeSize(self, func, file):
"""Writes the size computation code for the immediate version of a cmd."""
- file.Write(" static uint32 ComputeSize(uint32 size_in_bytes) {\n")
- file.Write(" return static_cast<uint32>(\n")
+ file.Write(" static uint32_t ComputeSize(uint32_t size_in_bytes) {\n")
+ file.Write(" return static_cast<uint32_t>(\n")
file.Write(" sizeof(ValueType) + // NOLINT\n")
file.Write(" RoundSizeToMultipleOfEntries(size_in_bytes));\n")
file.Write(" }\n")
@@ -3158,7 +3259,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
def WriteImmediateCmdSetHeader(self, func, file):
"""Writes the SetHeader function for the immediate version of a cmd."""
- file.Write(" void SetHeader(uint32 size_in_bytes) {\n")
+ file.Write(" void SetHeader(uint32_t size_in_bytes) {\n")
file.Write(" header.SetCmdByTotalSize<ValueType>(size_in_bytes);\n")
file.Write(" }\n")
file.Write("\n")
@@ -3190,7 +3291,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
def WriteImmediateCmdHelper(self, func, file):
"""Writes the cmd helper definition for the immediate version of a cmd."""
code = """ void %(name)s(%(typed_args)s) {
- const uint32 s = 0; // TODO(gman): compute correct size
+ const uint32_t s = 0; // TODO(gman): compute correct size
gles2::cmds::%(name)s* c =
GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(s);
if (c) {
@@ -3240,6 +3341,10 @@ class StateSetHandler(TypeHandler):
if 'state_flag' in state:
file.Write(" %s = true;\n" % state['state_flag'])
if not func.GetInfo("no_gl"):
+ for ndx,item in enumerate(states):
+ if item.get('cached', False):
+ file.Write(" state_.%s = %s;\n" %
+ (CachedStateName(item), args[ndx].name))
file.Write(" %s(%s);\n" %
(func.GetGLFunctionName(), func.MakeOriginalArgString("")))
file.Write(" }\n")
@@ -3254,7 +3359,7 @@ class StateSetHandler(TypeHandler):
if 'range_checks' in item:
for check_ndx, range_check in enumerate(item['range_checks']):
valid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) {
+TEST_P(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) {
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
cmd.Init(%(args)s);
@@ -3263,9 +3368,11 @@ TEST_F(%(test_name)s, %(name)sInvalidValue%(ndx)d_%(check_ndx)d) {
}
"""
name = func.name
- arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()):
- arg_strings.append(arg.GetValidArg(func, count, 0))
+ arg_strings = [
+ arg.GetValidArg(func) \
+ for arg in func.GetOriginalArgs() if not arg.IsConstant()
+ ]
+
arg_strings[ndx] = range_check['test_value']
vars = {
'test_name': 'GLES2DecoderTest%d' % file.file_num,
@@ -3431,7 +3538,8 @@ class CustomHandler(TypeHandler):
def WriteImmediateCmdGetTotalSize(self, func, file):
"""Overrriden from TypeHandler."""
- file.Write(" uint32 total_size = 0; // TODO(gman): get correct size.\n")
+ file.Write(
+ " uint32_t total_size = 0; // TODO(gman): get correct size.\n")
def WriteImmediateCmdInit(self, func, file):
"""Overrriden from TypeHandler."""
@@ -3460,9 +3568,9 @@ class CustomHandler(TypeHandler):
class TodoHandler(CustomHandler):
"""Handle for commands that are not yet implemented."""
- def AddImmediateFunction(self, generator, func):
- """Overrriden from TypeHandler."""
- pass
+ def NeedsDataTransferFunction(self, func):
+ """Overriden from TypeHandler."""
+ return False
def WriteImmediateFormatTest(self, func, file):
"""Overrriden from TypeHandler."""
@@ -3492,7 +3600,7 @@ class TodoHandler(CustomHandler):
file.Write(
"error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
file.Write(
- " uint32 immediate_data_size, const gles2::cmds::%s& c) {\n" %
+ " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" %
func.name)
file.Write(" // TODO: for now this is a no-op\n")
file.Write(
@@ -3512,6 +3620,13 @@ class HandWrittenHandler(CustomHandler):
CustomHandler.InitFunction(self, func)
func.can_auto_generate = False
+ def NeedsDataTransferFunction(self, func):
+ """Overriden from TypeHandler."""
+ # If specified explicitly, force the data transfer method.
+ if func.GetInfo('data_transfer_methods'):
+ return True
+ return False
+
def WriteStruct(self, func, file):
"""Overrriden from TypeHandler."""
pass
@@ -3645,16 +3760,16 @@ class DataHandler(TypeHandler):
if name.endswith("Immediate"):
name = name[0:-9]
if name == 'BufferData' or name == 'BufferSubData':
- file.Write(" uint32 data_size = size;\n")
+ file.Write(" uint32_t data_size = size;\n")
elif (name == 'CompressedTexImage2D' or
name == 'CompressedTexSubImage2D'):
- file.Write(" uint32 data_size = imageSize;\n")
+ file.Write(" uint32_t data_size = imageSize;\n")
elif (name == 'CompressedTexSubImage2DBucket'):
file.Write(" Bucket* bucket = GetBucket(c.bucket_id);\n")
- file.Write(" uint32 data_size = bucket->size();\n")
+ file.Write(" uint32_t data_size = bucket->size();\n")
file.Write(" GLsizei imageSize = data_size;\n")
elif name == 'TexImage2D' or name == 'TexSubImage2D':
- code = """ uint32 data_size;
+ code = """ uint32_t data_size;
if (!GLES2Util::ComputeImageDataSize(
width, height, format, type, unpack_alignment_, &data_size)) {
return error::kOutOfBounds;
@@ -3662,7 +3777,8 @@ class DataHandler(TypeHandler):
"""
file.Write(code)
else:
- file.Write("// uint32 data_size = 0; // TODO(gman): get correct size!\n")
+ file.Write(
+ "// uint32_t data_size = 0; // TODO(gman): get correct size!\n")
def WriteImmediateCmdGetTotalSize(self, func, file):
"""Overrriden from TypeHandler."""
@@ -3726,7 +3842,7 @@ class BindHandler(TypeHandler):
if len(func.GetOriginalArgs()) == 1:
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
SpecializedSetup<cmds::%(name)s, 0>(true);
cmds::%(name)s cmd;
@@ -3734,8 +3850,10 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-
-TEST_F(%(test_name)s, %(name)sValidArgsNewId) {
+"""
+ if func.GetInfo("gen_func"):
+ valid_test += """
+TEST_P(%(test_name)s, %(name)sValidArgsNewId) {
EXPECT_CALL(*gl_, %(gl_func_name)s(kNewServiceId));
EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _))
.WillOnce(SetArgumentPointee<1>(kNewServiceId));
@@ -3747,15 +3865,13 @@ TEST_F(%(test_name)s, %(name)sValidArgsNewId) {
EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL);
}
"""
- gen_func_names = {
- }
self.WriteValidUnitTest(func, file, valid_test, {
'resource_type': func.GetOriginalArgs()[0].resource_type,
'gl_gen_func_name': func.GetInfo("gen_func"),
})
else:
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
SpecializedSetup<cmds::%(name)s, 0>(true);
cmds::%(name)s cmd;
@@ -3763,8 +3879,10 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-
-TEST_F(%(test_name)s, %(name)sValidArgsNewId) {
+"""
+ if func.GetInfo("gen_func"):
+ valid_test += """
+TEST_P(%(test_name)s, %(name)sValidArgsNewId) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(first_gl_arg)s, kNewServiceId));
EXPECT_CALL(*gl_, %(gl_gen_func_name)s(1, _))
.WillOnce(SetArgumentPointee<1>(kNewServiceId));
@@ -3776,17 +3894,15 @@ TEST_F(%(test_name)s, %(name)sValidArgsNewId) {
EXPECT_TRUE(Get%(resource_type)s(kNewClientId) != NULL);
}
"""
- gen_func_names = {
- }
self.WriteValidUnitTest(func, file, valid_test, {
- 'first_arg': func.GetOriginalArgs()[0].GetValidArg(func, 0, 0),
- 'first_gl_arg': func.GetOriginalArgs()[0].GetValidGLArg(func, 0, 0),
+ 'first_arg': func.GetOriginalArgs()[0].GetValidArg(func),
+ 'first_gl_arg': func.GetOriginalArgs()[0].GetValidGLArg(func),
'resource_type': func.GetOriginalArgs()[1].resource_type,
'gl_gen_func_name': func.GetInfo("gen_func"),
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
@@ -3819,7 +3935,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
SetGLError(GL_INVALID_OPERATION, "%(name)s\", \"%(id)s reserved id");
return;
}
- if (Bind%(type)sHelper(%(arg_string)s)) {
+ if (%(name)sHelper(%(arg_string)s)) {
helper_->%(name)s(%(arg_string)s);
}
CheckGLError();
@@ -3862,13 +3978,13 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
EXPECT_TRUE(NoCommandsWritten());
}
"""
- cmd_arg_strings = []
- for count, arg in enumerate(func.GetCmdArgs()):
- cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func, count, 0))
- count += 1
- gl_arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()):
- gl_arg_strings.append(arg.GetValidClientSideArg(func, count, 0))
+ cmd_arg_strings = [
+ arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs()
+ ]
+ gl_arg_strings = [
+ arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs()
+ ]
+
file.Write(code % {
'name': func.name,
'args': ", ".join(gl_arg_strings),
@@ -3888,7 +4004,7 @@ class GENnHandler(TypeHandler):
def WriteGetDataSizeCode(self, func, file):
"""Overrriden from TypeHandler."""
- code = """ uint32 data_size;
+ code = """ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
@@ -3937,7 +4053,8 @@ class GENnHandler(TypeHandler):
MakeIds(this, 0, %(args)s);
%(name)sHelper(%(args)s);
helper_->%(name)sImmediate(%(args)s);
- helper_->CommandBufferHelper::Flush();
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
%(log_code)s
CheckGLError();
}
@@ -3972,7 +4089,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(1, _))
.WillOnce(SetArgumentPointee<1>(kNewServiceId));
GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
@@ -3988,7 +4105,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
'resource_name': func.GetInfo('resource_type'),
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0);
GetSharedMemoryAs<GLuint*>()[0] = client_%(resource_name)s_id_;
SpecializedSetup<cmds::%(name)s, 0>(false);
@@ -4004,7 +4121,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
def WriteImmediateServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(1, _))
.WillOnce(SetArgumentPointee<1>(kNewServiceId));
cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>();
@@ -4021,7 +4138,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
'resource_name': func.GetInfo('resource_type'),
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(_, _)).Times(0);
cmds::%(name)s* cmd = GetImmediateAs<cmds::%(name)s>();
SpecializedSetup<cmds::%(name)s, 0>(false);
@@ -4036,13 +4153,13 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
def WriteImmediateCmdComputeSize(self, func, file):
"""Overrriden from TypeHandler."""
- file.Write(" static uint32 ComputeDataSize(GLsizei n) {\n")
+ file.Write(" static uint32_t ComputeDataSize(GLsizei n) {\n")
file.Write(
- " return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT\n")
+ " return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT\n")
file.Write(" }\n")
file.Write("\n")
- file.Write(" static uint32 ComputeSize(GLsizei n) {\n")
- file.Write(" return static_cast<uint32>(\n")
+ file.Write(" static uint32_t ComputeSize(GLsizei n) {\n")
+ file.Write(" return static_cast<uint32_t>(\n")
file.Write(" sizeof(ValueType) + ComputeDataSize(n)); // NOLINT\n")
file.Write(" }\n")
file.Write("\n")
@@ -4078,7 +4195,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
last_arg.type, last_arg.name))
file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" %
(copy_args, last_arg.name))
- file.Write(" const uint32 size = ComputeSize(_n);\n")
+ file.Write(" const uint32_t size = ComputeSize(_n);\n")
file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>("
"cmd, size);\n")
file.Write(" }\n")
@@ -4087,7 +4204,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
def WriteImmediateCmdHelper(self, func, file):
"""Overrriden from TypeHandler."""
code = """ void %(name)s(%(typed_args)s) {
- const uint32 size = gles2::cmds::%(name)s::ComputeSize(n);
+ const uint32_t size = gles2::cmds::%(name)s::ComputeSize(n);
gles2::cmds::%(name)s* c =
GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size);
if (c) {
@@ -4110,7 +4227,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
(func.name, func.name))
file.Write(" void* next_cmd = cmd.Set(\n")
file.Write(" &cmd, static_cast<GLsizei>(arraysize(ids)), ids);\n")
- file.Write(" EXPECT_EQ(static_cast<uint32>(cmds::%s::kCmdId),\n" %
+ file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" %
func.name)
file.Write(" cmd.header.command);\n")
file.Write(" EXPECT_EQ(sizeof(cmd) +\n")
@@ -4133,12 +4250,12 @@ class CreateHandler(TypeHandler):
def InitFunction(self, func):
"""Overrriden from TypeHandler."""
- func.AddCmdArg(Argument("client_id", 'uint32'))
+ func.AddCmdArg(Argument("client_id", 'uint32_t'))
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s))
.WillOnce(Return(kNewServiceId));
SpecializedSetup<cmds::%(name)s, 0>(true);
@@ -4157,7 +4274,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
'resource_type': func.name[6:],
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
@@ -4171,7 +4288,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
def WriteHandlerImplementation (self, func, file):
"""Overrriden from TypeHandler."""
- file.Write(" uint32 client_id = c.client_id;\n")
+ file.Write(" uint32_t client_id = c.client_id;\n")
file.Write(" if (!%sHelper(%s)) {\n" %
(func.name, func.MakeCmdArgString("")))
file.Write(" return error::kInvalidArguments;\n")
@@ -4237,7 +4354,7 @@ class DELnHandler(TypeHandler):
def WriteGetDataSizeCode(self, func, file):
"""Overrriden from TypeHandler."""
- code = """ uint32 data_size;
+ code = """ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
@@ -4269,7 +4386,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(
*gl_,
%(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId)))
@@ -4289,7 +4406,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
'upper_resource_name': func.GetInfo('resource_type'),
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs) {
GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
@@ -4302,7 +4419,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
def WriteImmediateServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(
*gl_,
%(gl_func_name)s(1, Pointee(kService%(upper_resource_name)sId)))
@@ -4322,7 +4439,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
'upper_resource_name': func.GetInfo('resource_type'),
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs) {
cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
SpecializedSetup<cmds::%(name)s, 0>(false);
GLuint temp = kInvalidClientId;
@@ -4384,13 +4501,13 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
def WriteImmediateCmdComputeSize(self, func, file):
"""Overrriden from TypeHandler."""
- file.Write(" static uint32 ComputeDataSize(GLsizei n) {\n")
+ file.Write(" static uint32_t ComputeDataSize(GLsizei n) {\n")
file.Write(
- " return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT\n")
+ " return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT\n")
file.Write(" }\n")
file.Write("\n")
- file.Write(" static uint32 ComputeSize(GLsizei n) {\n")
- file.Write(" return static_cast<uint32>(\n")
+ file.Write(" static uint32_t ComputeSize(GLsizei n) {\n")
+ file.Write(" return static_cast<uint32_t>(\n")
file.Write(" sizeof(ValueType) + ComputeDataSize(n)); // NOLINT\n")
file.Write(" }\n")
file.Write("\n")
@@ -4426,7 +4543,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
last_arg.type, last_arg.name))
file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" %
(copy_args, last_arg.name))
- file.Write(" const uint32 size = ComputeSize(_n);\n")
+ file.Write(" const uint32_t size = ComputeSize(_n);\n")
file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>("
"cmd, size);\n")
file.Write(" }\n")
@@ -4435,7 +4552,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
def WriteImmediateCmdHelper(self, func, file):
"""Overrriden from TypeHandler."""
code = """ void %(name)s(%(typed_args)s) {
- const uint32 size = gles2::cmds::%(name)s::ComputeSize(n);
+ const uint32_t size = gles2::cmds::%(name)s::ComputeSize(n);
gles2::cmds::%(name)s* c =
GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size);
if (c) {
@@ -4458,7 +4575,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
(func.name, func.name))
file.Write(" void* next_cmd = cmd.Set(\n")
file.Write(" &cmd, static_cast<GLsizei>(arraysize(ids)), ids);\n")
- file.Write(" EXPECT_EQ(static_cast<uint32>(cmds::%s::kCmdId),\n" %
+ file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" %
func.name)
file.Write(" cmd.header.command);\n")
file.Write(" EXPECT_EQ(sizeof(cmd) +\n")
@@ -4479,16 +4596,16 @@ class GETnHandler(TypeHandler):
def __init__(self):
TypeHandler.__init__(self)
- def AddImmediateFunction(self, generator, func):
- """Overrriden from TypeHandler."""
- pass
+ def NeedsDataTransferFunction(self, func):
+ """Overriden from TypeHandler."""
+ return False
def WriteServiceImplementation(self, func, file):
"""Overrriden from TypeHandler."""
file.Write(
"error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
file.Write(
- " uint32 immediate_data_size, const gles2::cmds::%s& c) {\n" %
+ " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" %
func.name)
last_arg = func.GetLastOriginalArg()
@@ -4552,7 +4669,9 @@ class GETnHandler(TypeHandler):
arg_string = (
", ".join(["%s" % arg.name for arg in all_but_last_args]))
all_arg_string = (
- ", ".join(["%s" % arg.name for arg in func.GetOriginalArgs()]))
+ ", ".join([
+ "%s" % arg.name
+ for arg in func.GetOriginalArgs() if not arg.IsConstant()]))
self.WriteTraceEvent(func, file)
code = """ if (%(func_name)sHelper(%(all_arg_string)s)) {
return;
@@ -4568,7 +4687,7 @@ class GETnHandler(TypeHandler):
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
@@ -4601,14 +4720,18 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
EXPECT_EQ(static_cast<Result::Type>(1), result);
}
"""
- cmd_arg_strings = []
- for count, arg in enumerate(func.GetCmdArgs()[0:-2]):
- cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func, count, 0))
- cmd_arg_strings[0] = '123'
- gl_arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()[0:-1]):
- gl_arg_strings.append(arg.GetValidClientSideArg(func, count, 0))
- gl_arg_strings[0] = '123'
+ first_cmd_arg = func.GetCmdArgs()[0].GetValidNonCachedClientSideCmdArg(func)
+ if not first_cmd_arg:
+ return
+
+ first_gl_arg = func.GetCmdArgs()[0].GetValidNonCachedClientSideArg(func)
+ cmd_arg_strings = [first_cmd_arg]
+ for arg in func.GetCmdArgs()[1:-2]:
+ cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func))
+ gl_arg_strings = [first_gl_arg]
+ for arg in func.GetOriginalArgs()[1:-1]:
+ gl_arg_strings.append(arg.GetValidClientSideArg(func))
+
file.Write(code % {
'name': func.name,
'args': ", ".join(gl_arg_strings),
@@ -4618,7 +4741,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -4639,8 +4762,8 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
"""
gl_arg_strings = []
valid_pname = ''
- for count, arg in enumerate(func.GetOriginalArgs()[:-1]):
- arg_value = arg.GetValidGLArg(func, count, 0)
+ for arg in func.GetOriginalArgs()[:-1]:
+ arg_value = arg.GetValidGLArg(func)
gl_arg_strings.append(arg_value)
if arg.name == 'pname':
valid_pname = arg_value
@@ -4655,7 +4778,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s::Result* result =
@@ -4669,25 +4792,48 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
"""
self.WriteInvalidUnitTest(func, file, invalid_test)
+class ArrayArgTypeHandler(TypeHandler):
+ """Base class for type handlers that handle args that are arrays"""
+
+ def __init__(self):
+ TypeHandler.__init__(self)
-class PUTHandler(TypeHandler):
+ def GetArrayType(self, func):
+ """Returns the type of the element in the element array being PUT to."""
+ for arg in func.GetOriginalArgs():
+ if arg.IsPointer():
+ element_type = arg.GetPointedType()
+ return element_type
+
+ # Special case: array type handler is used for a function that is forwarded
+ # to the actual array type implementation
+ element_type = func.GetOriginalArgs()[-1].type
+ assert all(arg.type == element_type \
+ for arg in func.GetOriginalArgs()[-self.GetArrayCount(func):])
+ return element_type
+
+ def GetArrayCount(self, func):
+ """Returns the count of the elements in the array being PUT to."""
+ return func.GetInfo('count')
+
+class PUTHandler(ArrayArgTypeHandler):
"""Handler for glTexParameter_v, glVertexAttrib_v functions."""
def __init__(self):
- TypeHandler.__init__(self)
+ ArrayArgTypeHandler.__init__(self)
def WriteServiceUnitTest(self, func, file):
"""Writes the service unit test for a command."""
expected_call = "EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));"
if func.GetInfo("first_element_only"):
- gl_arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()):
- gl_arg_strings.append(arg.GetValidGLArg(func, count, 0))
+ gl_arg_strings = [
+ arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()
+ ]
gl_arg_strings[-1] = "*" + gl_arg_strings[-1]
expected_call = ("EXPECT_CALL(*gl_, %%(gl_func_name)s(%s));" %
", ".join(gl_arg_strings))
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
SpecializedSetup<cmds::%(name)s, 0>(true);
cmds::%(name)s cmd;
cmd.Init(%(args)s);
@@ -4698,14 +4844,14 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
}
"""
extra = {
- 'data_type': func.GetInfo('data_type'),
+ 'data_type': self.GetArrayType(func),
'data_value': func.GetInfo('data_value') or '0',
'expected_call': expected_call,
}
self.WriteValidUnitTest(func, file, valid_test, extra)
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
@@ -4719,7 +4865,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
def WriteImmediateServiceUnitTest(self, func, file):
"""Writes the service unit test for a command."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
SpecializedSetup<cmds::%(name)s, 0>(true);
%(data_type)s temp[%(data_count)s] = { %(data_value)s, };
@@ -4733,15 +4879,15 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
"""
- gl_arg_strings = []
- gl_any_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()[0:-1]):
- gl_arg_strings.append(arg.GetValidGLArg(func, count, 0))
- gl_any_strings.append("_")
+ gl_arg_strings = [
+ arg.GetValidGLArg(func) for arg in func.GetOriginalArgs()[0:-1]
+ ]
+ gl_any_strings = ["_"] * len(gl_arg_strings)
+
extra = {
'data_ref': ("*" if func.GetInfo('first_element_only') else ""),
- 'data_type': func.GetInfo('data_type'),
- 'data_count': func.GetInfo('count'),
+ 'data_type': self.GetArrayType(func),
+ 'data_count': self.GetArrayCount(func),
'data_value': func.GetInfo('data_value') or '0',
'gl_args': ", ".join(gl_arg_strings),
'gl_any_args': ", ".join(gl_any_strings),
@@ -4749,7 +4895,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
self.WriteValidUnitTest(func, file, valid_test, extra)
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
@@ -4763,19 +4909,22 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
def WriteGetDataSizeCode(self, func, file):
"""Overrriden from TypeHandler."""
- code = """ uint32 data_size;
+ code = """ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(%s), %d, &data_size)) {
return error::kOutOfBounds;
}
"""
- file.Write(code % (func.info.data_type, func.info.count))
- if func.is_immediate:
+ file.Write(code % (self.GetArrayType(func), self.GetArrayCount(func)))
+ if func.IsImmediate():
file.Write(" if (data_size > immediate_data_size) {\n")
file.Write(" return error::kOutOfBounds;\n")
file.Write(" }\n")
def WriteGLES2Implementation(self, func, file):
"""Overrriden from TypeHandler."""
+ impl_func = func.GetInfo('impl_func')
+ if (impl_func != None and impl_func != True):
+ return;
file.Write("%s GLES2Implementation::%s(%s) {\n" %
(func.return_type, func.original_name,
func.MakeTypedOriginalArgString("")))
@@ -4784,7 +4933,8 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
self.WriteClientGLCallLog(func, file)
last_arg_name = func.GetLastOriginalArg().name
values_str = ' << ", " << '.join(
- ["%s[%d]" % (last_arg_name, ndx) for ndx in range(0, func.info.count)])
+ ["%s[%d]" % (last_arg_name, ndx) \
+ for ndx in range(0, self.GetArrayCount(func))])
file.Write(' GPU_CLIENT_LOG("values: " << %s);\n' % values_str)
for arg in func.GetOriginalArgs():
arg.WriteClientSideValidationCode(file, func)
@@ -4796,6 +4946,9 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
def WriteGLES2ImplementationUnitTest(self, func, file):
"""Writes the GLES2 Implemention unit test."""
+ client_test = func.GetInfo('client_test')
+ if (client_test != None and client_test != True):
+ return;
code = """
TEST_F(GLES2ImplementationTest, %(name)s) {
%(type)s data[%(count)d] = {0};
@@ -4813,30 +4966,31 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
"""
- cmd_arg_strings = []
- for count, arg in enumerate(func.GetCmdArgs()[0:-2]):
- cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func, count, 0))
- gl_arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()[0:-1]):
- gl_arg_strings.append(arg.GetValidClientSideArg(func, count, 0))
+ cmd_arg_strings = [
+ arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs()[0:-2]
+ ]
+ gl_arg_strings = [
+ arg.GetValidClientSideArg(func) for arg in func.GetOriginalArgs()[0:-1]
+ ]
+
file.Write(code % {
'name': func.name,
- 'type': func.GetInfo('data_type'),
- 'count': func.GetInfo('count'),
+ 'type': self.GetArrayType(func),
+ 'count': self.GetArrayCount(func),
'args': ", ".join(gl_arg_strings),
'cmd_args': ", ".join(cmd_arg_strings),
})
def WriteImmediateCmdComputeSize(self, func, file):
"""Overrriden from TypeHandler."""
- file.Write(" static uint32 ComputeDataSize() {\n")
- file.Write(" return static_cast<uint32>(\n")
+ file.Write(" static uint32_t ComputeDataSize() {\n")
+ file.Write(" return static_cast<uint32_t>(\n")
file.Write(" sizeof(%s) * %d); // NOLINT\n" %
- (func.info.data_type, func.info.count))
+ (self.GetArrayType(func), self.GetArrayCount(func)))
file.Write(" }\n")
file.Write("\n")
- file.Write(" static uint32 ComputeSize() {\n")
- file.Write(" return static_cast<uint32>(\n")
+ file.Write(" static uint32_t ComputeSize() {\n")
+ file.Write(" return static_cast<uint32_t>(\n")
file.Write(
" sizeof(ValueType) + ComputeDataSize()); // NOLINT\n")
file.Write(" }\n")
@@ -4874,7 +5028,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
last_arg.type, last_arg.name))
file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" %
(copy_args, last_arg.name))
- file.Write(" const uint32 size = ComputeSize();\n")
+ file.Write(" const uint32_t size = ComputeSize();\n")
file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>("
"cmd, size);\n")
file.Write(" }\n")
@@ -4883,7 +5037,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
def WriteImmediateCmdHelper(self, func, file):
"""Overrriden from TypeHandler."""
code = """ void %(name)s(%(typed_args)s) {
- const uint32 size = gles2::cmds::%(name)s::ComputeSize();
+ const uint32_t size = gles2::cmds::%(name)s::ComputeSize();
gles2::cmds::%(name)s* c =
GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size);
if (c) {
@@ -4902,10 +5056,10 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
"""Overrriden from TypeHandler."""
file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name)
file.Write(" const int kSomeBaseValueToTestWith = 51;\n")
- file.Write(" static %s data[] = {\n" % func.info.data_type)
- for v in range(0, func.info.count):
+ file.Write(" static %s data[] = {\n" % self.GetArrayType(func))
+ for v in range(0, self.GetArrayCount(func)):
file.Write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" %
- (func.info.data_type, v))
+ (self.GetArrayType(func), v))
file.Write(" };\n")
file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" %
(func.name, func.name))
@@ -4916,7 +5070,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 11))
file.Write(",\n data);\n")
args = func.GetCmdArgs()
- file.Write(" EXPECT_EQ(static_cast<uint32>(cmds::%s::kCmdId),\n"
+ file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n"
% func.name)
file.Write(" cmd.header.command);\n")
file.Write(" EXPECT_EQ(sizeof(cmd) +\n")
@@ -4933,18 +5087,18 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
file.Write("\n")
-class PUTnHandler(TypeHandler):
+class PUTnHandler(ArrayArgTypeHandler):
"""Handler for PUTn 'glUniform__v' type functions."""
def __init__(self):
- TypeHandler.__init__(self)
+ ArrayArgTypeHandler.__init__(self)
def WriteServiceUnitTest(self, func, file):
"""Overridden from TypeHandler."""
- TypeHandler.WriteServiceUnitTest(self, func, file)
+ ArrayArgTypeHandler.WriteServiceUnitTest(self, func, file)
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgsCountTooLarge) {
+TEST_P(%(test_name)s, %(name)sValidArgsCountTooLarge) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
SpecializedSetup<cmds::%(name)s, 0>(true);
cmds::%(name)s cmd;
@@ -4968,8 +5122,9 @@ TEST_F(%(test_name)s, %(name)sValidArgsCountTooLarge) {
# the number of elements requested in the command.
arg_strings.append("5")
else:
- gl_arg_strings.append(arg.GetValidGLArg(func, count, 0))
- arg_strings.append(arg.GetValidArg(func, count, 0))
+ gl_arg_strings.append(arg.GetValidGLArg(func))
+ if not arg.IsConstant():
+ arg_strings.append(arg.GetValidArg(func))
extra = {
'gl_args': ", ".join(gl_arg_strings),
'args': ", ".join(arg_strings),
@@ -4979,7 +5134,7 @@ TEST_F(%(test_name)s, %(name)sValidArgsCountTooLarge) {
def WriteImmediateServiceUnitTest(self, func, file):
"""Overridden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
EXPECT_CALL(
*gl_,
@@ -4996,13 +5151,14 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
gl_arg_strings = []
gl_any_strings = []
arg_strings = []
- for count, arg in enumerate(func.GetOriginalArgs()[0:-1]):
- gl_arg_strings.append(arg.GetValidGLArg(func, count, 0))
+ for arg in func.GetOriginalArgs()[0:-1]:
+ gl_arg_strings.append(arg.GetValidGLArg(func))
gl_any_strings.append("_")
- arg_strings.append(arg.GetValidArg(func, count, 0))
+ if not arg.IsConstant():
+ arg_strings.append(arg.GetValidArg(func))
extra = {
- 'data_type': func.GetInfo('data_type'),
- 'data_count': func.GetInfo('count'),
+ 'data_type': self.GetArrayType(func),
+ 'data_count': self.GetArrayCount(func),
'args': ", ".join(arg_strings),
'gl_args': ", ".join(gl_arg_strings),
'gl_any_args': ", ".join(gl_any_strings),
@@ -5010,7 +5166,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
self.WriteValidUnitTest(func, file, valid_test, extra)
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
cmds::%(name)s& cmd = *GetImmediateAs<cmds::%(name)s>();
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_any_args)s, _)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
@@ -5024,13 +5180,13 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
def WriteGetDataSizeCode(self, func, file):
"""Overrriden from TypeHandler."""
- code = """ uint32 data_size;
+ code = """ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(%s), %d, &data_size)) {
return error::kOutOfBounds;
}
"""
- file.Write(code % (func.info.data_type, func.info.count))
- if func.is_immediate:
+ file.Write(code % (self.GetArrayType(func), self.GetArrayCount(func)))
+ if func.IsImmediate():
file.Write(" if (data_size > immediate_data_size) {\n")
file.Write(" return error::kOutOfBounds;\n")
file.Write(" }\n")
@@ -5049,14 +5205,14 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
""")
values_str = ' << ", " << '.join(
["%s[%d + i * %d]" % (
- last_arg_name, ndx, func.info.count) for ndx in range(
- 0, func.info.count)])
+ last_arg_name, ndx, self.GetArrayCount(func)) for ndx in range(
+ 0, self.GetArrayCount(func))])
file.Write(' GPU_CLIENT_LOG(" " << i << ": " << %s);\n' % values_str)
file.Write(" }\n });\n")
for arg in func.GetOriginalArgs():
arg.WriteClientSideValidationCode(file, func)
file.Write(" helper_->%sImmediate(%s);\n" %
- (func.name, func.MakeOriginalArgString("")))
+ (func.name, func.MakeInitString("")))
file.Write(" CheckGLError();\n")
file.Write("}\n")
file.Write("\n")
@@ -5082,34 +5238,79 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
"""
- cmd_arg_strings = []
- for count, arg in enumerate(func.GetCmdArgs()[0:-2]):
- cmd_arg_strings.append(arg.GetValidClientSideCmdArg(func, count, 0))
+ cmd_arg_strings = [
+ arg.GetValidClientSideCmdArg(func) for arg in func.GetCmdArgs()[0:-2]
+ ]
gl_arg_strings = []
count_param = 0
- for count, arg in enumerate(func.GetOriginalArgs()[0:-1]):
- gl_arg_strings.append(arg.GetValidClientSideArg(func, count, 0))
+ for arg in func.GetOriginalArgs()[0:-1]:
+ valid_value = arg.GetValidClientSideArg(func)
+ gl_arg_strings.append(valid_value)
if arg.name == "count":
- count_param = int(arg.GetValidClientSideArg(func, count, 0))
+ count_param = int(valid_value)
file.Write(code % {
'name': func.name,
- 'type': func.GetInfo('data_type'),
- 'count': func.GetInfo('count'),
+ 'type': self.GetArrayType(func),
+ 'count': self.GetArrayCount(func),
'args': ", ".join(gl_arg_strings),
'cmd_args': ", ".join(cmd_arg_strings),
'count_param': count_param,
})
+ # Test constants for invalid values, as they are not tested by the
+ # service.
+ constants = [
+ arg for arg in func.GetOriginalArgs()[0:-1] if arg.IsConstant()
+ ]
+ if not constants:
+ return
+
+ code = """
+TEST_F(GLES2ImplementationTest, %(name)sInvalidConstantArg%(invalid_index)d) {
+ %(type)s data[%(count_param)d][%(count)d] = {{0}};
+ for (int ii = 0; ii < %(count_param)d; ++ii) {
+ for (int jj = 0; jj < %(count)d; ++jj) {
+ data[ii][jj] = static_cast<%(type)s>(ii * %(count)d + jj);
+ }
+ }
+ gl_->%(name)s(%(args)s, &data[0][0]);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(%(gl_error)s, CheckError());
+}
+"""
+ for invalid_arg in constants:
+ gl_arg_strings = []
+ invalid = invalid_arg.GetInvalidArg(func)
+ for arg in func.GetOriginalArgs()[0:-1]:
+ if arg is invalid_arg:
+ gl_arg_strings.append(invalid[0])
+ else:
+ valid_value = arg.GetValidClientSideArg(func)
+ gl_arg_strings.append(valid_value)
+ if arg.name == "count":
+ count_param = int(valid_value)
+
+ file.Write(code % {
+ 'name': func.name,
+ 'invalid_index': func.GetOriginalArgs().index(invalid_arg),
+ 'type': self.GetArrayType(func),
+ 'count': self.GetArrayCount(func),
+ 'args': ", ".join(gl_arg_strings),
+ 'gl_error': invalid[2],
+ 'count_param': count_param,
+ })
+
+
def WriteImmediateCmdComputeSize(self, func, file):
"""Overrriden from TypeHandler."""
- file.Write(" static uint32 ComputeDataSize(GLsizei count) {\n")
- file.Write(" return static_cast<uint32>(\n")
+ file.Write(" static uint32_t ComputeDataSize(GLsizei count) {\n")
+ file.Write(" return static_cast<uint32_t>(\n")
file.Write(" sizeof(%s) * %d * count); // NOLINT\n" %
- (func.info.data_type, func.info.count))
+ (self.GetArrayType(func), self.GetArrayCount(func)))
file.Write(" }\n")
file.Write("\n")
- file.Write(" static uint32 ComputeSize(GLsizei count) {\n")
- file.Write(" return static_cast<uint32>(\n")
+ file.Write(" static uint32_t ComputeSize(GLsizei count) {\n")
+ file.Write(" return static_cast<uint32_t>(\n")
file.Write(
" sizeof(ValueType) + ComputeDataSize(count)); // NOLINT\n")
file.Write(" }\n")
@@ -5147,7 +5348,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
last_arg.type, last_arg.name))
file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _%s);\n" %
(copy_args, last_arg.name))
- file.Write(" const uint32 size = ComputeSize(_count);\n")
+ file.Write(" const uint32_t size = ComputeSize(_count);\n")
file.Write(" return NextImmediateCmdAddressTotalSize<ValueType>("
"cmd, size);\n")
file.Write(" }\n")
@@ -5156,7 +5357,7 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
def WriteImmediateCmdHelper(self, func, file):
"""Overrriden from TypeHandler."""
code = """ void %(name)s(%(typed_args)s) {
- const uint32 size = gles2::cmds::%(name)s::ComputeSize(count);
+ const uint32_t size = gles2::cmds::%(name)s::ComputeSize(count);
gles2::cmds::%(name)s* c =
GetImmediateCmdSpaceTotalSize<gles2::cmds::%(name)s>(size);
if (c) {
@@ -5167,36 +5368,36 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
"""
file.Write(code % {
"name": func.name,
- "typed_args": func.MakeTypedOriginalArgString(""),
- "args": func.MakeOriginalArgString(""),
+ "typed_args": func.MakeTypedInitString(""),
+ "args": func.MakeInitString("")
})
def WriteImmediateFormatTest(self, func, file):
"""Overrriden from TypeHandler."""
args = func.GetCmdArgs()
count_param = 0
- for value, arg in enumerate(args):
+ for arg in args:
if arg.name == "count":
- count_param = int(arg.GetValidClientSideArg(func, value, 0))
+ count_param = int(arg.GetValidClientSideCmdArg(func))
file.Write("TEST_F(GLES2FormatTest, %s) {\n" % func.name)
file.Write(" const int kSomeBaseValueToTestWith = 51;\n")
- file.Write(" static %s data[] = {\n" % func.info.data_type)
- for v in range(0, func.info.count * count_param):
+ file.Write(" static %s data[] = {\n" % self.GetArrayType(func))
+ for v in range(0, self.GetArrayCount(func) * count_param):
file.Write(" static_cast<%s>(kSomeBaseValueToTestWith + %d),\n" %
- (func.info.data_type, v))
+ (self.GetArrayType(func), v))
file.Write(" };\n")
file.Write(" cmds::%s& cmd = *GetBufferAs<cmds::%s>();\n" %
(func.name, func.name))
file.Write(" const GLsizei kNumElements = %d;\n" % count_param)
file.Write(" const size_t kExpectedCmdSize =\n")
file.Write(" sizeof(cmd) + kNumElements * sizeof(%s) * %d;\n" %
- (func.info.data_type, func.info.count))
+ (self.GetArrayType(func), self.GetArrayCount(func)))
file.Write(" void* next_cmd = cmd.Set(\n")
file.Write(" &cmd")
for value, arg in enumerate(args):
file.Write(",\n static_cast<%s>(%d)" % (arg.type, value + 1))
file.Write(",\n data);\n")
- file.Write(" EXPECT_EQ(static_cast<uint32>(cmds::%s::kCmdId),\n" %
+ file.Write(" EXPECT_EQ(static_cast<uint32_t>(cmds::%s::kCmdId),\n" %
func.name)
file.Write(" cmd.header.command);\n")
file.Write(" EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);\n")
@@ -5211,10 +5412,10 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
file.Write("\n")
-class PUTXnHandler(TypeHandler):
+class PUTXnHandler(ArrayArgTypeHandler):
"""Handler for glUniform?f functions."""
def __init__(self):
- TypeHandler.__init__(self)
+ ArrayArgTypeHandler.__init__(self)
def WriteHandlerImplementation(self, func, file):
"""Overrriden from TypeHandler."""
@@ -5223,15 +5424,15 @@ class PUTXnHandler(TypeHandler):
"""
values = ""
args = func.GetOriginalArgs()
- count = int(func.GetInfo('count'))
+ count = int(self.GetArrayCount(func))
num_args = len(args)
for ii in range(count):
values += "%s, " % args[len(args) - count + ii].name
file.Write(code % {
'name': func.name,
- 'count': func.GetInfo('count'),
- 'type': func.GetInfo('data_type'),
+ 'count': self.GetArrayCount(func),
+ 'type': self.GetArrayType(func),
'location': args[0].name,
'args': func.MakeOriginalArgString(""),
'values': values,
@@ -5240,7 +5441,7 @@ class PUTXnHandler(TypeHandler):
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, %(name)sv(%(local_args)s));
SpecializedSetup<cmds::%(name)s, 0>(true);
cmds::%(name)s cmd;
@@ -5250,15 +5451,15 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
}
"""
args = func.GetOriginalArgs()
- local_args = "%s, 1, _" % args[0].GetValidGLArg(func, 0, 0)
+ local_args = "%s, 1, _" % args[0].GetValidGLArg(func)
self.WriteValidUnitTest(func, file, valid_test, {
'name': func.name,
- 'count': func.GetInfo('count'),
+ 'count': self.GetArrayCount(func),
'local_args': local_args,
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
EXPECT_CALL(*gl_, %(name)sv(_, _, _).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
@@ -5268,7 +5469,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
"""
self.WriteInvalidUnitTest(func, file, invalid_test, {
'name': func.GetInfo('name'),
- 'count': func.GetInfo('count'),
+ 'count': self.GetArrayCount(func),
})
@@ -5280,15 +5481,15 @@ class GLcharHandler(CustomHandler):
def WriteImmediateCmdComputeSize(self, func, file):
"""Overrriden from TypeHandler."""
- file.Write(" static uint32 ComputeSize(uint32 data_size) {\n")
- file.Write(" return static_cast<uint32>(\n")
+ file.Write(" static uint32_t ComputeSize(uint32_t data_size) {\n")
+ file.Write(" return static_cast<uint32_t>(\n")
file.Write(" sizeof(ValueType) + data_size); // NOLINT\n")
file.Write(" }\n")
def WriteImmediateCmdSetHeader(self, func, file):
"""Overrriden from TypeHandler."""
code = """
- void SetHeader(uint32 data_size) {
+ void SetHeader(uint32_t data_size) {
header.SetCmdBySize<ValueType>(data_size);
}
"""
@@ -5302,7 +5503,7 @@ class GLcharHandler(CustomHandler):
for arg in args:
set_code.append(" %s = _%s;" % (arg.name, arg.name))
code = """
- void Init(%(typed_args)s, uint32 _data_size) {
+ void Init(%(typed_args)s, uint32_t _data_size) {
SetHeader(_data_size);
%(set_code)s
memcpy(ImmediateDataAddress(this), _%(last_arg)s, _data_size);
@@ -5310,7 +5511,7 @@ class GLcharHandler(CustomHandler):
"""
file.Write(code % {
- "typed_args": func.MakeTypedOriginalArgString("_"),
+ "typed_args": func.MakeTypedArgString("_"),
"set_code": "\n".join(set_code),
"last_arg": last_arg.name
})
@@ -5318,10 +5519,10 @@ class GLcharHandler(CustomHandler):
def WriteImmediateCmdSet(self, func, file):
"""Overrriden from TypeHandler."""
last_arg = func.GetLastOriginalArg()
- file.Write(" void* Set(void* cmd%s, uint32 _data_size) {\n" %
- func.MakeTypedOriginalArgString("_", True))
+ file.Write(" void* Set(void* cmd%s, uint32_t _data_size) {\n" %
+ func.MakeTypedCmdArgString("_", True))
file.Write(" static_cast<ValueType*>(cmd)->Init(%s, _data_size);\n" %
- func.MakeOriginalArgString("_"))
+ func.MakeCmdArgString("_"))
file.Write(" return NextImmediateCmdAddress<ValueType>("
"cmd, _data_size);\n")
file.Write(" }\n")
@@ -5330,7 +5531,7 @@ class GLcharHandler(CustomHandler):
def WriteImmediateCmdHelper(self, func, file):
"""Overrriden from TypeHandler."""
code = """ void %(name)s(%(typed_args)s) {
- const uint32 data_size = strlen(name);
+ const uint32_t data_size = strlen(name);
gles2::cmds::%(name)s* c =
GetImmediateCmdSpace<gles2::cmds::%(name)s>(data_size);
if (c) {
@@ -5365,7 +5566,7 @@ TEST_F(GLES2FormatTest, %(func_name)s) {
%(init_code)s
test_str,
strlen(test_str));
- EXPECT_EQ(static_cast<uint32>(cmds::%(func_name)s::kCmdId),
+ EXPECT_EQ(static_cast<uint32_t>(cmds::%(func_name)s::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd) +
RoundSizeToMultipleOfEntries(strlen(test_str)),
@@ -5374,7 +5575,7 @@ TEST_F(GLES2FormatTest, %(func_name)s) {
reinterpret_cast<char*>(&cmd) + sizeof(cmd) +
RoundSizeToMultipleOfEntries(strlen(test_str)));
%(check_code)s
- EXPECT_EQ(static_cast<uint32>(strlen(test_str)), cmd.data_size);
+ EXPECT_EQ(static_cast<uint32_t>(strlen(test_str)), cmd.data_size);
EXPECT_EQ(0, memcmp(test_str, ImmediateDataAddress(&cmd), strlen(test_str)));
CheckBytesWritten(
next_cmd,
@@ -5401,9 +5602,9 @@ class GLcharNHandler(CustomHandler):
func.cmd_args = []
func.AddCmdArg(Argument('bucket_id', 'GLuint'))
- def AddImmediateFunction(self, generator, func):
- """Overrriden from TypeHandler."""
- pass
+ def NeedsDataTransferFunction(self, func):
+ """Overriden from TypeHandler."""
+ return False
def AddBucketFunction(self, generator, func):
"""Overrriden from TypeHandler."""
@@ -5412,7 +5613,7 @@ class GLcharNHandler(CustomHandler):
def WriteServiceImplementation(self, func, file):
"""Overrriden from TypeHandler."""
file.Write("""error::Error GLES2DecoderImpl::Handle%(name)s(
- uint32 immediate_data_size, const gles2::cmds::%(name)s& c) {
+ uint32_t immediate_data_size, const gles2::cmds::%(name)s& c) {
GLuint bucket_id = static_cast<GLuint>(c.%(bucket_id)s);
Bucket* bucket = GetBucket(bucket_id);
if (!bucket || bucket->size() == 0) {
@@ -5441,15 +5642,15 @@ class IsHandler(TypeHandler):
def InitFunction(self, func):
"""Overrriden from TypeHandler."""
- func.AddCmdArg(Argument("result_shm_id", 'uint32'))
- func.AddCmdArg(Argument("result_shm_offset", 'uint32'))
+ func.AddCmdArg(Argument("result_shm_id", 'uint32_t'))
+ func.AddCmdArg(Argument("result_shm_offset", 'uint32_t'))
if func.GetInfo('result') == None:
- func.AddInfo('result', ['uint32'])
+ func.AddInfo('result', ['uint32_t'])
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s));
SpecializedSetup<cmds::%(name)s, 0>(true);
cmds::%(name)s cmd;
@@ -5466,7 +5667,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
+TEST_P(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
@@ -5479,7 +5680,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs%(arg_index)d_%(value_index)d) {
})
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) {
+TEST_P(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) {
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s)).Times(0);
SpecializedSetup<cmds::%(name)s, 0>(false);
cmds::%(name)s cmd;
@@ -5498,7 +5699,7 @@ TEST_F(%(test_name)s, %(name)sInvalidArgsBadSharedMemoryId) {
file.Write(
"error::Error GLES2DecoderImpl::Handle%s(\n" % func.name)
file.Write(
- " uint32 immediate_data_size, const gles2::cmds::%s& c) {\n" %
+ " uint32_t immediate_data_size, const gles2::cmds::%s& c) {\n" %
func.name)
args = func.GetOriginalArgs()
for arg in args:
@@ -5562,14 +5763,13 @@ TEST_F(GLES2ImplementationTest, %(name)s) {
cmds::%(name)s cmd;
};
- typedef cmds::%(name)s::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::%(name)s::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->%(name)s(1);
@@ -5596,7 +5796,7 @@ class STRnHandler(TypeHandler):
func.ClearCmdArgs()
func.AddCmdArg(cmd_args[0])
# add on a bucket id.
- func.AddCmdArg(Argument('bucket_id', 'uint32'))
+ func.AddCmdArg(Argument('bucket_id', 'uint32_t'))
def WriteGLES2Implementation(self, func, file):
"""Overrriden from TypeHandler."""
@@ -5649,9 +5849,9 @@ class STRnHandler(TypeHandler):
def WriteServiceUnitTest(self, func, file):
"""Overrriden from TypeHandler."""
valid_test = """
-TEST_F(%(test_name)s, %(name)sValidArgs) {
+TEST_P(%(test_name)s, %(name)sValidArgs) {
const char* kInfo = "hello";
- const uint32 kBucketId = 123;
+ const uint32_t kBucketId = 123;
SpecializedSetup<cmds::%(name)s, 0>(true);
%(expect_len_code)s
EXPECT_CALL(*gl_, %(gl_func_name)s(%(gl_args)s))
@@ -5669,7 +5869,7 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
}
"""
args = func.GetOriginalArgs()
- id_name = args[0].GetValidGLArg(func, 0, 0)
+ id_name = args[0].GetValidGLArg(func)
get_len_func = func.GetInfo('get_len_func')
get_len_enum = func.GetInfo('get_len_enum')
sub = {
@@ -5677,8 +5877,8 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
'get_len_func': get_len_func,
'get_len_enum': get_len_enum,
'gl_args': '%s, strlen(kInfo) + 1, _, _' %
- args[0].GetValidGLArg(func, 0, 0),
- 'args': '%s, kBucketId' % args[0].GetValidArg(func, 0, 0),
+ args[0].GetValidGLArg(func),
+ 'args': '%s, kBucketId' % args[0].GetValidArg(func),
'expect_len_code': '',
}
if get_len_func and get_len_func[0:2] == 'gl':
@@ -5689,8 +5889,8 @@ TEST_F(%(test_name)s, %(name)sValidArgs) {
self.WriteValidUnitTest(func, file, valid_test, sub)
invalid_test = """
-TEST_F(%(test_name)s, %(name)sInvalidArgs) {
- const uint32 kBucketId = 123;
+TEST_P(%(test_name)s, %(name)sInvalidArgs) {
+ const uint32_t kBucketId = 123;
EXPECT_CALL(*gl_, %(gl_func_name)s(_, _, _, _))
.Times(0);
cmds::%(name)s cmd;
@@ -5705,27 +5905,50 @@ TEST_F(%(test_name)s, %(name)sInvalidArgs) {
"""Overrriden from TypeHandler."""
pass
+class NamedType(object):
+ """A class that represents a type of an argument in a client function.
+
+ A type of an argument that is to be passed through in the command buffer
+ command. Currently used only for the arguments that are specificly named in
+ the 'cmd_buffer_functions.txt' file, mostly enums.
+ """
+
+ def __init__(self, info):
+ assert not 'is_complete' in info or info['is_complete'] == True
+ self.info = info
+ self.valid = info['valid']
+ if 'invalid' in info:
+ self.invalid = info['invalid']
+ else:
+ self.invalid = []
+
+ def GetType(self):
+ return self.info['type']
+
+ def GetInvalidValues(self):
+ return self.invalid
+
+ def GetValidValues(self):
+ return self.valid
-class FunctionInfo(object):
- """Holds info about a function."""
+ def IsConstant(self):
+ if not 'is_complete' in self.info:
+ return False
- def __init__(self, info, type_handler):
- for key in info:
- setattr(self, key, info[key])
- self.type_handler = type_handler
- if not 'type' in info:
- self.type = ''
+ return len(self.GetValidValues()) == 1
+ def GetConstantValue(self):
+ return self.GetValidValues()[0]
class Argument(object):
"""A class that represents a function argument."""
cmd_type_map_ = {
- 'GLenum': 'uint32',
- 'GLint': 'int32',
- 'GLintptr': 'int32',
- 'GLsizei': 'int32',
- 'GLsizeiptr': 'int32',
+ 'GLenum': 'uint32_t',
+ 'GLint': 'int32_t',
+ 'GLintptr': 'int32_t',
+ 'GLsizei': 'int32_t',
+ 'GLsizeiptr': 'int32_t',
'GLfloat': 'float',
'GLclampf': 'float',
}
@@ -5741,47 +5964,79 @@ class Argument(object):
if type in self.cmd_type_map_:
self.cmd_type = self.cmd_type_map_[type]
else:
- self.cmd_type = 'uint32'
+ self.cmd_type = 'uint32_t'
def IsPointer(self):
"""Returns true if argument is a pointer."""
return False
+ def IsConstant(self):
+ """Returns true if the argument has only one valid value."""
+ return False
+
def AddCmdArgs(self, args):
"""Adds command arguments for this argument to the given list."""
- return args.append(self)
+ if not self.IsConstant():
+ return args.append(self)
def AddInitArgs(self, args):
"""Adds init arguments for this argument to the given list."""
- return args.append(self)
+ if not self.IsConstant():
+ return args.append(self)
- def GetValidArg(self, func, offset, index):
+ def GetValidArg(self, func):
"""Gets a valid value for this argument."""
- valid_arg = func.GetValidArg(offset)
+ valid_arg = func.GetValidArg(self)
if valid_arg != None:
return valid_arg
- return str(offset + 1)
- def GetValidClientSideArg(self, func, offset, index):
- """Gets a valid value for this argument."""
- return str(offset + 1)
+ index = func.GetOriginalArgs().index(self)
+ return str(index + 1)
- def GetValidClientSideCmdArg(self, func, offset, index):
+ def GetValidClientSideArg(self, func):
"""Gets a valid value for this argument."""
- return str(offset + 1)
+ valid_arg = func.GetValidArg(self)
+ if valid_arg != None:
+ return valid_arg
- def GetValidGLArg(self, func, offset, index):
- """Gets a valid GL value for this argument."""
- valid_arg = func.GetValidArg(offset)
+ index = func.GetOriginalArgs().index(self)
+ return str(index + 1)
+
+ def GetValidClientSideCmdArg(self, func):
+ """Gets a valid value for this argument."""
+ valid_arg = func.GetValidArg(self)
if valid_arg != None:
return valid_arg
- return str(offset + 1)
+ try:
+ index = func.GetOriginalArgs().index(self)
+ return str(index + 1)
+ except ValueError:
+ pass
+ index = func.GetCmdArgs().index(self)
+ return str(index + 1)
+
+ def GetValidGLArg(self, func):
+ """Gets a valid GL value for this argument."""
+ return self.GetValidArg(func)
+
+ def GetValidNonCachedClientSideArg(self, func):
+ """Returns a valid value for this argument in a GL call.
+ Using the value will produce a command buffer service invocation.
+ Returns None if there is no such value."""
+ return '123'
+
+ def GetValidNonCachedClientSideCmdArg(self, func):
+ """Returns a valid value for this argument in a command buffer command.
+ Calling the GL function with the value returned by
+ GetValidNonCachedClientSideArg will result in a command buffer command
+ that contains the value returned by this function. """
+ return '123'
def GetNumInvalidValues(self, func):
"""returns the number of invalid values to be tested."""
return 0
- def GetInvalidArg(self, offset, index):
+ def GetInvalidArg(self, index):
"""returns an invalid value and expected parse result by index."""
return ("---ERROR0---", "---ERROR2---", None)
@@ -5840,19 +6095,19 @@ class BoolArgument(Argument):
def __init__(self, name, type):
Argument.__init__(self, name, 'GLboolean')
- def GetValidArg(self, func, offset, index):
+ def GetValidArg(self, func):
"""Gets a valid value for this argument."""
return 'true'
- def GetValidClientSideArg(self, func, offset, index):
+ def GetValidClientSideArg(self, func):
"""Gets a valid value for this argument."""
return 'true'
- def GetValidClientSideCmdArg(self, func, offset, index):
+ def GetValidClientSideCmdArg(self, func):
"""Gets a valid value for this argument."""
return 'true'
- def GetValidGLArg(self, func, offset, index):
+ def GetValidGLArg(self, func):
"""Gets a valid GL value for this argument."""
return 'true'
@@ -5869,16 +6124,11 @@ class UniformLocationArgument(Argument):
"""
file.Write(code % (self.type, self.name, self.type, self.name))
- def GetValidArg(self, func, offset, index):
- """Gets a valid value for this argument."""
- return "%d" % (offset + 1)
-
-
class DataSizeArgument(Argument):
"""class for data_size which Bucket commands do not need."""
def __init__(self, name):
- Argument.__init__(self, name, "uint32")
+ Argument.__init__(self, name, "uint32_t")
def GetBucketVersion(self):
return None
@@ -5892,11 +6142,11 @@ class SizeArgument(Argument):
def GetNumInvalidValues(self, func):
"""overridden from Argument."""
- if func.is_immediate:
+ if func.IsImmediate():
return 0
return 1
- def GetInvalidArg(self, offset, index):
+ def GetInvalidArg(self, index):
"""overridden from Argument."""
return ("-1", "kNoError", "GL_INVALID_VALUE")
@@ -5925,7 +6175,7 @@ class SizeNotNegativeArgument(SizeArgument):
def __init__(self, name, type, gl_type):
SizeArgument.__init__(self, name, gl_type)
- def GetInvalidArg(self, offset, index):
+ def GetInvalidArg(self, index):
"""overridden from SizeArgument."""
return ("-1", "kOutOfBounds", "GL_NO_ERROR")
@@ -5944,11 +6194,19 @@ class EnumBaseArgument(Argument):
self.gl_error = gl_error
name = type[len(gl_type):]
self.type_name = name
- self.enum_info = _ENUM_LISTS[name]
+ self.named_type = NamedType(_NAMED_TYPE_INFO[name])
+
+ def IsConstant(self):
+ return self.named_type.IsConstant()
+
+ def GetConstantValue(self):
+ return self.named_type.GetConstantValue()
def WriteValidationCode(self, file, func):
+ if self.named_type.IsConstant():
+ return
file.Write(" if (!validators_->%s.IsValid(%s)) {\n" %
- (ToUnderscore(self.type_name), self.name))
+ (ToUnderscore(self.type_name), self.name))
if self.gl_error == "GL_INVALID_ENUM":
file.Write(
" LOCAL_SET_GL_ERROR_INVALID_ENUM(\"gl%s\", %s, \"%s\");\n" %
@@ -5960,41 +6218,67 @@ class EnumBaseArgument(Argument):
file.Write(" return error::kNoError;\n")
file.Write(" }\n")
- def GetValidArg(self, func, offset, index):
- valid_arg = func.GetValidArg(offset)
+ def WriteClientSideValidationCode(self, file, func):
+ if not self.named_type.IsConstant():
+ return
+ file.Write(" if (%s != %s) {" % (self.name,
+ self.GetConstantValue()))
+ file.Write(
+ " SetGLError(%s, \"gl%s\", \"%s %s\");\n" %
+ (self.gl_error, func.original_name, self.name, self.gl_error))
+ if func.return_type == "void":
+ file.Write(" return;\n")
+ else:
+ file.Write(" return %s;\n" % func.GetErrorReturnString())
+ file.Write(" }\n")
+
+ def GetValidArg(self, func):
+ valid_arg = func.GetValidArg(self)
if valid_arg != None:
return valid_arg
- if 'valid' in self.enum_info:
- valid = self.enum_info['valid']
+ valid = self.named_type.GetValidValues()
+ if valid:
num_valid = len(valid)
- if index >= num_valid:
- index = num_valid - 1
- return valid[index]
- return str(offset + 1)
+ return valid[0]
+
+ index = func.GetOriginalArgs().index(self)
+ return str(index + 1)
- def GetValidClientSideArg(self, func, offset, index):
+ def GetValidClientSideArg(self, func):
"""Gets a valid value for this argument."""
- return self.GetValidArg(func, offset, index)
+ return self.GetValidArg(func)
- def GetValidClientSideCmdArg(self, func, offset, index):
+ def GetValidClientSideCmdArg(self, func):
"""Gets a valid value for this argument."""
- return self.GetValidArg(func, offset, index)
+ valid_arg = func.GetValidArg(self)
+ if valid_arg != None:
+ return valid_arg
+
+ valid = self.named_type.GetValidValues()
+ if valid:
+ num_valid = len(valid)
+ return valid[0]
- def GetValidGLArg(self, func, offset, index):
+ try:
+ index = func.GetOriginalArgs().index(self)
+ return str(index + 1)
+ except ValueError:
+ pass
+ index = func.GetCmdArgs().index(self)
+ return str(index + 1)
+
+ def GetValidGLArg(self, func):
"""Gets a valid value for this argument."""
- return self.GetValidArg(func, offset, index)
+ return self.GetValidArg(func)
def GetNumInvalidValues(self, func):
"""returns the number of invalid values to be tested."""
- if 'invalid' in self.enum_info:
- invalid = self.enum_info['invalid']
- return len(invalid)
- return 0
+ return len(self.named_type.GetInvalidValues())
- def GetInvalidArg(self, offset, index):
+ def GetInvalidArg(self, index):
"""returns an invalid value by index."""
- if 'invalid' in self.enum_info:
- invalid = self.enum_info['invalid']
+ invalid = self.named_type.GetInvalidValues()
+ if invalid:
num_invalid = len(invalid)
if index >= num_invalid:
index = num_invalid - 1
@@ -6049,6 +6333,14 @@ class ImmediatePointerArgument(Argument):
def __init__(self, name, type):
Argument.__init__(self, name, type)
+ def IsPointer(self):
+ return True
+
+ def GetPointedType(self):
+ match = re.match('(const\s+)?(?P<element_type>[\w]+)\s*\*', self.type)
+ assert match
+ return match.groupdict()['element_type']
+
def AddCmdArgs(self, args):
"""Overridden from Argument."""
pass
@@ -6122,11 +6414,16 @@ class PointerArgument(Argument):
"""Returns true if argument is a pointer."""
return True
- def GetValidArg(self, func, offset, index):
+ def GetPointedType(self):
+ match = re.match('(const\s+)?(?P<element_type>[\w]+)\s*\*', self.type)
+ assert match
+ return match.groupdict()['element_type']
+
+ def GetValidArg(self, func):
"""Overridden from Argument."""
return "shared_memory_id_, shared_memory_offset_"
- def GetValidGLArg(self, func, offset, index):
+ def GetValidGLArg(self, func):
"""Overridden from Argument."""
return "reinterpret_cast<%s>(shared_memory_address_)" % self.type
@@ -6134,7 +6431,7 @@ class PointerArgument(Argument):
"""Overridden from Argument."""
return 2
- def GetInvalidArg(self, offset, index):
+ def GetInvalidArg(self, index):
"""Overridden from Argument."""
if index == 0:
return ("kInvalidSharedMemoryId, 0", "kOutOfBounds", None)
@@ -6148,8 +6445,8 @@ class PointerArgument(Argument):
def AddCmdArgs(self, args):
"""Overridden from Argument."""
- args.append(Argument("%s_shm_id" % self.name, 'uint32'))
- args.append(Argument("%s_shm_offset" % self.name, 'uint32'))
+ args.append(Argument("%s_shm_id" % self.name, 'uint32_t'))
+ args.append(Argument("%s_shm_offset" % self.name, 'uint32_t'))
def WriteGetCode(self, file):
"""Overridden from Argument."""
@@ -6194,7 +6491,7 @@ class InputStringBucketArgument(Argument):
"""An string input argument where the string is passed in a bucket."""
def __init__(self, name, type):
- Argument.__init__(self, name + "_bucket_id", "uint32")
+ Argument.__init__(self, name + "_bucket_id", "uint32_t")
def WriteGetCode(self, file):
"""Overridden from Argument."""
@@ -6213,10 +6510,10 @@ class InputStringBucketArgument(Argument):
'name': self.name,
})
- def GetValidArg(self, func, offset, index):
+ def GetValidArg(self, func):
return "kNameBucketId"
- def GetValidGLArg(self, func, offset, index):
+ def GetValidGLArg(self, func):
return "_"
@@ -6248,10 +6545,10 @@ class ResourceIdArgument(Argument):
"""Overridden from Argument."""
file.Write(" %s %s = c.%s;\n" % (self.type, self.name, self.name))
- def GetValidArg(self, func, offset, index):
+ def GetValidArg(self, func):
return "client_%s_id_" % self.resource_type.lower()
- def GetValidGLArg(self, func, offset, index):
+ def GetValidGLArg(self, func):
return "kService%sId" % self.resource_type
@@ -6270,10 +6567,10 @@ class ResourceIdBindArgument(Argument):
"""
file.Write(code % {'type': self.type, 'name': self.name})
- def GetValidArg(self, func, offset, index):
+ def GetValidArg(self, func):
return "client_%s_id_" % self.resource_type.lower()
- def GetValidGLArg(self, func, offset, index):
+ def GetValidGLArg(self, func):
return "kService%sId" % self.resource_type
@@ -6290,17 +6587,17 @@ class ResourceIdZeroArgument(Argument):
"""Overridden from Argument."""
file.Write(" %s %s = c.%s;\n" % (self.type, self.name, self.name))
- def GetValidArg(self, func, offset, index):
+ def GetValidArg(self, func):
return "client_%s_id_" % self.resource_type.lower()
- def GetValidGLArg(self, func, offset, index):
+ def GetValidGLArg(self, func):
return "kService%sId" % self.resource_type
def GetNumInvalidValues(self, func):
"""returns the number of invalid values to be tested."""
return 1
- def GetInvalidArg(self, offset, index):
+ def GetInvalidArg(self, index):
"""returns an invalid value by index."""
return ("kInvalidClientId", "kNoError", "GL_INVALID_VALUE")
@@ -6308,38 +6605,111 @@ class ResourceIdZeroArgument(Argument):
class Function(object):
"""A class that represents a function."""
- def __init__(self, original_name, name, info, return_type, original_args,
- args_for_cmds, cmd_args, init_args, num_pointer_args):
+ type_handlers = {
+ '': TypeHandler(),
+ 'Bind': BindHandler(),
+ 'Create': CreateHandler(),
+ 'Custom': CustomHandler(),
+ 'Data': DataHandler(),
+ 'Delete': DeleteHandler(),
+ 'DELn': DELnHandler(),
+ 'GENn': GENnHandler(),
+ 'GETn': GETnHandler(),
+ 'GLchar': GLcharHandler(),
+ 'GLcharN': GLcharNHandler(),
+ 'HandWritten': HandWrittenHandler(),
+ 'Is': IsHandler(),
+ 'Manual': ManualHandler(),
+ 'PUT': PUTHandler(),
+ 'PUTn': PUTnHandler(),
+ 'PUTXn': PUTXnHandler(),
+ 'StateSet': StateSetHandler(),
+ 'StateSetRGBAlpha': StateSetRGBAlphaHandler(),
+ 'StateSetFrontBack': StateSetFrontBackHandler(),
+ 'StateSetFrontBackSeparate': StateSetFrontBackSeparateHandler(),
+ 'StateSetNamedParameter': StateSetNamedParameter(),
+ 'STRn': STRnHandler(),
+ 'Todo': TodoHandler(),
+ }
+
+ def __init__(self, name, info):
self.name = name
- self.original_name = original_name
+ self.original_name = info['original_name']
+
+ self.original_args = self.ParseArgs(info['original_args'])
+
+ if 'cmd_args' in info:
+ self.args_for_cmds = self.ParseArgs(info['cmd_args'])
+ else:
+ self.args_for_cmds = self.original_args[:]
+
+ self.return_type = info['return_type']
+ if self.return_type != 'void':
+ self.return_arg = CreateArg(info['return_type'] + " result")
+ else:
+ self.return_arg = None
+
+ self.num_pointer_args = sum(
+ [1 for arg in self.args_for_cmds if arg.IsPointer()])
self.info = info
- self.type_handler = info.type_handler
- self.return_type = return_type
- self.original_args = original_args
- self.num_pointer_args = num_pointer_args
- self.can_auto_generate = num_pointer_args == 0 and return_type == "void"
- self.cmd_args = cmd_args
- self.init_args = init_args
+ self.type_handler = self.type_handlers[info['type']]
+ self.can_auto_generate = (self.num_pointer_args == 0 and
+ info['return_type'] == "void")
self.InitFunction()
- self.args_for_cmds = args_for_cmds
- self.is_immediate = False
+
+ def ParseArgs(self, arg_string):
+ """Parses a function arg string."""
+ args = []
+ parts = arg_string.split(',')
+ for arg_string in parts:
+ arg = CreateArg(arg_string)
+ if arg:
+ args.append(arg)
+ return args
def IsType(self, type_name):
"""Returns true if function is a certain type."""
- return self.info.type == type_name
+ return self.info['type'] == type_name
def InitFunction(self):
- """Calls the init function for the type handler."""
+ """Creates command args and calls the init function for the type handler.
+
+ Creates argument lists for command buffer commands, eg. self.cmd_args and
+ self.init_args.
+ Calls the type function initialization.
+ Override to create different kind of command buffer command argument lists.
+ """
+ self.cmd_args = []
+ for arg in self.args_for_cmds:
+ arg.AddCmdArgs(self.cmd_args)
+
+ self.init_args = []
+ for arg in self.args_for_cmds:
+ arg.AddInitArgs(self.init_args)
+
+ if self.return_arg:
+ self.init_args.append(self.return_arg)
+
self.type_handler.InitFunction(self)
- def GetInfo(self, name):
+ def IsImmediate(self):
+ """Returns whether the function is immediate data function or not."""
+ return False
+
+ def GetInfo(self, name, default = None):
"""Returns a value from the function info for this function."""
- if hasattr(self.info, name):
- return getattr(self.info, name)
- return None
+ if name in self.info:
+ return self.info[name]
+ return default
+
+ def GetValidArg(self, arg):
+ """Gets a valid argument value for the parameter arg from the function info
+ if one exists."""
+ try:
+ index = self.GetOriginalArgs().index(arg)
+ except ValueError:
+ return None
- def GetValidArg(self, index):
- """Gets a valid arg from the function info if one exists."""
valid_args = self.GetInfo('valid_args')
if valid_args and str(index) in valid_args:
return valid_args[str(index)]
@@ -6347,10 +6717,13 @@ class Function(object):
def AddInfo(self, name, value):
"""Adds an info."""
- setattr(self.info, name, value)
+ self.info[name] = value
+
+ def IsExtension(self):
+ return self.GetInfo('extension') or self.GetInfo('extension_flag')
def IsCoreGLFunction(self):
- return (not self.GetInfo('extension') and
+ return (not self.IsExtension() and
not self.GetInfo('pepper_interface'))
def InPepperInterface(self, interface):
@@ -6362,6 +6735,15 @@ class Function(object):
def InAnyPepperExtension(self):
return self.IsCoreGLFunction() or self.GetInfo('pepper_interface')
+ def GetErrorReturnString(self):
+ if self.GetInfo("error_return"):
+ return self.GetInfo("error_return")
+ elif self.return_type == "GLboolean":
+ return "GL_FALSE"
+ elif "*" in self.return_type:
+ return "NULL"
+ return "0"
+
def GetGLFunctionName(self):
"""Gets the function to call to execute GL for this command."""
if self.GetInfo('decoder_func'):
@@ -6378,6 +6760,10 @@ class Function(object):
gl_func_name = self.original_name
return gl_func_name
+ def GetDataTransferMethods(self):
+ return self.GetInfo('data_transfer_methods',
+ ['immediate' if self.num_pointer_args == 1 else 'shm'])
+
def AddCmdArg(self, arg):
"""Adds a cmd argument to this function."""
self.cmd_args.append(arg)
@@ -6390,6 +6776,10 @@ class Function(object):
"""Clears the command args for this function."""
self.cmd_args = []
+ def GetCmdConstants(self):
+ """Gets the constants for this function."""
+ return [arg for arg in self.args_for_cmds if arg.IsConstant()]
+
def GetInitArgs(self):
"""Gets the init args for this function."""
return self.init_args
@@ -6423,6 +6813,25 @@ class Function(object):
["%s%s" % (prefix, arg.name) for arg in args])
return self.__MaybePrependComma(arg_string, add_comma)
+ def MakeTypedHelperArgString(self, prefix, add_comma = False):
+ """Gets a list of typed GL arguments after removing unneeded arguments."""
+ args = self.GetOriginalArgs()
+ arg_string = ", ".join(
+ ["%s %s%s" % (
+ arg.type,
+ prefix,
+ arg.name,
+ ) for arg in args if not arg.IsConstant()])
+ return self.__MaybePrependComma(arg_string, add_comma)
+
+ def MakeHelperArgString(self, prefix, add_comma = False, separator = ", "):
+ """Gets a list of GL arguments after removing unneeded arguments."""
+ args = self.GetOriginalArgs()
+ arg_string = separator.join(
+ ["%s%s" % (prefix, arg.name)
+ for arg in args if not arg.IsConstant()])
+ return self.__MaybePrependComma(arg_string, add_comma)
+
def MakeTypedPepperArgString(self, prefix):
"""Gets a list of arguments as they need to be for Pepper."""
if self.GetInfo("pepper_args"):
@@ -6430,6 +6839,11 @@ class Function(object):
else:
return self.MakeTypedOriginalArgString(prefix, False)
+ def GetPepperName(self):
+ if self.GetInfo("pepper_name"):
+ return self.GetInfo("pepper_name")
+ return self.name
+
def MakeTypedCmdArgString(self, prefix, add_comma = False):
"""Gets a typed list of arguments as they need to be for command buffers."""
args = self.GetCmdArgs()
@@ -6481,15 +6895,33 @@ class Function(object):
"""Writes the validation code for a command."""
pass
+ def WriteCmdFlag(self, file):
+ """Writes the cmd cmd_flags constant."""
+ flags = []
+ # By default trace only at the highest level 3.
+ trace_level = int(self.GetInfo('trace_level', default = 3))
+ if trace_level not in xrange(0, 4):
+ raise KeyError("Unhandled trace_level: %d" % trace_level)
+
+ flags.append('CMD_FLAG_SET_TRACE_LEVEL(%d)' % trace_level)
+
+ if len(flags) > 0:
+ cmd_flags = ' | '.join(flags)
+ else:
+ cmd_flags = 0
+
+ file.Write(" static const uint8 cmd_flags = %s;\n" % cmd_flags)
+
+
def WriteCmdArgFlag(self, file):
"""Writes the cmd kArgFlags constant."""
file.Write(" static const cmd::ArgFlags kArgFlags = cmd::kFixed;\n")
def WriteCmdComputeSize(self, file):
"""Writes the ComputeSize function for the command."""
- file.Write(" static uint32 ComputeSize() {\n")
+ file.Write(" static uint32_t ComputeSize() {\n")
file.Write(
- " return static_cast<uint32>(sizeof(ValueType)); // NOLINT\n")
+ " return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT\n")
file.Write(" }\n")
file.Write("\n")
@@ -6623,36 +7055,34 @@ class ImmediateFunction(Function):
"""A class that represnets an immediate function command."""
def __init__(self, func):
- new_args = []
- for arg in func.GetOriginalArgs():
+ Function.__init__(
+ self,
+ "%sImmediate" % func.name,
+ func.info)
+
+ def InitFunction(self):
+ # Override args in original_args and args_for_cmds with immediate versions
+ # of the args.
+
+ new_original_args = []
+ for arg in self.original_args:
new_arg = arg.GetImmediateVersion()
if new_arg:
- new_args.append(new_arg)
+ new_original_args.append(new_arg)
+ self.original_args = new_original_args
- cmd_args = []
new_args_for_cmds = []
- for arg in func.args_for_cmds:
+ for arg in self.args_for_cmds:
new_arg = arg.GetImmediateVersion()
if new_arg:
new_args_for_cmds.append(new_arg)
- new_arg.AddCmdArgs(cmd_args)
- new_init_args = []
- for arg in new_args_for_cmds:
- arg.AddInitArgs(new_init_args)
+ self.args_for_cmds = new_args_for_cmds
- Function.__init__(
- self,
- func.original_name,
- "%sImmediate" % func.name,
- func.info,
- func.return_type,
- new_args,
- new_args_for_cmds,
- cmd_args,
- new_init_args,
- 0)
- self.is_immediate = True
+ Function.InitFunction(self)
+
+ def IsImmediate(self):
+ return True
def WriteCommandDescription(self, file):
"""Overridden from Function"""
@@ -6708,39 +7138,31 @@ class BucketFunction(Function):
"""A class that represnets a bucket version of a function command."""
def __init__(self, func):
- new_args = []
- for arg in func.GetOriginalArgs():
+ Function.__init__(
+ self,
+ "%sBucket" % func.name,
+ func.info)
+
+ def InitFunction(self):
+ # Override args in original_args and args_for_cmds with bucket versions
+ # of the args.
+
+ new_original_args = []
+ for arg in self.original_args:
new_arg = arg.GetBucketVersion()
if new_arg:
- new_args.append(new_arg)
+ new_original_args.append(new_arg)
+ self.original_args = new_original_args
- cmd_args = []
new_args_for_cmds = []
- for arg in func.args_for_cmds:
+ for arg in self.args_for_cmds:
new_arg = arg.GetBucketVersion()
if new_arg:
new_args_for_cmds.append(new_arg)
- new_arg.AddCmdArgs(cmd_args)
- new_init_args = []
- for arg in new_args_for_cmds:
- arg.AddInitArgs(new_init_args)
+ self.args_for_cmds = new_args_for_cmds
- Function.__init__(
- self,
- func.original_name,
- "%sBucket" % func.name,
- func.info,
- func.return_type,
- new_args,
- new_args_for_cmds,
- cmd_args,
- new_init_args,
- 0)
-
-# def InitFunction(self):
-# """Overridden from Function"""
-# pass
+ Function.InitFunction(self)
def WriteCommandDescription(self, file):
"""Overridden from Function"""
@@ -6814,45 +7236,9 @@ class GLGenerator(object):
self.functions = []
self.verbose = verbose
self.errors = 0
- self._function_info = {}
- self._empty_type_handler = TypeHandler()
- self._empty_function_info = FunctionInfo({}, self._empty_type_handler)
self.pepper_interfaces = []
self.interface_info = {}
- self._type_handlers = {
- 'Bind': BindHandler(),
- 'Create': CreateHandler(),
- 'Custom': CustomHandler(),
- 'Data': DataHandler(),
- 'Delete': DeleteHandler(),
- 'DELn': DELnHandler(),
- 'GENn': GENnHandler(),
- 'GETn': GETnHandler(),
- 'GLchar': GLcharHandler(),
- 'GLcharN': GLcharNHandler(),
- 'HandWritten': HandWrittenHandler(),
- 'Is': IsHandler(),
- 'Manual': ManualHandler(),
- 'PUT': PUTHandler(),
- 'PUTn': PUTnHandler(),
- 'PUTXn': PUTXnHandler(),
- 'StateSet': StateSetHandler(),
- 'StateSetRGBAlpha': StateSetRGBAlphaHandler(),
- 'StateSetFrontBack': StateSetFrontBackHandler(),
- 'StateSetFrontBackSeparate': StateSetFrontBackSeparateHandler(),
- 'StateSetNamedParameter': StateSetNamedParameter(),
- 'STRn': STRnHandler(),
- 'Todo': TodoHandler(),
- }
-
- for func_name in _FUNCTION_INFO:
- info = _FUNCTION_INFO[func_name]
- type = ''
- if 'type' in info:
- type = info['type']
- self._function_info[func_name] = FunctionInfo(info,
- self.GetTypeHandler(type))
for interface in _PEPPER_INTERFACES:
interface = PepperInterface(interface)
self.pepper_interfaces.append(interface)
@@ -6862,20 +7248,17 @@ class GLGenerator(object):
"""Adds a function."""
self.functions.append(func)
- def GetTypeHandler(self, name):
- """Gets a type info for the given type."""
- if len(name):
- if name in self._type_handlers:
- return self._type_handlers[name]
- else:
- raise KeyError("no such type handler: %s" % name)
- return self._empty_type_handler
-
def GetFunctionInfo(self, name):
"""Gets a type info for the given function name."""
- if name in self._function_info:
- return self._function_info[name]
- return self._empty_function_info
+ if name in _FUNCTION_INFO:
+ func_info = _FUNCTION_INFO[name].copy()
+ else:
+ func_info = {}
+
+ if not 'type' in func_info:
+ func_info['type'] = ''
+
+ return func_info
def Log(self, msg):
"""Prints something if verbose is true."""
@@ -6903,25 +7286,9 @@ class GLGenerator(object):
file.Write("} // namespace gpu\n")
file.Write("\n")
- def ParseArgs(self, arg_string):
- """Parses a function arg string."""
- args = []
- num_pointer_args = 0
- parts = arg_string.split(',')
- is_gl_enum = False
- for arg_string in parts:
- if arg_string.startswith('GLenum '):
- is_gl_enum = True
- arg = CreateArg(arg_string)
- if arg:
- args.append(arg)
- if arg.IsPointer():
- num_pointer_args += 1
- return (args, num_pointer_args, is_gl_enum)
-
def ParseGLH(self, filename):
"""Parses the cmd_buffer_functions.txt file and extracts the functions"""
- f = open("gpu/command_buffer/cmd_buffer_functions.txt", "r")
+ f = open(filename, "r")
functions = f.read()
f.close()
for line in functions.splitlines():
@@ -6929,34 +7296,38 @@ class GLGenerator(object):
if match:
func_name = match.group(2)[2:]
func_info = self.GetFunctionInfo(func_name)
- if func_info.type != 'Noop':
- return_type = match.group(1).strip()
- arg_string = match.group(3)
- (args, num_pointer_args, is_gl_enum) = self.ParseArgs(arg_string)
- # comment in to find out which functions use bare enums.
- # if is_gl_enum:
- # self.Log("%s uses bare GLenum" % func_name)
- args_for_cmds = args
- if hasattr(func_info, 'cmd_args'):
- (args_for_cmds, num_pointer_args, is_gl_enum) = (
- self.ParseArgs(getattr(func_info, 'cmd_args')))
- cmd_args = []
- for arg in args_for_cmds:
- arg.AddCmdArgs(cmd_args)
- init_args = []
- for arg in args_for_cmds:
- arg.AddInitArgs(init_args)
- return_arg = CreateArg(return_type + " result")
- if return_arg:
- init_args.append(return_arg)
- f = Function(func_name, func_name, func_info, return_type, args,
- args_for_cmds, cmd_args, init_args, num_pointer_args)
- self.original_functions.append(f)
- gen_cmd = f.GetInfo('gen_cmd')
- if gen_cmd == True or gen_cmd == None:
+ if func_info['type'] == 'Noop':
+ continue
+
+ parsed_func_info = {
+ 'original_name': func_name,
+ 'original_args': match.group(3),
+ 'return_type': match.group(1).strip(),
+ }
+
+ for k in parsed_func_info.keys():
+ if not k in func_info:
+ func_info[k] = parsed_func_info[k]
+
+ f = Function(func_name, func_info)
+ self.original_functions.append(f)
+
+ #for arg in f.GetOriginalArgs():
+ # if not isinstance(arg, EnumArgument) and arg.type == 'GLenum':
+ # self.Log("%s uses bare GLenum %s." % (func_name, arg.name))
+
+ gen_cmd = f.GetInfo('gen_cmd')
+ if gen_cmd == True or gen_cmd == None:
+ if f.type_handler.NeedsDataTransferFunction(f):
+ methods = f.GetDataTransferMethods()
+ if 'immediate' in methods:
+ self.AddFunction(ImmediateFunction(f))
+ if 'bucket' in methods:
+ self.AddFunction(BucketFunction(f))
+ if 'shm' in methods:
+ self.AddFunction(f)
+ else:
self.AddFunction(f)
- f.type_handler.AddImmediateFunction(self, f)
- f.type_handler.AddBucketFunction(self, f)
self.Log("Auto Generated Functions : %d" %
len([f for f in self.functions if f.can_auto_generate or
@@ -6968,7 +7339,7 @@ class GLGenerator(object):
self.Log("Non Auto Generated Functions: %d" % len(funcs))
for f in funcs:
- self.Log(" %-10s %-20s gl%s" % (f.info.type, f.return_type, f.name))
+ self.Log(" %-10s %-20s gl%s" % (f.info['type'], f.return_type, f.name))
def WriteCommandIds(self, filename):
"""Writes the command buffer format"""
@@ -7051,14 +7422,45 @@ class GLGenerator(object):
file.Write(" EnableFlags();\n")
for capability in _CAPABILITY_FLAGS:
file.Write(" bool %s;\n" % capability['name'])
+ file.Write(" bool cached_%s;\n" % capability['name'])
file.Write("};\n\n")
for state_name in sorted(_STATES.keys()):
state = _STATES[state_name]
for item in state['states']:
file.Write("%s %s;\n" % (item['type'], item['name']))
+ if item.get('cached', False):
+ file.Write("%s cached_%s;\n" % (item['type'], item['name']))
file.Write("\n")
+ file.Write("""
+ inline void SetDeviceCapabilityState(GLenum cap, bool enable) {
+ switch (cap) {
+ """)
+ for capability in _CAPABILITY_FLAGS:
+ file.Write("""\
+ case GL_%s:
+ """ % capability['name'].upper())
+ file.Write("""\
+ if (enable_flags.cached_%(name)s == enable &&
+ !ignore_cached_state)
+ return;
+ enable_flags.cached_%(name)s = enable;
+ break;
+ """ % capability)
+
+ file.Write("""\
+ default:
+ NOTREACHED();
+ return;
+ }
+ if (enable)
+ glEnable(cap);
+ else
+ glDisable(cap);
+ }
+ """)
+
file.Close()
def WriteClientContextStateHeader(self, filename):
@@ -7127,6 +7529,9 @@ bool %s::GetStateAs%s(
code.append("%s(%s)" %
(capability['name'],
('false', 'true')['default' in capability]))
+ code.append("cached_%s(%s)" %
+ (capability['name'],
+ ('false', 'true')['default' in capability]))
file.Write("ContextState::EnableFlags::EnableFlags()\n : %s {\n}\n" %
",\n ".join(code))
file.Write("\n")
@@ -7136,43 +7541,90 @@ bool %s::GetStateAs%s(
state = _STATES[state_name]
for item in state['states']:
file.Write(" %s = %s;\n" % (item['name'], item['default']))
+ if item.get('cached', False):
+ file.Write(" cached_%s = %s;\n" % (item['name'], item['default']))
file.Write("}\n")
file.Write("""
-void ContextState::InitCapabilities() const {
+void ContextState::InitCapabilities(const ContextState* prev_state) const {
""")
- for capability in _CAPABILITY_FLAGS:
- file.Write(" EnableDisable(GL_%s, enable_flags.%s);\n" %
- (capability['name'].upper(), capability['name']))
+ def WriteCapabilities(test_prev):
+ for capability in _CAPABILITY_FLAGS:
+ capability_name = capability['name']
+ if test_prev:
+ file.Write(""" if (prev_state->enable_flags.cached_%s !=
+ enable_flags.cached_%s)\n""" %
+ (capability_name, capability_name))
+ file.Write(" EnableDisable(GL_%s, enable_flags.cached_%s);\n" %
+ (capability_name.upper(), capability_name))
+
+ file.Write(" if (prev_state) {")
+ WriteCapabilities(True)
+ file.Write(" } else {")
+ WriteCapabilities(False)
+ file.Write(" }")
+
file.Write("""}
-void ContextState::InitState() const {
+void ContextState::InitState(const ContextState *prev_state) const {
""")
- # We need to sort the keys so the expectations match
- for state_name in sorted(_STATES.keys()):
- state = _STATES[state_name]
- if state['type'] == 'FrontBack':
- num_states = len(state['states'])
- for ndx, group in enumerate(Grouper(num_states / 2, state['states'])):
+ def WriteStates(test_prev):
+ # We need to sort the keys so the expectations match
+ for state_name in sorted(_STATES.keys()):
+ state = _STATES[state_name]
+ if state['type'] == 'FrontBack':
+ num_states = len(state['states'])
+ for ndx, group in enumerate(Grouper(num_states / 2, state['states'])):
+ if test_prev:
+ file.Write(" if (")
+ args = []
+ for place, item in enumerate(group):
+ item_name = CachedStateName(item)
+ args.append('%s' % item_name)
+ if test_prev:
+ if place > 0:
+ file.Write(' ||\n')
+ file.Write("(%s != prev_state->%s)" % (item_name, item_name))
+ if test_prev:
+ file.Write(")\n")
+ file.Write(
+ " gl%s(%s, %s);\n" %
+ (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args)))
+ elif state['type'] == 'NamedParameter':
+ for item in state['states']:
+ item_name = CachedStateName(item)
+
+ if 'extension_flag' in item:
+ file.Write(" if (feature_info_->feature_flags().%s)\n " %
+ item['extension_flag'])
+ if test_prev:
+ file.Write(" if (prev_state->%s != %s)\n" %
+ (item_name, item_name))
+ file.Write(" gl%s(%s, %s);\n" %
+ (state['func'], item['enum'], item_name))
+ else:
+ if test_prev:
+ file.Write(" if (")
args = []
- for item in group:
- args.append('%s' % item['name'])
- file.Write(
- " gl%s(%s, %s);\n" %
- (state['func'], ('GL_FRONT', 'GL_BACK')[ndx], ", ".join(args)))
- elif state['type'] == 'NamedParameter':
- for item in state['states']:
- if 'extension_flag' in item:
- file.Write(" if (feature_info_->feature_flags().%s)\n " %
- item['extension_flag'])
- file.Write(" gl%s(%s, %s);\n" %
- (state['func'], item['enum'], item['name']))
- else:
- args = []
- for item in state['states']:
- args.append('%s' % item['name'])
- file.Write(" gl%s(%s);\n" % (state['func'], ", ".join(args)))
+ for place, item in enumerate(state['states']):
+ item_name = CachedStateName(item)
+ args.append('%s' % item_name)
+ if test_prev:
+ if place > 0:
+ file.Write(' ||\n')
+ file.Write("(%s != prev_state->%s)" %
+ (item_name, item_name))
+ if test_prev:
+ file.Write(" )\n")
+ file.Write(" gl%s(%s);\n" % (state['func'], ", ".join(args)))
+
+ file.Write(" if (prev_state) {")
+ WriteStates(True)
+ file.Write(" } else {")
+ WriteStates(False)
+ file.Write(" }")
+
file.Write("}\n")
file.Write("""bool ContextState::GetEnabled(GLenum cap) const {
@@ -7259,16 +7711,25 @@ bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) {
for capability in _CAPABILITY_FLAGS:
file.Write(" case GL_%s:\n" % capability['name'].upper())
if 'state_flag' in capability:
- file.Write(""" if (state_.enable_flags.%(name)s != enabled) {
- state_.enable_flags.%(name)s = enabled;
- %(state_flag)s = true;
- }
- return false;
-""" % capability)
+
+ file.Write("""\
+ state_.enable_flags.%(name)s = enabled;
+ if (state_.enable_flags.cached_%(name)s != enabled
+ || state_.ignore_cached_state) {
+ %(state_flag)s = true;
+ }
+ return false;
+ """ % capability)
else:
- file.Write(""" state_.enable_flags.%(name)s = enabled;
- return true;
-""" % capability)
+ file.Write("""\
+ state_.enable_flags.%(name)s = enabled;
+ if (state_.enable_flags.cached_%(name)s != enabled
+ || state_.ignore_cached_state) {
+ state_.enable_flags.cached_%(name)s = enabled;
+ return true;
+ }
+ return false;
+ """ % capability)
file.Write(""" default:
NOTREACHED();
return false;
@@ -7475,53 +7936,58 @@ extern const NameToFunc g_gles2_function_table[] = {
def WriteServiceUtilsHeader(self, filename):
"""Writes the gles2 auto generated utility header."""
file = CHeaderWriter(filename)
- for enum in sorted(_ENUM_LISTS.keys()):
+ for name in sorted(_NAMED_TYPE_INFO.keys()):
+ named_type = NamedType(_NAMED_TYPE_INFO[name])
+ if named_type.IsConstant():
+ continue
file.Write("ValueValidator<%s> %s;\n" %
- (_ENUM_LISTS[enum]['type'], ToUnderscore(enum)))
+ (named_type.GetType(), ToUnderscore(name)))
file.Write("\n")
file.Close()
def WriteServiceUtilsImplementation(self, filename):
"""Writes the gles2 auto generated utility implementation."""
file = CHeaderWriter(filename)
- enums = sorted(_ENUM_LISTS.keys())
- for enum in enums:
- if len(_ENUM_LISTS[enum]['valid']) > 0:
+ names = sorted(_NAMED_TYPE_INFO.keys())
+ for name in names:
+ named_type = NamedType(_NAMED_TYPE_INFO[name])
+ if named_type.IsConstant():
+ continue
+ if named_type.GetValidValues():
file.Write("static const %s valid_%s_table[] = {\n" %
- (_ENUM_LISTS[enum]['type'], ToUnderscore(enum)))
- for value in _ENUM_LISTS[enum]['valid']:
+ (named_type.GetType(), ToUnderscore(name)))
+ for value in named_type.GetValidValues():
file.Write(" %s,\n" % value)
file.Write("};\n")
file.Write("\n")
- file.Write("Validators::Validators()\n")
- pre = ': '
- post = ','
- for count, enum in enumerate(enums):
- if count + 1 == len(enums):
- post = ' {'
- if len(_ENUM_LISTS[enum]['valid']) > 0:
- code = """ %(pre)s%(name)s(
- valid_%(name)s_table, arraysize(valid_%(name)s_table))%(post)s
-"""
+ file.Write("Validators::Validators()")
+ pre = ' : '
+ for count, name in enumerate(names):
+ named_type = NamedType(_NAMED_TYPE_INFO[name])
+ if named_type.IsConstant():
+ continue
+ if named_type.GetValidValues():
+ code = """%(pre)s%(name)s(
+ valid_%(name)s_table, arraysize(valid_%(name)s_table))"""
else:
- code = """ %(pre)s%(name)s()%(post)s
-"""
+ code = "%(pre)s%(name)s()"
file.Write(code % {
- 'name': ToUnderscore(enum),
- 'pre': pre,
- 'post': post,
- })
- pre = ' '
+ 'name': ToUnderscore(name),
+ 'pre': pre,
+ })
+ pre = ',\n '
+ file.Write(" {\n");
file.Write("}\n\n");
file.Close()
def WriteCommonUtilsHeader(self, filename):
"""Writes the gles2 common utility header."""
file = CHeaderWriter(filename)
- enums = sorted(_ENUM_LISTS.keys())
- for enum in enums:
- if _ENUM_LISTS[enum]['type'] == 'GLenum':
- file.Write("static std::string GetString%s(uint32 value);\n" % enum)
+ type_infos = sorted(_NAMED_TYPE_INFO.keys())
+ for type_info in type_infos:
+ if _NAMED_TYPE_INFO[type_info]['type'] == 'GLenum':
+ file.Write("static std::string GetString%s(uint32_t value);\n" %
+ type_info)
file.Write("\n")
file.Close()
@@ -7556,14 +8022,14 @@ const size_t GLES2Util::enum_to_string_table_len_ =
""")
- enums = sorted(_ENUM_LISTS.keys())
+ enums = sorted(_NAMED_TYPE_INFO.keys())
for enum in enums:
- if _ENUM_LISTS[enum]['type'] == 'GLenum':
- file.Write("std::string GLES2Util::GetString%s(uint32 value) {\n" %
+ if _NAMED_TYPE_INFO[enum]['type'] == 'GLenum':
+ file.Write("std::string GLES2Util::GetString%s(uint32_t value) {\n" %
enum)
- if len(_ENUM_LISTS[enum]['valid']) > 0:
+ if len(_NAMED_TYPE_INFO[enum]['valid']) > 0:
file.Write(" static const EnumToString string_table[] = {\n")
- for value in _ENUM_LISTS[enum]['valid']:
+ for value in _NAMED_TYPE_INFO[enum]['valid']:
file.Write(' { %s, "%s" },\n' % (value, value))
file.Write(""" };
return GLES2Util::GetQualifiedEnumString(
@@ -7583,8 +8049,7 @@ const size_t GLES2Util::enum_to_string_table_len_ =
"""Writes the Pepper OpenGLES interface definition."""
file = CHeaderWriter(
filename,
- "// OpenGL ES interface.\n",
- 2)
+ "// OpenGL ES interface.\n")
file.Write("#include \"ppapi/c/pp_resource.h\"\n")
if dev:
@@ -7593,6 +8058,13 @@ const size_t GLES2Util::enum_to_string_table_len_ =
file.Write("\n#ifndef __gl2_h_\n")
for (k, v) in _GL_TYPES.iteritems():
file.Write("typedef %s %s;\n" % (v, k))
+ file.Write("#ifdef _WIN64\n")
+ for (k, v) in _GL_TYPES_64.iteritems():
+ file.Write("typedef %s %s;\n" % (v, k))
+ file.Write("#else\n")
+ for (k, v) in _GL_TYPES_32.iteritems():
+ file.Write("typedef %s %s;\n" % (v, k))
+ file.Write("#endif // _WIN64\n")
file.Write("#endif // __gl2_h_\n\n")
for interface in self.pepper_interfaces:
@@ -7614,7 +8086,8 @@ const size_t GLES2Util::enum_to_string_table_len_ =
arg = context_arg + ", " + original_arg
else:
arg = context_arg
- file.Write(" %s (*%s)(%s);\n" % (func.return_type, func.name, arg))
+ file.Write(" %s (*%s)(%s);\n" %
+ (func.return_type, func.GetPepperName(), arg))
file.Write("};\n\n")
@@ -7657,7 +8130,8 @@ const size_t GLES2Util::enum_to_string_table_len_ =
arg = context_arg + ", " + original_arg
else:
arg = context_arg
- file.Write("%s %s(%s) {\n" % (func.return_type, func.name, arg))
+ file.Write("%s %s(%s) {\n" %
+ (func.return_type, func.GetPepperName(), arg))
file.Write(" Enter3D enter(context_id, true);\n")
file.Write(" if (enter.succeeded()) {\n")
@@ -7670,14 +8144,7 @@ const size_t GLES2Util::enum_to_string_table_len_ =
file.Write("\n")
else:
file.Write(" else {\n")
- error_return = "0"
- if func.GetInfo("error_return"):
- error_return = func.GetInfo("error_return")
- elif func.return_type == "GLboolean":
- error_return = "GL_FALSE"
- elif "*" in func.return_type:
- error_return = "NULL"
- file.Write(" return %s;\n" % error_return)
+ file.Write(" return %s;\n" % func.GetErrorReturnString())
file.Write(" }\n")
file.Write("}\n\n")
@@ -7690,7 +8157,7 @@ const size_t GLES2Util::enum_to_string_table_len_ =
"ppb_opengles2 = {\n" % interface.GetStructName())
file.Write(" &")
file.Write(",\n &".join(
- f.name for f in self.original_functions
+ f.GetPepperName() for f in self.original_functions
if f.InPepperInterface(interface)))
file.Write("\n")
@@ -7722,8 +8189,8 @@ const size_t GLES2Util::enum_to_string_table_len_ =
interface = self.interface_info[func.GetInfo('pepper_interface') or '']
file.Write("%s GL_APIENTRY gl%s(%s) {\n" %
- (func.return_type, func.name,
- func.MakeTypedOriginalArgString("")))
+ (func.return_type, func.GetPepperName(),
+ func.MakeTypedPepperArgString("")))
return_str = "" if func.return_type == "void" else "return "
interface_str = "glGet%sInterfacePPAPI()" % interface.GetName()
original_arg = func.MakeOriginalArgString("")
@@ -7737,29 +8204,39 @@ const size_t GLES2Util::enum_to_string_table_len_ =
(interface.GetStructName(), interface_str))
file.Write(" if (ext)\n")
file.Write(" %sext->%s(%s);\n" %
- (return_str, func.name, arg))
+ (return_str, func.GetPepperName(), arg))
if return_str:
file.Write(" %s0;\n" % return_str)
else:
file.Write(" %s%s->%s(%s);\n" %
- (return_str, interface_str, func.name, arg))
+ (return_str, interface_str, func.GetPepperName(), arg))
file.Write("}\n\n")
file.Close()
+ def WriteMojoGLCallVisitor(self, filename):
+ """Provides the GL implementation for mojo"""
+ file = CWriter(filename)
+ file.Write(_LICENSE)
+ file.Write(_DO_NOT_EDIT_WARNING)
+
+ for func in self.original_functions:
+ if not func.IsCoreGLFunction():
+ continue
+ file.Write("VISIT_GL_CALL(%s, %s, (%s), (%s))\n" %
+ (func.name, func.return_type,
+ func.MakeTypedOriginalArgString(""),
+ func.MakeOriginalArgString("")))
+
+ file.Close()
+
+def Format(generated_files):
+ for filename in generated_files:
+ call(["clang-format", "-i", "-style=chromium", filename])
+
def main(argv):
"""This is the main function."""
parser = OptionParser()
parser.add_option(
- "-g", "--generate-implementation-templates", action="store_true",
- help="generates files that are generally hand edited..")
- parser.add_option(
- "--alternate-mode", type="choice",
- choices=("ppapi", "chrome_ppapi", "chrome_ppapi_proxy", "nacl_ppapi"),
- help="generate files for other projects. \"ppapi\" will generate ppapi "
- "bindings. \"chrome_ppapi\" generate chrome implementation for ppapi. "
- "\"chrome_ppapi_proxy\" will generate the glue for the chrome IPC ppapi"
- "proxy. \"nacl_ppapi\" will generate NaCl implementation for ppapi")
- parser.add_option(
"--output-dir",
help="base directory for resulting files, under chrome/src. default is "
"empty. Use this if you want the result stored under gen.")
@@ -7770,72 +8247,107 @@ def main(argv):
(options, args) = parser.parse_args(args=argv)
# Add in states and capabilites to GLState
+ gl_state_valid = _NAMED_TYPE_INFO['GLState']['valid']
for state_name in sorted(_STATES.keys()):
state = _STATES[state_name]
if 'enum' in state:
- _ENUM_LISTS['GLState']['valid'].append(state['enum'])
+ if not state['enum'] in gl_state_valid:
+ gl_state_valid.append(state['enum'])
else:
for item in state['states']:
if 'extension_flag' in item:
continue
- _ENUM_LISTS['GLState']['valid'].append(item['enum'])
+ if not item['enum'] in gl_state_valid:
+ gl_state_valid.append(item['enum'])
for capability in _CAPABILITY_FLAGS:
- _ENUM_LISTS['GLState']['valid'].append("GL_%s" % capability['name'].upper())
+ valid_value = "GL_%s" % capability['name'].upper()
+ if not valid_value in gl_state_valid:
+ gl_state_valid.append(valid_value)
# This script lives under gpu/command_buffer, cd to base directory.
os.chdir(os.path.dirname(__file__) + "/../..")
gen = GLGenerator(options.verbose)
- gen.ParseGLH("common/GLES2/gl2.h")
+ gen.ParseGLH("gpu/command_buffer/cmd_buffer_functions.txt")
# Support generating files under gen/
if options.output_dir != None:
os.chdir(options.output_dir)
- if options.alternate_mode == "ppapi":
- # To trigger this action, do "make ppapi_gles_bindings"
- os.chdir("ppapi");
- gen.WritePepperGLES2Interface("c/ppb_opengles2.h", False)
- gen.WritePepperGLES2Interface("c/dev/ppb_opengles2ext_dev.h", True)
- gen.WriteGLES2ToPPAPIBridge("lib/gl/gles2/gles2.c")
-
- elif options.alternate_mode == "chrome_ppapi":
- # To trigger this action, do "make ppapi_gles_implementation"
- gen.WritePepperGLES2Implementation(
- "ppapi/shared_impl/ppb_opengles2_shared.cc")
-
- else:
- os.chdir("gpu/command_buffer")
- gen.WriteCommandIds("common/gles2_cmd_ids_autogen.h")
- gen.WriteFormat("common/gles2_cmd_format_autogen.h")
- gen.WriteFormatTest("common/gles2_cmd_format_test_autogen.h")
- gen.WriteGLES2InterfaceHeader("client/gles2_interface_autogen.h")
- gen.WriteGLES2InterfaceStub("client/gles2_interface_stub_autogen.h")
- gen.WriteGLES2InterfaceStubImpl(
- "client/gles2_interface_stub_impl_autogen.h")
- gen.WriteGLES2ImplementationHeader("client/gles2_implementation_autogen.h")
- gen.WriteGLES2Implementation("client/gles2_implementation_impl_autogen.h")
- gen.WriteGLES2ImplementationUnitTests(
- "client/gles2_implementation_unittest_autogen.h")
- gen.WriteGLES2TraceImplementationHeader(
- "client/gles2_trace_implementation_autogen.h")
- gen.WriteGLES2TraceImplementation(
- "client/gles2_trace_implementation_impl_autogen.h")
- gen.WriteGLES2CLibImplementation("client/gles2_c_lib_autogen.h")
- gen.WriteCmdHelperHeader("client/gles2_cmd_helper_autogen.h")
- gen.WriteServiceImplementation("service/gles2_cmd_decoder_autogen.h")
- gen.WriteServiceContextStateHeader("service/context_state_autogen.h")
- gen.WriteServiceContextStateImpl("service/context_state_impl_autogen.h")
- gen.WriteClientContextStateHeader("client/client_context_state_autogen.h")
- gen.WriteClientContextStateImpl(
- "client/client_context_state_impl_autogen.h")
- gen.WriteServiceUnitTests("service/gles2_cmd_decoder_unittest_%d_autogen.h")
- gen.WriteServiceUtilsHeader("service/gles2_cmd_validation_autogen.h")
- gen.WriteServiceUtilsImplementation(
- "service/gles2_cmd_validation_implementation_autogen.h")
- gen.WriteCommonUtilsHeader("common/gles2_cmd_utils_autogen.h")
- gen.WriteCommonUtilsImpl("common/gles2_cmd_utils_implementation_autogen.h")
- gen.WriteGLES2Header("../GLES2/gl2chromium_autogen.h")
+ gen.WritePepperGLES2Interface("ppapi/c/ppb_opengles2.h", False)
+ gen.WritePepperGLES2Interface("ppapi/c/dev/ppb_opengles2ext_dev.h", True)
+ gen.WriteGLES2ToPPAPIBridge("ppapi/lib/gl/gles2/gles2.c")
+ gen.WritePepperGLES2Implementation(
+ "ppapi/shared_impl/ppb_opengles2_shared.cc")
+ os.chdir("gpu/command_buffer")
+ gen.WriteCommandIds("common/gles2_cmd_ids_autogen.h")
+ gen.WriteFormat("common/gles2_cmd_format_autogen.h")
+ gen.WriteFormatTest("common/gles2_cmd_format_test_autogen.h")
+ gen.WriteGLES2InterfaceHeader("client/gles2_interface_autogen.h")
+ gen.WriteGLES2InterfaceStub("client/gles2_interface_stub_autogen.h")
+ gen.WriteGLES2InterfaceStubImpl(
+ "client/gles2_interface_stub_impl_autogen.h")
+ gen.WriteGLES2ImplementationHeader("client/gles2_implementation_autogen.h")
+ gen.WriteGLES2Implementation("client/gles2_implementation_impl_autogen.h")
+ gen.WriteGLES2ImplementationUnitTests(
+ "client/gles2_implementation_unittest_autogen.h")
+ gen.WriteGLES2TraceImplementationHeader(
+ "client/gles2_trace_implementation_autogen.h")
+ gen.WriteGLES2TraceImplementation(
+ "client/gles2_trace_implementation_impl_autogen.h")
+ gen.WriteGLES2CLibImplementation("client/gles2_c_lib_autogen.h")
+ gen.WriteCmdHelperHeader("client/gles2_cmd_helper_autogen.h")
+ gen.WriteServiceImplementation("service/gles2_cmd_decoder_autogen.h")
+ gen.WriteServiceContextStateHeader("service/context_state_autogen.h")
+ gen.WriteServiceContextStateImpl("service/context_state_impl_autogen.h")
+ gen.WriteClientContextStateHeader("client/client_context_state_autogen.h")
+ gen.WriteClientContextStateImpl(
+ "client/client_context_state_impl_autogen.h")
+ gen.WriteServiceUnitTests("service/gles2_cmd_decoder_unittest_%d_autogen.h")
+ gen.WriteServiceUtilsHeader("service/gles2_cmd_validation_autogen.h")
+ gen.WriteServiceUtilsImplementation(
+ "service/gles2_cmd_validation_implementation_autogen.h")
+ gen.WriteCommonUtilsHeader("common/gles2_cmd_utils_autogen.h")
+ gen.WriteCommonUtilsImpl("common/gles2_cmd_utils_implementation_autogen.h")
+ gen.WriteGLES2Header("../GLES2/gl2chromium_autogen.h")
+ gen.WriteMojoGLCallVisitor(
+ "../../mojo/public/c/gles2/gles2_call_visitor_autogen.h")
+
+ Format([
+ "common/gles2_cmd_format_autogen.h",
+ "common/gles2_cmd_format_test_autogen.h",
+ "common/gles2_cmd_ids_autogen.h",
+ "common/gles2_cmd_utils_autogen.h",
+ "common/gles2_cmd_utils_implementation_autogen.h",
+ "client/client_context_state_autogen.h",
+ "client/client_context_state_impl_autogen.h",
+ "client/gles2_cmd_helper_autogen.h",
+ "client/gles2_c_lib_autogen.h",
+ "client/gles2_implementation_autogen.h",
+ "client/gles2_implementation_impl_autogen.h",
+ "client/gles2_implementation_unittest_autogen.h",
+ "client/gles2_interface_autogen.h",
+ "client/gles2_interface_stub_autogen.h",
+ "client/gles2_interface_stub_impl_autogen.h",
+ "client/gles2_trace_implementation_autogen.h",
+ "client/gles2_trace_implementation_impl_autogen.h",
+ "service/context_state_autogen.h",
+ "service/context_state_impl_autogen.h",
+ "service/gles2_cmd_decoder_autogen.h",
+ "service/gles2_cmd_decoder_unittest_0_autogen.h",
+ "service/gles2_cmd_decoder_unittest_1_autogen.h",
+ "service/gles2_cmd_decoder_unittest_2_autogen.h",
+ "service/gles2_cmd_decoder_unittest_3_autogen.h",
+ "service/gles2_cmd_validation_autogen.h",
+ "service/gles2_cmd_validation_implementation_autogen.h"])
+ os.chdir("../..")
+ Format([
+ "gpu/GLES2/gl2chromium_autogen.h",
+ "mojo/public/c/gles2/gles2_call_visitor_autogen.h",
+ "ppapi/c/dev/ppb_opengles2ext_dev.h",
+ "ppapi/c/ppb_opengles2.h",
+ "ppapi/lib/gl/gles2/gles2.c",
+ "ppapi/shared_impl/ppb_opengles2_shared.cc"])
if gen.errors > 0:
print "%d errors" % gen.errors
diff --git a/chromium/gpu/command_buffer/client/BUILD.gn b/chromium/gpu/command_buffer/client/BUILD.gn
new file mode 100644
index 00000000000..91dcddbc9e6
--- /dev/null
+++ b/chromium/gpu/command_buffer/client/BUILD.gn
@@ -0,0 +1,165 @@
+# Copyright (c) 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("client") {
+ sources = [
+ "cmd_buffer_helper.cc",
+ "cmd_buffer_helper.h",
+ "fenced_allocator.cc",
+ "fenced_allocator.h",
+ "gpu_control.h",
+ "mapped_memory.cc",
+ "mapped_memory.h",
+ "ring_buffer.cc",
+ "ring_buffer.h",
+ "transfer_buffer.cc",
+ "transfer_buffer.h",
+ ]
+
+ if (is_win) {
+ # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
+ cflags = [ "/wd4267" ] # size_t to int truncation.
+ }
+
+ all_dependent_configs = [ "//third_party/khronos:khronos_headers" ]
+
+ deps = [
+ "//gpu/command_buffer/common",
+ ]
+}
+
+source_set("gles2_cmd_helper") {
+ sources = [
+ "gles2_cmd_helper.cc",
+ "gles2_cmd_helper.h",
+ "gles2_cmd_helper_autogen.h",
+ ]
+
+ if (is_win) {
+ # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
+ cflags = [ "/wd4267" ] # size_t to int truncation.
+ }
+
+ deps = [ ":client" ]
+}
+
+gles2_c_lib_source_files = [
+ "gles2_c_lib.cc",
+ "gles2_c_lib_autogen.h",
+ "gles2_c_lib_export.h",
+ "gles2_lib.h",
+ "gles2_lib.cc",
+]
+
+gles2_implementation_source_files = [
+ "buffer_tracker.cc",
+ "buffer_tracker.h",
+ "client_context_state.h",
+ "client_context_state.cc",
+ "client_context_state_autogen.h",
+ "client_context_state_impl_autogen.h",
+ "gles2_impl_export.h",
+ "gles2_implementation_autogen.h",
+ "gles2_implementation.cc",
+ "gles2_implementation.h",
+ "gles2_implementation_impl_autogen.h",
+ "gles2_interface.h",
+ "gles2_trace_implementation_autogen.h",
+ "gles2_trace_implementation.cc",
+ "gles2_trace_implementation.h",
+ "gles2_trace_implementation_impl_autogen.h",
+ "gpu_memory_buffer_factory.h",
+ "gpu_memory_buffer_tracker.cc",
+ "gpu_memory_buffer_tracker.h",
+ "program_info_manager.cc",
+ "program_info_manager.h",
+ "query_tracker.cc",
+ "query_tracker.h",
+ "share_group.cc",
+ "share_group.h",
+ "vertex_array_object_manager.cc",
+ "vertex_array_object_manager.h",
+]
+
+# Library emulates GLES2 using command_buffers.
+component("gles2_implementation") {
+ sources = gles2_implementation_source_files
+
+ defines = [ "GLES2_IMPL_IMPLEMENTATION" ]
+ all_dependent_configs = [ "//third_party/khronos:khronos_headers" ]
+
+ if (is_win) {
+ # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
+ cflags = [ "/wd4267" ] # size_t to int truncation.
+ }
+
+ deps = [
+ ":gles2_cmd_helper",
+ "//base",
+ "//gpu/command_buffer/common",
+ "//ui/gfx/geometry",
+ "//ui/gl",
+ ]
+}
+
+# Library emulates GLES2 using command_buffers.
+component("gles2_implementation_client_side_arrays") {
+ sources = gles2_implementation_source_files
+
+ defines = [
+ "GLES2_IMPL_IMPLEMENTATION",
+ "GLES2_SUPPORT_CLIENT_SIDE_ARRAYS=1",
+ ]
+ all_dependent_configs = [ "//third_party/khronos:khronos_headers" ]
+
+ if (is_win) {
+ # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
+ cflags = [ "/wd4267" ] # size_t to int truncation.
+ }
+
+ deps = [
+ ":gles2_cmd_helper",
+ "//base",
+ "//gpu/command_buffer/common",
+ "//ui/gfx/geometry",
+ "//ui/gl",
+ ]
+}
+
+component("gl_in_process_context") {
+ sources = [
+ "gl_in_process_context.h",
+ "gl_in_process_context.cc",
+ "gl_in_process_context_export.h",
+ ]
+
+ defines = [ "GL_IN_PROCESS_CONTEXT_IMPLEMENTATION" ]
+
+ deps = [
+ ":gles2_implementation",
+ "//gpu",
+ "//base",
+ "//base/third_party/dynamic_annotations",
+ "//ui/gfx/geometry",
+ "//ui/gl",
+ ]
+}
+
+component("gles2_c_lib") {
+ sources = gles2_c_lib_source_files
+ defines = [ "GLES2_C_LIB_IMPLEMENTATION" ]
+
+ if (is_win) {
+ # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
+ cflags = [ "/wd4267" ] # size_t to int truncation.
+ }
+
+ deps = [
+ ":client",
+ "//base",
+ "//base/third_party/dynamic_annotations",
+ "//gpu/command_buffer/common",
+ ]
+}
+
diff --git a/chromium/gpu/command_buffer/client/buffer_tracker.cc b/chromium/gpu/command_buffer/client/buffer_tracker.cc
index 18cedb975d0..5887e52a71c 100644
--- a/chromium/gpu/command_buffer/client/buffer_tracker.cc
+++ b/chromium/gpu/command_buffer/client/buffer_tracker.cc
@@ -60,8 +60,30 @@ void BufferTracker::FreePendingToken(Buffer* buffer, int32 token) {
buffer->shm_id_ = 0;
buffer->shm_offset_ = 0;
buffer->address_ = NULL;
+ buffer->last_usage_token_ = 0;
+ buffer->last_async_upload_token_ = 0;
}
+void BufferTracker::Unmanage(Buffer* buffer) {
+ buffer->size_ = 0;
+ buffer->shm_id_ = 0;
+ buffer->shm_offset_ = 0;
+ buffer->address_ = NULL;
+ buffer->last_usage_token_ = 0;
+ buffer->last_async_upload_token_ = 0;
+}
+
+void BufferTracker::Free(Buffer* buffer) {
+ if (buffer->address_)
+ mapped_memory_->Free(buffer->address_);
+
+ buffer->size_ = 0;
+ buffer->shm_id_ = 0;
+ buffer->shm_offset_ = 0;
+ buffer->address_ = NULL;
+ buffer->last_usage_token_ = 0;
+ buffer->last_async_upload_token_ = 0;
+}
} // namespace gles2
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/buffer_tracker.h b/chromium/gpu/command_buffer/client/buffer_tracker.h
index 3e50364317d..33bd94b0456 100644
--- a/chromium/gpu/command_buffer/client/buffer_tracker.h
+++ b/chromium/gpu/command_buffer/client/buffer_tracker.h
@@ -35,7 +35,8 @@ class GLES2_IMPL_EXPORT BufferTracker {
shm_offset_(shm_offset),
address_(address),
mapped_(false),
- transfer_ready_token_(0) {
+ last_usage_token_(0),
+ last_async_upload_token_(0) {
}
GLenum id() const {
@@ -66,12 +67,20 @@ class GLES2_IMPL_EXPORT BufferTracker {
return mapped_;
}
- void set_transfer_ready_token(int token) {
- transfer_ready_token_ = token;
+ void set_last_usage_token(int token) {
+ last_usage_token_ = token;
}
- uint32 transfer_ready_token() const {
- return transfer_ready_token_;
+ int last_usage_token() const {
+ return last_usage_token_;
+ }
+
+ void set_last_async_upload_token(uint32 async_token) {
+ last_async_upload_token_ = async_token;
+ }
+
+ GLuint last_async_upload_token() const {
+ return last_async_upload_token_;
}
private:
@@ -84,7 +93,8 @@ class GLES2_IMPL_EXPORT BufferTracker {
uint32 shm_offset_;
void* address_;
bool mapped_;
- int32 transfer_ready_token_;
+ int32 last_usage_token_;
+ GLuint last_async_upload_token_;
};
BufferTracker(MappedMemoryManager* manager);
@@ -96,7 +106,9 @@ class GLES2_IMPL_EXPORT BufferTracker {
// Frees the block of memory associated with buffer, pending the passage
// of a token.
- void FreePendingToken(Buffer*, int32 token);
+ void FreePendingToken(Buffer* buffer, int32 token);
+ void Unmanage(Buffer* buffer);
+ void Free(Buffer* buffer);
private:
typedef base::hash_map<GLuint, Buffer*> BufferMap;
diff --git a/chromium/gpu/command_buffer/client/buffer_tracker_unittest.cc b/chromium/gpu/command_buffer/client/buffer_tracker_unittest.cc
index 51f4f944e1e..f6174c0802b 100644
--- a/chromium/gpu/command_buffer/client/buffer_tracker_unittest.cc
+++ b/chromium/gpu/command_buffer/client/buffer_tracker_unittest.cc
@@ -25,10 +25,11 @@ class MockClientCommandBufferImpl : public MockClientCommandBuffer {
context_lost_(false) {}
virtual ~MockClientCommandBufferImpl() {}
- virtual Buffer CreateTransferBuffer(size_t size, int32* id) OVERRIDE {
+ virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
+ int32* id) OVERRIDE {
if (context_lost_) {
*id = -1;
- return gpu::Buffer();
+ return NULL;
}
return MockClientCommandBuffer::CreateTransferBuffer(size, id);
}
@@ -41,6 +42,11 @@ class MockClientCommandBufferImpl : public MockClientCommandBuffer {
bool context_lost_;
};
+namespace {
+void EmptyPoll() {
+}
+}
+
class BufferTrackerTest : public testing::Test {
protected:
static const int32 kNumCommandEntries = 400;
@@ -52,7 +58,7 @@ class BufferTrackerTest : public testing::Test {
helper_.reset(new GLES2CmdHelper(command_buffer_.get()));
helper_->Initialize(kCommandBufferSizeBytes);
mapped_memory_.reset(new MappedMemoryManager(
- helper_.get(), MappedMemoryManager::kNoLimit));
+ helper_.get(), base::Bind(&EmptyPoll), MappedMemoryManager::kNoLimit));
buffer_tracker_.reset(new BufferTracker(mapped_memory_.get()));
}
@@ -126,5 +132,22 @@ TEST_F(BufferTrackerTest, LostContext) {
buffer_tracker_->RemoveBuffer(kId);
}
+TEST_F(BufferTrackerTest, Unmanage) {
+ const GLuint kId = 123;
+ const GLsizeiptr size = 64;
+
+ BufferTracker::Buffer* buffer = buffer_tracker_->CreateBuffer(kId, size);
+ ASSERT_TRUE(buffer != NULL);
+ EXPECT_EQ(mapped_memory_->bytes_in_use(), static_cast<size_t>(size));
+
+ void* mem = buffer->address();
+ buffer_tracker_->Unmanage(buffer);
+ buffer_tracker_->RemoveBuffer(kId);
+ EXPECT_EQ(mapped_memory_->bytes_in_use(), static_cast<size_t>(size));
+
+ mapped_memory_->Free(mem);
+ EXPECT_EQ(mapped_memory_->bytes_in_use(), static_cast<size_t>(0));
+}
+
} // namespace gles2
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/client_context_state_autogen.h b/chromium/gpu/command_buffer/client/client_context_state_autogen.h
index 1714b2b5ce9..72a4f72ed03 100644
--- a/chromium/gpu/command_buffer/client/client_context_state_autogen.h
+++ b/chromium/gpu/command_buffer/client/client_context_state_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by client_context_state.h
@@ -24,4 +26,3 @@ struct EnableFlags {
};
#endif // GPU_COMMAND_BUFFER_CLIENT_CLIENT_CONTEXT_STATE_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/client_context_state_impl_autogen.h b/chromium/gpu/command_buffer/client/client_context_state_impl_autogen.h
index 150816d04e3..cff14f7a82c 100644
--- a/chromium/gpu/command_buffer/client/client_context_state_impl_autogen.h
+++ b/chromium/gpu/command_buffer/client/client_context_state_impl_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by client_context_state.cc
@@ -22,71 +24,70 @@ ClientContextState::EnableFlags::EnableFlags()
stencil_test(false) {
}
-
-bool ClientContextState::SetCapabilityState(
- GLenum cap, bool enabled, bool* changed) {
+bool ClientContextState::SetCapabilityState(GLenum cap,
+ bool enabled,
+ bool* changed) {
*changed = false;
switch (cap) {
case GL_BLEND:
if (enable_flags.blend != enabled) {
- *changed = true;
- enable_flags.blend = enabled;
+ *changed = true;
+ enable_flags.blend = enabled;
}
return true;
case GL_CULL_FACE:
if (enable_flags.cull_face != enabled) {
- *changed = true;
- enable_flags.cull_face = enabled;
+ *changed = true;
+ enable_flags.cull_face = enabled;
}
return true;
case GL_DEPTH_TEST:
if (enable_flags.depth_test != enabled) {
- *changed = true;
- enable_flags.depth_test = enabled;
+ *changed = true;
+ enable_flags.depth_test = enabled;
}
return true;
case GL_DITHER:
if (enable_flags.dither != enabled) {
- *changed = true;
- enable_flags.dither = enabled;
+ *changed = true;
+ enable_flags.dither = enabled;
}
return true;
case GL_POLYGON_OFFSET_FILL:
if (enable_flags.polygon_offset_fill != enabled) {
- *changed = true;
- enable_flags.polygon_offset_fill = enabled;
+ *changed = true;
+ enable_flags.polygon_offset_fill = enabled;
}
return true;
case GL_SAMPLE_ALPHA_TO_COVERAGE:
if (enable_flags.sample_alpha_to_coverage != enabled) {
- *changed = true;
- enable_flags.sample_alpha_to_coverage = enabled;
+ *changed = true;
+ enable_flags.sample_alpha_to_coverage = enabled;
}
return true;
case GL_SAMPLE_COVERAGE:
if (enable_flags.sample_coverage != enabled) {
- *changed = true;
- enable_flags.sample_coverage = enabled;
+ *changed = true;
+ enable_flags.sample_coverage = enabled;
}
return true;
case GL_SCISSOR_TEST:
if (enable_flags.scissor_test != enabled) {
- *changed = true;
- enable_flags.scissor_test = enabled;
+ *changed = true;
+ enable_flags.scissor_test = enabled;
}
return true;
case GL_STENCIL_TEST:
if (enable_flags.stencil_test != enabled) {
- *changed = true;
- enable_flags.stencil_test = enabled;
+ *changed = true;
+ enable_flags.stencil_test = enabled;
}
return true;
default:
return false;
}
}
-bool ClientContextState::GetEnabled(
- GLenum cap, bool* enabled) const {
+bool ClientContextState::GetEnabled(GLenum cap, bool* enabled) const {
switch (cap) {
case GL_BLEND:
*enabled = enable_flags.blend;
@@ -120,4 +121,3 @@ bool ClientContextState::GetEnabled(
}
}
#endif // GPU_COMMAND_BUFFER_CLIENT_CLIENT_CONTEXT_STATE_IMPL_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/client_test_helper.cc b/chromium/gpu/command_buffer/client/client_test_helper.cc
index db191ce5eba..8c633efebe1 100644
--- a/chromium/gpu/command_buffer/client/client_test_helper.cc
+++ b/chromium/gpu/command_buffer/client/client_test_helper.cc
@@ -15,6 +15,9 @@ using ::testing::Invoke;
namespace gpu {
+MockCommandBufferBase::MockCommandBufferBase() {
+}
+
MockCommandBufferBase::~MockCommandBufferBase() {
}
@@ -22,10 +25,6 @@ bool MockCommandBufferBase::Initialize() {
return true;
}
-CommandBuffer::State MockCommandBufferBase::GetState() {
- return state_;
-}
-
CommandBuffer::State MockCommandBufferBase::GetLastState() {
return state_;
}
@@ -38,39 +37,42 @@ void MockCommandBufferBase::SetGetOffset(int32 get_offset) {
state_.get_offset = get_offset;
}
-CommandBuffer::State MockCommandBufferBase::FlushSync(
- int32 put_offset, int32 last_known_get) {
- state_.put_offset = put_offset;
- state_.get_offset = put_offset;
+void MockCommandBufferBase::WaitForTokenInRange(int32 start, int32 end) {}
+
+void MockCommandBufferBase::WaitForGetOffsetInRange(int32 start, int32 end) {
+ state_.get_offset = state_.put_offset;
OnFlush();
- return state_;
}
void MockCommandBufferBase::SetGetBuffer(int transfer_buffer_id) {
ring_buffer_buffer_ = GetTransferBuffer(transfer_buffer_id);
- ring_buffer_ = static_cast<CommandBufferEntry*>(ring_buffer_buffer_.ptr);
- state_.num_entries = ring_buffer_buffer_.size / sizeof(ring_buffer_[0]);
+ ring_buffer_ =
+ static_cast<CommandBufferEntry*>(ring_buffer_buffer_->memory());
+ state_.num_entries = ring_buffer_buffer_->size() / sizeof(ring_buffer_[0]);
state_.token = 10000; // All token checks in the tests should pass.
}
// Get's the Id of the next transfer buffer that will be returned
// by CreateTransferBuffer. This is useful for testing expected ids.
int32 MockCommandBufferBase::GetNextFreeTransferBufferId() {
- for (size_t ii = 0; ii < arraysize(transfer_buffers_); ++ii) {
- if (!transfer_buffers_[ii].get()) {
+ for (size_t ii = 0; ii < arraysize(transfer_buffer_buffers_); ++ii) {
+ if (!transfer_buffer_buffers_[ii].get()) {
return kTransferBufferBaseId + ii;
}
}
return -1;
}
-Buffer MockCommandBufferBase::CreateTransferBuffer(size_t size, int32* id) {
+scoped_refptr<gpu::Buffer> MockCommandBufferBase::CreateTransferBuffer(
+ size_t size,
+ int32* id) {
*id = GetNextFreeTransferBufferId();
if (*id >= 0) {
int32 ndx = *id - kTransferBufferBaseId;
- transfer_buffers_[ndx].reset(new int8[size]);
- transfer_buffer_buffers_[ndx].ptr = transfer_buffers_[ndx].get();
- transfer_buffer_buffers_[ndx].size = size;
+ scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
+ shared_memory->CreateAndMapAnonymous(size);
+ transfer_buffer_buffers_[ndx] =
+ MakeBufferFromSharedMemory(shared_memory.Pass(), size);
}
return GetTransferBuffer(*id);
}
@@ -79,11 +81,10 @@ void MockCommandBufferBase::DestroyTransferBufferHelper(int32 id) {
DCHECK_GE(id, kTransferBufferBaseId);
DCHECK_LT(id, kTransferBufferBaseId + kMaxTransferBuffers);
id -= kTransferBufferBaseId;
- transfer_buffers_[id].reset();
- transfer_buffer_buffers_[id] = Buffer();
+ transfer_buffer_buffers_[id] = NULL;
}
-Buffer MockCommandBufferBase::GetTransferBuffer(int32 id) {
+scoped_refptr<Buffer> MockCommandBufferBase::GetTransferBuffer(int32 id) {
DCHECK_GE(id, kTransferBufferBaseId);
DCHECK_LT(id, kTransferBufferBaseId + kMaxTransferBuffers);
return transfer_buffer_buffers_[id - kTransferBufferBaseId];
diff --git a/chromium/gpu/command_buffer/client/client_test_helper.h b/chromium/gpu/command_buffer/client/client_test_helper.h
index e071f5a7482..f2c2e6b7ce5 100644
--- a/chromium/gpu/command_buffer/client/client_test_helper.h
+++ b/chromium/gpu/command_buffer/client/client_test_helper.h
@@ -9,10 +9,10 @@
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
+#include "gpu/command_buffer/client/gpu_control.h"
#include "gpu/command_buffer/common/cmd_buffer_common.h"
-#include "gpu/command_buffer/common/command_buffer.h"
-#include "gpu/command_buffer/common/gpu_control.h"
#include "gpu/command_buffer/common/gpu_memory_allocation.h"
+#include "gpu/command_buffer/service/command_buffer_service.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -20,23 +20,24 @@ namespace gpu {
class CommandBufferHelper;
-class MockCommandBufferBase : public CommandBuffer {
+class MockCommandBufferBase : public CommandBufferServiceBase {
public:
static const int32 kTransferBufferBaseId = 0x123;
static const int32 kMaxTransferBuffers = 6;
- MockCommandBufferBase() { }
+ MockCommandBufferBase();
virtual ~MockCommandBufferBase();
virtual bool Initialize() OVERRIDE;
- virtual State GetState() OVERRIDE;
virtual State GetLastState() OVERRIDE;
virtual int32 GetLastToken() OVERRIDE;
- virtual State FlushSync(int32 put_offset, int32 last_known_get) OVERRIDE;
+ virtual void WaitForTokenInRange(int32 start, int32 end) OVERRIDE;
+ virtual void WaitForGetOffsetInRange(int32 start, int32 end) OVERRIDE;
virtual void SetGetBuffer(int transfer_buffer_id) OVERRIDE;
virtual void SetGetOffset(int32 get_offset) OVERRIDE;
- virtual Buffer CreateTransferBuffer(size_t size, int32* id) OVERRIDE;
- virtual Buffer GetTransferBuffer(int32 id) OVERRIDE;
+ virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
+ int32* id) OVERRIDE;
+ virtual scoped_refptr<gpu::Buffer> GetTransferBuffer(int32 id) OVERRIDE;
virtual void SetToken(int32 token) OVERRIDE;
virtual void SetParseError(error::Error error) OVERRIDE;
virtual void SetContextLostReason(error::ContextLostReason reason) OVERRIDE;
@@ -51,10 +52,9 @@ class MockCommandBufferBase : public CommandBuffer {
virtual void OnFlush() = 0;
private:
- scoped_ptr<int8[]> transfer_buffers_[kMaxTransferBuffers];
- Buffer transfer_buffer_buffers_[kMaxTransferBuffers];
+ scoped_refptr<Buffer> transfer_buffer_buffers_[kMaxTransferBuffers];
CommandBufferEntry* ring_buffer_;
- Buffer ring_buffer_buffer_;
+ scoped_refptr<Buffer> ring_buffer_buffer_;
State state_;
};
@@ -88,14 +88,13 @@ class MockClientGpuControl : public GpuControl {
virtual ~MockClientGpuControl();
MOCK_METHOD0(GetCapabilities, Capabilities());
- MOCK_METHOD4(CreateGpuMemoryBuffer,
+ MOCK_METHOD5(CreateGpuMemoryBuffer,
gfx::GpuMemoryBuffer*(size_t width,
size_t height,
unsigned internalformat,
+ unsigned usage,
int32* id));
MOCK_METHOD1(DestroyGpuMemoryBuffer, void(int32 id));
- MOCK_METHOD2(GenerateMailboxNames, bool(unsigned num,
- std::vector<gpu::Mailbox>* names));
MOCK_METHOD0(InsertSyncPoint, uint32());
MOCK_METHOD2(SignalSyncPoint, void(uint32 id,
const base::Closure& callback));
@@ -103,8 +102,7 @@ class MockClientGpuControl : public GpuControl {
MOCK_METHOD2(SignalQuery, void(uint32 query, const base::Closure& callback));
MOCK_METHOD1(SetSurfaceVisible, void(bool visible));
- MOCK_METHOD1(SendManagedMemoryStats,
- void(const ManagedMemoryStats& stats));
+ MOCK_METHOD1(CreateStreamTexture, uint32(uint32));
private:
DISALLOW_COPY_AND_ASSIGN(MockClientGpuControl);
diff --git a/chromium/gpu/command_buffer/client/cmd_buffer_helper.cc b/chromium/gpu/command_buffer/client/cmd_buffer_helper.cc
index 11219ede664..b50527a8dce 100644
--- a/chromium/gpu/command_buffer/client/cmd_buffer_helper.cc
+++ b/chromium/gpu/command_buffer/client/cmd_buffer_helper.cc
@@ -12,30 +12,29 @@
namespace gpu {
-const int kCommandsPerFlushCheck = 100;
-
-#if !defined(OS_ANDROID)
-const double kFlushDelay = 1.0 / (5.0 * 60.0);
-#endif
-
CommandBufferHelper::CommandBufferHelper(CommandBuffer* command_buffer)
: command_buffer_(command_buffer),
ring_buffer_id_(-1),
ring_buffer_size_(0),
entries_(NULL),
total_entry_count_(0),
+ immediate_entry_count_(0),
token_(0),
put_(0),
last_put_sent_(0),
+#if defined(CMD_HELPER_PERIODIC_FLUSH_CHECK)
commands_issued_(0),
+#endif
usable_(true),
context_lost_(false),
flush_automatically_(true),
- last_flush_time_(0) {
+ last_flush_time_(0),
+ flush_generation_(0) {
}
void CommandBufferHelper::SetAutomaticFlushes(bool enabled) {
flush_automatically_ = enabled;
+ CalcImmediateEntries(0);
}
bool CommandBufferHelper::IsContextLost() {
@@ -45,6 +44,47 @@ bool CommandBufferHelper::IsContextLost() {
return context_lost_;
}
+void CommandBufferHelper::CalcImmediateEntries(int waiting_count) {
+ DCHECK_GE(waiting_count, 0);
+
+ // Check if usable & allocated.
+ if (!usable() || !HaveRingBuffer()) {
+ immediate_entry_count_ = 0;
+ return;
+ }
+
+ // Get maximum safe contiguous entries.
+ const int32 curr_get = get_offset();
+ if (curr_get > put_) {
+ immediate_entry_count_ = curr_get - put_ - 1;
+ } else {
+ immediate_entry_count_ =
+ total_entry_count_ - put_ - (curr_get == 0 ? 1 : 0);
+ }
+
+ // Limit entry count to force early flushing.
+ if (flush_automatically_) {
+ int32 limit =
+ total_entry_count_ /
+ ((curr_get == last_put_sent_) ? kAutoFlushSmall : kAutoFlushBig);
+
+ int32 pending =
+ (put_ + total_entry_count_ - last_put_sent_) % total_entry_count_;
+
+ if (pending > 0 && pending >= limit) {
+ // Time to force flush.
+ immediate_entry_count_ = 0;
+ } else {
+ // Limit remaining entries, but not lower than waiting_count entries to
+ // prevent deadlock when command size is greater than the flush limit.
+ limit -= pending;
+ limit = limit < waiting_count ? waiting_count : limit;
+ immediate_entry_count_ =
+ immediate_entry_count_ > limit ? limit : immediate_entry_count_;
+ }
+ }
+}
+
bool CommandBufferHelper::AllocateRingBuffer() {
if (!usable()) {
return false;
@@ -55,7 +95,8 @@ bool CommandBufferHelper::AllocateRingBuffer() {
}
int32 id = -1;
- Buffer buffer = command_buffer_->CreateTransferBuffer(ring_buffer_size_, &id);
+ scoped_refptr<Buffer> buffer =
+ command_buffer_->CreateTransferBuffer(ring_buffer_size_, &id);
if (id < 0) {
ClearUsable();
return false;
@@ -64,20 +105,12 @@ bool CommandBufferHelper::AllocateRingBuffer() {
ring_buffer_ = buffer;
ring_buffer_id_ = id;
command_buffer_->SetGetBuffer(id);
-
- // TODO(gman): Do we really need to call GetState here? We know get & put = 0
- // Also do we need to check state.num_entries?
- CommandBuffer::State state = command_buffer_->GetState();
- entries_ = static_cast<CommandBufferEntry*>(ring_buffer_.ptr);
- int32 num_ring_buffer_entries =
- ring_buffer_size_ / sizeof(CommandBufferEntry);
- if (num_ring_buffer_entries > state.num_entries) {
- ClearUsable();
- return false;
- }
-
- total_entry_count_ = num_ring_buffer_entries;
- put_ = state.put_offset;
+ entries_ = static_cast<CommandBufferEntry*>(ring_buffer_->memory());
+ total_entry_count_ = ring_buffer_size_ / sizeof(CommandBufferEntry);
+ // Call to SetGetBuffer(id) above resets get and put offsets to 0.
+ // No need to query it through IPC.
+ put_ = 0;
+ CalcImmediateEntries(0);
return true;
}
@@ -85,6 +118,7 @@ void CommandBufferHelper::FreeResources() {
if (HaveRingBuffer()) {
command_buffer_->DestroyTransferBuffer(ring_buffer_id_);
ring_buffer_id_ = -1;
+ CalcImmediateEntries(0);
}
}
@@ -103,24 +137,36 @@ CommandBufferHelper::~CommandBufferHelper() {
FreeResources();
}
-bool CommandBufferHelper::FlushSync() {
+bool CommandBufferHelper::WaitForGetOffsetInRange(int32 start, int32 end) {
if (!usable()) {
return false;
}
- last_flush_time_ = clock();
- last_put_sent_ = put_;
- CommandBuffer::State state = command_buffer_->FlushSync(put_, get_offset());
- return state.error == error::kNoError;
+ command_buffer_->WaitForGetOffsetInRange(start, end);
+ return command_buffer_->GetLastError() == gpu::error::kNoError;
}
void CommandBufferHelper::Flush() {
+ // Wrap put_ before flush.
+ if (put_ == total_entry_count_)
+ put_ = 0;
+
if (usable() && last_put_sent_ != put_) {
last_flush_time_ = clock();
last_put_sent_ = put_;
command_buffer_->Flush(put_);
+ ++flush_generation_;
+ CalcImmediateEntries(0);
}
}
+#if defined(CMD_HELPER_PERIODIC_FLUSH_CHECK)
+void CommandBufferHelper::PeriodicFlushCheck() {
+ clock_t current_time = clock();
+ if (current_time - last_flush_time_ > kPeriodicFlushDelay * CLOCKS_PER_SEC)
+ Flush();
+}
+#endif
+
// Calls Flush() and then waits until the buffer is empty. Break early if the
// error is set.
bool CommandBufferHelper::Finish() {
@@ -133,12 +179,12 @@ bool CommandBufferHelper::Finish() {
return true;
}
DCHECK(HaveRingBuffer());
- do {
- // Do not loop forever if the flush fails, meaning the command buffer reader
- // has shutdown.
- if (!FlushSync())
- return false;
- } while (put_ != get_offset());
+ Flush();
+ if (!WaitForGetOffsetInRange(put_, put_))
+ return false;
+ DCHECK_EQ(get_offset(), put_);
+
+ CalcImmediateEntries(0);
return true;
}
@@ -179,16 +225,10 @@ void CommandBufferHelper::WaitForToken(int32 token) {
if (token < 0)
return;
if (token > token_) return; // we wrapped
- while (last_token_read() < token) {
- if (get_offset() == put_) {
- LOG(FATAL) << "Empty command buffer while waiting on a token.";
- return;
- }
- // Do not loop forever if the flush fails, meaning the command buffer reader
- // has shutdown.
- if (!FlushSync())
- return;
- }
+ if (last_token_read() >= token)
+ return;
+ Flush();
+ command_buffer_->WaitForTokenInRange(token, token_);
}
// Waits for available entries, basically waiting until get >= put + count + 1.
@@ -209,14 +249,15 @@ void CommandBufferHelper::WaitForAvailableEntries(int32 count) {
// but we need to make sure get wraps first, actually that get is 1 or
// more (since put will wrap to 0 after we add the noops).
DCHECK_LE(1, put_);
- if (get_offset() > put_ || get_offset() == 0) {
+ int32 curr_get = get_offset();
+ if (curr_get > put_ || curr_get == 0) {
TRACE_EVENT0("gpu", "CommandBufferHelper::WaitForAvailableEntries");
- while (get_offset() > put_ || get_offset() == 0) {
- // Do not loop forever if the flush fails, meaning the command buffer
- // reader has shutdown.
- if (!FlushSync())
- return;
- }
+ Flush();
+ if (!WaitForGetOffsetInRange(1, put_))
+ return;
+ curr_get = get_offset();
+ DCHECK_LE(curr_get, put_);
+ DCHECK_NE(0, curr_get);
}
// Insert Noops to fill out the buffer.
int32 num_entries = total_entry_count_ - put_;
@@ -228,52 +269,23 @@ void CommandBufferHelper::WaitForAvailableEntries(int32 count) {
}
put_ = 0;
}
- if (AvailableEntries() < count) {
- TRACE_EVENT0("gpu", "CommandBufferHelper::WaitForAvailableEntries1");
- while (AvailableEntries() < count) {
- // Do not loop forever if the flush fails, meaning the command buffer
- // reader has shutdown.
- if (!FlushSync())
+
+ // Try to get 'count' entries without flushing.
+ CalcImmediateEntries(count);
+ if (immediate_entry_count_ < count) {
+ // Try again with a shallow Flush().
+ Flush();
+ CalcImmediateEntries(count);
+ if (immediate_entry_count_ < count) {
+ // Buffer is full. Need to wait for entries.
+ TRACE_EVENT0("gpu", "CommandBufferHelper::WaitForAvailableEntries1");
+ if (!WaitForGetOffsetInRange(put_ + count + 1, put_))
return;
+ CalcImmediateEntries(count);
+ DCHECK_GE(immediate_entry_count_, count);
}
}
- // Force a flush if the buffer is getting half full, or even earlier if the
- // reader is known to be idle.
- int32 pending =
- (put_ + total_entry_count_ - last_put_sent_) % total_entry_count_;
- int32 limit = total_entry_count_ /
- ((get_offset() == last_put_sent_) ? 16 : 2);
- if (pending > limit) {
- Flush();
- } else if (flush_automatically_ &&
- (commands_issued_ % kCommandsPerFlushCheck == 0)) {
-#if !defined(OS_ANDROID)
- // Allow this command buffer to be pre-empted by another if a "reasonable"
- // amount of work has been done. On highend machines, this reduces the
- // latency of GPU commands. However, on Android, this can cause the
- // kernel to thrash between generating GPU commands and executing them.
- clock_t current_time = clock();
- if (current_time - last_flush_time_ > kFlushDelay * CLOCKS_PER_SEC)
- Flush();
-#endif
- }
}
-CommandBufferEntry* CommandBufferHelper::GetSpace(uint32 entries) {
- AllocateRingBuffer();
- if (!usable()) {
- return NULL;
- }
- DCHECK(HaveRingBuffer());
- ++commands_issued_;
- WaitForAvailableEntries(entries);
- CommandBufferEntry* space = &entries_[put_];
- put_ += entries;
- DCHECK_LE(put_, total_entry_count_);
- if (put_ == total_entry_count_) {
- put_ = 0;
- }
- return space;
-}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/cmd_buffer_helper.h b/chromium/gpu/command_buffer/client/cmd_buffer_helper.h
index a50dc7bfe4e..86d3c3bf6c1 100644
--- a/chromium/gpu/command_buffer/client/cmd_buffer_helper.h
+++ b/chromium/gpu/command_buffer/client/cmd_buffer_helper.h
@@ -17,6 +17,15 @@
namespace gpu {
+#if !defined(OS_ANDROID)
+#define CMD_HELPER_PERIODIC_FLUSH_CHECK
+const int kCommandsPerFlushCheck = 100;
+const float kPeriodicFlushDelay = 1.0f / (5.0f * 60.0f);
+#endif
+
+const int kAutoFlushSmall = 16; // 1/16 of the buffer
+const int kAutoFlushBig = 2; // 1/2 of the buffer
+
// Command buffer helper class. This class simplifies ring buffer management:
// it will allocate the buffer, give it to the buffer interface, and let the
// user add commands to it, while taking care of the synchronization (put and
@@ -55,14 +64,6 @@ class GPU_EXPORT CommandBufferHelper {
// returns, the command buffer service is aware of all pending commands.
void Flush();
- // Flushes the commands, setting the put pointer to let the buffer interface
- // know that new commands have been added. After a flush returns, the command
- // buffer service is aware of all pending commands and it is guaranteed to
- // have made some progress in processing them. Returns whether the flush was
- // successful. The flush will fail if the command buffer service has
- // disconnected.
- bool FlushSync();
-
// Waits until all the commands have been executed. Returns whether it
// was successful. The function will fail if the command buffer service has
// disconnected.
@@ -83,6 +84,15 @@ class GPU_EXPORT CommandBufferHelper {
// shutdown.
int32 InsertToken();
+ // Returns true if the token has passed.
+ // Parameters:
+ // the value of the token to check whether it has passed
+ bool HasTokenPassed(int32 token) const {
+ if (token > token_)
+ return true; // we wrapped
+ return last_token_read() >= token;
+ }
+
// Waits until the token of a particular value has passed through the command
// stream (i.e. commands inserted before that token have been executed).
// NOTE: This will call Flush if it needs to block.
@@ -92,34 +102,78 @@ class GPU_EXPORT CommandBufferHelper {
// Called prior to each command being issued. Waits for a certain amount of
// space to be available. Returns address of space.
- CommandBufferEntry* GetSpace(uint32 entries);
+ void* GetSpace(int32 entries) {
+#if defined(CMD_HELPER_PERIODIC_FLUSH_CHECK)
+ // Allow this command buffer to be pre-empted by another if a "reasonable"
+ // amount of work has been done. On highend machines, this reduces the
+ // latency of GPU commands. However, on Android, this can cause the
+ // kernel to thrash between generating GPU commands and executing them.
+ ++commands_issued_;
+ if (flush_automatically_ &&
+ (commands_issued_ % kCommandsPerFlushCheck == 0)) {
+ PeriodicFlushCheck();
+ }
+#endif
+
+ // Test for immediate entries.
+ if (entries > immediate_entry_count_) {
+ WaitForAvailableEntries(entries);
+ if (entries > immediate_entry_count_)
+ return NULL;
+ }
+
+ DCHECK_LE(entries, immediate_entry_count_);
+
+ // Allocate space and advance put_.
+ CommandBufferEntry* space = &entries_[put_];
+ put_ += entries;
+ immediate_entry_count_ -= entries;
+
+ DCHECK_LE(put_, total_entry_count_);
+ return space;
+ }
+
+ template <typename T>
+ void ForceNullCheck(T* data) {
+#if defined(OS_WIN) && defined(ARCH_CPU_64_BITS)
+ // 64-bit MSVC's alias analysis was determining that the command buffer
+ // entry couldn't be NULL, so it optimized out the NULL check.
+ // Dereferencing the same datatype through a volatile pointer seems to
+ // prevent that from happening. http://crbug.com/361936
+ if (data)
+ static_cast<volatile T*>(data)->header;
+#endif
+ }
// Typed version of GetSpace. Gets enough room for the given type and returns
// a reference to it.
template <typename T>
T* GetCmdSpace() {
COMPILE_ASSERT(T::kArgFlags == cmd::kFixed, Cmd_kArgFlags_not_kFixed);
- uint32 space_needed = ComputeNumEntries(sizeof(T));
- void* data = GetSpace(space_needed);
- return reinterpret_cast<T*>(data);
+ int32 space_needed = ComputeNumEntries(sizeof(T));
+ T* data = static_cast<T*>(GetSpace(space_needed));
+ ForceNullCheck(data);
+ return data;
}
// Typed version of GetSpace for immediate commands.
template <typename T>
T* GetImmediateCmdSpace(size_t data_space) {
COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN);
- uint32 space_needed = ComputeNumEntries(sizeof(T) + data_space);
- void* data = GetSpace(space_needed);
- return reinterpret_cast<T*>(data);
+ int32 space_needed = ComputeNumEntries(sizeof(T) + data_space);
+ T* data = static_cast<T*>(GetSpace(space_needed));
+ ForceNullCheck(data);
+ return data;
}
// Typed version of GetSpace for immediate commands.
template <typename T>
T* GetImmediateCmdSpaceTotalSize(size_t total_space) {
COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN);
- uint32 space_needed = ComputeNumEntries(total_space);
- void* data = GetSpace(space_needed);
- return reinterpret_cast<T*>(data);
+ int32 space_needed = ComputeNumEntries(total_space);
+ T* data = static_cast<T*>(GetSpace(space_needed));
+ ForceNullCheck(data);
+ return data;
}
int32 last_token_read() const {
@@ -214,9 +268,9 @@ class GPU_EXPORT CommandBufferHelper {
return command_buffer_;
}
- Buffer get_ring_buffer() const {
- return ring_buffer_;
- }
+ scoped_refptr<Buffer> get_ring_buffer() const { return ring_buffer_; }
+
+ uint32 flush_generation() const { return flush_generation_; }
void FreeRingBuffer();
@@ -230,30 +284,43 @@ class GPU_EXPORT CommandBufferHelper {
void ClearUsable() {
usable_ = false;
+ CalcImmediateEntries(0);
}
private:
- // Waits until get changes, updating the value of get_.
- void WaitForGetChange();
-
// Returns the number of available entries (they may not be contiguous).
int32 AvailableEntries() {
return (get_offset() - put_ - 1 + total_entry_count_) % total_entry_count_;
}
+ void CalcImmediateEntries(int waiting_count);
bool AllocateRingBuffer();
void FreeResources();
+ // Waits for the get offset to be in a specific range, inclusive. Returns
+ // false if there was an error.
+ bool WaitForGetOffsetInRange(int32 start, int32 end);
+
+#if defined(CMD_HELPER_PERIODIC_FLUSH_CHECK)
+ // Calls Flush if automatic flush conditions are met.
+ void PeriodicFlushCheck();
+#endif
+
CommandBuffer* command_buffer_;
int32 ring_buffer_id_;
int32 ring_buffer_size_;
- Buffer ring_buffer_;
+ scoped_refptr<gpu::Buffer> ring_buffer_;
CommandBufferEntry* entries_;
int32 total_entry_count_; // the total number of entries
+ int32 immediate_entry_count_;
int32 token_;
int32 put_;
int32 last_put_sent_;
+
+#if defined(CMD_HELPER_PERIODIC_FLUSH_CHECK)
int commands_issued_;
+#endif
+
bool usable_;
bool context_lost_;
bool flush_automatically_;
@@ -261,6 +328,10 @@ class GPU_EXPORT CommandBufferHelper {
// Using C runtime instead of base because this file cannot depend on base.
clock_t last_flush_time_;
+ // Incremented every time the helper flushes the command buffer.
+ // Can be used to track when prior commands have been flushed.
+ uint32 flush_generation_;
+
friend class CommandBufferHelperTest;
DISALLOW_COPY_AND_ASSIGN(CommandBufferHelper);
};
diff --git a/chromium/gpu/command_buffer/client/cmd_buffer_helper_test.cc b/chromium/gpu/command_buffer/client/cmd_buffer_helper_test.cc
index bd0e86e3f45..c2d1361555a 100644
--- a/chromium/gpu/command_buffer/client/cmd_buffer_helper_test.cc
+++ b/chromium/gpu/command_buffer/client/cmd_buffer_helper_test.cc
@@ -4,8 +4,11 @@
// Tests for the Command Buffer Helper.
+#include <list>
+
#include "base/bind.h"
#include "base/bind_helpers.h"
+#include "base/memory/linked_ptr.h"
#include "base/message_loop/message_loop.h"
#include "gpu/command_buffer/client/cmd_buffer_helper.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
@@ -28,11 +31,54 @@ using testing::DoAll;
using testing::Invoke;
using testing::_;
-const int32 kTotalNumCommandEntries = 10;
+const int32 kTotalNumCommandEntries = 32;
const int32 kCommandBufferSizeBytes =
kTotalNumCommandEntries * sizeof(CommandBufferEntry);
const int32 kUnusedCommandId = 5; // we use 0 and 2 currently.
+// Override CommandBufferService::Flush() to lock flushing and simulate
+// the buffer becoming full in asynchronous mode.
+class CommandBufferServiceLocked : public CommandBufferService {
+ public:
+ explicit CommandBufferServiceLocked(
+ TransferBufferManagerInterface* transfer_buffer_manager)
+ : CommandBufferService(transfer_buffer_manager),
+ flush_locked_(false),
+ last_flush_(-1),
+ flush_count_(0) {}
+ virtual ~CommandBufferServiceLocked() {}
+
+ virtual void Flush(int32 put_offset) OVERRIDE {
+ flush_count_++;
+ if (!flush_locked_) {
+ last_flush_ = -1;
+ CommandBufferService::Flush(put_offset);
+ } else {
+ last_flush_ = put_offset;
+ }
+ }
+
+ void LockFlush() { flush_locked_ = true; }
+
+ void UnlockFlush() { flush_locked_ = false; }
+
+ int FlushCount() { return flush_count_; }
+
+ virtual void WaitForGetOffsetInRange(int32 start, int32 end) OVERRIDE {
+ if (last_flush_ != -1) {
+ CommandBufferService::Flush(last_flush_);
+ last_flush_ = -1;
+ }
+ CommandBufferService::WaitForGetOffsetInRange(start, end);
+ }
+
+ private:
+ bool flush_locked_;
+ int last_flush_;
+ int flush_count_;
+ DISALLOW_COPY_AND_ASSIGN(CommandBufferServiceLocked);
+};
+
// Test fixture for CommandBufferHelper test - Creates a CommandBufferHelper,
// using a CommandBufferEngine with a mock AsyncAPIInterface for its interface
// (calling it directly, not through the RPC mechanism).
@@ -51,7 +97,7 @@ class CommandBufferHelperTest : public testing::Test {
EXPECT_TRUE(manager->Initialize());
}
command_buffer_.reset(
- new CommandBufferService(transfer_buffer_manager_.get()));
+ new CommandBufferServiceLocked(transfer_buffer_manager_.get()));
EXPECT_TRUE(command_buffer_->Initialize());
gpu_scheduler_.reset(new GpuScheduler(
@@ -65,17 +111,22 @@ class CommandBufferHelperTest : public testing::Test {
helper_.reset(new CommandBufferHelper(command_buffer_.get()));
helper_->Initialize(kCommandBufferSizeBytes);
+
+ test_command_next_id_ = kUnusedCommandId;
}
virtual void TearDown() {
// If the GpuScheduler posts any tasks, this forces them to run.
base::MessageLoop::current()->RunUntilIdle();
+ test_command_args_.clear();
}
const CommandParser* GetParser() const {
return gpu_scheduler_->parser();
}
+ int32 ImmediateEntryCount() const { return helper_->immediate_entry_count_; }
+
// Adds a command to the buffer through the helper, while adding it as an
// expected call on the API mock.
void AddCommandWithExpect(error::Error _return,
@@ -85,7 +136,8 @@ class CommandBufferHelperTest : public testing::Test {
CommandHeader header;
header.size = arg_count + 1;
header.command = command;
- CommandBufferEntry* cmds = helper_->GetSpace(arg_count + 1);
+ CommandBufferEntry* cmds =
+ static_cast<CommandBufferEntry*>(helper_->GetSpace(arg_count + 1));
CommandBufferOffset put = 0;
cmds[put++].value_header = header;
for (int ii = 0; ii < arg_count; ++ii) {
@@ -98,6 +150,68 @@ class CommandBufferHelperTest : public testing::Test {
.WillOnce(Return(_return));
}
+ void AddUniqueCommandWithExpect(error::Error _return, int cmd_size) {
+ EXPECT_GE(cmd_size, 1);
+ EXPECT_LT(cmd_size, kTotalNumCommandEntries);
+ int arg_count = cmd_size - 1;
+
+ // Allocate array for args.
+ linked_ptr<std::vector<CommandBufferEntry> > args_ptr(
+ new std::vector<CommandBufferEntry>(arg_count ? arg_count : 1));
+
+ for (int32 ii = 0; ii < arg_count; ++ii) {
+ (*args_ptr)[ii].value_uint32 = 0xF00DF00D + ii;
+ }
+
+ // Add command and save args in test_command_args_ until the test completes.
+ AddCommandWithExpect(
+ _return, test_command_next_id_++, arg_count, &(*args_ptr)[0]);
+ test_command_args_.insert(test_command_args_.end(), args_ptr);
+ }
+
+ void TestCommandWrappingFull(int32 cmd_size, int32 start_commands) {
+ const int32 num_args = cmd_size - 1;
+ EXPECT_EQ(kTotalNumCommandEntries % cmd_size, 0);
+
+ std::vector<CommandBufferEntry> args(num_args);
+ for (int32 ii = 0; ii < num_args; ++ii) {
+ args[ii].value_uint32 = ii + 1;
+ }
+
+ // Initially insert commands up to start_commands and Finish().
+ for (int32 ii = 0; ii < start_commands; ++ii) {
+ AddCommandWithExpect(
+ error::kNoError, ii + kUnusedCommandId, num_args, &args[0]);
+ }
+ helper_->Finish();
+
+ EXPECT_EQ(GetParser()->put(),
+ (start_commands * cmd_size) % kTotalNumCommandEntries);
+ EXPECT_EQ(GetParser()->get(),
+ (start_commands * cmd_size) % kTotalNumCommandEntries);
+
+ // Lock flushing to force the buffer to get full.
+ command_buffer_->LockFlush();
+
+ // Add enough commands to over fill the buffer.
+ for (int32 ii = 0; ii < kTotalNumCommandEntries / cmd_size + 2; ++ii) {
+ AddCommandWithExpect(error::kNoError,
+ start_commands + ii + kUnusedCommandId,
+ num_args,
+ &args[0]);
+ }
+
+ // Flush all commands.
+ command_buffer_->UnlockFlush();
+ helper_->Finish();
+
+ // Check that the commands did happen.
+ Mock::VerifyAndClearExpectations(api_mock_.get());
+
+ // Check the error status.
+ EXPECT_EQ(error::kNoError, GetError());
+ }
+
// Checks that the buffer from put to put+size is free in the parser.
void CheckFreeSpace(CommandBufferOffset put, unsigned int size) {
CommandBufferOffset parser_put = GetParser()->put();
@@ -122,15 +236,21 @@ class CommandBufferHelperTest : public testing::Test {
}
int32 GetGetOffset() {
- return command_buffer_->GetState().get_offset;
+ return command_buffer_->GetLastState().get_offset;
}
int32 GetPutOffset() {
- return command_buffer_->GetState().put_offset;
+ return command_buffer_->GetLastState().put_offset;
}
+ int32 GetHelperGetOffset() { return helper_->get_offset(); }
+
+ int32 GetHelperPutOffset() { return helper_->put_; }
+
+ uint32 GetHelperFlushGeneration() { return helper_->flush_generation(); }
+
error::Error GetError() {
- return command_buffer_->GetState().error;
+ return command_buffer_->GetLastState().error;
}
CommandBufferOffset get_helper_put() { return helper_->put_; }
@@ -141,12 +261,176 @@ class CommandBufferHelperTest : public testing::Test {
base::MessageLoop message_loop_;
scoped_ptr<AsyncAPIMock> api_mock_;
scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
- scoped_ptr<CommandBufferService> command_buffer_;
+ scoped_ptr<CommandBufferServiceLocked> command_buffer_;
scoped_ptr<GpuScheduler> gpu_scheduler_;
scoped_ptr<CommandBufferHelper> helper_;
+ std::list<linked_ptr<std::vector<CommandBufferEntry> > > test_command_args_;
+ unsigned int test_command_next_id_;
Sequence sequence_;
};
+// Checks immediate_entry_count_ changes based on 'usable' state.
+TEST_F(CommandBufferHelperTest, TestCalcImmediateEntriesNotUsable) {
+ // Auto flushing mode is tested separately.
+ helper_->SetAutomaticFlushes(false);
+ EXPECT_EQ(helper_->usable(), true);
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries - 1);
+ helper_->ClearUsable();
+ EXPECT_EQ(ImmediateEntryCount(), 0);
+}
+
+// Checks immediate_entry_count_ changes based on RingBuffer state.
+TEST_F(CommandBufferHelperTest, TestCalcImmediateEntriesNoRingBuffer) {
+ helper_->SetAutomaticFlushes(false);
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries - 1);
+ helper_->FreeRingBuffer();
+ EXPECT_EQ(ImmediateEntryCount(), 0);
+}
+
+// Checks immediate_entry_count_ calc when Put >= Get and Get == 0.
+TEST_F(CommandBufferHelperTest, TestCalcImmediateEntriesGetAtZero) {
+ // No internal auto flushing.
+ helper_->SetAutomaticFlushes(false);
+ command_buffer_->LockFlush();
+
+ // Start at Get = Put = 0.
+ EXPECT_EQ(GetHelperPutOffset(), 0);
+ EXPECT_EQ(GetHelperGetOffset(), 0);
+
+ // Immediate count should be 1 less than the end of the buffer.
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries - 1);
+ AddUniqueCommandWithExpect(error::kNoError, 2);
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries - 3);
+
+ helper_->Finish();
+
+ // Check that the commands did happen.
+ Mock::VerifyAndClearExpectations(api_mock_.get());
+
+ // Check the error status.
+ EXPECT_EQ(error::kNoError, GetError());
+}
+
+// Checks immediate_entry_count_ calc when Put >= Get and Get > 0.
+TEST_F(CommandBufferHelperTest, TestCalcImmediateEntriesGetInMiddle) {
+ // No internal auto flushing.
+ helper_->SetAutomaticFlushes(false);
+ command_buffer_->LockFlush();
+
+ // Move to Get = Put = 2.
+ AddUniqueCommandWithExpect(error::kNoError, 2);
+ helper_->Finish();
+ EXPECT_EQ(GetHelperPutOffset(), 2);
+ EXPECT_EQ(GetHelperGetOffset(), 2);
+
+ // Immediate count should be up to the end of the buffer.
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries - 2);
+ AddUniqueCommandWithExpect(error::kNoError, 2);
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries - 4);
+
+ helper_->Finish();
+
+ // Check that the commands did happen.
+ Mock::VerifyAndClearExpectations(api_mock_.get());
+
+ // Check the error status.
+ EXPECT_EQ(error::kNoError, GetError());
+}
+
+// Checks immediate_entry_count_ calc when Put < Get.
+TEST_F(CommandBufferHelperTest, TestCalcImmediateEntriesGetBeforePut) {
+ // Move to Get = kTotalNumCommandEntries / 4, Put = 0.
+ const int kInitGetOffset = kTotalNumCommandEntries / 4;
+ helper_->SetAutomaticFlushes(false);
+ command_buffer_->LockFlush();
+ AddUniqueCommandWithExpect(error::kNoError, kInitGetOffset);
+ helper_->Finish();
+ AddUniqueCommandWithExpect(error::kNoError,
+ kTotalNumCommandEntries - kInitGetOffset);
+
+ // Flush instead of Finish will let Put wrap without the command buffer
+ // immediately processing the data between Get and Put.
+ helper_->Flush();
+
+ EXPECT_EQ(GetHelperGetOffset(), kInitGetOffset);
+ EXPECT_EQ(GetHelperPutOffset(), 0);
+
+ // Immediate count should be up to Get - 1.
+ EXPECT_EQ(ImmediateEntryCount(), kInitGetOffset - 1);
+ AddUniqueCommandWithExpect(error::kNoError, 2);
+ EXPECT_EQ(ImmediateEntryCount(), kInitGetOffset - 3);
+
+ helper_->Finish();
+ // Check that the commands did happen.
+ Mock::VerifyAndClearExpectations(api_mock_.get());
+
+ // Check the error status.
+ EXPECT_EQ(error::kNoError, GetError());
+}
+
+// Checks immediate_entry_count_ calc when automatic flushing is enabled.
+TEST_F(CommandBufferHelperTest, TestCalcImmediateEntriesAutoFlushing) {
+ command_buffer_->LockFlush();
+
+ // Start at Get = Put = 0.
+ EXPECT_EQ(GetHelperPutOffset(), 0);
+ EXPECT_EQ(GetHelperGetOffset(), 0);
+
+ // Without auto flushes, up to kTotalNumCommandEntries - 1 is available.
+ helper_->SetAutomaticFlushes(false);
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries - 1);
+
+ // With auto flushes, and Get == Last Put,
+ // up to kTotalNumCommandEntries / kAutoFlushSmall is available.
+ helper_->SetAutomaticFlushes(true);
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries / kAutoFlushSmall);
+
+ // With auto flushes, and Get != Last Put,
+ // up to kTotalNumCommandEntries / kAutoFlushBig is available.
+ AddUniqueCommandWithExpect(error::kNoError, 2);
+ helper_->Flush();
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries / kAutoFlushBig);
+
+ helper_->Finish();
+ // Check that the commands did happen.
+ Mock::VerifyAndClearExpectations(api_mock_.get());
+
+ // Check the error status.
+ EXPECT_EQ(error::kNoError, GetError());
+}
+
+// Checks immediate_entry_count_ calc when automatic flushing is enabled, and
+// we allocate commands over the immediate_entry_count_ size.
+TEST_F(CommandBufferHelperTest, TestCalcImmediateEntriesOverFlushLimit) {
+ // Lock internal flushing.
+ command_buffer_->LockFlush();
+
+ // Start at Get = Put = 0.
+ EXPECT_EQ(GetHelperPutOffset(), 0);
+ EXPECT_EQ(GetHelperGetOffset(), 0);
+
+ // Pre-check ImmediateEntryCount is limited with automatic flushing enabled.
+ helper_->SetAutomaticFlushes(true);
+ EXPECT_EQ(ImmediateEntryCount(), kTotalNumCommandEntries / kAutoFlushSmall);
+
+ // Add a command larger than ImmediateEntryCount().
+ AddUniqueCommandWithExpect(error::kNoError, ImmediateEntryCount() + 1);
+
+ // ImmediateEntryCount() should now be 0, to force a flush check on the next
+ // command.
+ EXPECT_EQ(ImmediateEntryCount(), 0);
+
+ // Add a command when ImmediateEntryCount() == 0.
+ AddUniqueCommandWithExpect(error::kNoError, ImmediateEntryCount() + 1);
+
+ helper_->Finish();
+ // Check that the commands did happen.
+ Mock::VerifyAndClearExpectations(api_mock_.get());
+
+ // Check the error status.
+ EXPECT_EQ(error::kNoError, GetError());
+}
+
// Checks that commands in the buffer are properly executed, and that the
// status/error stay valid.
TEST_F(CommandBufferHelperTest, TestCommandProcessing) {
@@ -184,12 +468,16 @@ TEST_F(CommandBufferHelperTest, TestCommandProcessing) {
// Checks that commands in the buffer are properly executed when wrapping the
// buffer, and that the status/error stay valid.
TEST_F(CommandBufferHelperTest, TestCommandWrapping) {
- // Add 5 commands of size 3 through the helper to make sure we do wrap.
+ // Add num_commands * commands of size 3 through the helper to make sure we
+ // do wrap. kTotalNumCommandEntries must not be a multiple of 3.
+ COMPILE_ASSERT(kTotalNumCommandEntries % 3 != 0,
+ Is_multiple_of_num_command_entries);
+ const int kNumCommands = (kTotalNumCommandEntries / 3) * 2;
CommandBufferEntry args1[2];
args1[0].value_uint32 = 5;
args1[1].value_float = 4.f;
- for (unsigned int i = 0; i < 5; ++i) {
+ for (int i = 0; i < kNumCommands; ++i) {
AddCommandWithExpect(error::kNoError, kUnusedCommandId + i, 2, args1);
}
@@ -204,13 +492,13 @@ TEST_F(CommandBufferHelperTest, TestCommandWrapping) {
// Checks the case where the command inserted exactly matches the space left in
// the command buffer.
TEST_F(CommandBufferHelperTest, TestCommandWrappingExactMultiple) {
- const int32 kCommandSize = 5;
+ const int32 kCommandSize = kTotalNumCommandEntries / 2;
const size_t kNumArgs = kCommandSize - 1;
COMPILE_ASSERT(kTotalNumCommandEntries % kCommandSize == 0,
Not_multiple_of_num_command_entries);
CommandBufferEntry args1[kNumArgs];
for (size_t ii = 0; ii < kNumArgs; ++ii) {
- args1[0].value_uint32 = ii + 1;
+ args1[ii].value_uint32 = ii + 1;
}
for (unsigned int i = 0; i < 5; ++i) {
@@ -226,6 +514,22 @@ TEST_F(CommandBufferHelperTest, TestCommandWrappingExactMultiple) {
EXPECT_EQ(error::kNoError, GetError());
}
+// Checks exact wrapping condition with Get = 0.
+TEST_F(CommandBufferHelperTest, TestCommandWrappingFullAtStart) {
+ TestCommandWrappingFull(2, 0);
+}
+
+// Checks exact wrapping condition with 0 < Get < kTotalNumCommandEntries.
+TEST_F(CommandBufferHelperTest, TestCommandWrappingFullInMiddle) {
+ TestCommandWrappingFull(2, 1);
+}
+
+// Checks exact wrapping condition with Get = kTotalNumCommandEntries.
+// Get should wrap back to 0, but making sure.
+TEST_F(CommandBufferHelperTest, TestCommandWrappingFullAtEnd) {
+ TestCommandWrappingFull(2, kTotalNumCommandEntries / 2);
+}
+
// Checks that asking for available entries work, and that the parser
// effectively won't use that space.
TEST_F(CommandBufferHelperTest, TestAvailableEntries) {
@@ -287,6 +591,46 @@ TEST_F(CommandBufferHelperTest, TestToken) {
EXPECT_EQ(error::kNoError, GetError());
}
+// Checks WaitForToken doesn't Flush if token is already read.
+TEST_F(CommandBufferHelperTest, TestWaitForTokenFlush) {
+ CommandBufferEntry args[2];
+ args[0].value_uint32 = 3;
+ args[1].value_float = 4.f;
+
+ // Add a first command.
+ AddCommandWithExpect(error::kNoError, kUnusedCommandId + 3, 2, args);
+ int32 token = helper_->InsertToken();
+
+ EXPECT_CALL(*api_mock_.get(), DoCommand(cmd::kSetToken, 1, _))
+ .WillOnce(DoAll(Invoke(api_mock_.get(), &AsyncAPIMock::SetToken),
+ Return(error::kNoError)));
+
+ int flush_count = command_buffer_->FlushCount();
+
+ // Test that waiting for pending token causes a Flush.
+ helper_->WaitForToken(token);
+ EXPECT_EQ(command_buffer_->FlushCount(), flush_count + 1);
+
+ // Test that we don't Flush repeatedly.
+ helper_->WaitForToken(token);
+ EXPECT_EQ(command_buffer_->FlushCount(), flush_count + 1);
+
+ // Add another command.
+ AddCommandWithExpect(error::kNoError, kUnusedCommandId + 4, 2, args);
+
+ // Test that we don't Flush repeatedly even if commands are pending.
+ helper_->WaitForToken(token);
+ EXPECT_EQ(command_buffer_->FlushCount(), flush_count + 1);
+
+ helper_->Finish();
+
+ // Check that the commands did happen.
+ Mock::VerifyAndClearExpectations(api_mock_.get());
+
+ // Check the error status.
+ EXPECT_EQ(error::kNoError, GetError());
+}
+
TEST_F(CommandBufferHelperTest, FreeRingBuffer) {
EXPECT_TRUE(helper_->HaveRingBuffer());
@@ -330,4 +674,38 @@ TEST_F(CommandBufferHelperTest, IsContextLost) {
EXPECT_TRUE(helper_->IsContextLost());
}
+// Checks helper's 'flush generation' updates.
+TEST_F(CommandBufferHelperTest, TestFlushGeneration) {
+ // Explicit flushing only.
+ helper_->SetAutomaticFlushes(false);
+
+ // Generation should change after Flush() but not before.
+ uint32 gen1, gen2, gen3;
+
+ gen1 = GetHelperFlushGeneration();
+ AddUniqueCommandWithExpect(error::kNoError, 2);
+ gen2 = GetHelperFlushGeneration();
+ helper_->Flush();
+ gen3 = GetHelperFlushGeneration();
+ EXPECT_EQ(gen2, gen1);
+ EXPECT_NE(gen3, gen2);
+
+ // Generation should change after Finish() but not before.
+ gen1 = GetHelperFlushGeneration();
+ AddUniqueCommandWithExpect(error::kNoError, 2);
+ gen2 = GetHelperFlushGeneration();
+ helper_->Finish();
+ gen3 = GetHelperFlushGeneration();
+ EXPECT_EQ(gen2, gen1);
+ EXPECT_NE(gen3, gen2);
+
+ helper_->Finish();
+
+ // Check that the commands did happen.
+ Mock::VerifyAndClearExpectations(api_mock_.get());
+
+ // Check the error status.
+ EXPECT_EQ(error::kNoError, GetError());
+}
+
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/context_support.h b/chromium/gpu/command_buffer/client/context_support.h
index 6a8972081ca..cba31aa856c 100644
--- a/chromium/gpu/command_buffer/client/context_support.h
+++ b/chromium/gpu/command_buffer/client/context_support.h
@@ -6,10 +6,10 @@
#define GPU_COMMAND_BUFFER_CLIENT_CONTEXT_SUPPORT_H_
#include "base/callback.h"
+#include "ui/gfx/overlay_transform.h"
#include "ui/gfx/rect.h"
namespace gpu {
-struct ManagedMemoryStats;
class ContextSupport {
public:
@@ -25,14 +25,21 @@ class ContextSupport {
// Clients aren't expected to draw to an invisible surface.
virtual void SetSurfaceVisible(bool visible) = 0;
- virtual void SendManagedMemoryStats(const ManagedMemoryStats& stats) = 0;
-
virtual void Swap() = 0;
- virtual void PartialSwapBuffers(gfx::Rect sub_buffer) = 0;
+ virtual void PartialSwapBuffers(const gfx::Rect& sub_buffer) = 0;
virtual void SetSwapBuffersCompleteCallback(
const base::Closure& callback) = 0;
+ // Schedule a texture to be presented as an overlay synchronously with the
+ // primary surface during the next buffer swap.
+ // This method is not stateful and needs to be re-scheduled every frame.
+ virtual void ScheduleOverlayPlane(int plane_z_order,
+ gfx::OverlayTransform plane_transform,
+ unsigned overlay_texture_id,
+ const gfx::Rect& display_bounds,
+ const gfx::RectF& uv_rect) = 0;
+
protected:
ContextSupport() {}
virtual ~ContextSupport() {}
diff --git a/chromium/gpu/command_buffer/client/fenced_allocator.cc b/chromium/gpu/command_buffer/client/fenced_allocator.cc
index 0e90bf385b4..80038571be9 100644
--- a/chromium/gpu/command_buffer/client/fenced_allocator.cc
+++ b/chromium/gpu/command_buffer/client/fenced_allocator.cc
@@ -34,8 +34,10 @@ const FencedAllocator::Offset FencedAllocator::kInvalidOffset;
#endif
FencedAllocator::FencedAllocator(unsigned int size,
- CommandBufferHelper *helper)
+ CommandBufferHelper* helper,
+ const base::Closure& poll_callback)
: helper_(helper),
+ poll_callback_(poll_callback),
bytes_in_use_(0) {
Block block = { FREE, 0, RoundDown(size), kUnusedToken };
blocks_.push_back(block);
@@ -48,9 +50,9 @@ FencedAllocator::~FencedAllocator() {
i = WaitForTokenAndFreeBlock(i);
}
}
- // These checks are not valid if the service has crashed or lost the context.
- // DCHECK_EQ(blocks_.size(), 1u);
- // DCHECK_EQ(blocks_[0].state, FREE);
+
+ DCHECK_EQ(blocks_.size(), 1u);
+ DCHECK_EQ(blocks_[0].state, FREE);
}
// Looks for a non-allocated block that is big enough. Search in the FREE
@@ -203,10 +205,13 @@ FencedAllocator::BlockIndex FencedAllocator::WaitForTokenAndFreeBlock(
// Frees any blocks pending a token for which the token has been read.
void FencedAllocator::FreeUnused() {
- int32 last_token_read = helper_->last_token_read();
+ // Free any potential blocks that has its lifetime handled outside.
+ poll_callback_.Run();
+
for (unsigned int i = 0; i < blocks_.size();) {
Block& block = blocks_[i];
- if (block.state == FREE_PENDING_TOKEN && block.token <= last_token_read) {
+ if (block.state == FREE_PENDING_TOKEN &&
+ helper_->HasTokenPassed(block.token)) {
block.state = FREE;
i = CollapseFreeBlock(i);
} else {
diff --git a/chromium/gpu/command_buffer/client/fenced_allocator.h b/chromium/gpu/command_buffer/client/fenced_allocator.h
index bb5c55170ab..8e222e135bf 100644
--- a/chromium/gpu/command_buffer/client/fenced_allocator.h
+++ b/chromium/gpu/command_buffer/client/fenced_allocator.h
@@ -7,10 +7,13 @@
#ifndef GPU_COMMAND_BUFFER_CLIENT_FENCED_ALLOCATOR_H_
#define GPU_COMMAND_BUFFER_CLIENT_FENCED_ALLOCATOR_H_
+#include <stdint.h>
+
#include <vector>
+#include "base/bind.h"
#include "base/logging.h"
-#include "gpu/command_buffer/common/types.h"
+#include "base/macros.h"
#include "gpu/gpu_export.h"
namespace gpu {
@@ -35,7 +38,8 @@ class GPU_EXPORT FencedAllocator {
// Creates a FencedAllocator. Note that the size of the buffer is passed, but
// not its base address: everything is handled as offsets into the buffer.
FencedAllocator(unsigned int size,
- CommandBufferHelper *helper);
+ CommandBufferHelper *helper,
+ const base::Closure& poll_callback);
~FencedAllocator();
@@ -99,7 +103,7 @@ class GPU_EXPORT FencedAllocator {
State state;
Offset offset;
unsigned int size;
- int32 token; // token to wait for in the FREE_PENDING_TOKEN case.
+ int32_t token; // token to wait for in the FREE_PENDING_TOKEN case.
};
// Comparison functor for memory block sorting.
@@ -113,7 +117,7 @@ class GPU_EXPORT FencedAllocator {
typedef std::vector<Block> Container;
typedef unsigned int BlockIndex;
- static const int32 kUnusedToken = 0;
+ static const int32_t kUnusedToken = 0;
// Gets the index of a memory block, given its offset.
BlockIndex GetBlockByOffset(Offset offset);
@@ -136,6 +140,7 @@ class GPU_EXPORT FencedAllocator {
Offset AllocInBlock(BlockIndex index, unsigned int size);
CommandBufferHelper *helper_;
+ base::Closure poll_callback_;
Container blocks_;
size_t bytes_in_use_;
@@ -148,8 +153,9 @@ class FencedAllocatorWrapper {
public:
FencedAllocatorWrapper(unsigned int size,
CommandBufferHelper* helper,
+ const base::Closure& poll_callback,
void* base)
- : allocator_(size, helper),
+ : allocator_(size, helper, poll_callback),
base_(base) { }
// Allocates a block of memory. If the buffer is out of directly available
diff --git a/chromium/gpu/command_buffer/client/fenced_allocator_test.cc b/chromium/gpu/command_buffer/client/fenced_allocator_test.cc
index cc99ed36522..7ac35d4435e 100644
--- a/chromium/gpu/command_buffer/client/fenced_allocator_test.cc
+++ b/chromium/gpu/command_buffer/client/fenced_allocator_test.cc
@@ -29,6 +29,7 @@ using testing::Truly;
using testing::Sequence;
using testing::DoAll;
using testing::Invoke;
+using testing::InvokeWithoutArgs;
using testing::_;
class BaseFencedAllocatorTest : public testing::Test {
@@ -70,7 +71,7 @@ class BaseFencedAllocatorTest : public testing::Test {
}
int32 GetToken() {
- return command_buffer_->GetState().token;
+ return command_buffer_->GetLastState().token;
}
#if defined(OS_MACOSX)
@@ -88,6 +89,11 @@ class BaseFencedAllocatorTest : public testing::Test {
const unsigned int BaseFencedAllocatorTest::kBufferSize;
#endif
+namespace {
+void EmptyPoll() {
+}
+}
+
// Test fixture for FencedAllocator test - Creates a FencedAllocator, using a
// CommandBufferHelper with a mock AsyncAPIInterface for its interface (calling
// it directly, not through the RPC mechanism), making sure Noops are ignored
@@ -96,7 +102,9 @@ class FencedAllocatorTest : public BaseFencedAllocatorTest {
protected:
virtual void SetUp() {
BaseFencedAllocatorTest::SetUp();
- allocator_.reset(new FencedAllocator(kBufferSize, helper_.get()));
+ allocator_.reset(new FencedAllocator(kBufferSize,
+ helper_.get(),
+ base::Bind(&EmptyPoll)));
}
virtual void TearDown() {
@@ -391,6 +399,63 @@ TEST_F(FencedAllocatorTest, TestGetLargestFreeOrPendingSize) {
EXPECT_EQ(kBufferSize, allocator_->GetLargestFreeSize());
}
+class FencedAllocatorPollTest : public BaseFencedAllocatorTest {
+ public:
+ static const unsigned int kAllocSize = 128;
+
+ MOCK_METHOD0(MockedPoll, void());
+
+ protected:
+ virtual void TearDown() {
+ // If the GpuScheduler posts any tasks, this forces them to run.
+ base::MessageLoop::current()->RunUntilIdle();
+
+ BaseFencedAllocatorTest::TearDown();
+ }
+};
+
+TEST_F(FencedAllocatorPollTest, TestPoll) {
+ scoped_ptr<FencedAllocator> allocator(
+ new FencedAllocator(kBufferSize,
+ helper_.get(),
+ base::Bind(&FencedAllocatorPollTest::MockedPoll,
+ base::Unretained(this))));
+
+ FencedAllocator::Offset mem1 = allocator->Alloc(kAllocSize);
+ FencedAllocator::Offset mem2 = allocator->Alloc(kAllocSize);
+ EXPECT_NE(mem1, FencedAllocator::kInvalidOffset);
+ EXPECT_NE(mem2, FencedAllocator::kInvalidOffset);
+ EXPECT_TRUE(allocator->CheckConsistency());
+ EXPECT_EQ(allocator->bytes_in_use(), kAllocSize * 2);
+
+ // Check that no-op Poll doesn't affect the state.
+ EXPECT_CALL(*this, MockedPoll()).RetiresOnSaturation();
+ allocator->FreeUnused();
+ EXPECT_TRUE(allocator->CheckConsistency());
+ EXPECT_EQ(allocator->bytes_in_use(), kAllocSize * 2);
+
+ // Check that freeing in Poll works.
+ base::Closure free_mem1_closure =
+ base::Bind(&FencedAllocator::Free,
+ base::Unretained(allocator.get()),
+ mem1);
+ EXPECT_CALL(*this, MockedPoll())
+ .WillOnce(InvokeWithoutArgs(&free_mem1_closure, &base::Closure::Run))
+ .RetiresOnSaturation();
+ allocator->FreeUnused();
+ EXPECT_TRUE(allocator->CheckConsistency());
+ EXPECT_EQ(allocator->bytes_in_use(), kAllocSize * 1);
+
+ // Check that freeing still works.
+ EXPECT_CALL(*this, MockedPoll()).RetiresOnSaturation();
+ allocator->Free(mem2);
+ allocator->FreeUnused();
+ EXPECT_TRUE(allocator->CheckConsistency());
+ EXPECT_EQ(allocator->bytes_in_use(), 0u);
+
+ allocator.reset();
+}
+
// Test fixture for FencedAllocatorWrapper test - Creates a
// FencedAllocatorWrapper, using a CommandBufferHelper with a mock
// AsyncAPIInterface for its interface (calling it directly, not through the
@@ -406,7 +471,9 @@ class FencedAllocatorWrapperTest : public BaseFencedAllocatorTest {
// something.
buffer_.reset(static_cast<char*>(base::AlignedAlloc(
kBufferSize, kAllocAlignment)));
- allocator_.reset(new FencedAllocatorWrapper(kBufferSize, helper_.get(),
+ allocator_.reset(new FencedAllocatorWrapper(kBufferSize,
+ helper_.get(),
+ base::Bind(&EmptyPoll),
buffer_.get()));
}
@@ -420,7 +487,7 @@ class FencedAllocatorWrapperTest : public BaseFencedAllocatorTest {
}
scoped_ptr<FencedAllocatorWrapper> allocator_;
- scoped_ptr_malloc<char, base::ScopedPtrAlignedFree> buffer_;
+ scoped_ptr<char, base::AlignedFreeDeleter> buffer_;
};
// Checks basic alloc and free.
diff --git a/chromium/gpu/command_buffer/client/gl_in_process_context.cc b/chromium/gpu/command_buffer/client/gl_in_process_context.cc
index 1bd4c625457..33d41563dea 100644
--- a/chromium/gpu/command_buffer/client/gl_in_process_context.cc
+++ b/chromium/gpu/command_buffer/client/gl_in_process_context.cc
@@ -26,7 +26,6 @@
#include "gpu/command_buffer/client/transfer_buffer.h"
#include "gpu/command_buffer/common/command_buffer.h"
#include "gpu/command_buffer/common/constants.h"
-#include "gpu/command_buffer/service/in_process_command_buffer.h"
#include "ui/gfx/size.h"
#include "ui/gl/gl_image.h"
@@ -52,13 +51,16 @@ class GLInProcessContextImpl
explicit GLInProcessContextImpl();
virtual ~GLInProcessContextImpl();
- bool Initialize(scoped_refptr<gfx::GLSurface> surface,
- bool is_offscreen,
- bool share_resources,
- gfx::AcceleratedWidget window,
- const gfx::Size& size,
- const GLInProcessContextAttribs& attribs,
- gfx::GpuPreference gpu_preference);
+ bool Initialize(
+ scoped_refptr<gfx::GLSurface> surface,
+ bool is_offscreen,
+ bool use_global_share_group,
+ GLInProcessContext* share_context,
+ gfx::AcceleratedWidget window,
+ const gfx::Size& size,
+ const GLInProcessContextAttribs& attribs,
+ gfx::GpuPreference gpu_preference,
+ const scoped_refptr<InProcessCommandBuffer::Service>& service);
// GLInProcessContext implementation:
virtual void SetContextLostCallback(const base::Closure& callback) OVERRIDE;
@@ -79,7 +81,6 @@ class GLInProcessContextImpl
scoped_ptr<gles2::GLES2Implementation> gles2_implementation_;
scoped_ptr<InProcessCommandBuffer> command_buffer_;
- unsigned int share_group_id_;
bool context_lost_;
base::Closure context_lost_callback_;
@@ -92,7 +93,7 @@ base::LazyInstance<std::set<GLInProcessContextImpl*> > g_all_shared_contexts =
LAZY_INSTANCE_INITIALIZER;
GLInProcessContextImpl::GLInProcessContextImpl()
- : share_group_id_(0), context_lost_(false) {}
+ : context_lost_(false) {}
GLInProcessContextImpl::~GLInProcessContextImpl() {
{
@@ -121,11 +122,14 @@ void GLInProcessContextImpl::OnContextLost() {
bool GLInProcessContextImpl::Initialize(
scoped_refptr<gfx::GLSurface> surface,
bool is_offscreen,
- bool share_resources,
+ bool use_global_share_group,
+ GLInProcessContext* share_context,
gfx::AcceleratedWidget window,
const gfx::Size& size,
const GLInProcessContextAttribs& attribs,
- gfx::GpuPreference gpu_preference) {
+ gfx::GpuPreference gpu_preference,
+ const scoped_refptr<InProcessCommandBuffer::Service>& service) {
+ DCHECK(!use_global_share_group || !share_context);
DCHECK(size.width() >= 0 && size.height() >= 0);
// Changes to these values should also be copied to
@@ -143,6 +147,7 @@ bool GLInProcessContextImpl::Initialize(
// Chromium-specific attributes
const int32 FAIL_IF_MAJOR_PERF_CAVEAT = 0x10002;
+ const int32 LOSE_CONTEXT_WHEN_OUT_OF_MEMORY = 0x10003;
std::vector<int32> attrib_vector;
if (attribs.alpha_size >= 0) {
@@ -181,15 +186,20 @@ bool GLInProcessContextImpl::Initialize(
attrib_vector.push_back(FAIL_IF_MAJOR_PERF_CAVEAT);
attrib_vector.push_back(attribs.fail_if_major_perf_caveat);
}
+ if (attribs.lose_context_when_out_of_memory > 0) {
+ attrib_vector.push_back(LOSE_CONTEXT_WHEN_OUT_OF_MEMORY);
+ attrib_vector.push_back(attribs.lose_context_when_out_of_memory);
+ }
attrib_vector.push_back(NONE);
base::Closure wrapped_callback =
base::Bind(&GLInProcessContextImpl::OnContextLost, AsWeakPtr());
- command_buffer_.reset(new InProcessCommandBuffer());
+ command_buffer_.reset(new InProcessCommandBuffer(service));
scoped_ptr<base::AutoLock> scoped_shared_context_lock;
scoped_refptr<gles2::ShareGroup> share_group;
- if (share_resources) {
+ InProcessCommandBuffer* share_command_buffer = NULL;
+ if (use_global_share_group) {
scoped_shared_context_lock.reset(
new base::AutoLock(g_all_shared_contexts_lock.Get()));
for (std::set<GLInProcessContextImpl*>::const_iterator it =
@@ -199,24 +209,29 @@ bool GLInProcessContextImpl::Initialize(
const GLInProcessContextImpl* context = *it;
if (!context->context_lost_) {
share_group = context->gles2_implementation_->share_group();
+ share_command_buffer = context->command_buffer_.get();
DCHECK(share_group);
- share_group_id_ = context->share_group_id_;
+ DCHECK(share_command_buffer);
break;
}
- share_group_id_ = std::max(share_group_id_, context->share_group_id_);
}
- if (!share_group && !++share_group_id_)
- ++share_group_id_;
+ } else if (share_context) {
+ GLInProcessContextImpl* impl =
+ static_cast<GLInProcessContextImpl*>(share_context);
+ share_group = impl->gles2_implementation_->share_group();
+ share_command_buffer = impl->command_buffer_.get();
+ DCHECK(share_group);
+ DCHECK(share_command_buffer);
}
+
if (!command_buffer_->Initialize(surface,
is_offscreen,
- share_resources,
window,
size,
attrib_vector,
gpu_preference,
wrapped_callback,
- share_group_id_)) {
+ share_command_buffer)) {
LOG(ERROR) << "Failed to initialize InProcessCommmandBuffer";
return false;
}
@@ -233,7 +248,6 @@ bool GLInProcessContextImpl::Initialize(
transfer_buffer_.reset(new TransferBuffer(gles2_helper_.get()));
bool bind_generates_resources = false;
- bool free_everything_when_invisible = false;
// Create the object exposing the OpenGL API.
gles2_implementation_.reset(new gles2::GLES2Implementation(
@@ -241,10 +255,10 @@ bool GLInProcessContextImpl::Initialize(
share_group,
transfer_buffer_.get(),
bind_generates_resources,
- free_everything_when_invisible,
+ attribs.lose_context_when_out_of_memory > 0,
command_buffer_.get()));
- if (share_resources) {
+ if (use_global_share_group) {
g_all_shared_contexts.Get().insert(this);
scoped_shared_context_lock.reset();
}
@@ -294,7 +308,9 @@ GLInProcessContextAttribs::GLInProcessContextAttribs()
depth_size(-1),
stencil_size(-1),
samples(-1),
- sample_buffers(-1) {}
+ sample_buffers(-1),
+ fail_if_major_perf_caveat(-1),
+ lose_context_when_out_of_memory(-1) {}
// static
GLInProcessContext* GLInProcessContext::CreateContext(
@@ -310,31 +326,44 @@ GLInProcessContext* GLInProcessContext::CreateContext(
NULL /* surface */,
is_offscreen,
share_resources,
+ NULL,
window,
size,
attribs,
- gpu_preference))
+ gpu_preference,
+ scoped_refptr<InProcessCommandBuffer::Service>()))
return NULL;
return context.release();
}
-// static
-GLInProcessContext* GLInProcessContext::CreateWithSurface(
+GLInProcessContext* GLInProcessContext::Create(
+ scoped_refptr<gpu::InProcessCommandBuffer::Service> service,
scoped_refptr<gfx::GLSurface> surface,
- bool share_resources,
+ bool is_offscreen,
+ gfx::AcceleratedWidget window,
+ const gfx::Size& size,
+ GLInProcessContext* share_context,
+ bool use_global_share_group,
const GLInProcessContextAttribs& attribs,
gfx::GpuPreference gpu_preference) {
- scoped_ptr<GLInProcessContextImpl> context(
- new GLInProcessContextImpl());
- if (!context->Initialize(
- surface,
- surface->IsOffscreen(),
- share_resources,
- gfx::kNullAcceleratedWidget,
- surface->GetSize(),
- attribs,
- gpu_preference))
+ DCHECK(!use_global_share_group || !share_context);
+ if (surface.get()) {
+ DCHECK_EQ(surface->IsOffscreen(), is_offscreen);
+ DCHECK(surface->GetSize() == size);
+ DCHECK_EQ(gfx::kNullAcceleratedWidget, window);
+ }
+
+ scoped_ptr<GLInProcessContextImpl> context(new GLInProcessContextImpl());
+ if (!context->Initialize(surface,
+ is_offscreen,
+ use_global_share_group,
+ share_context,
+ gfx::kNullAcceleratedWidget,
+ size,
+ attribs,
+ gpu_preference,
+ service))
return NULL;
return context.release();
diff --git a/chromium/gpu/command_buffer/client/gl_in_process_context.h b/chromium/gpu/command_buffer/client/gl_in_process_context.h
index 6d96f131554..c1478b11135 100644
--- a/chromium/gpu/command_buffer/client/gl_in_process_context.h
+++ b/chromium/gpu/command_buffer/client/gl_in_process_context.h
@@ -7,7 +7,8 @@
#include "base/callback.h"
#include "base/compiler_specific.h"
-#include "gles2_impl_export.h"
+#include "gl_in_process_context_export.h"
+#include "gpu/command_buffer/service/in_process_command_buffer.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gl/gl_surface.h"
#include "ui/gl/gpu_preference.h"
@@ -29,7 +30,7 @@ class GLES2Implementation;
}
// The default uninitialized value is -1.
-struct GLES2_IMPL_EXPORT GLInProcessContextAttribs {
+struct GL_IN_PROCESS_CONTEXT_EXPORT GLInProcessContextAttribs {
GLInProcessContextAttribs();
int32 alpha_size;
@@ -41,15 +42,17 @@ struct GLES2_IMPL_EXPORT GLInProcessContextAttribs {
int32 samples;
int32 sample_buffers;
int32 fail_if_major_perf_caveat;
+ int32 lose_context_when_out_of_memory;
};
-class GLES2_IMPL_EXPORT GLInProcessContext {
+class GL_IN_PROCESS_CONTEXT_EXPORT GLInProcessContext {
public:
virtual ~GLInProcessContext() {}
// Create a GLInProcessContext, if |is_offscreen| is true, renders to an
// offscreen context. |attrib_list| must be NULL or a NONE-terminated list
// of attribute/value pairs.
+ // TODO(boliu): Fix all callsites to use Create and remove this.
static GLInProcessContext* CreateContext(
bool is_offscreen,
gfx::AcceleratedWidget window,
@@ -58,13 +61,21 @@ class GLES2_IMPL_EXPORT GLInProcessContext {
const GLInProcessContextAttribs& attribs,
gfx::GpuPreference gpu_preference);
- // Create context with the provided GLSurface. All other arguments match
- // CreateContext factory above. Can only be called if the command buffer
- // service runs on the same thread as this client because GLSurface is not
- // thread safe.
- static GLInProcessContext* CreateWithSurface(
+ // If |surface| is not NULL, then it must match |is_offscreen| and |size|,
+ // |window| must be gfx::kNullAcceleratedWidget, and the command buffer
+ // service must run on the same thread as this client because GLSurface is
+ // not thread safe. If |surface| is NULL, then the other parameters are used
+ // to correctly create a surface.
+ // Only one of |share_context| and |use_global_share_group| can be used at
+ // the same time.
+ static GLInProcessContext* Create(
+ scoped_refptr<gpu::InProcessCommandBuffer::Service> service,
scoped_refptr<gfx::GLSurface> surface,
- bool share_resources,
+ bool is_offscreen,
+ gfx::AcceleratedWidget window,
+ const gfx::Size& size,
+ GLInProcessContext* share_context,
+ bool use_global_share_group,
const GLInProcessContextAttribs& attribs,
gfx::GpuPreference gpu_preference);
diff --git a/chromium/gpu/command_buffer/client/gl_in_process_context_export.h b/chromium/gpu/command_buffer/client/gl_in_process_context_export.h
new file mode 100644
index 00000000000..36c4a34df9d
--- /dev/null
+++ b/chromium/gpu/command_buffer/client/gl_in_process_context_export.h
@@ -0,0 +1,29 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GL_IN_PROCESS_CONTEXT_EXPORT_H_
+#define GL_IN_PROCESS_CONTEXT_EXPORT_H_
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(GL_IN_PROCESS_CONTEXT_IMPLEMENTATION)
+#define GL_IN_PROCESS_CONTEXT_EXPORT __declspec(dllexport)
+#else
+#define GL_IN_PROCESS_CONTEXT_EXPORT __declspec(dllimport)
+#endif // defined(GL_IN_PROCESS_CONTEXT_IMPLEMENTATION)
+
+#else // defined(WIN32)
+#if defined(GL_IN_PROCESS_CONTEXT_IMPLEMENTATION)
+#define GL_IN_PROCESS_CONTEXT_EXPORT __attribute__((visibility("default")))
+#else
+#define GL_IN_PROCESS_CONTEXT_EXPORT
+#endif
+#endif
+
+#else // defined(COMPONENT_BUILD)
+#define GL_IN_PROCESS_CONTEXT_EXPORT
+#endif
+
+#endif // GL_IN_PROCESS_CONTEXT_EXPORT_H_
diff --git a/chromium/gpu/command_buffer/client/gles2_c_lib_autogen.h b/chromium/gpu/command_buffer/client/gles2_c_lib_autogen.h
index f2eb83746e7..f59157d14e2 100644
--- a/chromium/gpu/command_buffer/client/gles2_c_lib_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// These functions emulate GLES2 over command buffers.
@@ -31,8 +33,10 @@ void GLES2BindRenderbuffer(GLenum target, GLuint renderbuffer) {
void GLES2BindTexture(GLenum target, GLuint texture) {
gles2::GetGLContext()->BindTexture(target, texture);
}
-void GLES2BlendColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
+void GLES2BlendColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) {
gles2::GetGLContext()->BlendColor(red, green, blue, alpha);
}
void GLES2BlendEquation(GLenum mode) {
@@ -44,16 +48,22 @@ void GLES2BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {
void GLES2BlendFunc(GLenum sfactor, GLenum dfactor) {
gles2::GetGLContext()->BlendFunc(sfactor, dfactor);
}
-void GLES2BlendFuncSeparate(
- GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
+void GLES2BlendFuncSeparate(GLenum srcRGB,
+ GLenum dstRGB,
+ GLenum srcAlpha,
+ GLenum dstAlpha) {
gles2::GetGLContext()->BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
}
-void GLES2BufferData(
- GLenum target, GLsizeiptr size, const void* data, GLenum usage) {
+void GLES2BufferData(GLenum target,
+ GLsizeiptr size,
+ const void* data,
+ GLenum usage) {
gles2::GetGLContext()->BufferData(target, size, data, usage);
}
-void GLES2BufferSubData(
- GLenum target, GLintptr offset, GLsizeiptr size, const void* data) {
+void GLES2BufferSubData(GLenum target,
+ GLintptr offset,
+ GLsizeiptr size,
+ const void* data) {
gles2::GetGLContext()->BufferSubData(target, offset, size, data);
}
GLenum GLES2CheckFramebufferStatus(GLenum target) {
@@ -62,8 +72,10 @@ GLenum GLES2CheckFramebufferStatus(GLenum target) {
void GLES2Clear(GLbitfield mask) {
gles2::GetGLContext()->Clear(mask);
}
-void GLES2ClearColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
+void GLES2ClearColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) {
gles2::GetGLContext()->ClearColor(red, green, blue, alpha);
}
void GLES2ClearDepthf(GLclampf depth) {
@@ -72,34 +84,57 @@ void GLES2ClearDepthf(GLclampf depth) {
void GLES2ClearStencil(GLint s) {
gles2::GetGLContext()->ClearStencil(s);
}
-void GLES2ColorMask(
- GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
+void GLES2ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) {
gles2::GetGLContext()->ColorMask(red, green, blue, alpha);
}
void GLES2CompileShader(GLuint shader) {
gles2::GetGLContext()->CompileShader(shader);
}
-void GLES2CompressedTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLsizei imageSize, const void* data) {
+void GLES2CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void* data) {
gles2::GetGLContext()->CompressedTexImage2D(
target, level, internalformat, width, height, border, imageSize, data);
}
-void GLES2CompressedTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, const void* data) {
+void GLES2CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void* data) {
gles2::GetGLContext()->CompressedTexSubImage2D(
target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
-void GLES2CopyTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border) {
+void GLES2CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border) {
gles2::GetGLContext()->CopyTexImage2D(
target, level, internalformat, x, y, width, height, border);
}
-void GLES2CopyTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y,
- GLsizei width, GLsizei height) {
+void GLES2CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
gles2::GetGLContext()->CopyTexSubImage2D(
target, level, xoffset, yoffset, x, y, width, height);
}
@@ -151,8 +186,10 @@ void GLES2DisableVertexAttribArray(GLuint index) {
void GLES2DrawArrays(GLenum mode, GLint first, GLsizei count) {
gles2::GetGLContext()->DrawArrays(mode, first, count);
}
-void GLES2DrawElements(
- GLenum mode, GLsizei count, GLenum type, const void* indices) {
+void GLES2DrawElements(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices) {
gles2::GetGLContext()->DrawElements(mode, count, type, indices);
}
void GLES2Enable(GLenum cap) {
@@ -167,15 +204,18 @@ void GLES2Finish() {
void GLES2Flush() {
gles2::GetGLContext()->Flush();
}
-void GLES2FramebufferRenderbuffer(
- GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer) {
+void GLES2FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer) {
gles2::GetGLContext()->FramebufferRenderbuffer(
target, attachment, renderbuffertarget, renderbuffer);
}
-void GLES2FramebufferTexture2D(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level) {
+void GLES2FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level) {
gles2::GetGLContext()->FramebufferTexture2D(
target, attachment, textarget, texture, level);
}
@@ -197,20 +237,30 @@ void GLES2GenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
void GLES2GenTextures(GLsizei n, GLuint* textures) {
gles2::GetGLContext()->GenTextures(n, textures);
}
-void GLES2GetActiveAttrib(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) {
+void GLES2GetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) {
gles2::GetGLContext()->GetActiveAttrib(
program, index, bufsize, length, size, type, name);
}
-void GLES2GetActiveUniform(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) {
+void GLES2GetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) {
gles2::GetGLContext()->GetActiveUniform(
program, index, bufsize, length, size, type, name);
}
-void GLES2GetAttachedShaders(
- GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) {
+void GLES2GetAttachedShaders(GLuint program,
+ GLsizei maxcount,
+ GLsizei* count,
+ GLuint* shaders) {
gles2::GetGLContext()->GetAttachedShaders(program, maxcount, count, shaders);
}
GLint GLES2GetAttribLocation(GLuint program, const char* name) {
@@ -228,8 +278,10 @@ GLenum GLES2GetError() {
void GLES2GetFloatv(GLenum pname, GLfloat* params) {
gles2::GetGLContext()->GetFloatv(pname, params);
}
-void GLES2GetFramebufferAttachmentParameteriv(
- GLenum target, GLenum attachment, GLenum pname, GLint* params) {
+void GLES2GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint* params) {
gles2::GetGLContext()->GetFramebufferAttachmentParameteriv(
target, attachment, pname, params);
}
@@ -239,28 +291,37 @@ void GLES2GetIntegerv(GLenum pname, GLint* params) {
void GLES2GetProgramiv(GLuint program, GLenum pname, GLint* params) {
gles2::GetGLContext()->GetProgramiv(program, pname, params);
}
-void GLES2GetProgramInfoLog(
- GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) {
+void GLES2GetProgramInfoLog(GLuint program,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) {
gles2::GetGLContext()->GetProgramInfoLog(program, bufsize, length, infolog);
}
-void GLES2GetRenderbufferParameteriv(
- GLenum target, GLenum pname, GLint* params) {
+void GLES2GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) {
gles2::GetGLContext()->GetRenderbufferParameteriv(target, pname, params);
}
void GLES2GetShaderiv(GLuint shader, GLenum pname, GLint* params) {
gles2::GetGLContext()->GetShaderiv(shader, pname, params);
}
-void GLES2GetShaderInfoLog(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) {
+void GLES2GetShaderInfoLog(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) {
gles2::GetGLContext()->GetShaderInfoLog(shader, bufsize, length, infolog);
}
-void GLES2GetShaderPrecisionFormat(
- GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) {
+void GLES2GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint* range,
+ GLint* precision) {
gles2::GetGLContext()->GetShaderPrecisionFormat(
shadertype, precisiontype, range, precision);
}
-void GLES2GetShaderSource(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) {
+void GLES2GetShaderSource(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) {
gles2::GetGLContext()->GetShaderSource(shader, bufsize, length, source);
}
const GLubyte* GLES2GetString(GLenum name) {
@@ -326,16 +387,22 @@ void GLES2PixelStorei(GLenum pname, GLint param) {
void GLES2PolygonOffset(GLfloat factor, GLfloat units) {
gles2::GetGLContext()->PolygonOffset(factor, units);
}
-void GLES2ReadPixels(
- GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
- void* pixels) {
+void GLES2ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void* pixels) {
gles2::GetGLContext()->ReadPixels(x, y, width, height, format, type, pixels);
}
void GLES2ReleaseShaderCompiler() {
gles2::GetGLContext()->ReleaseShaderCompiler();
}
-void GLES2RenderbufferStorage(
- GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
+void GLES2RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) {
gles2::GetGLContext()->RenderbufferStorage(
target, internalformat, width, height);
}
@@ -345,15 +412,17 @@ void GLES2SampleCoverage(GLclampf value, GLboolean invert) {
void GLES2Scissor(GLint x, GLint y, GLsizei width, GLsizei height) {
gles2::GetGLContext()->Scissor(x, y, width, height);
}
-void GLES2ShaderBinary(
- GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary,
- GLsizei length) {
- gles2::GetGLContext()->ShaderBinary(
- n, shaders, binaryformat, binary, length);
-}
-void GLES2ShaderSource(
- GLuint shader, GLsizei count, const GLchar* const* str,
- const GLint* length) {
+void GLES2ShaderBinary(GLsizei n,
+ const GLuint* shaders,
+ GLenum binaryformat,
+ const void* binary,
+ GLsizei length) {
+ gles2::GetGLContext()->ShaderBinary(n, shaders, binaryformat, binary, length);
+}
+void GLES2ShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar* const* str,
+ const GLint* length) {
gles2::GetGLContext()->ShaderSource(shader, count, str, length);
}
void GLES2ShallowFinishCHROMIUM() {
@@ -365,8 +434,10 @@ void GLES2ShallowFlushCHROMIUM() {
void GLES2StencilFunc(GLenum func, GLint ref, GLuint mask) {
gles2::GetGLContext()->StencilFunc(func, ref, mask);
}
-void GLES2StencilFuncSeparate(
- GLenum face, GLenum func, GLint ref, GLuint mask) {
+void GLES2StencilFuncSeparate(GLenum face,
+ GLenum func,
+ GLint ref,
+ GLuint mask) {
gles2::GetGLContext()->StencilFuncSeparate(face, func, ref, mask);
}
void GLES2StencilMask(GLuint mask) {
@@ -378,17 +449,30 @@ void GLES2StencilMaskSeparate(GLenum face, GLuint mask) {
void GLES2StencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
gles2::GetGLContext()->StencilOp(fail, zfail, zpass);
}
-void GLES2StencilOpSeparate(
- GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {
+void GLES2StencilOpSeparate(GLenum face,
+ GLenum fail,
+ GLenum zfail,
+ GLenum zpass) {
gles2::GetGLContext()->StencilOpSeparate(face, fail, zfail, zpass);
}
-void GLES2TexImage2D(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) {
- gles2::GetGLContext()->TexImage2D(
- target, level, internalformat, width, height, border, format, type,
- pixels);
+void GLES2TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) {
+ gles2::GetGLContext()->TexImage2D(target,
+ level,
+ internalformat,
+ width,
+ height,
+ border,
+ format,
+ type,
+ pixels);
}
void GLES2TexParameterf(GLenum target, GLenum pname, GLfloat param) {
gles2::GetGLContext()->TexParameterf(target, pname, param);
@@ -402,9 +486,15 @@ void GLES2TexParameteri(GLenum target, GLenum pname, GLint param) {
void GLES2TexParameteriv(GLenum target, GLenum pname, const GLint* params) {
gles2::GetGLContext()->TexParameteriv(target, pname, params);
}
-void GLES2TexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* pixels) {
+void GLES2TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* pixels) {
gles2::GetGLContext()->TexSubImage2D(
target, level, xoffset, yoffset, width, height, format, type, pixels);
}
@@ -444,8 +534,11 @@ void GLES2Uniform3i(GLint location, GLint x, GLint y, GLint z) {
void GLES2Uniform3iv(GLint location, GLsizei count, const GLint* v) {
gles2::GetGLContext()->Uniform3iv(location, count, v);
}
-void GLES2Uniform4f(
- GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+void GLES2Uniform4f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) {
gles2::GetGLContext()->Uniform4f(location, x, y, z, w);
}
void GLES2Uniform4fv(GLint location, GLsizei count, const GLfloat* v) {
@@ -457,16 +550,22 @@ void GLES2Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) {
void GLES2Uniform4iv(GLint location, GLsizei count, const GLint* v) {
gles2::GetGLContext()->Uniform4iv(location, count, v);
}
-void GLES2UniformMatrix2fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
gles2::GetGLContext()->UniformMatrix2fv(location, count, transpose, value);
}
-void GLES2UniformMatrix3fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
gles2::GetGLContext()->UniformMatrix3fv(location, count, transpose, value);
}
-void GLES2UniformMatrix4fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
gles2::GetGLContext()->UniformMatrix4fv(location, count, transpose, value);
}
void GLES2UseProgram(GLuint program) {
@@ -493,49 +592,71 @@ void GLES2VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
void GLES2VertexAttrib3fv(GLuint indx, const GLfloat* values) {
gles2::GetGLContext()->VertexAttrib3fv(indx, values);
}
-void GLES2VertexAttrib4f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+void GLES2VertexAttrib4f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) {
gles2::GetGLContext()->VertexAttrib4f(indx, x, y, z, w);
}
void GLES2VertexAttrib4fv(GLuint indx, const GLfloat* values) {
gles2::GetGLContext()->VertexAttrib4fv(indx, values);
}
-void GLES2VertexAttribPointer(
- GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
- const void* ptr) {
+void GLES2VertexAttribPointer(GLuint indx,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void* ptr) {
gles2::GetGLContext()->VertexAttribPointer(
indx, size, type, normalized, stride, ptr);
}
void GLES2Viewport(GLint x, GLint y, GLsizei width, GLsizei height) {
gles2::GetGLContext()->Viewport(x, y, width, height);
}
-void GLES2BlitFramebufferCHROMIUM(
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0,
- GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
+void GLES2BlitFramebufferCHROMIUM(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter) {
gles2::GetGLContext()->BlitFramebufferCHROMIUM(
srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
-void GLES2RenderbufferStorageMultisampleCHROMIUM(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) {
+void GLES2RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) {
gles2::GetGLContext()->RenderbufferStorageMultisampleCHROMIUM(
target, samples, internalformat, width, height);
}
-void GLES2RenderbufferStorageMultisampleEXT(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) {
+void GLES2RenderbufferStorageMultisampleEXT(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) {
gles2::GetGLContext()->RenderbufferStorageMultisampleEXT(
target, samples, internalformat, width, height);
}
-void GLES2FramebufferTexture2DMultisampleEXT(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLsizei samples) {
+void GLES2FramebufferTexture2DMultisampleEXT(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level,
+ GLsizei samples) {
gles2::GetGLContext()->FramebufferTexture2DMultisampleEXT(
target, attachment, textarget, texture, level, samples);
}
-void GLES2TexStorage2DEXT(
- GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
- GLsizei height) {
+void GLES2TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalFormat,
+ GLsizei width,
+ GLsizei height) {
gles2::GetGLContext()->TexStorage2DEXT(
target, levels, internalFormat, width, height);
}
@@ -584,21 +705,27 @@ void GLES2BindVertexArrayOES(GLuint array) {
void GLES2SwapBuffers() {
gles2::GetGLContext()->SwapBuffers();
}
-GLuint GLES2GetMaxValueInBufferCHROMIUM(
- GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) {
+GLuint GLES2GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+ GLsizei count,
+ GLenum type,
+ GLuint offset) {
return gles2::GetGLContext()->GetMaxValueInBufferCHROMIUM(
buffer_id, count, type, offset);
}
-void GLES2GenSharedIdsCHROMIUM(
- GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) {
+void GLES2GenSharedIdsCHROMIUM(GLuint namespace_id,
+ GLuint id_offset,
+ GLsizei n,
+ GLuint* ids) {
gles2::GetGLContext()->GenSharedIdsCHROMIUM(namespace_id, id_offset, n, ids);
}
-void GLES2DeleteSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) {
+void GLES2DeleteSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) {
gles2::GetGLContext()->DeleteSharedIdsCHROMIUM(namespace_id, n, ids);
}
-void GLES2RegisterSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) {
+void GLES2RegisterSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) {
gles2::GetGLContext()->RegisterSharedIdsCHROMIUM(namespace_id, n, ids);
}
GLboolean GLES2EnableFeatureCHROMIUM(const char* feature) {
@@ -610,23 +737,31 @@ void* GLES2MapBufferCHROMIUM(GLuint target, GLenum access) {
GLboolean GLES2UnmapBufferCHROMIUM(GLuint target) {
return gles2::GetGLContext()->UnmapBufferCHROMIUM(target);
}
-void* GLES2MapImageCHROMIUM(GLuint image_id, GLenum access) {
- return gles2::GetGLContext()->MapImageCHROMIUM(image_id, access);
+void* GLES2MapImageCHROMIUM(GLuint image_id) {
+ return gles2::GetGLContext()->MapImageCHROMIUM(image_id);
}
void GLES2UnmapImageCHROMIUM(GLuint image_id) {
gles2::GetGLContext()->UnmapImageCHROMIUM(image_id);
}
-void* GLES2MapBufferSubDataCHROMIUM(
- GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) {
+void* GLES2MapBufferSubDataCHROMIUM(GLuint target,
+ GLintptr offset,
+ GLsizeiptr size,
+ GLenum access) {
return gles2::GetGLContext()->MapBufferSubDataCHROMIUM(
target, offset, size, access);
}
void GLES2UnmapBufferSubDataCHROMIUM(const void* mem) {
gles2::GetGLContext()->UnmapBufferSubDataCHROMIUM(mem);
}
-void* GLES2MapTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, GLenum access) {
+void* GLES2MapTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLenum access) {
return gles2::GetGLContext()->MapTexSubImage2DCHROMIUM(
target, level, xoffset, yoffset, width, height, format, type, access);
}
@@ -645,61 +780,76 @@ void GLES2RequestExtensionCHROMIUM(const char* extension) {
void GLES2RateLimitOffscreenContextCHROMIUM() {
gles2::GetGLContext()->RateLimitOffscreenContextCHROMIUM();
}
-void GLES2GetMultipleIntegervCHROMIUM(
- const GLenum* pnames, GLuint count, GLint* results, GLsizeiptr size) {
+void GLES2GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+ GLuint count,
+ GLint* results,
+ GLsizeiptr size) {
gles2::GetGLContext()->GetMultipleIntegervCHROMIUM(
pnames, count, results, size);
}
-void GLES2GetProgramInfoCHROMIUM(
- GLuint program, GLsizei bufsize, GLsizei* size, void* info) {
+void GLES2GetProgramInfoCHROMIUM(GLuint program,
+ GLsizei bufsize,
+ GLsizei* size,
+ void* info) {
gles2::GetGLContext()->GetProgramInfoCHROMIUM(program, bufsize, size, info);
}
GLuint GLES2CreateStreamTextureCHROMIUM(GLuint texture) {
return gles2::GetGLContext()->CreateStreamTextureCHROMIUM(texture);
}
-void GLES2DestroyStreamTextureCHROMIUM(GLuint texture) {
- gles2::GetGLContext()->DestroyStreamTextureCHROMIUM(texture);
-}
-GLuint GLES2CreateImageCHROMIUM(
- GLsizei width, GLsizei height, GLenum internalformat) {
+GLuint GLES2CreateImageCHROMIUM(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage) {
return gles2::GetGLContext()->CreateImageCHROMIUM(
- width, height, internalformat);
+ width, height, internalformat, usage);
}
void GLES2DestroyImageCHROMIUM(GLuint image_id) {
gles2::GetGLContext()->DestroyImageCHROMIUM(image_id);
}
-void GLES2GetImageParameterivCHROMIUM(
- GLuint image_id, GLenum pname, GLint* params) {
+void GLES2GetImageParameterivCHROMIUM(GLuint image_id,
+ GLenum pname,
+ GLint* params) {
gles2::GetGLContext()->GetImageParameterivCHROMIUM(image_id, pname, params);
}
-void GLES2GetTranslatedShaderSourceANGLE(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) {
+void GLES2GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) {
gles2::GetGLContext()->GetTranslatedShaderSourceANGLE(
shader, bufsize, length, source);
}
void GLES2PostSubBufferCHROMIUM(GLint x, GLint y, GLint width, GLint height) {
gles2::GetGLContext()->PostSubBufferCHROMIUM(x, y, width, height);
}
-void GLES2TexImageIOSurface2DCHROMIUM(
- GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
- GLuint plane) {
+void GLES2TexImageIOSurface2DCHROMIUM(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLuint ioSurfaceId,
+ GLuint plane) {
gles2::GetGLContext()->TexImageIOSurface2DCHROMIUM(
target, width, height, ioSurfaceId, plane);
}
-void GLES2CopyTextureCHROMIUM(
- GLenum target, GLenum source_id, GLenum dest_id, GLint level,
- GLint internalformat, GLenum dest_type) {
+void GLES2CopyTextureCHROMIUM(GLenum target,
+ GLenum source_id,
+ GLenum dest_id,
+ GLint level,
+ GLint internalformat,
+ GLenum dest_type) {
gles2::GetGLContext()->CopyTextureCHROMIUM(
target, source_id, dest_id, level, internalformat, dest_type);
}
-void GLES2DrawArraysInstancedANGLE(
- GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
+void GLES2DrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount) {
gles2::GetGLContext()->DrawArraysInstancedANGLE(
mode, first, count, primcount);
}
-void GLES2DrawElementsInstancedANGLE(
- GLenum mode, GLsizei count, GLenum type, const void* indices,
- GLsizei primcount) {
+void GLES2DrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices,
+ GLsizei primcount) {
gles2::GetGLContext()->DrawElementsInstancedANGLE(
mode, count, type, indices, primcount);
}
@@ -712,11 +862,22 @@ void GLES2GenMailboxCHROMIUM(GLbyte* mailbox) {
void GLES2ProduceTextureCHROMIUM(GLenum target, const GLbyte* mailbox) {
gles2::GetGLContext()->ProduceTextureCHROMIUM(target, mailbox);
}
+void GLES2ProduceTextureDirectCHROMIUM(GLuint texture,
+ GLenum target,
+ const GLbyte* mailbox) {
+ gles2::GetGLContext()->ProduceTextureDirectCHROMIUM(texture, target, mailbox);
+}
void GLES2ConsumeTextureCHROMIUM(GLenum target, const GLbyte* mailbox) {
gles2::GetGLContext()->ConsumeTextureCHROMIUM(target, mailbox);
}
-void GLES2BindUniformLocationCHROMIUM(
- GLuint program, GLint location, const char* name) {
+GLuint GLES2CreateAndConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) {
+ return gles2::GetGLContext()->CreateAndConsumeTextureCHROMIUM(target,
+ mailbox);
+}
+void GLES2BindUniformLocationCHROMIUM(GLuint program,
+ GLint location,
+ const char* name) {
gles2::GetGLContext()->BindUniformLocationCHROMIUM(program, location, name);
}
void GLES2BindTexImage2DCHROMIUM(GLenum target, GLint imageId) {
@@ -731,25 +892,46 @@ void GLES2TraceBeginCHROMIUM(const char* name) {
void GLES2TraceEndCHROMIUM() {
gles2::GetGLContext()->TraceEndCHROMIUM();
}
-void GLES2AsyncTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* data) {
+void GLES2AsyncTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* data) {
gles2::GetGLContext()->AsyncTexSubImage2DCHROMIUM(
target, level, xoffset, yoffset, width, height, format, type, data);
}
-void GLES2AsyncTexImage2DCHROMIUM(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) {
- gles2::GetGLContext()->AsyncTexImage2DCHROMIUM(
- target, level, internalformat, width, height, border, format, type,
- pixels);
+void GLES2AsyncTexImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) {
+ gles2::GetGLContext()->AsyncTexImage2DCHROMIUM(target,
+ level,
+ internalformat,
+ width,
+ height,
+ border,
+ format,
+ type,
+ pixels);
}
void GLES2WaitAsyncTexImage2DCHROMIUM(GLenum target) {
gles2::GetGLContext()->WaitAsyncTexImage2DCHROMIUM(target);
}
-void GLES2DiscardFramebufferEXT(
- GLenum target, GLsizei count, const GLenum* attachments) {
+void GLES2WaitAllAsyncTexImage2DCHROMIUM() {
+ gles2::GetGLContext()->WaitAllAsyncTexImage2DCHROMIUM();
+}
+void GLES2DiscardFramebufferEXT(GLenum target,
+ GLsizei count,
+ const GLenum* attachments) {
gles2::GetGLContext()->DiscardFramebufferEXT(target, count, attachments);
}
void GLES2LoseContextCHROMIUM(GLenum current, GLenum other) {
@@ -767,368 +949,813 @@ void GLES2DrawBuffersEXT(GLsizei count, const GLenum* bufs) {
void GLES2DiscardBackbufferCHROMIUM() {
gles2::GetGLContext()->DiscardBackbufferCHROMIUM();
}
+void GLES2ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+ GLenum plane_transform,
+ GLuint overlay_texture_id,
+ GLint bounds_x,
+ GLint bounds_y,
+ GLint bounds_width,
+ GLint bounds_height,
+ GLfloat uv_x,
+ GLfloat uv_y,
+ GLfloat uv_width,
+ GLfloat uv_height) {
+ gles2::GetGLContext()->ScheduleOverlayPlaneCHROMIUM(plane_z_order,
+ plane_transform,
+ overlay_texture_id,
+ bounds_x,
+ bounds_y,
+ bounds_width,
+ bounds_height,
+ uv_x,
+ uv_y,
+ uv_width,
+ uv_height);
+}
namespace gles2 {
extern const NameToFunc g_gles2_function_table[] = {
- { "glActiveTexture", reinterpret_cast<GLES2FunctionPointer>(
- glActiveTexture), },
- { "glAttachShader", reinterpret_cast<GLES2FunctionPointer>(
- glAttachShader), },
- { "glBindAttribLocation", reinterpret_cast<GLES2FunctionPointer>(
- glBindAttribLocation), },
- { "glBindBuffer", reinterpret_cast<GLES2FunctionPointer>(glBindBuffer), },
- { "glBindFramebuffer", reinterpret_cast<GLES2FunctionPointer>(
- glBindFramebuffer), },
- { "glBindRenderbuffer", reinterpret_cast<GLES2FunctionPointer>(
- glBindRenderbuffer), },
- { "glBindTexture", reinterpret_cast<GLES2FunctionPointer>(glBindTexture), },
- { "glBlendColor", reinterpret_cast<GLES2FunctionPointer>(glBlendColor), },
- { "glBlendEquation", reinterpret_cast<GLES2FunctionPointer>(
- glBlendEquation), },
- { "glBlendEquationSeparate", reinterpret_cast<GLES2FunctionPointer>(
- glBlendEquationSeparate), },
- { "glBlendFunc", reinterpret_cast<GLES2FunctionPointer>(glBlendFunc), },
- { "glBlendFuncSeparate", reinterpret_cast<GLES2FunctionPointer>(
- glBlendFuncSeparate), },
- { "glBufferData", reinterpret_cast<GLES2FunctionPointer>(glBufferData), },
- { "glBufferSubData", reinterpret_cast<GLES2FunctionPointer>(
- glBufferSubData), },
- { "glCheckFramebufferStatus", reinterpret_cast<GLES2FunctionPointer>(
- glCheckFramebufferStatus), },
- { "glClear", reinterpret_cast<GLES2FunctionPointer>(glClear), },
- { "glClearColor", reinterpret_cast<GLES2FunctionPointer>(glClearColor), },
- { "glClearDepthf", reinterpret_cast<GLES2FunctionPointer>(glClearDepthf), },
- { "glClearStencil", reinterpret_cast<GLES2FunctionPointer>(
- glClearStencil), },
- { "glColorMask", reinterpret_cast<GLES2FunctionPointer>(glColorMask), },
- { "glCompileShader", reinterpret_cast<GLES2FunctionPointer>(
- glCompileShader), },
- { "glCompressedTexImage2D", reinterpret_cast<GLES2FunctionPointer>(
- glCompressedTexImage2D), },
- { "glCompressedTexSubImage2D", reinterpret_cast<GLES2FunctionPointer>(
- glCompressedTexSubImage2D), },
- { "glCopyTexImage2D", reinterpret_cast<GLES2FunctionPointer>(
- glCopyTexImage2D), },
- { "glCopyTexSubImage2D", reinterpret_cast<GLES2FunctionPointer>(
- glCopyTexSubImage2D), },
- { "glCreateProgram", reinterpret_cast<GLES2FunctionPointer>(
- glCreateProgram), },
- { "glCreateShader", reinterpret_cast<GLES2FunctionPointer>(
- glCreateShader), },
- { "glCullFace", reinterpret_cast<GLES2FunctionPointer>(glCullFace), },
- { "glDeleteBuffers", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteBuffers), },
- { "glDeleteFramebuffers", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteFramebuffers), },
- { "glDeleteProgram", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteProgram), },
- { "glDeleteRenderbuffers", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteRenderbuffers), },
- { "glDeleteShader", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteShader), },
- { "glDeleteTextures", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteTextures), },
- { "glDepthFunc", reinterpret_cast<GLES2FunctionPointer>(glDepthFunc), },
- { "glDepthMask", reinterpret_cast<GLES2FunctionPointer>(glDepthMask), },
- { "glDepthRangef", reinterpret_cast<GLES2FunctionPointer>(glDepthRangef), },
- { "glDetachShader", reinterpret_cast<GLES2FunctionPointer>(
- glDetachShader), },
- { "glDisable", reinterpret_cast<GLES2FunctionPointer>(glDisable), },
- { "glDisableVertexAttribArray", reinterpret_cast<GLES2FunctionPointer>(
- glDisableVertexAttribArray), },
- { "glDrawArrays", reinterpret_cast<GLES2FunctionPointer>(glDrawArrays), },
- { "glDrawElements", reinterpret_cast<GLES2FunctionPointer>(
- glDrawElements), },
- { "glEnable", reinterpret_cast<GLES2FunctionPointer>(glEnable), },
- { "glEnableVertexAttribArray", reinterpret_cast<GLES2FunctionPointer>(
- glEnableVertexAttribArray), },
- { "glFinish", reinterpret_cast<GLES2FunctionPointer>(glFinish), },
- { "glFlush", reinterpret_cast<GLES2FunctionPointer>(glFlush), },
- { "glFramebufferRenderbuffer", reinterpret_cast<GLES2FunctionPointer>(
- glFramebufferRenderbuffer), },
- { "glFramebufferTexture2D", reinterpret_cast<GLES2FunctionPointer>(
- glFramebufferTexture2D), },
- { "glFrontFace", reinterpret_cast<GLES2FunctionPointer>(glFrontFace), },
- { "glGenBuffers", reinterpret_cast<GLES2FunctionPointer>(glGenBuffers), },
- { "glGenerateMipmap", reinterpret_cast<GLES2FunctionPointer>(
- glGenerateMipmap), },
- { "glGenFramebuffers", reinterpret_cast<GLES2FunctionPointer>(
- glGenFramebuffers), },
- { "glGenRenderbuffers", reinterpret_cast<GLES2FunctionPointer>(
- glGenRenderbuffers), },
- { "glGenTextures", reinterpret_cast<GLES2FunctionPointer>(glGenTextures), },
- { "glGetActiveAttrib", reinterpret_cast<GLES2FunctionPointer>(
- glGetActiveAttrib), },
- { "glGetActiveUniform", reinterpret_cast<GLES2FunctionPointer>(
- glGetActiveUniform), },
- { "glGetAttachedShaders", reinterpret_cast<GLES2FunctionPointer>(
- glGetAttachedShaders), },
- { "glGetAttribLocation", reinterpret_cast<GLES2FunctionPointer>(
- glGetAttribLocation), },
- { "glGetBooleanv", reinterpret_cast<GLES2FunctionPointer>(glGetBooleanv), },
- { "glGetBufferParameteriv", reinterpret_cast<GLES2FunctionPointer>(
- glGetBufferParameteriv), },
- { "glGetError", reinterpret_cast<GLES2FunctionPointer>(glGetError), },
- { "glGetFloatv", reinterpret_cast<GLES2FunctionPointer>(glGetFloatv), },
- { "glGetFramebufferAttachmentParameteriv", reinterpret_cast<GLES2FunctionPointer>(glGetFramebufferAttachmentParameteriv), }, // NOLINT
- { "glGetIntegerv", reinterpret_cast<GLES2FunctionPointer>(glGetIntegerv), },
- { "glGetProgramiv", reinterpret_cast<GLES2FunctionPointer>(
- glGetProgramiv), },
- { "glGetProgramInfoLog", reinterpret_cast<GLES2FunctionPointer>(
- glGetProgramInfoLog), },
- { "glGetRenderbufferParameteriv", reinterpret_cast<GLES2FunctionPointer>(
- glGetRenderbufferParameteriv), },
- { "glGetShaderiv", reinterpret_cast<GLES2FunctionPointer>(glGetShaderiv), },
- { "glGetShaderInfoLog", reinterpret_cast<GLES2FunctionPointer>(
- glGetShaderInfoLog), },
- { "glGetShaderPrecisionFormat", reinterpret_cast<GLES2FunctionPointer>(
- glGetShaderPrecisionFormat), },
- { "glGetShaderSource", reinterpret_cast<GLES2FunctionPointer>(
- glGetShaderSource), },
- { "glGetString", reinterpret_cast<GLES2FunctionPointer>(glGetString), },
- { "glGetTexParameterfv", reinterpret_cast<GLES2FunctionPointer>(
- glGetTexParameterfv), },
- { "glGetTexParameteriv", reinterpret_cast<GLES2FunctionPointer>(
- glGetTexParameteriv), },
- { "glGetUniformfv", reinterpret_cast<GLES2FunctionPointer>(
- glGetUniformfv), },
- { "glGetUniformiv", reinterpret_cast<GLES2FunctionPointer>(
- glGetUniformiv), },
- { "glGetUniformLocation", reinterpret_cast<GLES2FunctionPointer>(
- glGetUniformLocation), },
- { "glGetVertexAttribfv", reinterpret_cast<GLES2FunctionPointer>(
- glGetVertexAttribfv), },
- { "glGetVertexAttribiv", reinterpret_cast<GLES2FunctionPointer>(
- glGetVertexAttribiv), },
- { "glGetVertexAttribPointerv", reinterpret_cast<GLES2FunctionPointer>(
- glGetVertexAttribPointerv), },
- { "glHint", reinterpret_cast<GLES2FunctionPointer>(glHint), },
- { "glIsBuffer", reinterpret_cast<GLES2FunctionPointer>(glIsBuffer), },
- { "glIsEnabled", reinterpret_cast<GLES2FunctionPointer>(glIsEnabled), },
- { "glIsFramebuffer", reinterpret_cast<GLES2FunctionPointer>(
- glIsFramebuffer), },
- { "glIsProgram", reinterpret_cast<GLES2FunctionPointer>(glIsProgram), },
- { "glIsRenderbuffer", reinterpret_cast<GLES2FunctionPointer>(
- glIsRenderbuffer), },
- { "glIsShader", reinterpret_cast<GLES2FunctionPointer>(glIsShader), },
- { "glIsTexture", reinterpret_cast<GLES2FunctionPointer>(glIsTexture), },
- { "glLineWidth", reinterpret_cast<GLES2FunctionPointer>(glLineWidth), },
- { "glLinkProgram", reinterpret_cast<GLES2FunctionPointer>(glLinkProgram), },
- { "glPixelStorei", reinterpret_cast<GLES2FunctionPointer>(glPixelStorei), },
- { "glPolygonOffset", reinterpret_cast<GLES2FunctionPointer>(
- glPolygonOffset), },
- { "glReadPixels", reinterpret_cast<GLES2FunctionPointer>(glReadPixels), },
- { "glReleaseShaderCompiler", reinterpret_cast<GLES2FunctionPointer>(
- glReleaseShaderCompiler), },
- { "glRenderbufferStorage", reinterpret_cast<GLES2FunctionPointer>(
- glRenderbufferStorage), },
- { "glSampleCoverage", reinterpret_cast<GLES2FunctionPointer>(
- glSampleCoverage), },
- { "glScissor", reinterpret_cast<GLES2FunctionPointer>(glScissor), },
- { "glShaderBinary", reinterpret_cast<GLES2FunctionPointer>(
- glShaderBinary), },
- { "glShaderSource", reinterpret_cast<GLES2FunctionPointer>(
- glShaderSource), },
- { "glShallowFinishCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glShallowFinishCHROMIUM), },
- { "glShallowFlushCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glShallowFlushCHROMIUM), },
- { "glStencilFunc", reinterpret_cast<GLES2FunctionPointer>(glStencilFunc), },
- { "glStencilFuncSeparate", reinterpret_cast<GLES2FunctionPointer>(
- glStencilFuncSeparate), },
- { "glStencilMask", reinterpret_cast<GLES2FunctionPointer>(glStencilMask), },
- { "glStencilMaskSeparate", reinterpret_cast<GLES2FunctionPointer>(
- glStencilMaskSeparate), },
- { "glStencilOp", reinterpret_cast<GLES2FunctionPointer>(glStencilOp), },
- { "glStencilOpSeparate", reinterpret_cast<GLES2FunctionPointer>(
- glStencilOpSeparate), },
- { "glTexImage2D", reinterpret_cast<GLES2FunctionPointer>(glTexImage2D), },
- { "glTexParameterf", reinterpret_cast<GLES2FunctionPointer>(
- glTexParameterf), },
- { "glTexParameterfv", reinterpret_cast<GLES2FunctionPointer>(
- glTexParameterfv), },
- { "glTexParameteri", reinterpret_cast<GLES2FunctionPointer>(
- glTexParameteri), },
- { "glTexParameteriv", reinterpret_cast<GLES2FunctionPointer>(
- glTexParameteriv), },
- { "glTexSubImage2D", reinterpret_cast<GLES2FunctionPointer>(
- glTexSubImage2D), },
- { "glUniform1f", reinterpret_cast<GLES2FunctionPointer>(glUniform1f), },
- { "glUniform1fv", reinterpret_cast<GLES2FunctionPointer>(glUniform1fv), },
- { "glUniform1i", reinterpret_cast<GLES2FunctionPointer>(glUniform1i), },
- { "glUniform1iv", reinterpret_cast<GLES2FunctionPointer>(glUniform1iv), },
- { "glUniform2f", reinterpret_cast<GLES2FunctionPointer>(glUniform2f), },
- { "glUniform2fv", reinterpret_cast<GLES2FunctionPointer>(glUniform2fv), },
- { "glUniform2i", reinterpret_cast<GLES2FunctionPointer>(glUniform2i), },
- { "glUniform2iv", reinterpret_cast<GLES2FunctionPointer>(glUniform2iv), },
- { "glUniform3f", reinterpret_cast<GLES2FunctionPointer>(glUniform3f), },
- { "glUniform3fv", reinterpret_cast<GLES2FunctionPointer>(glUniform3fv), },
- { "glUniform3i", reinterpret_cast<GLES2FunctionPointer>(glUniform3i), },
- { "glUniform3iv", reinterpret_cast<GLES2FunctionPointer>(glUniform3iv), },
- { "glUniform4f", reinterpret_cast<GLES2FunctionPointer>(glUniform4f), },
- { "glUniform4fv", reinterpret_cast<GLES2FunctionPointer>(glUniform4fv), },
- { "glUniform4i", reinterpret_cast<GLES2FunctionPointer>(glUniform4i), },
- { "glUniform4iv", reinterpret_cast<GLES2FunctionPointer>(glUniform4iv), },
- { "glUniformMatrix2fv", reinterpret_cast<GLES2FunctionPointer>(
- glUniformMatrix2fv), },
- { "glUniformMatrix3fv", reinterpret_cast<GLES2FunctionPointer>(
- glUniformMatrix3fv), },
- { "glUniformMatrix4fv", reinterpret_cast<GLES2FunctionPointer>(
- glUniformMatrix4fv), },
- { "glUseProgram", reinterpret_cast<GLES2FunctionPointer>(glUseProgram), },
- { "glValidateProgram", reinterpret_cast<GLES2FunctionPointer>(
- glValidateProgram), },
- { "glVertexAttrib1f", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttrib1f), },
- { "glVertexAttrib1fv", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttrib1fv), },
- { "glVertexAttrib2f", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttrib2f), },
- { "glVertexAttrib2fv", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttrib2fv), },
- { "glVertexAttrib3f", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttrib3f), },
- { "glVertexAttrib3fv", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttrib3fv), },
- { "glVertexAttrib4f", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttrib4f), },
- { "glVertexAttrib4fv", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttrib4fv), },
- { "glVertexAttribPointer", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttribPointer), },
- { "glViewport", reinterpret_cast<GLES2FunctionPointer>(glViewport), },
- { "glBlitFramebufferCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glBlitFramebufferCHROMIUM), },
- { "glRenderbufferStorageMultisampleCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(glRenderbufferStorageMultisampleCHROMIUM), }, // NOLINT
- { "glRenderbufferStorageMultisampleEXT", reinterpret_cast<GLES2FunctionPointer>(glRenderbufferStorageMultisampleEXT), }, // NOLINT
- { "glFramebufferTexture2DMultisampleEXT", reinterpret_cast<GLES2FunctionPointer>(glFramebufferTexture2DMultisampleEXT), }, // NOLINT
- { "glTexStorage2DEXT", reinterpret_cast<GLES2FunctionPointer>(
- glTexStorage2DEXT), },
- { "glGenQueriesEXT", reinterpret_cast<GLES2FunctionPointer>(
- glGenQueriesEXT), },
- { "glDeleteQueriesEXT", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteQueriesEXT), },
- { "glIsQueryEXT", reinterpret_cast<GLES2FunctionPointer>(glIsQueryEXT), },
- { "glBeginQueryEXT", reinterpret_cast<GLES2FunctionPointer>(
- glBeginQueryEXT), },
- { "glEndQueryEXT", reinterpret_cast<GLES2FunctionPointer>(glEndQueryEXT), },
- { "glGetQueryivEXT", reinterpret_cast<GLES2FunctionPointer>(
- glGetQueryivEXT), },
- { "glGetQueryObjectuivEXT", reinterpret_cast<GLES2FunctionPointer>(
- glGetQueryObjectuivEXT), },
- { "glInsertEventMarkerEXT", reinterpret_cast<GLES2FunctionPointer>(
- glInsertEventMarkerEXT), },
- { "glPushGroupMarkerEXT", reinterpret_cast<GLES2FunctionPointer>(
- glPushGroupMarkerEXT), },
- { "glPopGroupMarkerEXT", reinterpret_cast<GLES2FunctionPointer>(
- glPopGroupMarkerEXT), },
- { "glGenVertexArraysOES", reinterpret_cast<GLES2FunctionPointer>(
- glGenVertexArraysOES), },
- { "glDeleteVertexArraysOES", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteVertexArraysOES), },
- { "glIsVertexArrayOES", reinterpret_cast<GLES2FunctionPointer>(
- glIsVertexArrayOES), },
- { "glBindVertexArrayOES", reinterpret_cast<GLES2FunctionPointer>(
- glBindVertexArrayOES), },
- { "glSwapBuffers", reinterpret_cast<GLES2FunctionPointer>(glSwapBuffers), },
- { "glGetMaxValueInBufferCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glGetMaxValueInBufferCHROMIUM), },
- { "glGenSharedIdsCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glGenSharedIdsCHROMIUM), },
- { "glDeleteSharedIdsCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glDeleteSharedIdsCHROMIUM), },
- { "glRegisterSharedIdsCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glRegisterSharedIdsCHROMIUM), },
- { "glEnableFeatureCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glEnableFeatureCHROMIUM), },
- { "glMapBufferCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glMapBufferCHROMIUM), },
- { "glUnmapBufferCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glUnmapBufferCHROMIUM), },
- { "glMapImageCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glMapImageCHROMIUM), },
- { "glUnmapImageCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glUnmapImageCHROMIUM), },
- { "glMapBufferSubDataCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glMapBufferSubDataCHROMIUM), },
- { "glUnmapBufferSubDataCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glUnmapBufferSubDataCHROMIUM), },
- { "glMapTexSubImage2DCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glMapTexSubImage2DCHROMIUM), },
- { "glUnmapTexSubImage2DCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glUnmapTexSubImage2DCHROMIUM), },
- { "glResizeCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glResizeCHROMIUM), },
- { "glGetRequestableExtensionsCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(glGetRequestableExtensionsCHROMIUM), }, // NOLINT
- { "glRequestExtensionCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glRequestExtensionCHROMIUM), },
- { "glRateLimitOffscreenContextCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(glRateLimitOffscreenContextCHROMIUM), }, // NOLINT
- { "glGetMultipleIntegervCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glGetMultipleIntegervCHROMIUM), },
- { "glGetProgramInfoCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glGetProgramInfoCHROMIUM), },
- { "glCreateStreamTextureCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glCreateStreamTextureCHROMIUM), },
- { "glDestroyStreamTextureCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glDestroyStreamTextureCHROMIUM), },
- { "glCreateImageCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glCreateImageCHROMIUM), },
- { "glDestroyImageCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glDestroyImageCHROMIUM), },
- { "glGetImageParameterivCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glGetImageParameterivCHROMIUM), },
- { "glGetTranslatedShaderSourceANGLE", reinterpret_cast<GLES2FunctionPointer>(
- glGetTranslatedShaderSourceANGLE), },
- { "glPostSubBufferCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glPostSubBufferCHROMIUM), },
- { "glTexImageIOSurface2DCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glTexImageIOSurface2DCHROMIUM), },
- { "glCopyTextureCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glCopyTextureCHROMIUM), },
- { "glDrawArraysInstancedANGLE", reinterpret_cast<GLES2FunctionPointer>(
- glDrawArraysInstancedANGLE), },
- { "glDrawElementsInstancedANGLE", reinterpret_cast<GLES2FunctionPointer>(
- glDrawElementsInstancedANGLE), },
- { "glVertexAttribDivisorANGLE", reinterpret_cast<GLES2FunctionPointer>(
- glVertexAttribDivisorANGLE), },
- { "glGenMailboxCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glGenMailboxCHROMIUM), },
- { "glProduceTextureCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glProduceTextureCHROMIUM), },
- { "glConsumeTextureCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glConsumeTextureCHROMIUM), },
- { "glBindUniformLocationCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glBindUniformLocationCHROMIUM), },
- { "glBindTexImage2DCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glBindTexImage2DCHROMIUM), },
- { "glReleaseTexImage2DCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glReleaseTexImage2DCHROMIUM), },
- { "glTraceBeginCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glTraceBeginCHROMIUM), },
- { "glTraceEndCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glTraceEndCHROMIUM), },
- { "glAsyncTexSubImage2DCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glAsyncTexSubImage2DCHROMIUM), },
- { "glAsyncTexImage2DCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glAsyncTexImage2DCHROMIUM), },
- { "glWaitAsyncTexImage2DCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glWaitAsyncTexImage2DCHROMIUM), },
- { "glDiscardFramebufferEXT", reinterpret_cast<GLES2FunctionPointer>(
- glDiscardFramebufferEXT), },
- { "glLoseContextCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glLoseContextCHROMIUM), },
- { "glInsertSyncPointCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glInsertSyncPointCHROMIUM), },
- { "glWaitSyncPointCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glWaitSyncPointCHROMIUM), },
- { "glDrawBuffersEXT", reinterpret_cast<GLES2FunctionPointer>(
- glDrawBuffersEXT), },
- { "glDiscardBackbufferCHROMIUM", reinterpret_cast<GLES2FunctionPointer>(
- glDiscardBackbufferCHROMIUM), },
- { NULL, NULL, },
+ {
+ "glActiveTexture", reinterpret_cast<GLES2FunctionPointer>(glActiveTexture),
+ },
+ {
+ "glAttachShader", reinterpret_cast<GLES2FunctionPointer>(glAttachShader),
+ },
+ {
+ "glBindAttribLocation",
+ reinterpret_cast<GLES2FunctionPointer>(glBindAttribLocation),
+ },
+ {
+ "glBindBuffer", reinterpret_cast<GLES2FunctionPointer>(glBindBuffer),
+ },
+ {
+ "glBindFramebuffer",
+ reinterpret_cast<GLES2FunctionPointer>(glBindFramebuffer),
+ },
+ {
+ "glBindRenderbuffer",
+ reinterpret_cast<GLES2FunctionPointer>(glBindRenderbuffer),
+ },
+ {
+ "glBindTexture", reinterpret_cast<GLES2FunctionPointer>(glBindTexture),
+ },
+ {
+ "glBlendColor", reinterpret_cast<GLES2FunctionPointer>(glBlendColor),
+ },
+ {
+ "glBlendEquation", reinterpret_cast<GLES2FunctionPointer>(glBlendEquation),
+ },
+ {
+ "glBlendEquationSeparate",
+ reinterpret_cast<GLES2FunctionPointer>(glBlendEquationSeparate),
+ },
+ {
+ "glBlendFunc", reinterpret_cast<GLES2FunctionPointer>(glBlendFunc),
+ },
+ {
+ "glBlendFuncSeparate",
+ reinterpret_cast<GLES2FunctionPointer>(glBlendFuncSeparate),
+ },
+ {
+ "glBufferData", reinterpret_cast<GLES2FunctionPointer>(glBufferData),
+ },
+ {
+ "glBufferSubData", reinterpret_cast<GLES2FunctionPointer>(glBufferSubData),
+ },
+ {
+ "glCheckFramebufferStatus",
+ reinterpret_cast<GLES2FunctionPointer>(glCheckFramebufferStatus),
+ },
+ {
+ "glClear", reinterpret_cast<GLES2FunctionPointer>(glClear),
+ },
+ {
+ "glClearColor", reinterpret_cast<GLES2FunctionPointer>(glClearColor),
+ },
+ {
+ "glClearDepthf", reinterpret_cast<GLES2FunctionPointer>(glClearDepthf),
+ },
+ {
+ "glClearStencil", reinterpret_cast<GLES2FunctionPointer>(glClearStencil),
+ },
+ {
+ "glColorMask", reinterpret_cast<GLES2FunctionPointer>(glColorMask),
+ },
+ {
+ "glCompileShader", reinterpret_cast<GLES2FunctionPointer>(glCompileShader),
+ },
+ {
+ "glCompressedTexImage2D",
+ reinterpret_cast<GLES2FunctionPointer>(glCompressedTexImage2D),
+ },
+ {
+ "glCompressedTexSubImage2D",
+ reinterpret_cast<GLES2FunctionPointer>(glCompressedTexSubImage2D),
+ },
+ {
+ "glCopyTexImage2D",
+ reinterpret_cast<GLES2FunctionPointer>(glCopyTexImage2D),
+ },
+ {
+ "glCopyTexSubImage2D",
+ reinterpret_cast<GLES2FunctionPointer>(glCopyTexSubImage2D),
+ },
+ {
+ "glCreateProgram", reinterpret_cast<GLES2FunctionPointer>(glCreateProgram),
+ },
+ {
+ "glCreateShader", reinterpret_cast<GLES2FunctionPointer>(glCreateShader),
+ },
+ {
+ "glCullFace", reinterpret_cast<GLES2FunctionPointer>(glCullFace),
+ },
+ {
+ "glDeleteBuffers", reinterpret_cast<GLES2FunctionPointer>(glDeleteBuffers),
+ },
+ {
+ "glDeleteFramebuffers",
+ reinterpret_cast<GLES2FunctionPointer>(glDeleteFramebuffers),
+ },
+ {
+ "glDeleteProgram", reinterpret_cast<GLES2FunctionPointer>(glDeleteProgram),
+ },
+ {
+ "glDeleteRenderbuffers",
+ reinterpret_cast<GLES2FunctionPointer>(glDeleteRenderbuffers),
+ },
+ {
+ "glDeleteShader", reinterpret_cast<GLES2FunctionPointer>(glDeleteShader),
+ },
+ {
+ "glDeleteTextures",
+ reinterpret_cast<GLES2FunctionPointer>(glDeleteTextures),
+ },
+ {
+ "glDepthFunc", reinterpret_cast<GLES2FunctionPointer>(glDepthFunc),
+ },
+ {
+ "glDepthMask", reinterpret_cast<GLES2FunctionPointer>(glDepthMask),
+ },
+ {
+ "glDepthRangef", reinterpret_cast<GLES2FunctionPointer>(glDepthRangef),
+ },
+ {
+ "glDetachShader", reinterpret_cast<GLES2FunctionPointer>(glDetachShader),
+ },
+ {
+ "glDisable", reinterpret_cast<GLES2FunctionPointer>(glDisable),
+ },
+ {
+ "glDisableVertexAttribArray",
+ reinterpret_cast<GLES2FunctionPointer>(glDisableVertexAttribArray),
+ },
+ {
+ "glDrawArrays", reinterpret_cast<GLES2FunctionPointer>(glDrawArrays),
+ },
+ {
+ "glDrawElements", reinterpret_cast<GLES2FunctionPointer>(glDrawElements),
+ },
+ {
+ "glEnable", reinterpret_cast<GLES2FunctionPointer>(glEnable),
+ },
+ {
+ "glEnableVertexAttribArray",
+ reinterpret_cast<GLES2FunctionPointer>(glEnableVertexAttribArray),
+ },
+ {
+ "glFinish", reinterpret_cast<GLES2FunctionPointer>(glFinish),
+ },
+ {
+ "glFlush", reinterpret_cast<GLES2FunctionPointer>(glFlush),
+ },
+ {
+ "glFramebufferRenderbuffer",
+ reinterpret_cast<GLES2FunctionPointer>(glFramebufferRenderbuffer),
+ },
+ {
+ "glFramebufferTexture2D",
+ reinterpret_cast<GLES2FunctionPointer>(glFramebufferTexture2D),
+ },
+ {
+ "glFrontFace", reinterpret_cast<GLES2FunctionPointer>(glFrontFace),
+ },
+ {
+ "glGenBuffers", reinterpret_cast<GLES2FunctionPointer>(glGenBuffers),
+ },
+ {
+ "glGenerateMipmap",
+ reinterpret_cast<GLES2FunctionPointer>(glGenerateMipmap),
+ },
+ {
+ "glGenFramebuffers",
+ reinterpret_cast<GLES2FunctionPointer>(glGenFramebuffers),
+ },
+ {
+ "glGenRenderbuffers",
+ reinterpret_cast<GLES2FunctionPointer>(glGenRenderbuffers),
+ },
+ {
+ "glGenTextures", reinterpret_cast<GLES2FunctionPointer>(glGenTextures),
+ },
+ {
+ "glGetActiveAttrib",
+ reinterpret_cast<GLES2FunctionPointer>(glGetActiveAttrib),
+ },
+ {
+ "glGetActiveUniform",
+ reinterpret_cast<GLES2FunctionPointer>(glGetActiveUniform),
+ },
+ {
+ "glGetAttachedShaders",
+ reinterpret_cast<GLES2FunctionPointer>(glGetAttachedShaders),
+ },
+ {
+ "glGetAttribLocation",
+ reinterpret_cast<GLES2FunctionPointer>(glGetAttribLocation),
+ },
+ {
+ "glGetBooleanv", reinterpret_cast<GLES2FunctionPointer>(glGetBooleanv),
+ },
+ {
+ "glGetBufferParameteriv",
+ reinterpret_cast<GLES2FunctionPointer>(glGetBufferParameteriv),
+ },
+ {
+ "glGetError", reinterpret_cast<GLES2FunctionPointer>(glGetError),
+ },
+ {
+ "glGetFloatv", reinterpret_cast<GLES2FunctionPointer>(glGetFloatv),
+ },
+ {
+ "glGetFramebufferAttachmentParameteriv",
+ reinterpret_cast<GLES2FunctionPointer>(
+ glGetFramebufferAttachmentParameteriv),
+ },
+ {
+ "glGetIntegerv", reinterpret_cast<GLES2FunctionPointer>(glGetIntegerv),
+ },
+ {
+ "glGetProgramiv", reinterpret_cast<GLES2FunctionPointer>(glGetProgramiv),
+ },
+ {
+ "glGetProgramInfoLog",
+ reinterpret_cast<GLES2FunctionPointer>(glGetProgramInfoLog),
+ },
+ {
+ "glGetRenderbufferParameteriv",
+ reinterpret_cast<GLES2FunctionPointer>(glGetRenderbufferParameteriv),
+ },
+ {
+ "glGetShaderiv", reinterpret_cast<GLES2FunctionPointer>(glGetShaderiv),
+ },
+ {
+ "glGetShaderInfoLog",
+ reinterpret_cast<GLES2FunctionPointer>(glGetShaderInfoLog),
+ },
+ {
+ "glGetShaderPrecisionFormat",
+ reinterpret_cast<GLES2FunctionPointer>(glGetShaderPrecisionFormat),
+ },
+ {
+ "glGetShaderSource",
+ reinterpret_cast<GLES2FunctionPointer>(glGetShaderSource),
+ },
+ {
+ "glGetString", reinterpret_cast<GLES2FunctionPointer>(glGetString),
+ },
+ {
+ "glGetTexParameterfv",
+ reinterpret_cast<GLES2FunctionPointer>(glGetTexParameterfv),
+ },
+ {
+ "glGetTexParameteriv",
+ reinterpret_cast<GLES2FunctionPointer>(glGetTexParameteriv),
+ },
+ {
+ "glGetUniformfv", reinterpret_cast<GLES2FunctionPointer>(glGetUniformfv),
+ },
+ {
+ "glGetUniformiv", reinterpret_cast<GLES2FunctionPointer>(glGetUniformiv),
+ },
+ {
+ "glGetUniformLocation",
+ reinterpret_cast<GLES2FunctionPointer>(glGetUniformLocation),
+ },
+ {
+ "glGetVertexAttribfv",
+ reinterpret_cast<GLES2FunctionPointer>(glGetVertexAttribfv),
+ },
+ {
+ "glGetVertexAttribiv",
+ reinterpret_cast<GLES2FunctionPointer>(glGetVertexAttribiv),
+ },
+ {
+ "glGetVertexAttribPointerv",
+ reinterpret_cast<GLES2FunctionPointer>(glGetVertexAttribPointerv),
+ },
+ {
+ "glHint", reinterpret_cast<GLES2FunctionPointer>(glHint),
+ },
+ {
+ "glIsBuffer", reinterpret_cast<GLES2FunctionPointer>(glIsBuffer),
+ },
+ {
+ "glIsEnabled", reinterpret_cast<GLES2FunctionPointer>(glIsEnabled),
+ },
+ {
+ "glIsFramebuffer", reinterpret_cast<GLES2FunctionPointer>(glIsFramebuffer),
+ },
+ {
+ "glIsProgram", reinterpret_cast<GLES2FunctionPointer>(glIsProgram),
+ },
+ {
+ "glIsRenderbuffer",
+ reinterpret_cast<GLES2FunctionPointer>(glIsRenderbuffer),
+ },
+ {
+ "glIsShader", reinterpret_cast<GLES2FunctionPointer>(glIsShader),
+ },
+ {
+ "glIsTexture", reinterpret_cast<GLES2FunctionPointer>(glIsTexture),
+ },
+ {
+ "glLineWidth", reinterpret_cast<GLES2FunctionPointer>(glLineWidth),
+ },
+ {
+ "glLinkProgram", reinterpret_cast<GLES2FunctionPointer>(glLinkProgram),
+ },
+ {
+ "glPixelStorei", reinterpret_cast<GLES2FunctionPointer>(glPixelStorei),
+ },
+ {
+ "glPolygonOffset", reinterpret_cast<GLES2FunctionPointer>(glPolygonOffset),
+ },
+ {
+ "glReadPixels", reinterpret_cast<GLES2FunctionPointer>(glReadPixels),
+ },
+ {
+ "glReleaseShaderCompiler",
+ reinterpret_cast<GLES2FunctionPointer>(glReleaseShaderCompiler),
+ },
+ {
+ "glRenderbufferStorage",
+ reinterpret_cast<GLES2FunctionPointer>(glRenderbufferStorage),
+ },
+ {
+ "glSampleCoverage",
+ reinterpret_cast<GLES2FunctionPointer>(glSampleCoverage),
+ },
+ {
+ "glScissor", reinterpret_cast<GLES2FunctionPointer>(glScissor),
+ },
+ {
+ "glShaderBinary", reinterpret_cast<GLES2FunctionPointer>(glShaderBinary),
+ },
+ {
+ "glShaderSource", reinterpret_cast<GLES2FunctionPointer>(glShaderSource),
+ },
+ {
+ "glShallowFinishCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glShallowFinishCHROMIUM),
+ },
+ {
+ "glShallowFlushCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glShallowFlushCHROMIUM),
+ },
+ {
+ "glStencilFunc", reinterpret_cast<GLES2FunctionPointer>(glStencilFunc),
+ },
+ {
+ "glStencilFuncSeparate",
+ reinterpret_cast<GLES2FunctionPointer>(glStencilFuncSeparate),
+ },
+ {
+ "glStencilMask", reinterpret_cast<GLES2FunctionPointer>(glStencilMask),
+ },
+ {
+ "glStencilMaskSeparate",
+ reinterpret_cast<GLES2FunctionPointer>(glStencilMaskSeparate),
+ },
+ {
+ "glStencilOp", reinterpret_cast<GLES2FunctionPointer>(glStencilOp),
+ },
+ {
+ "glStencilOpSeparate",
+ reinterpret_cast<GLES2FunctionPointer>(glStencilOpSeparate),
+ },
+ {
+ "glTexImage2D", reinterpret_cast<GLES2FunctionPointer>(glTexImage2D),
+ },
+ {
+ "glTexParameterf", reinterpret_cast<GLES2FunctionPointer>(glTexParameterf),
+ },
+ {
+ "glTexParameterfv",
+ reinterpret_cast<GLES2FunctionPointer>(glTexParameterfv),
+ },
+ {
+ "glTexParameteri", reinterpret_cast<GLES2FunctionPointer>(glTexParameteri),
+ },
+ {
+ "glTexParameteriv",
+ reinterpret_cast<GLES2FunctionPointer>(glTexParameteriv),
+ },
+ {
+ "glTexSubImage2D", reinterpret_cast<GLES2FunctionPointer>(glTexSubImage2D),
+ },
+ {
+ "glUniform1f", reinterpret_cast<GLES2FunctionPointer>(glUniform1f),
+ },
+ {
+ "glUniform1fv", reinterpret_cast<GLES2FunctionPointer>(glUniform1fv),
+ },
+ {
+ "glUniform1i", reinterpret_cast<GLES2FunctionPointer>(glUniform1i),
+ },
+ {
+ "glUniform1iv", reinterpret_cast<GLES2FunctionPointer>(glUniform1iv),
+ },
+ {
+ "glUniform2f", reinterpret_cast<GLES2FunctionPointer>(glUniform2f),
+ },
+ {
+ "glUniform2fv", reinterpret_cast<GLES2FunctionPointer>(glUniform2fv),
+ },
+ {
+ "glUniform2i", reinterpret_cast<GLES2FunctionPointer>(glUniform2i),
+ },
+ {
+ "glUniform2iv", reinterpret_cast<GLES2FunctionPointer>(glUniform2iv),
+ },
+ {
+ "glUniform3f", reinterpret_cast<GLES2FunctionPointer>(glUniform3f),
+ },
+ {
+ "glUniform3fv", reinterpret_cast<GLES2FunctionPointer>(glUniform3fv),
+ },
+ {
+ "glUniform3i", reinterpret_cast<GLES2FunctionPointer>(glUniform3i),
+ },
+ {
+ "glUniform3iv", reinterpret_cast<GLES2FunctionPointer>(glUniform3iv),
+ },
+ {
+ "glUniform4f", reinterpret_cast<GLES2FunctionPointer>(glUniform4f),
+ },
+ {
+ "glUniform4fv", reinterpret_cast<GLES2FunctionPointer>(glUniform4fv),
+ },
+ {
+ "glUniform4i", reinterpret_cast<GLES2FunctionPointer>(glUniform4i),
+ },
+ {
+ "glUniform4iv", reinterpret_cast<GLES2FunctionPointer>(glUniform4iv),
+ },
+ {
+ "glUniformMatrix2fv",
+ reinterpret_cast<GLES2FunctionPointer>(glUniformMatrix2fv),
+ },
+ {
+ "glUniformMatrix3fv",
+ reinterpret_cast<GLES2FunctionPointer>(glUniformMatrix3fv),
+ },
+ {
+ "glUniformMatrix4fv",
+ reinterpret_cast<GLES2FunctionPointer>(glUniformMatrix4fv),
+ },
+ {
+ "glUseProgram", reinterpret_cast<GLES2FunctionPointer>(glUseProgram),
+ },
+ {
+ "glValidateProgram",
+ reinterpret_cast<GLES2FunctionPointer>(glValidateProgram),
+ },
+ {
+ "glVertexAttrib1f",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttrib1f),
+ },
+ {
+ "glVertexAttrib1fv",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttrib1fv),
+ },
+ {
+ "glVertexAttrib2f",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttrib2f),
+ },
+ {
+ "glVertexAttrib2fv",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttrib2fv),
+ },
+ {
+ "glVertexAttrib3f",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttrib3f),
+ },
+ {
+ "glVertexAttrib3fv",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttrib3fv),
+ },
+ {
+ "glVertexAttrib4f",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttrib4f),
+ },
+ {
+ "glVertexAttrib4fv",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttrib4fv),
+ },
+ {
+ "glVertexAttribPointer",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttribPointer),
+ },
+ {
+ "glViewport", reinterpret_cast<GLES2FunctionPointer>(glViewport),
+ },
+ {
+ "glBlitFramebufferCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glBlitFramebufferCHROMIUM),
+ },
+ {
+ "glRenderbufferStorageMultisampleCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(
+ glRenderbufferStorageMultisampleCHROMIUM),
+ },
+ {
+ "glRenderbufferStorageMultisampleEXT",
+ reinterpret_cast<GLES2FunctionPointer>(
+ glRenderbufferStorageMultisampleEXT),
+ },
+ {
+ "glFramebufferTexture2DMultisampleEXT",
+ reinterpret_cast<GLES2FunctionPointer>(
+ glFramebufferTexture2DMultisampleEXT),
+ },
+ {
+ "glTexStorage2DEXT",
+ reinterpret_cast<GLES2FunctionPointer>(glTexStorage2DEXT),
+ },
+ {
+ "glGenQueriesEXT", reinterpret_cast<GLES2FunctionPointer>(glGenQueriesEXT),
+ },
+ {
+ "glDeleteQueriesEXT",
+ reinterpret_cast<GLES2FunctionPointer>(glDeleteQueriesEXT),
+ },
+ {
+ "glIsQueryEXT", reinterpret_cast<GLES2FunctionPointer>(glIsQueryEXT),
+ },
+ {
+ "glBeginQueryEXT", reinterpret_cast<GLES2FunctionPointer>(glBeginQueryEXT),
+ },
+ {
+ "glEndQueryEXT", reinterpret_cast<GLES2FunctionPointer>(glEndQueryEXT),
+ },
+ {
+ "glGetQueryivEXT", reinterpret_cast<GLES2FunctionPointer>(glGetQueryivEXT),
+ },
+ {
+ "glGetQueryObjectuivEXT",
+ reinterpret_cast<GLES2FunctionPointer>(glGetQueryObjectuivEXT),
+ },
+ {
+ "glInsertEventMarkerEXT",
+ reinterpret_cast<GLES2FunctionPointer>(glInsertEventMarkerEXT),
+ },
+ {
+ "glPushGroupMarkerEXT",
+ reinterpret_cast<GLES2FunctionPointer>(glPushGroupMarkerEXT),
+ },
+ {
+ "glPopGroupMarkerEXT",
+ reinterpret_cast<GLES2FunctionPointer>(glPopGroupMarkerEXT),
+ },
+ {
+ "glGenVertexArraysOES",
+ reinterpret_cast<GLES2FunctionPointer>(glGenVertexArraysOES),
+ },
+ {
+ "glDeleteVertexArraysOES",
+ reinterpret_cast<GLES2FunctionPointer>(glDeleteVertexArraysOES),
+ },
+ {
+ "glIsVertexArrayOES",
+ reinterpret_cast<GLES2FunctionPointer>(glIsVertexArrayOES),
+ },
+ {
+ "glBindVertexArrayOES",
+ reinterpret_cast<GLES2FunctionPointer>(glBindVertexArrayOES),
+ },
+ {
+ "glSwapBuffers", reinterpret_cast<GLES2FunctionPointer>(glSwapBuffers),
+ },
+ {
+ "glGetMaxValueInBufferCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glGetMaxValueInBufferCHROMIUM),
+ },
+ {
+ "glGenSharedIdsCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glGenSharedIdsCHROMIUM),
+ },
+ {
+ "glDeleteSharedIdsCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glDeleteSharedIdsCHROMIUM),
+ },
+ {
+ "glRegisterSharedIdsCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glRegisterSharedIdsCHROMIUM),
+ },
+ {
+ "glEnableFeatureCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glEnableFeatureCHROMIUM),
+ },
+ {
+ "glMapBufferCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glMapBufferCHROMIUM),
+ },
+ {
+ "glUnmapBufferCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glUnmapBufferCHROMIUM),
+ },
+ {
+ "glMapImageCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glMapImageCHROMIUM),
+ },
+ {
+ "glUnmapImageCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glUnmapImageCHROMIUM),
+ },
+ {
+ "glMapBufferSubDataCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glMapBufferSubDataCHROMIUM),
+ },
+ {
+ "glUnmapBufferSubDataCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glUnmapBufferSubDataCHROMIUM),
+ },
+ {
+ "glMapTexSubImage2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glMapTexSubImage2DCHROMIUM),
+ },
+ {
+ "glUnmapTexSubImage2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glUnmapTexSubImage2DCHROMIUM),
+ },
+ {
+ "glResizeCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glResizeCHROMIUM),
+ },
+ {
+ "glGetRequestableExtensionsCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glGetRequestableExtensionsCHROMIUM),
+ },
+ {
+ "glRequestExtensionCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glRequestExtensionCHROMIUM),
+ },
+ {
+ "glRateLimitOffscreenContextCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(
+ glRateLimitOffscreenContextCHROMIUM),
+ },
+ {
+ "glGetMultipleIntegervCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glGetMultipleIntegervCHROMIUM),
+ },
+ {
+ "glGetProgramInfoCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glGetProgramInfoCHROMIUM),
+ },
+ {
+ "glCreateStreamTextureCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glCreateStreamTextureCHROMIUM),
+ },
+ {
+ "glCreateImageCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glCreateImageCHROMIUM),
+ },
+ {
+ "glDestroyImageCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glDestroyImageCHROMIUM),
+ },
+ {
+ "glGetImageParameterivCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glGetImageParameterivCHROMIUM),
+ },
+ {
+ "glGetTranslatedShaderSourceANGLE",
+ reinterpret_cast<GLES2FunctionPointer>(glGetTranslatedShaderSourceANGLE),
+ },
+ {
+ "glPostSubBufferCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glPostSubBufferCHROMIUM),
+ },
+ {
+ "glTexImageIOSurface2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glTexImageIOSurface2DCHROMIUM),
+ },
+ {
+ "glCopyTextureCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glCopyTextureCHROMIUM),
+ },
+ {
+ "glDrawArraysInstancedANGLE",
+ reinterpret_cast<GLES2FunctionPointer>(glDrawArraysInstancedANGLE),
+ },
+ {
+ "glDrawElementsInstancedANGLE",
+ reinterpret_cast<GLES2FunctionPointer>(glDrawElementsInstancedANGLE),
+ },
+ {
+ "glVertexAttribDivisorANGLE",
+ reinterpret_cast<GLES2FunctionPointer>(glVertexAttribDivisorANGLE),
+ },
+ {
+ "glGenMailboxCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glGenMailboxCHROMIUM),
+ },
+ {
+ "glProduceTextureCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glProduceTextureCHROMIUM),
+ },
+ {
+ "glProduceTextureDirectCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glProduceTextureDirectCHROMIUM),
+ },
+ {
+ "glConsumeTextureCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glConsumeTextureCHROMIUM),
+ },
+ {
+ "glCreateAndConsumeTextureCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glCreateAndConsumeTextureCHROMIUM),
+ },
+ {
+ "glBindUniformLocationCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glBindUniformLocationCHROMIUM),
+ },
+ {
+ "glBindTexImage2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glBindTexImage2DCHROMIUM),
+ },
+ {
+ "glReleaseTexImage2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glReleaseTexImage2DCHROMIUM),
+ },
+ {
+ "glTraceBeginCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glTraceBeginCHROMIUM),
+ },
+ {
+ "glTraceEndCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glTraceEndCHROMIUM),
+ },
+ {
+ "glAsyncTexSubImage2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glAsyncTexSubImage2DCHROMIUM),
+ },
+ {
+ "glAsyncTexImage2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glAsyncTexImage2DCHROMIUM),
+ },
+ {
+ "glWaitAsyncTexImage2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glWaitAsyncTexImage2DCHROMIUM),
+ },
+ {
+ "glWaitAllAsyncTexImage2DCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glWaitAllAsyncTexImage2DCHROMIUM),
+ },
+ {
+ "glDiscardFramebufferEXT",
+ reinterpret_cast<GLES2FunctionPointer>(glDiscardFramebufferEXT),
+ },
+ {
+ "glLoseContextCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glLoseContextCHROMIUM),
+ },
+ {
+ "glInsertSyncPointCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glInsertSyncPointCHROMIUM),
+ },
+ {
+ "glWaitSyncPointCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glWaitSyncPointCHROMIUM),
+ },
+ {
+ "glDrawBuffersEXT",
+ reinterpret_cast<GLES2FunctionPointer>(glDrawBuffersEXT),
+ },
+ {
+ "glDiscardBackbufferCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glDiscardBackbufferCHROMIUM),
+ },
+ {
+ "glScheduleOverlayPlaneCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glScheduleOverlayPlaneCHROMIUM),
+ },
+ {
+ NULL, NULL,
+ },
};
} // namespace gles2
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_C_LIB_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/gles2_cmd_helper.h b/chromium/gpu/command_buffer/client/gles2_cmd_helper.h
index 72fae315b34..0726fbb4d4c 100644
--- a/chromium/gpu/command_buffer/client/gles2_cmd_helper.h
+++ b/chromium/gpu/command_buffer/client/gles2_cmd_helper.h
@@ -25,48 +25,36 @@ class GPU_EXPORT GLES2CmdHelper : public CommandBufferHelper {
// Helpers that could not be auto-generated.
// TODO(gman): Auto generate these.
-
void GetAttribLocation(
- GLuint program, uint32 name_shm_id, uint32 name_shm_offset,
- uint32 location_shm_id, uint32 location_shm_offset, uint32 data_size) {
- gles2::cmds::GetAttribLocation* c =
- GetCmdSpace<gles2::cmds::GetAttribLocation>();
- if (c) {
- c->Init(
- program, name_shm_id, name_shm_offset, location_shm_id,
- location_shm_offset, data_size);
- }
- }
-
- void GetAttribLocationBucket(
GLuint program, uint32 name_bucket_id,
uint32 location_shm_id, uint32 location_shm_offset) {
- gles2::cmds::GetAttribLocationBucket* c =
- GetCmdSpace<gles2::cmds::GetAttribLocationBucket>();
+ gles2::cmds::GetAttribLocation* c =
+ GetCmdSpace<gles2::cmds::GetAttribLocation>();
if (c) {
c->Init(program, name_bucket_id, location_shm_id, location_shm_offset);
}
}
void GetUniformLocation(
- GLuint program, uint32 name_shm_id, uint32 name_shm_offset,
- uint32 location_shm_id, uint32 location_shm_offset, uint32 data_size) {
+ GLuint program, uint32 name_bucket_id,
+ uint32 location_shm_id, uint32 location_shm_offset) {
gles2::cmds::GetUniformLocation* c =
GetCmdSpace<gles2::cmds::GetUniformLocation>();
if (c) {
- c->Init(
- program, name_shm_id, name_shm_offset, location_shm_id,
- location_shm_offset, data_size);
+ c->Init(program, name_bucket_id, location_shm_id, location_shm_offset);
}
}
- void GetUniformLocationBucket(
- GLuint program, uint32 name_bucket_id,
- uint32 location_shm_id, uint32 location_shm_offset) {
- gles2::cmds::GetUniformLocationBucket* c =
- GetCmdSpace<gles2::cmds::GetUniformLocationBucket>();
+ void CreateAndConsumeTextureCHROMIUMImmediate(GLenum target,
+ uint32_t client_id,
+ const GLbyte* _mailbox) {
+ const uint32_t size =
+ gles2::cmds::CreateAndConsumeTextureCHROMIUMImmediate::ComputeSize();
+ gles2::cmds::CreateAndConsumeTextureCHROMIUMImmediate* c =
+ GetImmediateCmdSpaceTotalSize<
+ gles2::cmds::CreateAndConsumeTextureCHROMIUMImmediate>(size);
if (c) {
- c->Init(program, name_bucket_id, location_shm_id, location_shm_offset);
+ c->Init(target, client_id, _mailbox);
}
}
diff --git a/chromium/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/chromium/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
index 76a9f4a1267..49d03362a31 100644
--- a/chromium/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -1,2026 +1,1925 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
#ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_AUTOGEN_H_
- void ActiveTexture(GLenum texture) {
- gles2::cmds::ActiveTexture* c = GetCmdSpace<gles2::cmds::ActiveTexture>();
- if (c) {
- c->Init(texture);
- }
+void ActiveTexture(GLenum texture) {
+ gles2::cmds::ActiveTexture* c = GetCmdSpace<gles2::cmds::ActiveTexture>();
+ if (c) {
+ c->Init(texture);
}
+}
- void AttachShader(GLuint program, GLuint shader) {
- gles2::cmds::AttachShader* c = GetCmdSpace<gles2::cmds::AttachShader>();
- if (c) {
- c->Init(program, shader);
- }
- }
-
- void BindAttribLocation(
- GLuint program, GLuint index, uint32 name_shm_id, uint32 name_shm_offset,
- uint32 data_size) {
- gles2::cmds::BindAttribLocation* c =
- GetCmdSpace<gles2::cmds::BindAttribLocation>();
- if (c) {
- c->Init(program, index, name_shm_id, name_shm_offset, data_size);
- }
- }
-
- void BindAttribLocationBucket(
- GLuint program, GLuint index, uint32 name_bucket_id) {
- gles2::cmds::BindAttribLocationBucket* c =
- GetCmdSpace<gles2::cmds::BindAttribLocationBucket>();
- if (c) {
- c->Init(program, index, name_bucket_id);
- }
- }
-
- void BindBuffer(GLenum target, GLuint buffer) {
- gles2::cmds::BindBuffer* c = GetCmdSpace<gles2::cmds::BindBuffer>();
- if (c) {
- c->Init(target, buffer);
- }
- }
-
- void BindFramebuffer(GLenum target, GLuint framebuffer) {
- gles2::cmds::BindFramebuffer* c =
- GetCmdSpace<gles2::cmds::BindFramebuffer>();
- if (c) {
- c->Init(target, framebuffer);
- }
- }
-
- void BindRenderbuffer(GLenum target, GLuint renderbuffer) {
- gles2::cmds::BindRenderbuffer* c =
- GetCmdSpace<gles2::cmds::BindRenderbuffer>();
- if (c) {
- c->Init(target, renderbuffer);
- }
- }
-
- void BindTexture(GLenum target, GLuint texture) {
- gles2::cmds::BindTexture* c = GetCmdSpace<gles2::cmds::BindTexture>();
- if (c) {
- c->Init(target, texture);
- }
- }
-
- void BlendColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
- gles2::cmds::BlendColor* c = GetCmdSpace<gles2::cmds::BlendColor>();
- if (c) {
- c->Init(red, green, blue, alpha);
- }
- }
-
- void BlendEquation(GLenum mode) {
- gles2::cmds::BlendEquation* c = GetCmdSpace<gles2::cmds::BlendEquation>();
- if (c) {
- c->Init(mode);
- }
- }
-
- void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {
- gles2::cmds::BlendEquationSeparate* c =
- GetCmdSpace<gles2::cmds::BlendEquationSeparate>();
- if (c) {
- c->Init(modeRGB, modeAlpha);
- }
- }
-
- void BlendFunc(GLenum sfactor, GLenum dfactor) {
- gles2::cmds::BlendFunc* c = GetCmdSpace<gles2::cmds::BlendFunc>();
- if (c) {
- c->Init(sfactor, dfactor);
- }
- }
-
- void BlendFuncSeparate(
- GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
- gles2::cmds::BlendFuncSeparate* c =
- GetCmdSpace<gles2::cmds::BlendFuncSeparate>();
- if (c) {
- c->Init(srcRGB, dstRGB, srcAlpha, dstAlpha);
- }
- }
-
- void BufferData(
- GLenum target, GLsizeiptr size, uint32 data_shm_id,
- uint32 data_shm_offset, GLenum usage) {
- gles2::cmds::BufferData* c = GetCmdSpace<gles2::cmds::BufferData>();
- if (c) {
- c->Init(target, size, data_shm_id, data_shm_offset, usage);
- }
- }
-
- void BufferSubData(
- GLenum target, GLintptr offset, GLsizeiptr size, uint32 data_shm_id,
- uint32 data_shm_offset) {
- gles2::cmds::BufferSubData* c = GetCmdSpace<gles2::cmds::BufferSubData>();
- if (c) {
- c->Init(target, offset, size, data_shm_id, data_shm_offset);
- }
- }
-
- void CheckFramebufferStatus(
- GLenum target, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::CheckFramebufferStatus* c =
- GetCmdSpace<gles2::cmds::CheckFramebufferStatus>();
- if (c) {
- c->Init(target, result_shm_id, result_shm_offset);
- }
- }
-
- void Clear(GLbitfield mask) {
- gles2::cmds::Clear* c = GetCmdSpace<gles2::cmds::Clear>();
- if (c) {
- c->Init(mask);
- }
- }
-
- void ClearColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
- gles2::cmds::ClearColor* c = GetCmdSpace<gles2::cmds::ClearColor>();
- if (c) {
- c->Init(red, green, blue, alpha);
- }
- }
-
- void ClearDepthf(GLclampf depth) {
- gles2::cmds::ClearDepthf* c = GetCmdSpace<gles2::cmds::ClearDepthf>();
- if (c) {
- c->Init(depth);
- }
- }
-
- void ClearStencil(GLint s) {
- gles2::cmds::ClearStencil* c = GetCmdSpace<gles2::cmds::ClearStencil>();
- if (c) {
- c->Init(s);
- }
- }
-
- void ColorMask(
- GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
- gles2::cmds::ColorMask* c = GetCmdSpace<gles2::cmds::ColorMask>();
- if (c) {
- c->Init(red, green, blue, alpha);
- }
- }
-
- void CompileShader(GLuint shader) {
- gles2::cmds::CompileShader* c = GetCmdSpace<gles2::cmds::CompileShader>();
- if (c) {
- c->Init(shader);
- }
- }
-
- void CompressedTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLsizei imageSize, uint32 data_shm_id,
- uint32 data_shm_offset) {
- gles2::cmds::CompressedTexImage2D* c =
- GetCmdSpace<gles2::cmds::CompressedTexImage2D>();
- if (c) {
- c->Init(
- target, level, internalformat, width, height, border, imageSize,
- data_shm_id, data_shm_offset);
- }
- }
-
- void CompressedTexImage2DBucket(
- GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLuint bucket_id) {
- gles2::cmds::CompressedTexImage2DBucket* c =
- GetCmdSpace<gles2::cmds::CompressedTexImage2DBucket>();
- if (c) {
- c->Init(target, level, internalformat, width, height, border, bucket_id);
- }
- }
-
- void CompressedTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, uint32 data_shm_id,
- uint32 data_shm_offset) {
- gles2::cmds::CompressedTexSubImage2D* c =
- GetCmdSpace<gles2::cmds::CompressedTexSubImage2D>();
- if (c) {
- c->Init(
- target, level, xoffset, yoffset, width, height, format, imageSize,
- data_shm_id, data_shm_offset);
- }
- }
-
- void CompressedTexSubImage2DBucket(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLuint bucket_id) {
- gles2::cmds::CompressedTexSubImage2DBucket* c =
- GetCmdSpace<gles2::cmds::CompressedTexSubImage2DBucket>();
- if (c) {
- c->Init(
- target, level, xoffset, yoffset, width, height, format, bucket_id);
- }
- }
-
- void CopyTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border) {
- gles2::cmds::CopyTexImage2D* c =
- GetCmdSpace<gles2::cmds::CopyTexImage2D>();
- if (c) {
- c->Init(target, level, internalformat, x, y, width, height, border);
- }
- }
-
- void CopyTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x,
- GLint y, GLsizei width, GLsizei height) {
- gles2::cmds::CopyTexSubImage2D* c =
- GetCmdSpace<gles2::cmds::CopyTexSubImage2D>();
- if (c) {
- c->Init(target, level, xoffset, yoffset, x, y, width, height);
- }
- }
-
- void CreateProgram(uint32 client_id) {
- gles2::cmds::CreateProgram* c = GetCmdSpace<gles2::cmds::CreateProgram>();
- if (c) {
- c->Init(client_id);
- }
- }
-
- void CreateShader(GLenum type, uint32 client_id) {
- gles2::cmds::CreateShader* c = GetCmdSpace<gles2::cmds::CreateShader>();
- if (c) {
- c->Init(type, client_id);
- }
- }
-
- void CullFace(GLenum mode) {
- gles2::cmds::CullFace* c = GetCmdSpace<gles2::cmds::CullFace>();
- if (c) {
- c->Init(mode);
- }
- }
-
- void DeleteBuffers(
- GLsizei n, uint32 buffers_shm_id, uint32 buffers_shm_offset) {
- gles2::cmds::DeleteBuffers* c = GetCmdSpace<gles2::cmds::DeleteBuffers>();
- if (c) {
- c->Init(n, buffers_shm_id, buffers_shm_offset);
- }
- }
-
- void DeleteBuffersImmediate(GLsizei n, const GLuint* buffers) {
- const uint32 size = gles2::cmds::DeleteBuffersImmediate::ComputeSize(n);
- gles2::cmds::DeleteBuffersImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteBuffersImmediate>(
- size);
- if (c) {
- c->Init(n, buffers);
- }
- }
-
- void DeleteFramebuffers(
- GLsizei n, uint32 framebuffers_shm_id, uint32 framebuffers_shm_offset) {
- gles2::cmds::DeleteFramebuffers* c =
- GetCmdSpace<gles2::cmds::DeleteFramebuffers>();
- if (c) {
- c->Init(n, framebuffers_shm_id, framebuffers_shm_offset);
- }
- }
-
- void DeleteFramebuffersImmediate(GLsizei n, const GLuint* framebuffers) {
- const uint32 size =
- gles2::cmds::DeleteFramebuffersImmediate::ComputeSize(n);
- gles2::cmds::DeleteFramebuffersImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteFramebuffersImmediate>(
- size);
- if (c) {
- c->Init(n, framebuffers);
- }
- }
-
- void DeleteProgram(GLuint program) {
- gles2::cmds::DeleteProgram* c = GetCmdSpace<gles2::cmds::DeleteProgram>();
- if (c) {
- c->Init(program);
- }
- }
-
- void DeleteRenderbuffers(
- GLsizei n, uint32 renderbuffers_shm_id,
- uint32 renderbuffers_shm_offset) {
- gles2::cmds::DeleteRenderbuffers* c =
- GetCmdSpace<gles2::cmds::DeleteRenderbuffers>();
- if (c) {
- c->Init(n, renderbuffers_shm_id, renderbuffers_shm_offset);
- }
- }
-
- void DeleteRenderbuffersImmediate(GLsizei n, const GLuint* renderbuffers) {
- const uint32 size =
- gles2::cmds::DeleteRenderbuffersImmediate::ComputeSize(n);
- gles2::cmds::DeleteRenderbuffersImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteRenderbuffersImmediate>(size); // NOLINT
- if (c) {
- c->Init(n, renderbuffers);
- }
- }
-
- void DeleteShader(GLuint shader) {
- gles2::cmds::DeleteShader* c = GetCmdSpace<gles2::cmds::DeleteShader>();
- if (c) {
- c->Init(shader);
- }
- }
-
- void DeleteTextures(
- GLsizei n, uint32 textures_shm_id, uint32 textures_shm_offset) {
- gles2::cmds::DeleteTextures* c =
- GetCmdSpace<gles2::cmds::DeleteTextures>();
- if (c) {
- c->Init(n, textures_shm_id, textures_shm_offset);
- }
- }
-
- void DeleteTexturesImmediate(GLsizei n, const GLuint* textures) {
- const uint32 size = gles2::cmds::DeleteTexturesImmediate::ComputeSize(n);
- gles2::cmds::DeleteTexturesImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteTexturesImmediate>(
- size);
- if (c) {
- c->Init(n, textures);
- }
- }
-
- void DepthFunc(GLenum func) {
- gles2::cmds::DepthFunc* c = GetCmdSpace<gles2::cmds::DepthFunc>();
- if (c) {
- c->Init(func);
- }
- }
-
- void DepthMask(GLboolean flag) {
- gles2::cmds::DepthMask* c = GetCmdSpace<gles2::cmds::DepthMask>();
- if (c) {
- c->Init(flag);
- }
- }
-
- void DepthRangef(GLclampf zNear, GLclampf zFar) {
- gles2::cmds::DepthRangef* c = GetCmdSpace<gles2::cmds::DepthRangef>();
- if (c) {
- c->Init(zNear, zFar);
- }
- }
-
- void DetachShader(GLuint program, GLuint shader) {
- gles2::cmds::DetachShader* c = GetCmdSpace<gles2::cmds::DetachShader>();
- if (c) {
- c->Init(program, shader);
- }
- }
-
- void Disable(GLenum cap) {
- gles2::cmds::Disable* c = GetCmdSpace<gles2::cmds::Disable>();
- if (c) {
- c->Init(cap);
- }
- }
-
- void DisableVertexAttribArray(GLuint index) {
- gles2::cmds::DisableVertexAttribArray* c =
- GetCmdSpace<gles2::cmds::DisableVertexAttribArray>();
- if (c) {
- c->Init(index);
- }
- }
-
- void DrawArrays(GLenum mode, GLint first, GLsizei count) {
- gles2::cmds::DrawArrays* c = GetCmdSpace<gles2::cmds::DrawArrays>();
- if (c) {
- c->Init(mode, first, count);
- }
- }
-
- void DrawElements(
- GLenum mode, GLsizei count, GLenum type, GLuint index_offset) {
- gles2::cmds::DrawElements* c = GetCmdSpace<gles2::cmds::DrawElements>();
- if (c) {
- c->Init(mode, count, type, index_offset);
- }
- }
-
- void Enable(GLenum cap) {
- gles2::cmds::Enable* c = GetCmdSpace<gles2::cmds::Enable>();
- if (c) {
- c->Init(cap);
- }
- }
-
- void EnableVertexAttribArray(GLuint index) {
- gles2::cmds::EnableVertexAttribArray* c =
- GetCmdSpace<gles2::cmds::EnableVertexAttribArray>();
- if (c) {
- c->Init(index);
- }
- }
-
- void Finish() {
- gles2::cmds::Finish* c = GetCmdSpace<gles2::cmds::Finish>();
- if (c) {
- c->Init();
- }
- }
-
- void Flush() {
- gles2::cmds::Flush* c = GetCmdSpace<gles2::cmds::Flush>();
- if (c) {
- c->Init();
- }
- }
-
- void FramebufferRenderbuffer(
- GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer) {
- gles2::cmds::FramebufferRenderbuffer* c =
- GetCmdSpace<gles2::cmds::FramebufferRenderbuffer>();
- if (c) {
- c->Init(target, attachment, renderbuffertarget, renderbuffer);
- }
- }
-
- void FramebufferTexture2D(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level) {
- gles2::cmds::FramebufferTexture2D* c =
- GetCmdSpace<gles2::cmds::FramebufferTexture2D>();
- if (c) {
- c->Init(target, attachment, textarget, texture, level);
- }
- }
-
- void FrontFace(GLenum mode) {
- gles2::cmds::FrontFace* c = GetCmdSpace<gles2::cmds::FrontFace>();
- if (c) {
- c->Init(mode);
- }
- }
-
- void GenBuffers(
- GLsizei n, uint32 buffers_shm_id, uint32 buffers_shm_offset) {
- gles2::cmds::GenBuffers* c = GetCmdSpace<gles2::cmds::GenBuffers>();
- if (c) {
- c->Init(n, buffers_shm_id, buffers_shm_offset);
- }
- }
-
- void GenBuffersImmediate(GLsizei n, GLuint* buffers) {
- const uint32 size = gles2::cmds::GenBuffersImmediate::ComputeSize(n);
- gles2::cmds::GenBuffersImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::GenBuffersImmediate>(size);
- if (c) {
- c->Init(n, buffers);
- }
- }
-
- void GenerateMipmap(GLenum target) {
- gles2::cmds::GenerateMipmap* c =
- GetCmdSpace<gles2::cmds::GenerateMipmap>();
- if (c) {
- c->Init(target);
- }
- }
-
- void GenFramebuffers(
- GLsizei n, uint32 framebuffers_shm_id, uint32 framebuffers_shm_offset) {
- gles2::cmds::GenFramebuffers* c =
- GetCmdSpace<gles2::cmds::GenFramebuffers>();
- if (c) {
- c->Init(n, framebuffers_shm_id, framebuffers_shm_offset);
- }
- }
-
- void GenFramebuffersImmediate(GLsizei n, GLuint* framebuffers) {
- const uint32 size = gles2::cmds::GenFramebuffersImmediate::ComputeSize(n);
- gles2::cmds::GenFramebuffersImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::GenFramebuffersImmediate>(
- size);
- if (c) {
- c->Init(n, framebuffers);
- }
- }
-
- void GenRenderbuffers(
- GLsizei n, uint32 renderbuffers_shm_id,
- uint32 renderbuffers_shm_offset) {
- gles2::cmds::GenRenderbuffers* c =
- GetCmdSpace<gles2::cmds::GenRenderbuffers>();
- if (c) {
- c->Init(n, renderbuffers_shm_id, renderbuffers_shm_offset);
- }
- }
-
- void GenRenderbuffersImmediate(GLsizei n, GLuint* renderbuffers) {
- const uint32 size = gles2::cmds::GenRenderbuffersImmediate::ComputeSize(n);
- gles2::cmds::GenRenderbuffersImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::GenRenderbuffersImmediate>(
- size);
- if (c) {
- c->Init(n, renderbuffers);
- }
- }
-
- void GenTextures(
- GLsizei n, uint32 textures_shm_id, uint32 textures_shm_offset) {
- gles2::cmds::GenTextures* c = GetCmdSpace<gles2::cmds::GenTextures>();
- if (c) {
- c->Init(n, textures_shm_id, textures_shm_offset);
- }
- }
-
- void GenTexturesImmediate(GLsizei n, GLuint* textures) {
- const uint32 size = gles2::cmds::GenTexturesImmediate::ComputeSize(n);
- gles2::cmds::GenTexturesImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::GenTexturesImmediate>(size);
- if (c) {
- c->Init(n, textures);
- }
- }
-
- void GetActiveAttrib(
- GLuint program, GLuint index, uint32 name_bucket_id, uint32 result_shm_id,
- uint32 result_shm_offset) {
- gles2::cmds::GetActiveAttrib* c =
- GetCmdSpace<gles2::cmds::GetActiveAttrib>();
- if (c) {
- c->Init(
- program, index, name_bucket_id, result_shm_id, result_shm_offset);
- }
- }
-
- void GetActiveUniform(
- GLuint program, GLuint index, uint32 name_bucket_id, uint32 result_shm_id,
- uint32 result_shm_offset) {
- gles2::cmds::GetActiveUniform* c =
- GetCmdSpace<gles2::cmds::GetActiveUniform>();
- if (c) {
- c->Init(
- program, index, name_bucket_id, result_shm_id, result_shm_offset);
- }
- }
-
- void GetAttachedShaders(
- GLuint program, uint32 result_shm_id, uint32 result_shm_offset,
- uint32 result_size) {
- gles2::cmds::GetAttachedShaders* c =
- GetCmdSpace<gles2::cmds::GetAttachedShaders>();
- if (c) {
- c->Init(program, result_shm_id, result_shm_offset, result_size);
- }
- }
-
- void GetBooleanv(
- GLenum pname, uint32 params_shm_id, uint32 params_shm_offset) {
- gles2::cmds::GetBooleanv* c = GetCmdSpace<gles2::cmds::GetBooleanv>();
- if (c) {
- c->Init(pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetBufferParameteriv(
- GLenum target, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetBufferParameteriv* c =
- GetCmdSpace<gles2::cmds::GetBufferParameteriv>();
- if (c) {
- c->Init(target, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetError(uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::GetError* c = GetCmdSpace<gles2::cmds::GetError>();
- if (c) {
- c->Init(result_shm_id, result_shm_offset);
- }
- }
-
- void GetFloatv(
- GLenum pname, uint32 params_shm_id, uint32 params_shm_offset) {
- gles2::cmds::GetFloatv* c = GetCmdSpace<gles2::cmds::GetFloatv>();
- if (c) {
- c->Init(pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetFramebufferAttachmentParameteriv(
- GLenum target, GLenum attachment, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetFramebufferAttachmentParameteriv* c =
- GetCmdSpace<gles2::cmds::GetFramebufferAttachmentParameteriv>();
- if (c) {
- c->Init(target, attachment, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetIntegerv(
- GLenum pname, uint32 params_shm_id, uint32 params_shm_offset) {
- gles2::cmds::GetIntegerv* c = GetCmdSpace<gles2::cmds::GetIntegerv>();
- if (c) {
- c->Init(pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetProgramiv(
- GLuint program, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetProgramiv* c = GetCmdSpace<gles2::cmds::GetProgramiv>();
- if (c) {
- c->Init(program, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetProgramInfoLog(GLuint program, uint32 bucket_id) {
- gles2::cmds::GetProgramInfoLog* c =
- GetCmdSpace<gles2::cmds::GetProgramInfoLog>();
- if (c) {
- c->Init(program, bucket_id);
- }
- }
-
- void GetRenderbufferParameteriv(
- GLenum target, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetRenderbufferParameteriv* c =
- GetCmdSpace<gles2::cmds::GetRenderbufferParameteriv>();
- if (c) {
- c->Init(target, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetShaderiv(
- GLuint shader, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetShaderiv* c = GetCmdSpace<gles2::cmds::GetShaderiv>();
- if (c) {
- c->Init(shader, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetShaderInfoLog(GLuint shader, uint32 bucket_id) {
- gles2::cmds::GetShaderInfoLog* c =
- GetCmdSpace<gles2::cmds::GetShaderInfoLog>();
- if (c) {
- c->Init(shader, bucket_id);
- }
- }
-
- void GetShaderPrecisionFormat(
- GLenum shadertype, GLenum precisiontype, uint32 result_shm_id,
- uint32 result_shm_offset) {
- gles2::cmds::GetShaderPrecisionFormat* c =
- GetCmdSpace<gles2::cmds::GetShaderPrecisionFormat>();
- if (c) {
- c->Init(shadertype, precisiontype, result_shm_id, result_shm_offset);
- }
- }
-
- void GetShaderSource(GLuint shader, uint32 bucket_id) {
- gles2::cmds::GetShaderSource* c =
- GetCmdSpace<gles2::cmds::GetShaderSource>();
- if (c) {
- c->Init(shader, bucket_id);
- }
- }
-
- void GetString(GLenum name, uint32 bucket_id) {
- gles2::cmds::GetString* c = GetCmdSpace<gles2::cmds::GetString>();
- if (c) {
- c->Init(name, bucket_id);
- }
- }
-
- void GetTexParameterfv(
- GLenum target, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetTexParameterfv* c =
- GetCmdSpace<gles2::cmds::GetTexParameterfv>();
- if (c) {
- c->Init(target, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetTexParameteriv(
- GLenum target, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetTexParameteriv* c =
- GetCmdSpace<gles2::cmds::GetTexParameteriv>();
- if (c) {
- c->Init(target, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetUniformfv(
- GLuint program, GLint location, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetUniformfv* c = GetCmdSpace<gles2::cmds::GetUniformfv>();
- if (c) {
- c->Init(program, location, params_shm_id, params_shm_offset);
- }
- }
-
- void GetUniformiv(
- GLuint program, GLint location, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetUniformiv* c = GetCmdSpace<gles2::cmds::GetUniformiv>();
- if (c) {
- c->Init(program, location, params_shm_id, params_shm_offset);
- }
- }
-
- void GetVertexAttribfv(
- GLuint index, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetVertexAttribfv* c =
- GetCmdSpace<gles2::cmds::GetVertexAttribfv>();
- if (c) {
- c->Init(index, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetVertexAttribiv(
- GLuint index, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::GetVertexAttribiv* c =
- GetCmdSpace<gles2::cmds::GetVertexAttribiv>();
- if (c) {
- c->Init(index, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void GetVertexAttribPointerv(
- GLuint index, GLenum pname, uint32 pointer_shm_id,
- uint32 pointer_shm_offset) {
- gles2::cmds::GetVertexAttribPointerv* c =
- GetCmdSpace<gles2::cmds::GetVertexAttribPointerv>();
- if (c) {
- c->Init(index, pname, pointer_shm_id, pointer_shm_offset);
- }
- }
-
- void Hint(GLenum target, GLenum mode) {
- gles2::cmds::Hint* c = GetCmdSpace<gles2::cmds::Hint>();
- if (c) {
- c->Init(target, mode);
- }
- }
-
- void IsBuffer(
- GLuint buffer, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::IsBuffer* c = GetCmdSpace<gles2::cmds::IsBuffer>();
- if (c) {
- c->Init(buffer, result_shm_id, result_shm_offset);
- }
- }
-
- void IsEnabled(GLenum cap, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::IsEnabled* c = GetCmdSpace<gles2::cmds::IsEnabled>();
- if (c) {
- c->Init(cap, result_shm_id, result_shm_offset);
- }
- }
-
- void IsFramebuffer(
- GLuint framebuffer, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::IsFramebuffer* c = GetCmdSpace<gles2::cmds::IsFramebuffer>();
- if (c) {
- c->Init(framebuffer, result_shm_id, result_shm_offset);
- }
- }
-
- void IsProgram(
- GLuint program, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::IsProgram* c = GetCmdSpace<gles2::cmds::IsProgram>();
- if (c) {
- c->Init(program, result_shm_id, result_shm_offset);
- }
- }
-
- void IsRenderbuffer(
- GLuint renderbuffer, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::IsRenderbuffer* c =
- GetCmdSpace<gles2::cmds::IsRenderbuffer>();
- if (c) {
- c->Init(renderbuffer, result_shm_id, result_shm_offset);
- }
- }
-
- void IsShader(
- GLuint shader, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::IsShader* c = GetCmdSpace<gles2::cmds::IsShader>();
- if (c) {
- c->Init(shader, result_shm_id, result_shm_offset);
- }
- }
-
- void IsTexture(
- GLuint texture, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::IsTexture* c = GetCmdSpace<gles2::cmds::IsTexture>();
- if (c) {
- c->Init(texture, result_shm_id, result_shm_offset);
- }
- }
-
- void LineWidth(GLfloat width) {
- gles2::cmds::LineWidth* c = GetCmdSpace<gles2::cmds::LineWidth>();
- if (c) {
- c->Init(width);
- }
- }
-
- void LinkProgram(GLuint program) {
- gles2::cmds::LinkProgram* c = GetCmdSpace<gles2::cmds::LinkProgram>();
- if (c) {
- c->Init(program);
- }
- }
-
- void PixelStorei(GLenum pname, GLint param) {
- gles2::cmds::PixelStorei* c = GetCmdSpace<gles2::cmds::PixelStorei>();
- if (c) {
- c->Init(pname, param);
- }
- }
-
- void PolygonOffset(GLfloat factor, GLfloat units) {
- gles2::cmds::PolygonOffset* c = GetCmdSpace<gles2::cmds::PolygonOffset>();
- if (c) {
- c->Init(factor, units);
- }
- }
-
- void ReadPixels(
- GLint x, GLint y, GLsizei width, GLsizei height, GLenum format,
- GLenum type, uint32 pixels_shm_id, uint32 pixels_shm_offset,
- uint32 result_shm_id, uint32 result_shm_offset, GLboolean async) {
- gles2::cmds::ReadPixels* c = GetCmdSpace<gles2::cmds::ReadPixels>();
- if (c) {
- c->Init(
- x, y, width, height, format, type, pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset, async);
- }
- }
-
- void ReleaseShaderCompiler() {
- gles2::cmds::ReleaseShaderCompiler* c =
- GetCmdSpace<gles2::cmds::ReleaseShaderCompiler>();
- if (c) {
- c->Init();
- }
- }
-
- void RenderbufferStorage(
- GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
- gles2::cmds::RenderbufferStorage* c =
- GetCmdSpace<gles2::cmds::RenderbufferStorage>();
- if (c) {
- c->Init(target, internalformat, width, height);
- }
- }
-
- void SampleCoverage(GLclampf value, GLboolean invert) {
- gles2::cmds::SampleCoverage* c =
- GetCmdSpace<gles2::cmds::SampleCoverage>();
- if (c) {
- c->Init(value, invert);
- }
- }
-
- void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) {
- gles2::cmds::Scissor* c = GetCmdSpace<gles2::cmds::Scissor>();
- if (c) {
- c->Init(x, y, width, height);
- }
- }
-
- void ShaderBinary(
- GLsizei n, uint32 shaders_shm_id, uint32 shaders_shm_offset,
- GLenum binaryformat, uint32 binary_shm_id, uint32 binary_shm_offset,
- GLsizei length) {
- gles2::cmds::ShaderBinary* c = GetCmdSpace<gles2::cmds::ShaderBinary>();
- if (c) {
- c->Init(
- n, shaders_shm_id, shaders_shm_offset, binaryformat, binary_shm_id,
- binary_shm_offset, length);
- }
- }
-
- void ShaderSource(
- GLuint shader, uint32 data_shm_id, uint32 data_shm_offset,
- uint32 data_size) {
- gles2::cmds::ShaderSource* c = GetCmdSpace<gles2::cmds::ShaderSource>();
- if (c) {
- c->Init(shader, data_shm_id, data_shm_offset, data_size);
- }
- }
-
- void ShaderSourceBucket(GLuint shader, uint32 data_bucket_id) {
- gles2::cmds::ShaderSourceBucket* c =
- GetCmdSpace<gles2::cmds::ShaderSourceBucket>();
- if (c) {
- c->Init(shader, data_bucket_id);
- }
- }
-
- void StencilFunc(GLenum func, GLint ref, GLuint mask) {
- gles2::cmds::StencilFunc* c = GetCmdSpace<gles2::cmds::StencilFunc>();
- if (c) {
- c->Init(func, ref, mask);
- }
- }
-
- void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {
- gles2::cmds::StencilFuncSeparate* c =
- GetCmdSpace<gles2::cmds::StencilFuncSeparate>();
- if (c) {
- c->Init(face, func, ref, mask);
- }
- }
-
- void StencilMask(GLuint mask) {
- gles2::cmds::StencilMask* c = GetCmdSpace<gles2::cmds::StencilMask>();
- if (c) {
- c->Init(mask);
- }
- }
-
- void StencilMaskSeparate(GLenum face, GLuint mask) {
- gles2::cmds::StencilMaskSeparate* c =
- GetCmdSpace<gles2::cmds::StencilMaskSeparate>();
- if (c) {
- c->Init(face, mask);
- }
- }
-
- void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
- gles2::cmds::StencilOp* c = GetCmdSpace<gles2::cmds::StencilOp>();
- if (c) {
- c->Init(fail, zfail, zpass);
- }
- }
-
- void StencilOpSeparate(
- GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {
- gles2::cmds::StencilOpSeparate* c =
- GetCmdSpace<gles2::cmds::StencilOpSeparate>();
- if (c) {
- c->Init(face, fail, zfail, zpass);
- }
- }
-
- void TexImage2D(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- uint32 pixels_shm_id, uint32 pixels_shm_offset) {
- gles2::cmds::TexImage2D* c = GetCmdSpace<gles2::cmds::TexImage2D>();
- if (c) {
- c->Init(
- target, level, internalformat, width, height, border, format, type,
- pixels_shm_id, pixels_shm_offset);
- }
- }
-
- void TexParameterf(GLenum target, GLenum pname, GLfloat param) {
- gles2::cmds::TexParameterf* c = GetCmdSpace<gles2::cmds::TexParameterf>();
- if (c) {
- c->Init(target, pname, param);
- }
- }
-
- void TexParameterfv(
- GLenum target, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::TexParameterfv* c =
- GetCmdSpace<gles2::cmds::TexParameterfv>();
- if (c) {
- c->Init(target, pname, params_shm_id, params_shm_offset);
- }
- }
-
- void TexParameterfvImmediate(
- GLenum target, GLenum pname, const GLfloat* params) {
- const uint32 size = gles2::cmds::TexParameterfvImmediate::ComputeSize();
- gles2::cmds::TexParameterfvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::TexParameterfvImmediate>(
- size);
- if (c) {
- c->Init(target, pname, params);
- }
- }
+void AttachShader(GLuint program, GLuint shader) {
+ gles2::cmds::AttachShader* c = GetCmdSpace<gles2::cmds::AttachShader>();
+ if (c) {
+ c->Init(program, shader);
+ }
+}
- void TexParameteri(GLenum target, GLenum pname, GLint param) {
- gles2::cmds::TexParameteri* c = GetCmdSpace<gles2::cmds::TexParameteri>();
- if (c) {
- c->Init(target, pname, param);
- }
- }
+void BindAttribLocationBucket(GLuint program,
+ GLuint index,
+ uint32_t name_bucket_id) {
+ gles2::cmds::BindAttribLocationBucket* c =
+ GetCmdSpace<gles2::cmds::BindAttribLocationBucket>();
+ if (c) {
+ c->Init(program, index, name_bucket_id);
+ }
+}
+
+void BindBuffer(GLenum target, GLuint buffer) {
+ gles2::cmds::BindBuffer* c = GetCmdSpace<gles2::cmds::BindBuffer>();
+ if (c) {
+ c->Init(target, buffer);
+ }
+}
+
+void BindFramebuffer(GLenum target, GLuint framebuffer) {
+ gles2::cmds::BindFramebuffer* c = GetCmdSpace<gles2::cmds::BindFramebuffer>();
+ if (c) {
+ c->Init(target, framebuffer);
+ }
+}
- void TexParameteriv(
- GLenum target, GLenum pname, uint32 params_shm_id,
- uint32 params_shm_offset) {
- gles2::cmds::TexParameteriv* c =
- GetCmdSpace<gles2::cmds::TexParameteriv>();
- if (c) {
- c->Init(target, pname, params_shm_id, params_shm_offset);
- }
+void BindRenderbuffer(GLenum target, GLuint renderbuffer) {
+ gles2::cmds::BindRenderbuffer* c =
+ GetCmdSpace<gles2::cmds::BindRenderbuffer>();
+ if (c) {
+ c->Init(target, renderbuffer);
}
+}
- void TexParameterivImmediate(
- GLenum target, GLenum pname, const GLint* params) {
- const uint32 size = gles2::cmds::TexParameterivImmediate::ComputeSize();
- gles2::cmds::TexParameterivImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::TexParameterivImmediate>(
- size);
- if (c) {
- c->Init(target, pname, params);
- }
+void BindTexture(GLenum target, GLuint texture) {
+ gles2::cmds::BindTexture* c = GetCmdSpace<gles2::cmds::BindTexture>();
+ if (c) {
+ c->Init(target, texture);
}
+}
- void TexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, uint32 pixels_shm_id,
- uint32 pixels_shm_offset, GLboolean internal) {
- gles2::cmds::TexSubImage2D* c = GetCmdSpace<gles2::cmds::TexSubImage2D>();
- if (c) {
- c->Init(
- target, level, xoffset, yoffset, width, height, format, type,
- pixels_shm_id, pixels_shm_offset, internal);
- }
- }
-
- void Uniform1f(GLint location, GLfloat x) {
- gles2::cmds::Uniform1f* c = GetCmdSpace<gles2::cmds::Uniform1f>();
- if (c) {
- c->Init(location, x);
- }
- }
-
- void Uniform1fv(
- GLint location, GLsizei count, uint32 v_shm_id, uint32 v_shm_offset) {
- gles2::cmds::Uniform1fv* c = GetCmdSpace<gles2::cmds::Uniform1fv>();
- if (c) {
- c->Init(location, count, v_shm_id, v_shm_offset);
- }
- }
-
- void Uniform1fvImmediate(GLint location, GLsizei count, const GLfloat* v) {
- const uint32 size = gles2::cmds::Uniform1fvImmediate::ComputeSize(count);
- gles2::cmds::Uniform1fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform1fvImmediate>(size);
- if (c) {
- c->Init(location, count, v);
- }
- }
-
- void Uniform1i(GLint location, GLint x) {
- gles2::cmds::Uniform1i* c = GetCmdSpace<gles2::cmds::Uniform1i>();
- if (c) {
- c->Init(location, x);
- }
+void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
+ gles2::cmds::BlendColor* c = GetCmdSpace<gles2::cmds::BlendColor>();
+ if (c) {
+ c->Init(red, green, blue, alpha);
}
-
- void Uniform1iv(
- GLint location, GLsizei count, uint32 v_shm_id, uint32 v_shm_offset) {
- gles2::cmds::Uniform1iv* c = GetCmdSpace<gles2::cmds::Uniform1iv>();
- if (c) {
- c->Init(location, count, v_shm_id, v_shm_offset);
- }
+}
+
+void BlendEquation(GLenum mode) {
+ gles2::cmds::BlendEquation* c = GetCmdSpace<gles2::cmds::BlendEquation>();
+ if (c) {
+ c->Init(mode);
}
-
- void Uniform1ivImmediate(GLint location, GLsizei count, const GLint* v) {
- const uint32 size = gles2::cmds::Uniform1ivImmediate::ComputeSize(count);
- gles2::cmds::Uniform1ivImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform1ivImmediate>(size);
- if (c) {
- c->Init(location, count, v);
- }
- }
-
- void Uniform2f(GLint location, GLfloat x, GLfloat y) {
- gles2::cmds::Uniform2f* c = GetCmdSpace<gles2::cmds::Uniform2f>();
- if (c) {
- c->Init(location, x, y);
- }
+}
+
+void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {
+ gles2::cmds::BlendEquationSeparate* c =
+ GetCmdSpace<gles2::cmds::BlendEquationSeparate>();
+ if (c) {
+ c->Init(modeRGB, modeAlpha);
}
-
- void Uniform2fv(
- GLint location, GLsizei count, uint32 v_shm_id, uint32 v_shm_offset) {
- gles2::cmds::Uniform2fv* c = GetCmdSpace<gles2::cmds::Uniform2fv>();
- if (c) {
- c->Init(location, count, v_shm_id, v_shm_offset);
- }
- }
-
- void Uniform2fvImmediate(GLint location, GLsizei count, const GLfloat* v) {
- const uint32 size = gles2::cmds::Uniform2fvImmediate::ComputeSize(count);
- gles2::cmds::Uniform2fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform2fvImmediate>(size);
- if (c) {
- c->Init(location, count, v);
- }
- }
-
- void Uniform2i(GLint location, GLint x, GLint y) {
- gles2::cmds::Uniform2i* c = GetCmdSpace<gles2::cmds::Uniform2i>();
- if (c) {
- c->Init(location, x, y);
- }
- }
-
- void Uniform2iv(
- GLint location, GLsizei count, uint32 v_shm_id, uint32 v_shm_offset) {
- gles2::cmds::Uniform2iv* c = GetCmdSpace<gles2::cmds::Uniform2iv>();
- if (c) {
- c->Init(location, count, v_shm_id, v_shm_offset);
- }
+}
+
+void BlendFunc(GLenum sfactor, GLenum dfactor) {
+ gles2::cmds::BlendFunc* c = GetCmdSpace<gles2::cmds::BlendFunc>();
+ if (c) {
+ c->Init(sfactor, dfactor);
+ }
+}
+
+void BlendFuncSeparate(GLenum srcRGB,
+ GLenum dstRGB,
+ GLenum srcAlpha,
+ GLenum dstAlpha) {
+ gles2::cmds::BlendFuncSeparate* c =
+ GetCmdSpace<gles2::cmds::BlendFuncSeparate>();
+ if (c) {
+ c->Init(srcRGB, dstRGB, srcAlpha, dstAlpha);
+ }
+}
+
+void BufferData(GLenum target,
+ GLsizeiptr size,
+ uint32_t data_shm_id,
+ uint32_t data_shm_offset,
+ GLenum usage) {
+ gles2::cmds::BufferData* c = GetCmdSpace<gles2::cmds::BufferData>();
+ if (c) {
+ c->Init(target, size, data_shm_id, data_shm_offset, usage);
+ }
+}
+
+void BufferSubData(GLenum target,
+ GLintptr offset,
+ GLsizeiptr size,
+ uint32_t data_shm_id,
+ uint32_t data_shm_offset) {
+ gles2::cmds::BufferSubData* c = GetCmdSpace<gles2::cmds::BufferSubData>();
+ if (c) {
+ c->Init(target, offset, size, data_shm_id, data_shm_offset);
+ }
+}
+
+void CheckFramebufferStatus(GLenum target,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::CheckFramebufferStatus* c =
+ GetCmdSpace<gles2::cmds::CheckFramebufferStatus>();
+ if (c) {
+ c->Init(target, result_shm_id, result_shm_offset);
+ }
+}
+
+void Clear(GLbitfield mask) {
+ gles2::cmds::Clear* c = GetCmdSpace<gles2::cmds::Clear>();
+ if (c) {
+ c->Init(mask);
+ }
+}
+
+void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
+ gles2::cmds::ClearColor* c = GetCmdSpace<gles2::cmds::ClearColor>();
+ if (c) {
+ c->Init(red, green, blue, alpha);
+ }
+}
+
+void ClearDepthf(GLclampf depth) {
+ gles2::cmds::ClearDepthf* c = GetCmdSpace<gles2::cmds::ClearDepthf>();
+ if (c) {
+ c->Init(depth);
+ }
+}
+
+void ClearStencil(GLint s) {
+ gles2::cmds::ClearStencil* c = GetCmdSpace<gles2::cmds::ClearStencil>();
+ if (c) {
+ c->Init(s);
+ }
+}
+
+void ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) {
+ gles2::cmds::ColorMask* c = GetCmdSpace<gles2::cmds::ColorMask>();
+ if (c) {
+ c->Init(red, green, blue, alpha);
+ }
+}
+
+void CompileShader(GLuint shader) {
+ gles2::cmds::CompileShader* c = GetCmdSpace<gles2::cmds::CompileShader>();
+ if (c) {
+ c->Init(shader);
+ }
+}
+
+void CompressedTexImage2DBucket(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLuint bucket_id) {
+ gles2::cmds::CompressedTexImage2DBucket* c =
+ GetCmdSpace<gles2::cmds::CompressedTexImage2DBucket>();
+ if (c) {
+ c->Init(target, level, internalformat, width, height, bucket_id);
+ }
+}
+
+void CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLsizei imageSize,
+ uint32_t data_shm_id,
+ uint32_t data_shm_offset) {
+ gles2::cmds::CompressedTexImage2D* c =
+ GetCmdSpace<gles2::cmds::CompressedTexImage2D>();
+ if (c) {
+ c->Init(target,
+ level,
+ internalformat,
+ width,
+ height,
+ imageSize,
+ data_shm_id,
+ data_shm_offset);
+ }
+}
+
+void CompressedTexSubImage2DBucket(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLuint bucket_id) {
+ gles2::cmds::CompressedTexSubImage2DBucket* c =
+ GetCmdSpace<gles2::cmds::CompressedTexSubImage2DBucket>();
+ if (c) {
+ c->Init(target, level, xoffset, yoffset, width, height, format, bucket_id);
+ }
+}
+
+void CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ uint32_t data_shm_id,
+ uint32_t data_shm_offset) {
+ gles2::cmds::CompressedTexSubImage2D* c =
+ GetCmdSpace<gles2::cmds::CompressedTexSubImage2D>();
+ if (c) {
+ c->Init(target,
+ level,
+ xoffset,
+ yoffset,
+ width,
+ height,
+ format,
+ imageSize,
+ data_shm_id,
+ data_shm_offset);
+ }
+}
+
+void CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
+ gles2::cmds::CopyTexImage2D* c = GetCmdSpace<gles2::cmds::CopyTexImage2D>();
+ if (c) {
+ c->Init(target, level, internalformat, x, y, width, height);
+ }
+}
+
+void CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
+ gles2::cmds::CopyTexSubImage2D* c =
+ GetCmdSpace<gles2::cmds::CopyTexSubImage2D>();
+ if (c) {
+ c->Init(target, level, xoffset, yoffset, x, y, width, height);
+ }
+}
+
+void CreateProgram(uint32_t client_id) {
+ gles2::cmds::CreateProgram* c = GetCmdSpace<gles2::cmds::CreateProgram>();
+ if (c) {
+ c->Init(client_id);
+ }
+}
+
+void CreateShader(GLenum type, uint32_t client_id) {
+ gles2::cmds::CreateShader* c = GetCmdSpace<gles2::cmds::CreateShader>();
+ if (c) {
+ c->Init(type, client_id);
+ }
+}
+
+void CullFace(GLenum mode) {
+ gles2::cmds::CullFace* c = GetCmdSpace<gles2::cmds::CullFace>();
+ if (c) {
+ c->Init(mode);
+ }
+}
+
+void DeleteBuffersImmediate(GLsizei n, const GLuint* buffers) {
+ const uint32_t size = gles2::cmds::DeleteBuffersImmediate::ComputeSize(n);
+ gles2::cmds::DeleteBuffersImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteBuffersImmediate>(size);
+ if (c) {
+ c->Init(n, buffers);
+ }
+}
+
+void DeleteFramebuffersImmediate(GLsizei n, const GLuint* framebuffers) {
+ const uint32_t size =
+ gles2::cmds::DeleteFramebuffersImmediate::ComputeSize(n);
+ gles2::cmds::DeleteFramebuffersImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteFramebuffersImmediate>(
+ size);
+ if (c) {
+ c->Init(n, framebuffers);
+ }
+}
+
+void DeleteProgram(GLuint program) {
+ gles2::cmds::DeleteProgram* c = GetCmdSpace<gles2::cmds::DeleteProgram>();
+ if (c) {
+ c->Init(program);
+ }
+}
+
+void DeleteRenderbuffersImmediate(GLsizei n, const GLuint* renderbuffers) {
+ const uint32_t size =
+ gles2::cmds::DeleteRenderbuffersImmediate::ComputeSize(n);
+ gles2::cmds::DeleteRenderbuffersImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteRenderbuffersImmediate>(
+ size);
+ if (c) {
+ c->Init(n, renderbuffers);
+ }
+}
+
+void DeleteShader(GLuint shader) {
+ gles2::cmds::DeleteShader* c = GetCmdSpace<gles2::cmds::DeleteShader>();
+ if (c) {
+ c->Init(shader);
+ }
+}
+
+void DeleteTexturesImmediate(GLsizei n, const GLuint* textures) {
+ const uint32_t size = gles2::cmds::DeleteTexturesImmediate::ComputeSize(n);
+ gles2::cmds::DeleteTexturesImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteTexturesImmediate>(size);
+ if (c) {
+ c->Init(n, textures);
+ }
+}
+
+void DepthFunc(GLenum func) {
+ gles2::cmds::DepthFunc* c = GetCmdSpace<gles2::cmds::DepthFunc>();
+ if (c) {
+ c->Init(func);
+ }
+}
+
+void DepthMask(GLboolean flag) {
+ gles2::cmds::DepthMask* c = GetCmdSpace<gles2::cmds::DepthMask>();
+ if (c) {
+ c->Init(flag);
+ }
+}
+
+void DepthRangef(GLclampf zNear, GLclampf zFar) {
+ gles2::cmds::DepthRangef* c = GetCmdSpace<gles2::cmds::DepthRangef>();
+ if (c) {
+ c->Init(zNear, zFar);
}
+}
- void Uniform2ivImmediate(GLint location, GLsizei count, const GLint* v) {
- const uint32 size = gles2::cmds::Uniform2ivImmediate::ComputeSize(count);
- gles2::cmds::Uniform2ivImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform2ivImmediate>(size);
- if (c) {
- c->Init(location, count, v);
- }
- }
+void DetachShader(GLuint program, GLuint shader) {
+ gles2::cmds::DetachShader* c = GetCmdSpace<gles2::cmds::DetachShader>();
+ if (c) {
+ c->Init(program, shader);
+ }
+}
- void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) {
- gles2::cmds::Uniform3f* c = GetCmdSpace<gles2::cmds::Uniform3f>();
- if (c) {
- c->Init(location, x, y, z);
- }
- }
+void Disable(GLenum cap) {
+ gles2::cmds::Disable* c = GetCmdSpace<gles2::cmds::Disable>();
+ if (c) {
+ c->Init(cap);
+ }
+}
- void Uniform3fv(
- GLint location, GLsizei count, uint32 v_shm_id, uint32 v_shm_offset) {
- gles2::cmds::Uniform3fv* c = GetCmdSpace<gles2::cmds::Uniform3fv>();
- if (c) {
- c->Init(location, count, v_shm_id, v_shm_offset);
- }
- }
-
- void Uniform3fvImmediate(GLint location, GLsizei count, const GLfloat* v) {
- const uint32 size = gles2::cmds::Uniform3fvImmediate::ComputeSize(count);
- gles2::cmds::Uniform3fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform3fvImmediate>(size);
- if (c) {
- c->Init(location, count, v);
- }
- }
-
- void Uniform3i(GLint location, GLint x, GLint y, GLint z) {
- gles2::cmds::Uniform3i* c = GetCmdSpace<gles2::cmds::Uniform3i>();
- if (c) {
- c->Init(location, x, y, z);
- }
- }
-
- void Uniform3iv(
- GLint location, GLsizei count, uint32 v_shm_id, uint32 v_shm_offset) {
- gles2::cmds::Uniform3iv* c = GetCmdSpace<gles2::cmds::Uniform3iv>();
- if (c) {
- c->Init(location, count, v_shm_id, v_shm_offset);
- }
- }
-
- void Uniform3ivImmediate(GLint location, GLsizei count, const GLint* v) {
- const uint32 size = gles2::cmds::Uniform3ivImmediate::ComputeSize(count);
- gles2::cmds::Uniform3ivImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform3ivImmediate>(size);
- if (c) {
- c->Init(location, count, v);
- }
- }
-
- void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
- gles2::cmds::Uniform4f* c = GetCmdSpace<gles2::cmds::Uniform4f>();
- if (c) {
- c->Init(location, x, y, z, w);
- }
- }
-
- void Uniform4fv(
- GLint location, GLsizei count, uint32 v_shm_id, uint32 v_shm_offset) {
- gles2::cmds::Uniform4fv* c = GetCmdSpace<gles2::cmds::Uniform4fv>();
- if (c) {
- c->Init(location, count, v_shm_id, v_shm_offset);
- }
- }
-
- void Uniform4fvImmediate(GLint location, GLsizei count, const GLfloat* v) {
- const uint32 size = gles2::cmds::Uniform4fvImmediate::ComputeSize(count);
- gles2::cmds::Uniform4fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform4fvImmediate>(size);
- if (c) {
- c->Init(location, count, v);
- }
- }
-
- void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) {
- gles2::cmds::Uniform4i* c = GetCmdSpace<gles2::cmds::Uniform4i>();
- if (c) {
- c->Init(location, x, y, z, w);
- }
- }
-
- void Uniform4iv(
- GLint location, GLsizei count, uint32 v_shm_id, uint32 v_shm_offset) {
- gles2::cmds::Uniform4iv* c = GetCmdSpace<gles2::cmds::Uniform4iv>();
- if (c) {
- c->Init(location, count, v_shm_id, v_shm_offset);
- }
- }
-
- void Uniform4ivImmediate(GLint location, GLsizei count, const GLint* v) {
- const uint32 size = gles2::cmds::Uniform4ivImmediate::ComputeSize(count);
- gles2::cmds::Uniform4ivImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform4ivImmediate>(size);
- if (c) {
- c->Init(location, count, v);
- }
- }
-
- void UniformMatrix2fv(
- GLint location, GLsizei count, GLboolean transpose, uint32 value_shm_id,
- uint32 value_shm_offset) {
- gles2::cmds::UniformMatrix2fv* c =
- GetCmdSpace<gles2::cmds::UniformMatrix2fv>();
- if (c) {
- c->Init(location, count, transpose, value_shm_id, value_shm_offset);
- }
- }
-
- void UniformMatrix2fvImmediate(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) {
- const uint32 size =
- gles2::cmds::UniformMatrix2fvImmediate::ComputeSize(count);
- gles2::cmds::UniformMatrix2fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::UniformMatrix2fvImmediate>(
- size);
- if (c) {
- c->Init(location, count, transpose, value);
- }
- }
-
- void UniformMatrix3fv(
- GLint location, GLsizei count, GLboolean transpose, uint32 value_shm_id,
- uint32 value_shm_offset) {
- gles2::cmds::UniformMatrix3fv* c =
- GetCmdSpace<gles2::cmds::UniformMatrix3fv>();
- if (c) {
- c->Init(location, count, transpose, value_shm_id, value_shm_offset);
- }
- }
-
- void UniformMatrix3fvImmediate(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) {
- const uint32 size =
- gles2::cmds::UniformMatrix3fvImmediate::ComputeSize(count);
- gles2::cmds::UniformMatrix3fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::UniformMatrix3fvImmediate>(
+void DisableVertexAttribArray(GLuint index) {
+ gles2::cmds::DisableVertexAttribArray* c =
+ GetCmdSpace<gles2::cmds::DisableVertexAttribArray>();
+ if (c) {
+ c->Init(index);
+ }
+}
+
+void DrawArrays(GLenum mode, GLint first, GLsizei count) {
+ gles2::cmds::DrawArrays* c = GetCmdSpace<gles2::cmds::DrawArrays>();
+ if (c) {
+ c->Init(mode, first, count);
+ }
+}
+
+void DrawElements(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ GLuint index_offset) {
+ gles2::cmds::DrawElements* c = GetCmdSpace<gles2::cmds::DrawElements>();
+ if (c) {
+ c->Init(mode, count, type, index_offset);
+ }
+}
+
+void Enable(GLenum cap) {
+ gles2::cmds::Enable* c = GetCmdSpace<gles2::cmds::Enable>();
+ if (c) {
+ c->Init(cap);
+ }
+}
+
+void EnableVertexAttribArray(GLuint index) {
+ gles2::cmds::EnableVertexAttribArray* c =
+ GetCmdSpace<gles2::cmds::EnableVertexAttribArray>();
+ if (c) {
+ c->Init(index);
+ }
+}
+
+void Finish() {
+ gles2::cmds::Finish* c = GetCmdSpace<gles2::cmds::Finish>();
+ if (c) {
+ c->Init();
+ }
+}
+
+void Flush() {
+ gles2::cmds::Flush* c = GetCmdSpace<gles2::cmds::Flush>();
+ if (c) {
+ c->Init();
+ }
+}
+
+void FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer) {
+ gles2::cmds::FramebufferRenderbuffer* c =
+ GetCmdSpace<gles2::cmds::FramebufferRenderbuffer>();
+ if (c) {
+ c->Init(target, attachment, renderbuffertarget, renderbuffer);
+ }
+}
+
+void FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture) {
+ gles2::cmds::FramebufferTexture2D* c =
+ GetCmdSpace<gles2::cmds::FramebufferTexture2D>();
+ if (c) {
+ c->Init(target, attachment, textarget, texture);
+ }
+}
+
+void FrontFace(GLenum mode) {
+ gles2::cmds::FrontFace* c = GetCmdSpace<gles2::cmds::FrontFace>();
+ if (c) {
+ c->Init(mode);
+ }
+}
+
+void GenBuffersImmediate(GLsizei n, GLuint* buffers) {
+ const uint32_t size = gles2::cmds::GenBuffersImmediate::ComputeSize(n);
+ gles2::cmds::GenBuffersImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::GenBuffersImmediate>(size);
+ if (c) {
+ c->Init(n, buffers);
+ }
+}
+
+void GenerateMipmap(GLenum target) {
+ gles2::cmds::GenerateMipmap* c = GetCmdSpace<gles2::cmds::GenerateMipmap>();
+ if (c) {
+ c->Init(target);
+ }
+}
+
+void GenFramebuffersImmediate(GLsizei n, GLuint* framebuffers) {
+ const uint32_t size = gles2::cmds::GenFramebuffersImmediate::ComputeSize(n);
+ gles2::cmds::GenFramebuffersImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::GenFramebuffersImmediate>(
+ size);
+ if (c) {
+ c->Init(n, framebuffers);
+ }
+}
+
+void GenRenderbuffersImmediate(GLsizei n, GLuint* renderbuffers) {
+ const uint32_t size = gles2::cmds::GenRenderbuffersImmediate::ComputeSize(n);
+ gles2::cmds::GenRenderbuffersImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::GenRenderbuffersImmediate>(
+ size);
+ if (c) {
+ c->Init(n, renderbuffers);
+ }
+}
+
+void GenTexturesImmediate(GLsizei n, GLuint* textures) {
+ const uint32_t size = gles2::cmds::GenTexturesImmediate::ComputeSize(n);
+ gles2::cmds::GenTexturesImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::GenTexturesImmediate>(size);
+ if (c) {
+ c->Init(n, textures);
+ }
+}
+
+void GetActiveAttrib(GLuint program,
+ GLuint index,
+ uint32_t name_bucket_id,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::GetActiveAttrib* c = GetCmdSpace<gles2::cmds::GetActiveAttrib>();
+ if (c) {
+ c->Init(program, index, name_bucket_id, result_shm_id, result_shm_offset);
+ }
+}
+
+void GetActiveUniform(GLuint program,
+ GLuint index,
+ uint32_t name_bucket_id,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::GetActiveUniform* c =
+ GetCmdSpace<gles2::cmds::GetActiveUniform>();
+ if (c) {
+ c->Init(program, index, name_bucket_id, result_shm_id, result_shm_offset);
+ }
+}
+
+void GetAttachedShaders(GLuint program,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset,
+ uint32_t result_size) {
+ gles2::cmds::GetAttachedShaders* c =
+ GetCmdSpace<gles2::cmds::GetAttachedShaders>();
+ if (c) {
+ c->Init(program, result_shm_id, result_shm_offset, result_size);
+ }
+}
+
+void GetBooleanv(GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetBooleanv* c = GetCmdSpace<gles2::cmds::GetBooleanv>();
+ if (c) {
+ c->Init(pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetBufferParameteriv(GLenum target,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetBufferParameteriv* c =
+ GetCmdSpace<gles2::cmds::GetBufferParameteriv>();
+ if (c) {
+ c->Init(target, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetError(uint32_t result_shm_id, uint32_t result_shm_offset) {
+ gles2::cmds::GetError* c = GetCmdSpace<gles2::cmds::GetError>();
+ if (c) {
+ c->Init(result_shm_id, result_shm_offset);
+ }
+}
+
+void GetFloatv(GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetFloatv* c = GetCmdSpace<gles2::cmds::GetFloatv>();
+ if (c) {
+ c->Init(pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetFramebufferAttachmentParameteriv* c =
+ GetCmdSpace<gles2::cmds::GetFramebufferAttachmentParameteriv>();
+ if (c) {
+ c->Init(target, attachment, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetIntegerv(GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetIntegerv* c = GetCmdSpace<gles2::cmds::GetIntegerv>();
+ if (c) {
+ c->Init(pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetProgramiv(GLuint program,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetProgramiv* c = GetCmdSpace<gles2::cmds::GetProgramiv>();
+ if (c) {
+ c->Init(program, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetProgramInfoLog(GLuint program, uint32_t bucket_id) {
+ gles2::cmds::GetProgramInfoLog* c =
+ GetCmdSpace<gles2::cmds::GetProgramInfoLog>();
+ if (c) {
+ c->Init(program, bucket_id);
+ }
+}
+
+void GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetRenderbufferParameteriv* c =
+ GetCmdSpace<gles2::cmds::GetRenderbufferParameteriv>();
+ if (c) {
+ c->Init(target, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetShaderiv(GLuint shader,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetShaderiv* c = GetCmdSpace<gles2::cmds::GetShaderiv>();
+ if (c) {
+ c->Init(shader, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetShaderInfoLog(GLuint shader, uint32_t bucket_id) {
+ gles2::cmds::GetShaderInfoLog* c =
+ GetCmdSpace<gles2::cmds::GetShaderInfoLog>();
+ if (c) {
+ c->Init(shader, bucket_id);
+ }
+}
+
+void GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::GetShaderPrecisionFormat* c =
+ GetCmdSpace<gles2::cmds::GetShaderPrecisionFormat>();
+ if (c) {
+ c->Init(shadertype, precisiontype, result_shm_id, result_shm_offset);
+ }
+}
+
+void GetShaderSource(GLuint shader, uint32_t bucket_id) {
+ gles2::cmds::GetShaderSource* c = GetCmdSpace<gles2::cmds::GetShaderSource>();
+ if (c) {
+ c->Init(shader, bucket_id);
+ }
+}
+
+void GetString(GLenum name, uint32_t bucket_id) {
+ gles2::cmds::GetString* c = GetCmdSpace<gles2::cmds::GetString>();
+ if (c) {
+ c->Init(name, bucket_id);
+ }
+}
+
+void GetTexParameterfv(GLenum target,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetTexParameterfv* c =
+ GetCmdSpace<gles2::cmds::GetTexParameterfv>();
+ if (c) {
+ c->Init(target, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetTexParameteriv(GLenum target,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetTexParameteriv* c =
+ GetCmdSpace<gles2::cmds::GetTexParameteriv>();
+ if (c) {
+ c->Init(target, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetUniformfv(GLuint program,
+ GLint location,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetUniformfv* c = GetCmdSpace<gles2::cmds::GetUniformfv>();
+ if (c) {
+ c->Init(program, location, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetUniformiv(GLuint program,
+ GLint location,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetUniformiv* c = GetCmdSpace<gles2::cmds::GetUniformiv>();
+ if (c) {
+ c->Init(program, location, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetVertexAttribfv(GLuint index,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetVertexAttribfv* c =
+ GetCmdSpace<gles2::cmds::GetVertexAttribfv>();
+ if (c) {
+ c->Init(index, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetVertexAttribiv(GLuint index,
+ GLenum pname,
+ uint32_t params_shm_id,
+ uint32_t params_shm_offset) {
+ gles2::cmds::GetVertexAttribiv* c =
+ GetCmdSpace<gles2::cmds::GetVertexAttribiv>();
+ if (c) {
+ c->Init(index, pname, params_shm_id, params_shm_offset);
+ }
+}
+
+void GetVertexAttribPointerv(GLuint index,
+ GLenum pname,
+ uint32_t pointer_shm_id,
+ uint32_t pointer_shm_offset) {
+ gles2::cmds::GetVertexAttribPointerv* c =
+ GetCmdSpace<gles2::cmds::GetVertexAttribPointerv>();
+ if (c) {
+ c->Init(index, pname, pointer_shm_id, pointer_shm_offset);
+ }
+}
+
+void Hint(GLenum target, GLenum mode) {
+ gles2::cmds::Hint* c = GetCmdSpace<gles2::cmds::Hint>();
+ if (c) {
+ c->Init(target, mode);
+ }
+}
+
+void IsBuffer(GLuint buffer,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::IsBuffer* c = GetCmdSpace<gles2::cmds::IsBuffer>();
+ if (c) {
+ c->Init(buffer, result_shm_id, result_shm_offset);
+ }
+}
+
+void IsEnabled(GLenum cap, uint32_t result_shm_id, uint32_t result_shm_offset) {
+ gles2::cmds::IsEnabled* c = GetCmdSpace<gles2::cmds::IsEnabled>();
+ if (c) {
+ c->Init(cap, result_shm_id, result_shm_offset);
+ }
+}
+
+void IsFramebuffer(GLuint framebuffer,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::IsFramebuffer* c = GetCmdSpace<gles2::cmds::IsFramebuffer>();
+ if (c) {
+ c->Init(framebuffer, result_shm_id, result_shm_offset);
+ }
+}
+
+void IsProgram(GLuint program,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::IsProgram* c = GetCmdSpace<gles2::cmds::IsProgram>();
+ if (c) {
+ c->Init(program, result_shm_id, result_shm_offset);
+ }
+}
+
+void IsRenderbuffer(GLuint renderbuffer,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::IsRenderbuffer* c = GetCmdSpace<gles2::cmds::IsRenderbuffer>();
+ if (c) {
+ c->Init(renderbuffer, result_shm_id, result_shm_offset);
+ }
+}
+
+void IsShader(GLuint shader,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::IsShader* c = GetCmdSpace<gles2::cmds::IsShader>();
+ if (c) {
+ c->Init(shader, result_shm_id, result_shm_offset);
+ }
+}
+
+void IsTexture(GLuint texture,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::IsTexture* c = GetCmdSpace<gles2::cmds::IsTexture>();
+ if (c) {
+ c->Init(texture, result_shm_id, result_shm_offset);
+ }
+}
+
+void LineWidth(GLfloat width) {
+ gles2::cmds::LineWidth* c = GetCmdSpace<gles2::cmds::LineWidth>();
+ if (c) {
+ c->Init(width);
+ }
+}
+
+void LinkProgram(GLuint program) {
+ gles2::cmds::LinkProgram* c = GetCmdSpace<gles2::cmds::LinkProgram>();
+ if (c) {
+ c->Init(program);
+ }
+}
+
+void PixelStorei(GLenum pname, GLint param) {
+ gles2::cmds::PixelStorei* c = GetCmdSpace<gles2::cmds::PixelStorei>();
+ if (c) {
+ c->Init(pname, param);
+ }
+}
+
+void PolygonOffset(GLfloat factor, GLfloat units) {
+ gles2::cmds::PolygonOffset* c = GetCmdSpace<gles2::cmds::PolygonOffset>();
+ if (c) {
+ c->Init(factor, units);
+ }
+}
+
+void ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ uint32_t pixels_shm_id,
+ uint32_t pixels_shm_offset,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset,
+ GLboolean async) {
+ gles2::cmds::ReadPixels* c = GetCmdSpace<gles2::cmds::ReadPixels>();
+ if (c) {
+ c->Init(x,
+ y,
+ width,
+ height,
+ format,
+ type,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ async);
+ }
+}
+
+void ReleaseShaderCompiler() {
+ gles2::cmds::ReleaseShaderCompiler* c =
+ GetCmdSpace<gles2::cmds::ReleaseShaderCompiler>();
+ if (c) {
+ c->Init();
+ }
+}
+
+void RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) {
+ gles2::cmds::RenderbufferStorage* c =
+ GetCmdSpace<gles2::cmds::RenderbufferStorage>();
+ if (c) {
+ c->Init(target, internalformat, width, height);
+ }
+}
+
+void SampleCoverage(GLclampf value, GLboolean invert) {
+ gles2::cmds::SampleCoverage* c = GetCmdSpace<gles2::cmds::SampleCoverage>();
+ if (c) {
+ c->Init(value, invert);
+ }
+}
+
+void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) {
+ gles2::cmds::Scissor* c = GetCmdSpace<gles2::cmds::Scissor>();
+ if (c) {
+ c->Init(x, y, width, height);
+ }
+}
+
+void ShaderBinary(GLsizei n,
+ uint32_t shaders_shm_id,
+ uint32_t shaders_shm_offset,
+ GLenum binaryformat,
+ uint32_t binary_shm_id,
+ uint32_t binary_shm_offset,
+ GLsizei length) {
+ gles2::cmds::ShaderBinary* c = GetCmdSpace<gles2::cmds::ShaderBinary>();
+ if (c) {
+ c->Init(n,
+ shaders_shm_id,
+ shaders_shm_offset,
+ binaryformat,
+ binary_shm_id,
+ binary_shm_offset,
+ length);
+ }
+}
+
+void ShaderSourceBucket(GLuint shader, uint32_t data_bucket_id) {
+ gles2::cmds::ShaderSourceBucket* c =
+ GetCmdSpace<gles2::cmds::ShaderSourceBucket>();
+ if (c) {
+ c->Init(shader, data_bucket_id);
+ }
+}
+
+void StencilFunc(GLenum func, GLint ref, GLuint mask) {
+ gles2::cmds::StencilFunc* c = GetCmdSpace<gles2::cmds::StencilFunc>();
+ if (c) {
+ c->Init(func, ref, mask);
+ }
+}
+
+void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {
+ gles2::cmds::StencilFuncSeparate* c =
+ GetCmdSpace<gles2::cmds::StencilFuncSeparate>();
+ if (c) {
+ c->Init(face, func, ref, mask);
+ }
+}
+
+void StencilMask(GLuint mask) {
+ gles2::cmds::StencilMask* c = GetCmdSpace<gles2::cmds::StencilMask>();
+ if (c) {
+ c->Init(mask);
+ }
+}
+
+void StencilMaskSeparate(GLenum face, GLuint mask) {
+ gles2::cmds::StencilMaskSeparate* c =
+ GetCmdSpace<gles2::cmds::StencilMaskSeparate>();
+ if (c) {
+ c->Init(face, mask);
+ }
+}
+
+void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
+ gles2::cmds::StencilOp* c = GetCmdSpace<gles2::cmds::StencilOp>();
+ if (c) {
+ c->Init(fail, zfail, zpass);
+ }
+}
+
+void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {
+ gles2::cmds::StencilOpSeparate* c =
+ GetCmdSpace<gles2::cmds::StencilOpSeparate>();
+ if (c) {
+ c->Init(face, fail, zfail, zpass);
+ }
+}
+
+void TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ uint32_t pixels_shm_id,
+ uint32_t pixels_shm_offset) {
+ gles2::cmds::TexImage2D* c = GetCmdSpace<gles2::cmds::TexImage2D>();
+ if (c) {
+ c->Init(target,
+ level,
+ internalformat,
+ width,
+ height,
+ format,
+ type,
+ pixels_shm_id,
+ pixels_shm_offset);
+ }
+}
+
+void TexParameterf(GLenum target, GLenum pname, GLfloat param) {
+ gles2::cmds::TexParameterf* c = GetCmdSpace<gles2::cmds::TexParameterf>();
+ if (c) {
+ c->Init(target, pname, param);
+ }
+}
+
+void TexParameterfvImmediate(GLenum target,
+ GLenum pname,
+ const GLfloat* params) {
+ const uint32_t size = gles2::cmds::TexParameterfvImmediate::ComputeSize();
+ gles2::cmds::TexParameterfvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::TexParameterfvImmediate>(size);
+ if (c) {
+ c->Init(target, pname, params);
+ }
+}
+
+void TexParameteri(GLenum target, GLenum pname, GLint param) {
+ gles2::cmds::TexParameteri* c = GetCmdSpace<gles2::cmds::TexParameteri>();
+ if (c) {
+ c->Init(target, pname, param);
+ }
+}
+
+void TexParameterivImmediate(GLenum target, GLenum pname, const GLint* params) {
+ const uint32_t size = gles2::cmds::TexParameterivImmediate::ComputeSize();
+ gles2::cmds::TexParameterivImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::TexParameterivImmediate>(size);
+ if (c) {
+ c->Init(target, pname, params);
+ }
+}
+
+void TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ uint32_t pixels_shm_id,
+ uint32_t pixels_shm_offset,
+ GLboolean internal) {
+ gles2::cmds::TexSubImage2D* c = GetCmdSpace<gles2::cmds::TexSubImage2D>();
+ if (c) {
+ c->Init(target,
+ level,
+ xoffset,
+ yoffset,
+ width,
+ height,
+ format,
+ type,
+ pixels_shm_id,
+ pixels_shm_offset,
+ internal);
+ }
+}
+
+void Uniform1f(GLint location, GLfloat x) {
+ gles2::cmds::Uniform1f* c = GetCmdSpace<gles2::cmds::Uniform1f>();
+ if (c) {
+ c->Init(location, x);
+ }
+}
+
+void Uniform1fvImmediate(GLint location, GLsizei count, const GLfloat* v) {
+ const uint32_t size = gles2::cmds::Uniform1fvImmediate::ComputeSize(count);
+ gles2::cmds::Uniform1fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform1fvImmediate>(size);
+ if (c) {
+ c->Init(location, count, v);
+ }
+}
+
+void Uniform1i(GLint location, GLint x) {
+ gles2::cmds::Uniform1i* c = GetCmdSpace<gles2::cmds::Uniform1i>();
+ if (c) {
+ c->Init(location, x);
+ }
+}
+
+void Uniform1ivImmediate(GLint location, GLsizei count, const GLint* v) {
+ const uint32_t size = gles2::cmds::Uniform1ivImmediate::ComputeSize(count);
+ gles2::cmds::Uniform1ivImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform1ivImmediate>(size);
+ if (c) {
+ c->Init(location, count, v);
+ }
+}
+
+void Uniform2f(GLint location, GLfloat x, GLfloat y) {
+ gles2::cmds::Uniform2f* c = GetCmdSpace<gles2::cmds::Uniform2f>();
+ if (c) {
+ c->Init(location, x, y);
+ }
+}
+
+void Uniform2fvImmediate(GLint location, GLsizei count, const GLfloat* v) {
+ const uint32_t size = gles2::cmds::Uniform2fvImmediate::ComputeSize(count);
+ gles2::cmds::Uniform2fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform2fvImmediate>(size);
+ if (c) {
+ c->Init(location, count, v);
+ }
+}
+
+void Uniform2i(GLint location, GLint x, GLint y) {
+ gles2::cmds::Uniform2i* c = GetCmdSpace<gles2::cmds::Uniform2i>();
+ if (c) {
+ c->Init(location, x, y);
+ }
+}
+
+void Uniform2ivImmediate(GLint location, GLsizei count, const GLint* v) {
+ const uint32_t size = gles2::cmds::Uniform2ivImmediate::ComputeSize(count);
+ gles2::cmds::Uniform2ivImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform2ivImmediate>(size);
+ if (c) {
+ c->Init(location, count, v);
+ }
+}
+
+void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) {
+ gles2::cmds::Uniform3f* c = GetCmdSpace<gles2::cmds::Uniform3f>();
+ if (c) {
+ c->Init(location, x, y, z);
+ }
+}
+
+void Uniform3fvImmediate(GLint location, GLsizei count, const GLfloat* v) {
+ const uint32_t size = gles2::cmds::Uniform3fvImmediate::ComputeSize(count);
+ gles2::cmds::Uniform3fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform3fvImmediate>(size);
+ if (c) {
+ c->Init(location, count, v);
+ }
+}
+
+void Uniform3i(GLint location, GLint x, GLint y, GLint z) {
+ gles2::cmds::Uniform3i* c = GetCmdSpace<gles2::cmds::Uniform3i>();
+ if (c) {
+ c->Init(location, x, y, z);
+ }
+}
+
+void Uniform3ivImmediate(GLint location, GLsizei count, const GLint* v) {
+ const uint32_t size = gles2::cmds::Uniform3ivImmediate::ComputeSize(count);
+ gles2::cmds::Uniform3ivImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform3ivImmediate>(size);
+ if (c) {
+ c->Init(location, count, v);
+ }
+}
+
+void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+ gles2::cmds::Uniform4f* c = GetCmdSpace<gles2::cmds::Uniform4f>();
+ if (c) {
+ c->Init(location, x, y, z, w);
+ }
+}
+
+void Uniform4fvImmediate(GLint location, GLsizei count, const GLfloat* v) {
+ const uint32_t size = gles2::cmds::Uniform4fvImmediate::ComputeSize(count);
+ gles2::cmds::Uniform4fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform4fvImmediate>(size);
+ if (c) {
+ c->Init(location, count, v);
+ }
+}
+
+void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) {
+ gles2::cmds::Uniform4i* c = GetCmdSpace<gles2::cmds::Uniform4i>();
+ if (c) {
+ c->Init(location, x, y, z, w);
+ }
+}
+
+void Uniform4ivImmediate(GLint location, GLsizei count, const GLint* v) {
+ const uint32_t size = gles2::cmds::Uniform4ivImmediate::ComputeSize(count);
+ gles2::cmds::Uniform4ivImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::Uniform4ivImmediate>(size);
+ if (c) {
+ c->Init(location, count, v);
+ }
+}
+
+void UniformMatrix2fvImmediate(GLint location,
+ GLsizei count,
+ const GLfloat* value) {
+ const uint32_t size =
+ gles2::cmds::UniformMatrix2fvImmediate::ComputeSize(count);
+ gles2::cmds::UniformMatrix2fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::UniformMatrix2fvImmediate>(
+ size);
+ if (c) {
+ c->Init(location, count, value);
+ }
+}
+
+void UniformMatrix3fvImmediate(GLint location,
+ GLsizei count,
+ const GLfloat* value) {
+ const uint32_t size =
+ gles2::cmds::UniformMatrix3fvImmediate::ComputeSize(count);
+ gles2::cmds::UniformMatrix3fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::UniformMatrix3fvImmediate>(
+ size);
+ if (c) {
+ c->Init(location, count, value);
+ }
+}
+
+void UniformMatrix4fvImmediate(GLint location,
+ GLsizei count,
+ const GLfloat* value) {
+ const uint32_t size =
+ gles2::cmds::UniformMatrix4fvImmediate::ComputeSize(count);
+ gles2::cmds::UniformMatrix4fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::UniformMatrix4fvImmediate>(
+ size);
+ if (c) {
+ c->Init(location, count, value);
+ }
+}
+
+void UseProgram(GLuint program) {
+ gles2::cmds::UseProgram* c = GetCmdSpace<gles2::cmds::UseProgram>();
+ if (c) {
+ c->Init(program);
+ }
+}
+
+void ValidateProgram(GLuint program) {
+ gles2::cmds::ValidateProgram* c = GetCmdSpace<gles2::cmds::ValidateProgram>();
+ if (c) {
+ c->Init(program);
+ }
+}
+
+void VertexAttrib1f(GLuint indx, GLfloat x) {
+ gles2::cmds::VertexAttrib1f* c = GetCmdSpace<gles2::cmds::VertexAttrib1f>();
+ if (c) {
+ c->Init(indx, x);
+ }
+}
+
+void VertexAttrib1fvImmediate(GLuint indx, const GLfloat* values) {
+ const uint32_t size = gles2::cmds::VertexAttrib1fvImmediate::ComputeSize();
+ gles2::cmds::VertexAttrib1fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::VertexAttrib1fvImmediate>(
+ size);
+ if (c) {
+ c->Init(indx, values);
+ }
+}
+
+void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) {
+ gles2::cmds::VertexAttrib2f* c = GetCmdSpace<gles2::cmds::VertexAttrib2f>();
+ if (c) {
+ c->Init(indx, x, y);
+ }
+}
+
+void VertexAttrib2fvImmediate(GLuint indx, const GLfloat* values) {
+ const uint32_t size = gles2::cmds::VertexAttrib2fvImmediate::ComputeSize();
+ gles2::cmds::VertexAttrib2fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::VertexAttrib2fvImmediate>(
+ size);
+ if (c) {
+ c->Init(indx, values);
+ }
+}
+
+void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
+ gles2::cmds::VertexAttrib3f* c = GetCmdSpace<gles2::cmds::VertexAttrib3f>();
+ if (c) {
+ c->Init(indx, x, y, z);
+ }
+}
+
+void VertexAttrib3fvImmediate(GLuint indx, const GLfloat* values) {
+ const uint32_t size = gles2::cmds::VertexAttrib3fvImmediate::ComputeSize();
+ gles2::cmds::VertexAttrib3fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::VertexAttrib3fvImmediate>(
+ size);
+ if (c) {
+ c->Init(indx, values);
+ }
+}
+
+void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+ gles2::cmds::VertexAttrib4f* c = GetCmdSpace<gles2::cmds::VertexAttrib4f>();
+ if (c) {
+ c->Init(indx, x, y, z, w);
+ }
+}
+
+void VertexAttrib4fvImmediate(GLuint indx, const GLfloat* values) {
+ const uint32_t size = gles2::cmds::VertexAttrib4fvImmediate::ComputeSize();
+ gles2::cmds::VertexAttrib4fvImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::VertexAttrib4fvImmediate>(
+ size);
+ if (c) {
+ c->Init(indx, values);
+ }
+}
+
+void VertexAttribPointer(GLuint indx,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ GLuint offset) {
+ gles2::cmds::VertexAttribPointer* c =
+ GetCmdSpace<gles2::cmds::VertexAttribPointer>();
+ if (c) {
+ c->Init(indx, size, type, normalized, stride, offset);
+ }
+}
+
+void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) {
+ gles2::cmds::Viewport* c = GetCmdSpace<gles2::cmds::Viewport>();
+ if (c) {
+ c->Init(x, y, width, height);
+ }
+}
+
+void BlitFramebufferCHROMIUM(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter) {
+ gles2::cmds::BlitFramebufferCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::BlitFramebufferCHROMIUM>();
+ if (c) {
+ c->Init(
+ srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ }
+}
+
+void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) {
+ gles2::cmds::RenderbufferStorageMultisampleCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::RenderbufferStorageMultisampleCHROMIUM>();
+ if (c) {
+ c->Init(target, samples, internalformat, width, height);
+ }
+}
+
+void RenderbufferStorageMultisampleEXT(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) {
+ gles2::cmds::RenderbufferStorageMultisampleEXT* c =
+ GetCmdSpace<gles2::cmds::RenderbufferStorageMultisampleEXT>();
+ if (c) {
+ c->Init(target, samples, internalformat, width, height);
+ }
+}
+
+void FramebufferTexture2DMultisampleEXT(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLsizei samples) {
+ gles2::cmds::FramebufferTexture2DMultisampleEXT* c =
+ GetCmdSpace<gles2::cmds::FramebufferTexture2DMultisampleEXT>();
+ if (c) {
+ c->Init(target, attachment, textarget, texture, samples);
+ }
+}
+
+void TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalFormat,
+ GLsizei width,
+ GLsizei height) {
+ gles2::cmds::TexStorage2DEXT* c = GetCmdSpace<gles2::cmds::TexStorage2DEXT>();
+ if (c) {
+ c->Init(target, levels, internalFormat, width, height);
+ }
+}
+
+void GenQueriesEXTImmediate(GLsizei n, GLuint* queries) {
+ const uint32_t size = gles2::cmds::GenQueriesEXTImmediate::ComputeSize(n);
+ gles2::cmds::GenQueriesEXTImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::GenQueriesEXTImmediate>(size);
+ if (c) {
+ c->Init(n, queries);
+ }
+}
+
+void DeleteQueriesEXTImmediate(GLsizei n, const GLuint* queries) {
+ const uint32_t size = gles2::cmds::DeleteQueriesEXTImmediate::ComputeSize(n);
+ gles2::cmds::DeleteQueriesEXTImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteQueriesEXTImmediate>(
+ size);
+ if (c) {
+ c->Init(n, queries);
+ }
+}
+
+void BeginQueryEXT(GLenum target,
+ GLuint id,
+ uint32_t sync_data_shm_id,
+ uint32_t sync_data_shm_offset) {
+ gles2::cmds::BeginQueryEXT* c = GetCmdSpace<gles2::cmds::BeginQueryEXT>();
+ if (c) {
+ c->Init(target, id, sync_data_shm_id, sync_data_shm_offset);
+ }
+}
+
+void EndQueryEXT(GLenum target, GLuint submit_count) {
+ gles2::cmds::EndQueryEXT* c = GetCmdSpace<gles2::cmds::EndQueryEXT>();
+ if (c) {
+ c->Init(target, submit_count);
+ }
+}
+
+void InsertEventMarkerEXT(GLuint bucket_id) {
+ gles2::cmds::InsertEventMarkerEXT* c =
+ GetCmdSpace<gles2::cmds::InsertEventMarkerEXT>();
+ if (c) {
+ c->Init(bucket_id);
+ }
+}
+
+void PushGroupMarkerEXT(GLuint bucket_id) {
+ gles2::cmds::PushGroupMarkerEXT* c =
+ GetCmdSpace<gles2::cmds::PushGroupMarkerEXT>();
+ if (c) {
+ c->Init(bucket_id);
+ }
+}
+
+void PopGroupMarkerEXT() {
+ gles2::cmds::PopGroupMarkerEXT* c =
+ GetCmdSpace<gles2::cmds::PopGroupMarkerEXT>();
+ if (c) {
+ c->Init();
+ }
+}
+
+void GenVertexArraysOESImmediate(GLsizei n, GLuint* arrays) {
+ const uint32_t size =
+ gles2::cmds::GenVertexArraysOESImmediate::ComputeSize(n);
+ gles2::cmds::GenVertexArraysOESImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::GenVertexArraysOESImmediate>(
+ size);
+ if (c) {
+ c->Init(n, arrays);
+ }
+}
+
+void DeleteVertexArraysOESImmediate(GLsizei n, const GLuint* arrays) {
+ const uint32_t size =
+ gles2::cmds::DeleteVertexArraysOESImmediate::ComputeSize(n);
+ gles2::cmds::DeleteVertexArraysOESImmediate* c =
+ GetImmediateCmdSpaceTotalSize<
+ gles2::cmds::DeleteVertexArraysOESImmediate>(size);
+ if (c) {
+ c->Init(n, arrays);
+ }
+}
+
+void IsVertexArrayOES(GLuint array,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::IsVertexArrayOES* c =
+ GetCmdSpace<gles2::cmds::IsVertexArrayOES>();
+ if (c) {
+ c->Init(array, result_shm_id, result_shm_offset);
+ }
+}
+
+void BindVertexArrayOES(GLuint array) {
+ gles2::cmds::BindVertexArrayOES* c =
+ GetCmdSpace<gles2::cmds::BindVertexArrayOES>();
+ if (c) {
+ c->Init(array);
+ }
+}
+
+void SwapBuffers() {
+ gles2::cmds::SwapBuffers* c = GetCmdSpace<gles2::cmds::SwapBuffers>();
+ if (c) {
+ c->Init();
+ }
+}
+
+void GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+ GLsizei count,
+ GLenum type,
+ GLuint offset,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::GetMaxValueInBufferCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::GetMaxValueInBufferCHROMIUM>();
+ if (c) {
+ c->Init(buffer_id, count, type, offset, result_shm_id, result_shm_offset);
+ }
+}
+
+void GenSharedIdsCHROMIUM(GLuint namespace_id,
+ GLuint id_offset,
+ GLsizei n,
+ uint32_t ids_shm_id,
+ uint32_t ids_shm_offset) {
+ gles2::cmds::GenSharedIdsCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::GenSharedIdsCHROMIUM>();
+ if (c) {
+ c->Init(namespace_id, id_offset, n, ids_shm_id, ids_shm_offset);
+ }
+}
+
+void DeleteSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ uint32_t ids_shm_id,
+ uint32_t ids_shm_offset) {
+ gles2::cmds::DeleteSharedIdsCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::DeleteSharedIdsCHROMIUM>();
+ if (c) {
+ c->Init(namespace_id, n, ids_shm_id, ids_shm_offset);
+ }
+}
+
+void RegisterSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ uint32_t ids_shm_id,
+ uint32_t ids_shm_offset) {
+ gles2::cmds::RegisterSharedIdsCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::RegisterSharedIdsCHROMIUM>();
+ if (c) {
+ c->Init(namespace_id, n, ids_shm_id, ids_shm_offset);
+ }
+}
+
+void EnableFeatureCHROMIUM(GLuint bucket_id,
+ uint32_t result_shm_id,
+ uint32_t result_shm_offset) {
+ gles2::cmds::EnableFeatureCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::EnableFeatureCHROMIUM>();
+ if (c) {
+ c->Init(bucket_id, result_shm_id, result_shm_offset);
+ }
+}
+
+void ResizeCHROMIUM(GLuint width, GLuint height, GLfloat scale_factor) {
+ gles2::cmds::ResizeCHROMIUM* c = GetCmdSpace<gles2::cmds::ResizeCHROMIUM>();
+ if (c) {
+ c->Init(width, height, scale_factor);
+ }
+}
+
+void GetRequestableExtensionsCHROMIUM(uint32_t bucket_id) {
+ gles2::cmds::GetRequestableExtensionsCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::GetRequestableExtensionsCHROMIUM>();
+ if (c) {
+ c->Init(bucket_id);
+ }
+}
+
+void RequestExtensionCHROMIUM(uint32_t bucket_id) {
+ gles2::cmds::RequestExtensionCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::RequestExtensionCHROMIUM>();
+ if (c) {
+ c->Init(bucket_id);
+ }
+}
+
+void GetMultipleIntegervCHROMIUM(uint32_t pnames_shm_id,
+ uint32_t pnames_shm_offset,
+ GLuint count,
+ uint32_t results_shm_id,
+ uint32_t results_shm_offset,
+ GLsizeiptr size) {
+ gles2::cmds::GetMultipleIntegervCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::GetMultipleIntegervCHROMIUM>();
+ if (c) {
+ c->Init(pnames_shm_id,
+ pnames_shm_offset,
+ count,
+ results_shm_id,
+ results_shm_offset,
size);
- if (c) {
- c->Init(location, count, transpose, value);
- }
- }
-
- void UniformMatrix4fv(
- GLint location, GLsizei count, GLboolean transpose, uint32 value_shm_id,
- uint32 value_shm_offset) {
- gles2::cmds::UniformMatrix4fv* c =
- GetCmdSpace<gles2::cmds::UniformMatrix4fv>();
- if (c) {
- c->Init(location, count, transpose, value_shm_id, value_shm_offset);
- }
- }
-
- void UniformMatrix4fvImmediate(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) {
- const uint32 size =
- gles2::cmds::UniformMatrix4fvImmediate::ComputeSize(count);
- gles2::cmds::UniformMatrix4fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::UniformMatrix4fvImmediate>(
- size);
- if (c) {
- c->Init(location, count, transpose, value);
- }
- }
-
- void UseProgram(GLuint program) {
- gles2::cmds::UseProgram* c = GetCmdSpace<gles2::cmds::UseProgram>();
- if (c) {
- c->Init(program);
- }
- }
-
- void ValidateProgram(GLuint program) {
- gles2::cmds::ValidateProgram* c =
- GetCmdSpace<gles2::cmds::ValidateProgram>();
- if (c) {
- c->Init(program);
- }
- }
-
- void VertexAttrib1f(GLuint indx, GLfloat x) {
- gles2::cmds::VertexAttrib1f* c =
- GetCmdSpace<gles2::cmds::VertexAttrib1f>();
- if (c) {
- c->Init(indx, x);
- }
- }
-
- void VertexAttrib1fv(
- GLuint indx, uint32 values_shm_id, uint32 values_shm_offset) {
- gles2::cmds::VertexAttrib1fv* c =
- GetCmdSpace<gles2::cmds::VertexAttrib1fv>();
- if (c) {
- c->Init(indx, values_shm_id, values_shm_offset);
- }
- }
-
- void VertexAttrib1fvImmediate(GLuint indx, const GLfloat* values) {
- const uint32 size = gles2::cmds::VertexAttrib1fvImmediate::ComputeSize();
- gles2::cmds::VertexAttrib1fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::VertexAttrib1fvImmediate>(
- size);
- if (c) {
- c->Init(indx, values);
- }
- }
-
- void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) {
- gles2::cmds::VertexAttrib2f* c =
- GetCmdSpace<gles2::cmds::VertexAttrib2f>();
- if (c) {
- c->Init(indx, x, y);
- }
- }
-
- void VertexAttrib2fv(
- GLuint indx, uint32 values_shm_id, uint32 values_shm_offset) {
- gles2::cmds::VertexAttrib2fv* c =
- GetCmdSpace<gles2::cmds::VertexAttrib2fv>();
- if (c) {
- c->Init(indx, values_shm_id, values_shm_offset);
- }
- }
-
- void VertexAttrib2fvImmediate(GLuint indx, const GLfloat* values) {
- const uint32 size = gles2::cmds::VertexAttrib2fvImmediate::ComputeSize();
- gles2::cmds::VertexAttrib2fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::VertexAttrib2fvImmediate>(
- size);
- if (c) {
- c->Init(indx, values);
- }
- }
-
- void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
- gles2::cmds::VertexAttrib3f* c =
- GetCmdSpace<gles2::cmds::VertexAttrib3f>();
- if (c) {
- c->Init(indx, x, y, z);
- }
- }
-
- void VertexAttrib3fv(
- GLuint indx, uint32 values_shm_id, uint32 values_shm_offset) {
- gles2::cmds::VertexAttrib3fv* c =
- GetCmdSpace<gles2::cmds::VertexAttrib3fv>();
- if (c) {
- c->Init(indx, values_shm_id, values_shm_offset);
- }
- }
-
- void VertexAttrib3fvImmediate(GLuint indx, const GLfloat* values) {
- const uint32 size = gles2::cmds::VertexAttrib3fvImmediate::ComputeSize();
- gles2::cmds::VertexAttrib3fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::VertexAttrib3fvImmediate>(
- size);
- if (c) {
- c->Init(indx, values);
- }
- }
-
- void VertexAttrib4f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
- gles2::cmds::VertexAttrib4f* c =
- GetCmdSpace<gles2::cmds::VertexAttrib4f>();
- if (c) {
- c->Init(indx, x, y, z, w);
- }
- }
-
- void VertexAttrib4fv(
- GLuint indx, uint32 values_shm_id, uint32 values_shm_offset) {
- gles2::cmds::VertexAttrib4fv* c =
- GetCmdSpace<gles2::cmds::VertexAttrib4fv>();
- if (c) {
- c->Init(indx, values_shm_id, values_shm_offset);
- }
- }
-
- void VertexAttrib4fvImmediate(GLuint indx, const GLfloat* values) {
- const uint32 size = gles2::cmds::VertexAttrib4fvImmediate::ComputeSize();
- gles2::cmds::VertexAttrib4fvImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::VertexAttrib4fvImmediate>(
- size);
- if (c) {
- c->Init(indx, values);
- }
- }
-
- void VertexAttribPointer(
- GLuint indx, GLint size, GLenum type, GLboolean normalized,
- GLsizei stride, GLuint offset) {
- gles2::cmds::VertexAttribPointer* c =
- GetCmdSpace<gles2::cmds::VertexAttribPointer>();
- if (c) {
- c->Init(indx, size, type, normalized, stride, offset);
- }
- }
-
- void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) {
- gles2::cmds::Viewport* c = GetCmdSpace<gles2::cmds::Viewport>();
- if (c) {
- c->Init(x, y, width, height);
- }
- }
-
- void BlitFramebufferCHROMIUM(
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0,
- GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
- gles2::cmds::BlitFramebufferCHROMIUM* c =
- GetCmdSpace<gles2::cmds::BlitFramebufferCHROMIUM>();
- if (c) {
- c->Init(
- srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
- filter);
- }
- }
-
- void RenderbufferStorageMultisampleCHROMIUM(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) {
- gles2::cmds::RenderbufferStorageMultisampleCHROMIUM* c =
- GetCmdSpace<gles2::cmds::RenderbufferStorageMultisampleCHROMIUM>();
- if (c) {
- c->Init(target, samples, internalformat, width, height);
- }
- }
-
- void RenderbufferStorageMultisampleEXT(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) {
- gles2::cmds::RenderbufferStorageMultisampleEXT* c =
- GetCmdSpace<gles2::cmds::RenderbufferStorageMultisampleEXT>();
- if (c) {
- c->Init(target, samples, internalformat, width, height);
- }
- }
-
- void FramebufferTexture2DMultisampleEXT(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLsizei samples) {
- gles2::cmds::FramebufferTexture2DMultisampleEXT* c =
- GetCmdSpace<gles2::cmds::FramebufferTexture2DMultisampleEXT>();
- if (c) {
- c->Init(target, attachment, textarget, texture, level, samples);
- }
- }
-
- void TexStorage2DEXT(
- GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
- GLsizei height) {
- gles2::cmds::TexStorage2DEXT* c =
- GetCmdSpace<gles2::cmds::TexStorage2DEXT>();
- if (c) {
- c->Init(target, levels, internalFormat, width, height);
- }
- }
-
- void GenQueriesEXT(
- GLsizei n, uint32 queries_shm_id, uint32 queries_shm_offset) {
- gles2::cmds::GenQueriesEXT* c = GetCmdSpace<gles2::cmds::GenQueriesEXT>();
- if (c) {
- c->Init(n, queries_shm_id, queries_shm_offset);
- }
- }
-
- void GenQueriesEXTImmediate(GLsizei n, GLuint* queries) {
- const uint32 size = gles2::cmds::GenQueriesEXTImmediate::ComputeSize(n);
- gles2::cmds::GenQueriesEXTImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::GenQueriesEXTImmediate>(
- size);
- if (c) {
- c->Init(n, queries);
- }
- }
-
- void DeleteQueriesEXT(
- GLsizei n, uint32 queries_shm_id, uint32 queries_shm_offset) {
- gles2::cmds::DeleteQueriesEXT* c =
- GetCmdSpace<gles2::cmds::DeleteQueriesEXT>();
- if (c) {
- c->Init(n, queries_shm_id, queries_shm_offset);
- }
- }
-
- void DeleteQueriesEXTImmediate(GLsizei n, const GLuint* queries) {
- const uint32 size = gles2::cmds::DeleteQueriesEXTImmediate::ComputeSize(n);
- gles2::cmds::DeleteQueriesEXTImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteQueriesEXTImmediate>(
- size);
- if (c) {
- c->Init(n, queries);
- }
- }
-
- void BeginQueryEXT(
- GLenum target, GLuint id, uint32 sync_data_shm_id,
- uint32 sync_data_shm_offset) {
- gles2::cmds::BeginQueryEXT* c = GetCmdSpace<gles2::cmds::BeginQueryEXT>();
- if (c) {
- c->Init(target, id, sync_data_shm_id, sync_data_shm_offset);
- }
- }
-
- void EndQueryEXT(GLenum target, GLuint submit_count) {
- gles2::cmds::EndQueryEXT* c = GetCmdSpace<gles2::cmds::EndQueryEXT>();
- if (c) {
- c->Init(target, submit_count);
- }
- }
-
- void InsertEventMarkerEXT(GLuint bucket_id) {
- gles2::cmds::InsertEventMarkerEXT* c =
- GetCmdSpace<gles2::cmds::InsertEventMarkerEXT>();
- if (c) {
- c->Init(bucket_id);
- }
- }
-
- void PushGroupMarkerEXT(GLuint bucket_id) {
- gles2::cmds::PushGroupMarkerEXT* c =
- GetCmdSpace<gles2::cmds::PushGroupMarkerEXT>();
- if (c) {
- c->Init(bucket_id);
- }
- }
-
- void PopGroupMarkerEXT() {
- gles2::cmds::PopGroupMarkerEXT* c =
- GetCmdSpace<gles2::cmds::PopGroupMarkerEXT>();
- if (c) {
- c->Init();
- }
- }
-
- void GenVertexArraysOES(
- GLsizei n, uint32 arrays_shm_id, uint32 arrays_shm_offset) {
- gles2::cmds::GenVertexArraysOES* c =
- GetCmdSpace<gles2::cmds::GenVertexArraysOES>();
- if (c) {
- c->Init(n, arrays_shm_id, arrays_shm_offset);
- }
- }
-
- void GenVertexArraysOESImmediate(GLsizei n, GLuint* arrays) {
- const uint32 size =
- gles2::cmds::GenVertexArraysOESImmediate::ComputeSize(n);
- gles2::cmds::GenVertexArraysOESImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::GenVertexArraysOESImmediate>(
- size);
- if (c) {
- c->Init(n, arrays);
- }
- }
-
- void DeleteVertexArraysOES(
- GLsizei n, uint32 arrays_shm_id, uint32 arrays_shm_offset) {
- gles2::cmds::DeleteVertexArraysOES* c =
- GetCmdSpace<gles2::cmds::DeleteVertexArraysOES>();
- if (c) {
- c->Init(n, arrays_shm_id, arrays_shm_offset);
- }
- }
-
- void DeleteVertexArraysOESImmediate(GLsizei n, const GLuint* arrays) {
- const uint32 size =
- gles2::cmds::DeleteVertexArraysOESImmediate::ComputeSize(n);
- gles2::cmds::DeleteVertexArraysOESImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::DeleteVertexArraysOESImmediate>(size); // NOLINT
- if (c) {
- c->Init(n, arrays);
- }
- }
-
- void IsVertexArrayOES(
- GLuint array, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::IsVertexArrayOES* c =
- GetCmdSpace<gles2::cmds::IsVertexArrayOES>();
- if (c) {
- c->Init(array, result_shm_id, result_shm_offset);
- }
- }
-
- void BindVertexArrayOES(GLuint array) {
- gles2::cmds::BindVertexArrayOES* c =
- GetCmdSpace<gles2::cmds::BindVertexArrayOES>();
- if (c) {
- c->Init(array);
- }
- }
-
- void SwapBuffers() {
- gles2::cmds::SwapBuffers* c = GetCmdSpace<gles2::cmds::SwapBuffers>();
- if (c) {
- c->Init();
- }
- }
-
- void GetMaxValueInBufferCHROMIUM(
- GLuint buffer_id, GLsizei count, GLenum type, GLuint offset,
- uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::GetMaxValueInBufferCHROMIUM* c =
- GetCmdSpace<gles2::cmds::GetMaxValueInBufferCHROMIUM>();
- if (c) {
- c->Init(
- buffer_id, count, type, offset, result_shm_id, result_shm_offset);
- }
- }
-
- void GenSharedIdsCHROMIUM(
- GLuint namespace_id, GLuint id_offset, GLsizei n, uint32 ids_shm_id,
- uint32 ids_shm_offset) {
- gles2::cmds::GenSharedIdsCHROMIUM* c =
- GetCmdSpace<gles2::cmds::GenSharedIdsCHROMIUM>();
- if (c) {
- c->Init(namespace_id, id_offset, n, ids_shm_id, ids_shm_offset);
- }
- }
-
- void DeleteSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, uint32 ids_shm_id,
- uint32 ids_shm_offset) {
- gles2::cmds::DeleteSharedIdsCHROMIUM* c =
- GetCmdSpace<gles2::cmds::DeleteSharedIdsCHROMIUM>();
- if (c) {
- c->Init(namespace_id, n, ids_shm_id, ids_shm_offset);
- }
- }
-
- void RegisterSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, uint32 ids_shm_id,
- uint32 ids_shm_offset) {
- gles2::cmds::RegisterSharedIdsCHROMIUM* c =
- GetCmdSpace<gles2::cmds::RegisterSharedIdsCHROMIUM>();
- if (c) {
- c->Init(namespace_id, n, ids_shm_id, ids_shm_offset);
- }
- }
-
- void EnableFeatureCHROMIUM(
- GLuint bucket_id, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::EnableFeatureCHROMIUM* c =
- GetCmdSpace<gles2::cmds::EnableFeatureCHROMIUM>();
- if (c) {
- c->Init(bucket_id, result_shm_id, result_shm_offset);
- }
- }
-
- void ResizeCHROMIUM(GLuint width, GLuint height, GLfloat scale_factor) {
- gles2::cmds::ResizeCHROMIUM* c =
- GetCmdSpace<gles2::cmds::ResizeCHROMIUM>();
- if (c) {
- c->Init(width, height, scale_factor);
- }
- }
-
- void GetRequestableExtensionsCHROMIUM(uint32 bucket_id) {
- gles2::cmds::GetRequestableExtensionsCHROMIUM* c =
- GetCmdSpace<gles2::cmds::GetRequestableExtensionsCHROMIUM>();
- if (c) {
- c->Init(bucket_id);
- }
- }
-
- void RequestExtensionCHROMIUM(uint32 bucket_id) {
- gles2::cmds::RequestExtensionCHROMIUM* c =
- GetCmdSpace<gles2::cmds::RequestExtensionCHROMIUM>();
- if (c) {
- c->Init(bucket_id);
- }
- }
-
- void GetMultipleIntegervCHROMIUM(
- uint32 pnames_shm_id, uint32 pnames_shm_offset, GLuint count,
- uint32 results_shm_id, uint32 results_shm_offset, GLsizeiptr size) {
- gles2::cmds::GetMultipleIntegervCHROMIUM* c =
- GetCmdSpace<gles2::cmds::GetMultipleIntegervCHROMIUM>();
- if (c) {
- c->Init(
- pnames_shm_id, pnames_shm_offset, count, results_shm_id,
- results_shm_offset, size);
- }
- }
-
- void GetProgramInfoCHROMIUM(GLuint program, uint32 bucket_id) {
- gles2::cmds::GetProgramInfoCHROMIUM* c =
- GetCmdSpace<gles2::cmds::GetProgramInfoCHROMIUM>();
- if (c) {
- c->Init(program, bucket_id);
- }
- }
-
- void CreateStreamTextureCHROMIUM(
- GLuint client_id, uint32 result_shm_id, uint32 result_shm_offset) {
- gles2::cmds::CreateStreamTextureCHROMIUM* c =
- GetCmdSpace<gles2::cmds::CreateStreamTextureCHROMIUM>();
- if (c) {
- c->Init(client_id, result_shm_id, result_shm_offset);
- }
- }
-
- void DestroyStreamTextureCHROMIUM(GLuint texture) {
- gles2::cmds::DestroyStreamTextureCHROMIUM* c =
- GetCmdSpace<gles2::cmds::DestroyStreamTextureCHROMIUM>();
- if (c) {
- c->Init(texture);
- }
- }
-
- void GetTranslatedShaderSourceANGLE(GLuint shader, uint32 bucket_id) {
- gles2::cmds::GetTranslatedShaderSourceANGLE* c =
- GetCmdSpace<gles2::cmds::GetTranslatedShaderSourceANGLE>();
- if (c) {
- c->Init(shader, bucket_id);
- }
- }
-
- void PostSubBufferCHROMIUM(GLint x, GLint y, GLint width, GLint height) {
- gles2::cmds::PostSubBufferCHROMIUM* c =
- GetCmdSpace<gles2::cmds::PostSubBufferCHROMIUM>();
- if (c) {
- c->Init(x, y, width, height);
- }
- }
-
- void TexImageIOSurface2DCHROMIUM(
- GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
- GLuint plane) {
- gles2::cmds::TexImageIOSurface2DCHROMIUM* c =
- GetCmdSpace<gles2::cmds::TexImageIOSurface2DCHROMIUM>();
- if (c) {
- c->Init(target, width, height, ioSurfaceId, plane);
- }
- }
-
- void CopyTextureCHROMIUM(
- GLenum target, GLenum source_id, GLenum dest_id, GLint level,
- GLint internalformat, GLenum dest_type) {
- gles2::cmds::CopyTextureCHROMIUM* c =
- GetCmdSpace<gles2::cmds::CopyTextureCHROMIUM>();
- if (c) {
- c->Init(target, source_id, dest_id, level, internalformat, dest_type);
- }
- }
-
- void DrawArraysInstancedANGLE(
- GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
- gles2::cmds::DrawArraysInstancedANGLE* c =
- GetCmdSpace<gles2::cmds::DrawArraysInstancedANGLE>();
- if (c) {
- c->Init(mode, first, count, primcount);
- }
- }
-
- void DrawElementsInstancedANGLE(
- GLenum mode, GLsizei count, GLenum type, GLuint index_offset,
- GLsizei primcount) {
- gles2::cmds::DrawElementsInstancedANGLE* c =
- GetCmdSpace<gles2::cmds::DrawElementsInstancedANGLE>();
- if (c) {
- c->Init(mode, count, type, index_offset, primcount);
- }
- }
-
- void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) {
- gles2::cmds::VertexAttribDivisorANGLE* c =
- GetCmdSpace<gles2::cmds::VertexAttribDivisorANGLE>();
- if (c) {
- c->Init(index, divisor);
- }
- }
-
- void ProduceTextureCHROMIUM(
- GLenum target, uint32 mailbox_shm_id, uint32 mailbox_shm_offset) {
- gles2::cmds::ProduceTextureCHROMIUM* c =
- GetCmdSpace<gles2::cmds::ProduceTextureCHROMIUM>();
- if (c) {
- c->Init(target, mailbox_shm_id, mailbox_shm_offset);
- }
- }
-
- void ProduceTextureCHROMIUMImmediate(GLenum target, const GLbyte* mailbox) {
- const uint32 size =
- gles2::cmds::ProduceTextureCHROMIUMImmediate::ComputeSize();
- gles2::cmds::ProduceTextureCHROMIUMImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::ProduceTextureCHROMIUMImmediate>(size); // NOLINT
- if (c) {
- c->Init(target, mailbox);
- }
- }
-
- void ConsumeTextureCHROMIUM(
- GLenum target, uint32 mailbox_shm_id, uint32 mailbox_shm_offset) {
- gles2::cmds::ConsumeTextureCHROMIUM* c =
- GetCmdSpace<gles2::cmds::ConsumeTextureCHROMIUM>();
- if (c) {
- c->Init(target, mailbox_shm_id, mailbox_shm_offset);
- }
- }
-
- void ConsumeTextureCHROMIUMImmediate(GLenum target, const GLbyte* mailbox) {
- const uint32 size =
- gles2::cmds::ConsumeTextureCHROMIUMImmediate::ComputeSize();
- gles2::cmds::ConsumeTextureCHROMIUMImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::ConsumeTextureCHROMIUMImmediate>(size); // NOLINT
- if (c) {
- c->Init(target, mailbox);
- }
- }
-
- void BindUniformLocationCHROMIUM(
- GLuint program, GLint location, uint32 name_shm_id,
- uint32 name_shm_offset, uint32 data_size) {
- gles2::cmds::BindUniformLocationCHROMIUM* c =
- GetCmdSpace<gles2::cmds::BindUniformLocationCHROMIUM>();
- if (c) {
- c->Init(program, location, name_shm_id, name_shm_offset, data_size);
- }
- }
-
- void BindUniformLocationCHROMIUMBucket(
- GLuint program, GLint location, uint32 name_bucket_id) {
- gles2::cmds::BindUniformLocationCHROMIUMBucket* c =
- GetCmdSpace<gles2::cmds::BindUniformLocationCHROMIUMBucket>();
- if (c) {
- c->Init(program, location, name_bucket_id);
- }
- }
-
- void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) {
- gles2::cmds::BindTexImage2DCHROMIUM* c =
- GetCmdSpace<gles2::cmds::BindTexImage2DCHROMIUM>();
- if (c) {
- c->Init(target, imageId);
- }
- }
-
- void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) {
- gles2::cmds::ReleaseTexImage2DCHROMIUM* c =
- GetCmdSpace<gles2::cmds::ReleaseTexImage2DCHROMIUM>();
- if (c) {
- c->Init(target, imageId);
- }
- }
-
- void TraceBeginCHROMIUM(GLuint bucket_id) {
- gles2::cmds::TraceBeginCHROMIUM* c =
- GetCmdSpace<gles2::cmds::TraceBeginCHROMIUM>();
- if (c) {
- c->Init(bucket_id);
- }
- }
-
- void TraceEndCHROMIUM() {
- gles2::cmds::TraceEndCHROMIUM* c =
- GetCmdSpace<gles2::cmds::TraceEndCHROMIUM>();
- if (c) {
- c->Init();
- }
- }
-
- void AsyncTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, uint32 data_shm_id,
- uint32 data_shm_offset) {
- gles2::cmds::AsyncTexSubImage2DCHROMIUM* c =
- GetCmdSpace<gles2::cmds::AsyncTexSubImage2DCHROMIUM>();
- if (c) {
- c->Init(
- target, level, xoffset, yoffset, width, height, format, type,
- data_shm_id, data_shm_offset);
- }
- }
-
- void AsyncTexImage2DCHROMIUM(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- uint32 pixels_shm_id, uint32 pixels_shm_offset) {
- gles2::cmds::AsyncTexImage2DCHROMIUM* c =
- GetCmdSpace<gles2::cmds::AsyncTexImage2DCHROMIUM>();
- if (c) {
- c->Init(
- target, level, internalformat, width, height, border, format, type,
- pixels_shm_id, pixels_shm_offset);
- }
- }
-
- void WaitAsyncTexImage2DCHROMIUM(GLenum target) {
- gles2::cmds::WaitAsyncTexImage2DCHROMIUM* c =
- GetCmdSpace<gles2::cmds::WaitAsyncTexImage2DCHROMIUM>();
- if (c) {
- c->Init(target);
- }
- }
-
- void DiscardFramebufferEXT(
- GLenum target, GLsizei count, uint32 attachments_shm_id,
- uint32 attachments_shm_offset) {
- gles2::cmds::DiscardFramebufferEXT* c =
- GetCmdSpace<gles2::cmds::DiscardFramebufferEXT>();
- if (c) {
- c->Init(target, count, attachments_shm_id, attachments_shm_offset);
- }
- }
-
- void DiscardFramebufferEXTImmediate(
- GLenum target, GLsizei count, const GLenum* attachments) {
- const uint32 size =
- gles2::cmds::DiscardFramebufferEXTImmediate::ComputeSize(count);
- gles2::cmds::DiscardFramebufferEXTImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::DiscardFramebufferEXTImmediate>(size); // NOLINT
- if (c) {
- c->Init(target, count, attachments);
- }
- }
-
- void LoseContextCHROMIUM(GLenum current, GLenum other) {
- gles2::cmds::LoseContextCHROMIUM* c =
- GetCmdSpace<gles2::cmds::LoseContextCHROMIUM>();
- if (c) {
- c->Init(current, other);
- }
- }
-
- void WaitSyncPointCHROMIUM(GLuint sync_point) {
- gles2::cmds::WaitSyncPointCHROMIUM* c =
- GetCmdSpace<gles2::cmds::WaitSyncPointCHROMIUM>();
- if (c) {
- c->Init(sync_point);
- }
- }
-
- void DrawBuffersEXT(
- GLsizei count, uint32 bufs_shm_id, uint32 bufs_shm_offset) {
- gles2::cmds::DrawBuffersEXT* c =
- GetCmdSpace<gles2::cmds::DrawBuffersEXT>();
- if (c) {
- c->Init(count, bufs_shm_id, bufs_shm_offset);
- }
- }
-
- void DrawBuffersEXTImmediate(GLsizei count, const GLenum* bufs) {
- const uint32 size =
- gles2::cmds::DrawBuffersEXTImmediate::ComputeSize(count);
- gles2::cmds::DrawBuffersEXTImmediate* c =
- GetImmediateCmdSpaceTotalSize<gles2::cmds::DrawBuffersEXTImmediate>(
- size);
- if (c) {
- c->Init(count, bufs);
- }
- }
-
- void DiscardBackbufferCHROMIUM() {
- gles2::cmds::DiscardBackbufferCHROMIUM* c =
- GetCmdSpace<gles2::cmds::DiscardBackbufferCHROMIUM>();
- if (c) {
- c->Init();
- }
}
+}
+
+void GetProgramInfoCHROMIUM(GLuint program, uint32_t bucket_id) {
+ gles2::cmds::GetProgramInfoCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::GetProgramInfoCHROMIUM>();
+ if (c) {
+ c->Init(program, bucket_id);
+ }
+}
+
+void GetTranslatedShaderSourceANGLE(GLuint shader, uint32_t bucket_id) {
+ gles2::cmds::GetTranslatedShaderSourceANGLE* c =
+ GetCmdSpace<gles2::cmds::GetTranslatedShaderSourceANGLE>();
+ if (c) {
+ c->Init(shader, bucket_id);
+ }
+}
+
+void PostSubBufferCHROMIUM(GLint x, GLint y, GLint width, GLint height) {
+ gles2::cmds::PostSubBufferCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::PostSubBufferCHROMIUM>();
+ if (c) {
+ c->Init(x, y, width, height);
+ }
+}
+
+void TexImageIOSurface2DCHROMIUM(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLuint ioSurfaceId,
+ GLuint plane) {
+ gles2::cmds::TexImageIOSurface2DCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::TexImageIOSurface2DCHROMIUM>();
+ if (c) {
+ c->Init(target, width, height, ioSurfaceId, plane);
+ }
+}
+
+void CopyTextureCHROMIUM(GLenum target,
+ GLenum source_id,
+ GLenum dest_id,
+ GLint level,
+ GLint internalformat,
+ GLenum dest_type) {
+ gles2::cmds::CopyTextureCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::CopyTextureCHROMIUM>();
+ if (c) {
+ c->Init(target, source_id, dest_id, level, internalformat, dest_type);
+ }
+}
+
+void DrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount) {
+ gles2::cmds::DrawArraysInstancedANGLE* c =
+ GetCmdSpace<gles2::cmds::DrawArraysInstancedANGLE>();
+ if (c) {
+ c->Init(mode, first, count, primcount);
+ }
+}
+
+void DrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ GLuint index_offset,
+ GLsizei primcount) {
+ gles2::cmds::DrawElementsInstancedANGLE* c =
+ GetCmdSpace<gles2::cmds::DrawElementsInstancedANGLE>();
+ if (c) {
+ c->Init(mode, count, type, index_offset, primcount);
+ }
+}
+
+void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) {
+ gles2::cmds::VertexAttribDivisorANGLE* c =
+ GetCmdSpace<gles2::cmds::VertexAttribDivisorANGLE>();
+ if (c) {
+ c->Init(index, divisor);
+ }
+}
+
+void ProduceTextureCHROMIUMImmediate(GLenum target, const GLbyte* mailbox) {
+ const uint32_t size =
+ gles2::cmds::ProduceTextureCHROMIUMImmediate::ComputeSize();
+ gles2::cmds::ProduceTextureCHROMIUMImmediate* c =
+ GetImmediateCmdSpaceTotalSize<
+ gles2::cmds::ProduceTextureCHROMIUMImmediate>(size);
+ if (c) {
+ c->Init(target, mailbox);
+ }
+}
+
+void ProduceTextureDirectCHROMIUMImmediate(GLuint texture,
+ GLenum target,
+ const GLbyte* mailbox) {
+ const uint32_t size =
+ gles2::cmds::ProduceTextureDirectCHROMIUMImmediate::ComputeSize();
+ gles2::cmds::ProduceTextureDirectCHROMIUMImmediate* c =
+ GetImmediateCmdSpaceTotalSize<
+ gles2::cmds::ProduceTextureDirectCHROMIUMImmediate>(size);
+ if (c) {
+ c->Init(texture, target, mailbox);
+ }
+}
+
+void ConsumeTextureCHROMIUMImmediate(GLenum target, const GLbyte* mailbox) {
+ const uint32_t size =
+ gles2::cmds::ConsumeTextureCHROMIUMImmediate::ComputeSize();
+ gles2::cmds::ConsumeTextureCHROMIUMImmediate* c =
+ GetImmediateCmdSpaceTotalSize<
+ gles2::cmds::ConsumeTextureCHROMIUMImmediate>(size);
+ if (c) {
+ c->Init(target, mailbox);
+ }
+}
+
+void BindUniformLocationCHROMIUMBucket(GLuint program,
+ GLint location,
+ uint32_t name_bucket_id) {
+ gles2::cmds::BindUniformLocationCHROMIUMBucket* c =
+ GetCmdSpace<gles2::cmds::BindUniformLocationCHROMIUMBucket>();
+ if (c) {
+ c->Init(program, location, name_bucket_id);
+ }
+}
+
+void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) {
+ gles2::cmds::BindTexImage2DCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::BindTexImage2DCHROMIUM>();
+ if (c) {
+ c->Init(target, imageId);
+ }
+}
+
+void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) {
+ gles2::cmds::ReleaseTexImage2DCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::ReleaseTexImage2DCHROMIUM>();
+ if (c) {
+ c->Init(target, imageId);
+ }
+}
+
+void TraceBeginCHROMIUM(GLuint bucket_id) {
+ gles2::cmds::TraceBeginCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::TraceBeginCHROMIUM>();
+ if (c) {
+ c->Init(bucket_id);
+ }
+}
+
+void TraceEndCHROMIUM() {
+ gles2::cmds::TraceEndCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::TraceEndCHROMIUM>();
+ if (c) {
+ c->Init();
+ }
+}
+
+void AsyncTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ uint32_t data_shm_id,
+ uint32_t data_shm_offset,
+ uint32_t async_upload_token,
+ uint32_t sync_data_shm_id,
+ uint32_t sync_data_shm_offset) {
+ gles2::cmds::AsyncTexSubImage2DCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::AsyncTexSubImage2DCHROMIUM>();
+ if (c) {
+ c->Init(target,
+ level,
+ xoffset,
+ yoffset,
+ width,
+ height,
+ format,
+ type,
+ data_shm_id,
+ data_shm_offset,
+ async_upload_token,
+ sync_data_shm_id,
+ sync_data_shm_offset);
+ }
+}
+
+void AsyncTexImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ uint32_t pixels_shm_id,
+ uint32_t pixels_shm_offset,
+ uint32_t async_upload_token,
+ uint32_t sync_data_shm_id,
+ uint32_t sync_data_shm_offset) {
+ gles2::cmds::AsyncTexImage2DCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::AsyncTexImage2DCHROMIUM>();
+ if (c) {
+ c->Init(target,
+ level,
+ internalformat,
+ width,
+ height,
+ format,
+ type,
+ pixels_shm_id,
+ pixels_shm_offset,
+ async_upload_token,
+ sync_data_shm_id,
+ sync_data_shm_offset);
+ }
+}
+
+void WaitAsyncTexImage2DCHROMIUM(GLenum target) {
+ gles2::cmds::WaitAsyncTexImage2DCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::WaitAsyncTexImage2DCHROMIUM>();
+ if (c) {
+ c->Init(target);
+ }
+}
+
+void WaitAllAsyncTexImage2DCHROMIUM() {
+ gles2::cmds::WaitAllAsyncTexImage2DCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::WaitAllAsyncTexImage2DCHROMIUM>();
+ if (c) {
+ c->Init();
+ }
+}
+
+void DiscardFramebufferEXTImmediate(GLenum target,
+ GLsizei count,
+ const GLenum* attachments) {
+ const uint32_t size =
+ gles2::cmds::DiscardFramebufferEXTImmediate::ComputeSize(count);
+ gles2::cmds::DiscardFramebufferEXTImmediate* c =
+ GetImmediateCmdSpaceTotalSize<
+ gles2::cmds::DiscardFramebufferEXTImmediate>(size);
+ if (c) {
+ c->Init(target, count, attachments);
+ }
+}
+
+void LoseContextCHROMIUM(GLenum current, GLenum other) {
+ gles2::cmds::LoseContextCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::LoseContextCHROMIUM>();
+ if (c) {
+ c->Init(current, other);
+ }
+}
+
+void WaitSyncPointCHROMIUM(GLuint sync_point) {
+ gles2::cmds::WaitSyncPointCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::WaitSyncPointCHROMIUM>();
+ if (c) {
+ c->Init(sync_point);
+ }
+}
+
+void DrawBuffersEXTImmediate(GLsizei count, const GLenum* bufs) {
+ const uint32_t size =
+ gles2::cmds::DrawBuffersEXTImmediate::ComputeSize(count);
+ gles2::cmds::DrawBuffersEXTImmediate* c =
+ GetImmediateCmdSpaceTotalSize<gles2::cmds::DrawBuffersEXTImmediate>(size);
+ if (c) {
+ c->Init(count, bufs);
+ }
+}
+
+void DiscardBackbufferCHROMIUM() {
+ gles2::cmds::DiscardBackbufferCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::DiscardBackbufferCHROMIUM>();
+ if (c) {
+ c->Init();
+ }
+}
+
+void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+ GLenum plane_transform,
+ GLuint overlay_texture_id,
+ GLint bounds_x,
+ GLint bounds_y,
+ GLint bounds_width,
+ GLint bounds_height,
+ GLfloat uv_x,
+ GLfloat uv_y,
+ GLfloat uv_width,
+ GLfloat uv_height) {
+ gles2::cmds::ScheduleOverlayPlaneCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::ScheduleOverlayPlaneCHROMIUM>();
+ if (c) {
+ c->Init(plane_z_order,
+ plane_transform,
+ overlay_texture_id,
+ bounds_x,
+ bounds_y,
+ bounds_width,
+ bounds_height,
+ uv_x,
+ uv_y,
+ uv_width,
+ uv_height);
+ }
+}
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_CMD_HELPER_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation.cc b/chromium/gpu/command_buffer/client/gles2_implementation.cc
index b0efc3769da..716fb55fbc2 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation.cc
+++ b/chromium/gpu/command_buffer/client/gles2_implementation.cc
@@ -6,23 +6,24 @@
#include "gpu/command_buffer/client/gles2_implementation.h"
+#include <GLES2/gl2ext.h>
+#include <GLES2/gl2extchromium.h>
#include <algorithm>
+#include <limits>
#include <map>
#include <queue>
#include <set>
-#include <limits>
-#include <stdio.h>
-#include <string.h>
-#include <GLES2/gl2ext.h>
-#include <GLES2/gl2extchromium.h>
+#include <sstream>
+#include <string>
+#include "base/bind.h"
#include "gpu/command_buffer/client/buffer_tracker.h"
+#include "gpu/command_buffer/client/gpu_control.h"
#include "gpu/command_buffer/client/gpu_memory_buffer_tracker.h"
#include "gpu/command_buffer/client/program_info_manager.h"
#include "gpu/command_buffer/client/query_tracker.h"
#include "gpu/command_buffer/client/transfer_buffer.h"
#include "gpu/command_buffer/client/vertex_array_object_manager.h"
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
-#include "gpu/command_buffer/common/gpu_control.h"
#include "gpu/command_buffer/common/trace_event.h"
#include "ui/gfx/gpu_memory_buffer.h"
@@ -31,8 +32,8 @@
#endif
#if defined(GPU_CLIENT_DEBUG)
-#include "ui/gl/gl_switches.h"
#include "base/command_line.h"
+#include "ui/gl/gl_switches.h"
#endif
namespace gpu {
@@ -66,8 +67,8 @@ GLES2Implementation::GLStaticState::IntState::IntState()
max_vertex_texture_image_units(0),
max_vertex_uniform_vectors(0),
num_compressed_texture_formats(0),
- num_shader_binary_formats(0) {
-}
+ num_shader_binary_formats(0),
+ bind_generates_resource_chromium(0) {}
GLES2Implementation::SingleThreadChecker::SingleThreadChecker(
GLES2Implementation* gles2_implementation)
@@ -82,12 +83,12 @@ GLES2Implementation::SingleThreadChecker::~SingleThreadChecker() {
}
GLES2Implementation::GLES2Implementation(
- GLES2CmdHelper* helper,
- ShareGroup* share_group,
- TransferBufferInterface* transfer_buffer,
- bool bind_generates_resource,
- bool free_everything_when_invisible,
- GpuControl* gpu_control)
+ GLES2CmdHelper* helper,
+ ShareGroup* share_group,
+ TransferBufferInterface* transfer_buffer,
+ bool bind_generates_resource,
+ bool lose_context_when_out_of_memory,
+ GpuControl* gpu_control)
: helper_(helper),
transfer_buffer_(transfer_buffer),
angle_pack_reverse_row_order_status_(kUnknownExtensionStatus),
@@ -107,23 +108,25 @@ GLES2Implementation::GLES2Implementation(
bound_array_buffer_id_(0),
bound_pixel_pack_transfer_buffer_id_(0),
bound_pixel_unpack_transfer_buffer_id_(0),
+ async_upload_token_(0),
+ async_upload_sync_(NULL),
+ async_upload_sync_shm_id_(0),
+ async_upload_sync_shm_offset_(0),
error_bits_(0),
debug_(false),
+ lose_context_when_out_of_memory_(lose_context_when_out_of_memory),
use_count_(0),
- current_query_(NULL),
error_message_callback_(NULL),
gpu_control_(gpu_control),
- surface_visible_(true),
- free_everything_when_invisible_(free_everything_when_invisible),
capabilities_(gpu_control->GetCapabilities()),
weak_ptr_factory_(this) {
DCHECK(helper);
DCHECK(transfer_buffer);
DCHECK(gpu_control);
- char temp[128];
- sprintf(temp, "%p", static_cast<void*>(this));
- this_in_hex_ = std::string(temp);
+ std::stringstream ss;
+ ss << std::hex << this;
+ this_in_hex_ = ss.str();
GPU_CLIENT_LOG_CODE_BLOCK({
debug_ = CommandLine::ForCurrentProcess()->HasSwitch(
@@ -141,6 +144,7 @@ bool GLES2Implementation::Initialize(
unsigned int min_transfer_buffer_size,
unsigned int max_transfer_buffer_size,
unsigned int mapped_memory_limit) {
+ TRACE_EVENT0("gpu", "GLES2Implementation::Initialize");
DCHECK_GE(starting_transfer_buffer_size, min_transfer_buffer_size);
DCHECK_LE(starting_transfer_buffer_size, max_transfer_buffer_size);
DCHECK_GE(min_transfer_buffer_size, kStartingOffset);
@@ -155,7 +159,15 @@ bool GLES2Implementation::Initialize(
return false;
}
- mapped_memory_.reset(new MappedMemoryManager(helper_, mapped_memory_limit));
+ mapped_memory_.reset(
+ new MappedMemoryManager(
+ helper_,
+ base::Bind(&GLES2Implementation::PollAsyncUploads,
+ // The mapped memory manager is owned by |this| here, and
+ // since its destroyed before before we destroy ourselves
+ // we don't need extra safety measures for this closure.
+ base::Unretained(this)),
+ mapped_memory_limit));
unsigned chunk_size = 2 * 1024 * 1024;
if (mapped_memory_limit != kNoLimit) {
@@ -190,10 +202,21 @@ bool GLES2Implementation::Initialize(
reserved_ids_[0],
reserved_ids_[1]));
+ // GL_BIND_GENERATES_RESOURCE_CHROMIUM state must be the same
+ // on Client & Service.
+ if (static_state_.int_state.bind_generates_resource_chromium !=
+ (share_group_->bind_generates_resource() ? 1 : 0)) {
+ SetGLError(GL_INVALID_OPERATION,
+ "Initialize",
+ "Service bind_generates_resource mismatch.");
+ return false;
+ }
+
return true;
}
bool GLES2Implementation::QueryAndCacheStaticState() {
+ TRACE_EVENT0("gpu", "GLES2Implementation::QueryAndCacheStaticState");
// Setup query for multiple GetIntegerv's
static const GLenum pnames[] = {
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,
@@ -208,6 +231,7 @@ bool GLES2Implementation::QueryAndCacheStaticState() {
GL_MAX_VERTEX_UNIFORM_VECTORS,
GL_NUM_COMPRESSED_TEXTURE_FORMATS,
GL_NUM_SHADER_BINARY_FORMATS,
+ GL_BIND_GENERATES_RESOURCE_CHROMIUM,
};
GetMultipleIntegervState integerv_state(
@@ -276,8 +300,19 @@ GLES2Implementation::~GLES2Implementation() {
#if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
DeleteBuffers(arraysize(reserved_ids_), &reserved_ids_[0]);
#endif
+
+ // Release any per-context data in share group.
+ share_group_->FreeContext(this);
+
buffer_tracker_.reset();
+ FreeAllAsyncUploadBuffers();
+
+ if (async_upload_sync_) {
+ mapped_memory_->Free(async_upload_sync_);
+ async_upload_sync_ = NULL;
+ }
+
// Make sure the commands make it the service.
WaitForCmd();
}
@@ -307,6 +342,7 @@ void GLES2Implementation::FreeUnusedSharedMemory() {
}
void GLES2Implementation::FreeEverything() {
+ FreeAllAsyncUploadBuffers();
WaitForCmd();
query_tracker_->Shrink();
FreeUnusedSharedMemory();
@@ -341,19 +377,15 @@ void GLES2Implementation::SignalQuery(uint32 query,
}
void GLES2Implementation::SetSurfaceVisible(bool visible) {
+ TRACE_EVENT1(
+ "gpu", "GLES2Implementation::SetSurfaceVisible", "visible", visible);
// TODO(piman): This probably should be ShallowFlushCHROMIUM().
Flush();
- surface_visible_ = visible;
gpu_control_->SetSurfaceVisible(visible);
if (!visible)
FreeEverything();
}
-void GLES2Implementation::SendManagedMemoryStats(
- const ManagedMemoryStats& stats) {
- gpu_control_->SendManagedMemoryStats(stats);
-}
-
void GLES2Implementation::WaitForCmd() {
TRACE_EVENT0("gpu", "GLES2::WaitForCmd");
helper_->CommandBufferHelper::Finish();
@@ -484,6 +516,11 @@ void GLES2Implementation::SetGLError(
error_message_callback_->OnErrorMessage(temp.c_str(), 0);
}
error_bits_ |= GLES2Util::GLErrorToErrorBit(error);
+
+ if (error == GL_OUT_OF_MEMORY && lose_context_when_out_of_memory_) {
+ helper_->LoseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
+ GL_UNKNOWN_CONTEXT_RESET_ARB);
+ }
}
void GLES2Implementation::SetGLErrorInvalidEnum(
@@ -827,6 +864,10 @@ void GLES2Implementation::DrawElements(
if (count == 0) {
return;
}
+ if (vertex_array_object_manager_->bound_element_array_buffer() != 0 &&
+ !ValidateOffset("glDrawElements", reinterpret_cast<GLintptr>(indices))) {
+ return;
+ }
GLuint offset = 0;
bool simulated = false;
if (!vertex_array_object_manager_->SetupSimulatedIndexAndClientSideBuffers(
@@ -847,8 +888,6 @@ void GLES2Implementation::Flush() {
// Flush our command buffer
// (tell the service to execute up to the flush cmd.)
helper_->CommandBufferHelper::Flush();
- if (!surface_visible_ && free_everything_when_invisible_)
- FreeEverything();
}
void GLES2Implementation::ShallowFlushCHROMIUM() {
@@ -863,27 +902,16 @@ void GLES2Implementation::ShallowFlushCHROMIUM() {
void GLES2Implementation::Finish() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
FinishHelper();
- if (!surface_visible_ && free_everything_when_invisible_)
- FreeEverything();
}
void GLES2Implementation::ShallowFinishCHROMIUM() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
+ TRACE_EVENT0("gpu", "GLES2::ShallowFinishCHROMIUM");
// Flush our command buffer (tell the service to execute up to the flush cmd
// and don't return until it completes).
helper_->CommandBufferHelper::Finish();
}
-bool GLES2Implementation::MustBeContextLost() {
- bool context_lost = helper_->IsContextLost();
- if (!context_lost) {
- WaitForCmd();
- context_lost = helper_->IsContextLost();
- }
- CHECK(context_lost);
- return context_lost;
-}
-
void GLES2Implementation::FinishHelper() {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFinish()");
TRACE_EVENT0("gpu", "GLES2::Finish");
@@ -1090,14 +1118,14 @@ void GLES2Implementation::DeleteShaderStub(
GLint GLES2Implementation::GetAttribLocationHelper(
GLuint program, const char* name) {
- typedef cmds::GetAttribLocationBucket::Result Result;
+ typedef cmds::GetAttribLocation::Result Result;
Result* result = GetResultAs<Result*>();
if (!result) {
return -1;
}
*result = -1;
SetBucketAsCString(kResultBucketId, name);
- helper_->GetAttribLocationBucket(
+ helper_->GetAttribLocation(
program, kResultBucketId, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
helper_->SetBucketSize(kResultBucketId, 0);
@@ -1119,14 +1147,14 @@ GLint GLES2Implementation::GetAttribLocation(
GLint GLES2Implementation::GetUniformLocationHelper(
GLuint program, const char* name) {
- typedef cmds::GetUniformLocationBucket::Result Result;
+ typedef cmds::GetUniformLocation::Result Result;
Result* result = GetResultAs<Result*>();
if (!result) {
return -1;
}
*result = -1;
SetBucketAsCString(kResultBucketId, name);
- helper_->GetUniformLocationBucket(program, kResultBucketId,
+ helper_->GetUniformLocation(program, kResultBucketId,
GetResultShmId(), GetResultShmOffset());
WaitForCmd();
helper_->SetBucketSize(kResultBucketId, 0);
@@ -1146,16 +1174,6 @@ GLint GLES2Implementation::GetUniformLocation(
return loc;
}
-void GLES2Implementation::UseProgram(GLuint program) {
- GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUseProgram(" << program << ")");
- if (current_program_ != program) {
- current_program_ = program;
- helper_->UseProgram(program);
- }
- CheckGLError();
-}
-
bool GLES2Implementation::GetProgramivHelper(
GLuint program, GLenum pname, GLint* params) {
bool got_value = share_group_->program_info_manager()->GetProgramiv(
@@ -1228,13 +1246,13 @@ void GLES2Implementation::PixelStorei(GLenum pname, GLint param) {
case GL_UNPACK_ALIGNMENT:
unpack_alignment_ = param;
break;
- case GL_UNPACK_ROW_LENGTH:
+ case GL_UNPACK_ROW_LENGTH_EXT:
unpack_row_length_ = param;
return;
- case GL_UNPACK_SKIP_ROWS:
+ case GL_UNPACK_SKIP_ROWS_EXT:
unpack_skip_rows_ = param;
return;
- case GL_UNPACK_SKIP_PIXELS:
+ case GL_UNPACK_SKIP_PIXELS_EXT:
unpack_skip_pixels_ = param;
return;
case GL_UNPACK_FLIP_Y_CHROMIUM:
@@ -1251,7 +1269,6 @@ void GLES2Implementation::PixelStorei(GLenum pname, GLint param) {
CheckGLError();
}
-
void GLES2Implementation::VertexAttribPointer(
GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
const void* ptr) {
@@ -1273,10 +1290,18 @@ void GLES2Implementation::VertexAttribPointer(
#if defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
if (bound_array_buffer_id_ != 0) {
// Only report NON client side buffers to the service.
+ if (!ValidateOffset("glVertexAttribPointer",
+ reinterpret_cast<GLintptr>(ptr))) {
+ return;
+ }
helper_->VertexAttribPointer(index, size, type, normalized, stride,
ToGLuint(ptr));
}
#else // !defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
+ if (!ValidateOffset("glVertexAttribPointer",
+ reinterpret_cast<GLintptr>(ptr))) {
+ return;
+ }
helper_->VertexAttribPointer(index, size, type, normalized, stride,
ToGLuint(ptr));
#endif // !defined(GLES2_SUPPORT_CLIENT_SIDE_ARRAYS)
@@ -1366,10 +1391,8 @@ void GLES2Implementation::ShaderSource(
void GLES2Implementation::BufferDataHelper(
GLenum target, GLsizeiptr size, const void* data, GLenum usage) {
- if (size < 0) {
- SetGLError(GL_INVALID_VALUE, "glBufferData", "size < 0");
+ if (!ValidateSize("glBufferData", size))
return;
- }
GLuint buffer_id;
if (GetBoundPixelTransferBuffer(target, "glBufferData", &buffer_id)) {
@@ -1378,13 +1401,8 @@ void GLES2Implementation::BufferDataHelper(
}
BufferTracker::Buffer* buffer = buffer_tracker_->GetBuffer(buffer_id);
- if (buffer) {
- // Free buffer memory, pending the passage of a token.
- buffer_tracker_->FreePendingToken(buffer, helper_->InsertToken());
-
- // Remove old buffer.
- buffer_tracker_->RemoveBuffer(buffer_id);
- }
+ if (buffer)
+ RemoveTransferBuffer(buffer);
// Create new buffer.
buffer = buffer_tracker_->CreateBuffer(buffer_id, size);
@@ -1445,8 +1463,8 @@ void GLES2Implementation::BufferSubDataHelper(
return;
}
- if (size < 0) {
- SetGLError(GL_INVALID_VALUE, "glBufferSubData", "size < 0");
+ if (!ValidateSize("glBufferSubData", size) ||
+ !ValidateOffset("glBufferSubData", offset)) {
return;
}
@@ -1512,6 +1530,30 @@ void GLES2Implementation::BufferSubData(
CheckGLError();
}
+void GLES2Implementation::RemoveTransferBuffer(BufferTracker::Buffer* buffer) {
+ int32 token = buffer->last_usage_token();
+ uint32 async_token = buffer->last_async_upload_token();
+
+ if (async_token) {
+ if (HasAsyncUploadTokenPassed(async_token)) {
+ buffer_tracker_->Free(buffer);
+ } else {
+ detached_async_upload_memory_.push_back(
+ std::make_pair(buffer->address(), async_token));
+ buffer_tracker_->Unmanage(buffer);
+ }
+ } else if (token) {
+ if (helper_->HasTokenPassed(token))
+ buffer_tracker_->Free(buffer);
+ else
+ buffer_tracker_->FreePendingToken(buffer, token);
+ } else {
+ buffer_tracker_->Free(buffer);
+ }
+
+ buffer_tracker_->RemoveBuffer(buffer->id());
+}
+
bool GLES2Implementation::GetBoundPixelTransferBuffer(
GLenum target,
const char* function_name,
@@ -1573,6 +1615,10 @@ void GLES2Implementation::CompressedTexImage2D(
SetGLError(GL_INVALID_VALUE, "glCompressedTexImage2D", "dimension < 0");
return;
}
+ if (border != 0) {
+ SetGLError(GL_INVALID_VALUE, "glCompressedTexImage2D", "border != 0");
+ return;
+ }
if (height == 0 || width == 0) {
return;
}
@@ -1585,15 +1631,15 @@ void GLES2Implementation::CompressedTexImage2D(
"glCompressedTexImage2D", offset, image_size);
if (buffer && buffer->shm_id() != -1) {
helper_->CompressedTexImage2D(
- target, level, internalformat, width, height, border, image_size,
+ target, level, internalformat, width, height, image_size,
buffer->shm_id(), buffer->shm_offset() + offset);
- buffer->set_transfer_ready_token(helper_->InsertToken());
+ buffer->set_last_usage_token(helper_->InsertToken());
}
return;
}
SetBucketContents(kResultBucketId, data, image_size);
helper_->CompressedTexImage2DBucket(
- target, level, internalformat, width, height, border, kResultBucketId);
+ target, level, internalformat, width, height, kResultBucketId);
// Free the bucket. This is not required but it does free up the memory.
// and we don't have to wait for the result so from the client's perspective
// it's cheap.
@@ -1628,7 +1674,7 @@ void GLES2Implementation::CompressedTexSubImage2D(
helper_->CompressedTexSubImage2D(
target, level, xoffset, yoffset, width, height, format, image_size,
buffer->shm_id(), buffer->shm_offset() + offset);
- buffer->set_transfer_ready_token(helper_->InsertToken());
+ buffer->set_last_usage_token(helper_->InsertToken());
CheckGLError();
}
return;
@@ -1695,6 +1741,10 @@ void GLES2Implementation::TexImage2D(
SetGLError(GL_INVALID_VALUE, "glTexImage2D", "dimension < 0");
return;
}
+ if (border != 0) {
+ SetGLError(GL_INVALID_VALUE, "glTexImage2D", "border != 0");
+ return;
+ }
uint32 size;
uint32 unpadded_row_size;
uint32 padded_row_size;
@@ -1713,9 +1763,9 @@ void GLES2Implementation::TexImage2D(
"glTexImage2D", offset, size);
if (buffer && buffer->shm_id() != -1) {
helper_->TexImage2D(
- target, level, internalformat, width, height, border, format, type,
+ target, level, internalformat, width, height, format, type,
buffer->shm_id(), buffer->shm_offset() + offset);
- buffer->set_transfer_ready_token(helper_->InsertToken());
+ buffer->set_last_usage_token(helper_->InsertToken());
CheckGLError();
}
return;
@@ -1724,7 +1774,7 @@ void GLES2Implementation::TexImage2D(
// If there's no data just issue TexImage2D
if (!pixels) {
helper_->TexImage2D(
- target, level, internalformat, width, height, border, format, type,
+ target, level, internalformat, width, height, format, type,
0, 0);
CheckGLError();
return;
@@ -1764,7 +1814,7 @@ void GLES2Implementation::TexImage2D(
pixels, height, unpadded_row_size, src_padded_row_size, unpack_flip_y_,
buffer.address(), padded_row_size);
helper_->TexImage2D(
- target, level, internalformat, width, height, border, format, type,
+ target, level, internalformat, width, height, format, type,
buffer.shm_id(), buffer.offset());
CheckGLError();
return;
@@ -1772,7 +1822,7 @@ void GLES2Implementation::TexImage2D(
// No, so send it using TexSubImage2D.
helper_->TexImage2D(
- target, level, internalformat, width, height, border, format, type,
+ target, level, internalformat, width, height, format, type,
0, 0);
TexSubImage2DImpl(
target, level, 0, 0, width, height, format, type, unpadded_row_size,
@@ -1821,7 +1871,7 @@ void GLES2Implementation::TexSubImage2D(
helper_->TexSubImage2D(
target, level, xoffset, yoffset, width, height, format, type,
buffer->shm_id(), buffer->shm_offset() + offset, false);
- buffer->set_transfer_ready_token(helper_->InsertToken());
+ buffer->set_last_usage_token(helper_->InsertToken());
CheckGLError();
}
return;
@@ -1859,9 +1909,9 @@ void GLES2Implementation::TexSubImage2D(
}
static GLint ComputeNumRowsThatFitInBuffer(
- GLsizeiptr padded_row_size, GLsizeiptr unpadded_row_size,
+ uint32 padded_row_size, uint32 unpadded_row_size,
unsigned int size) {
- DCHECK_GE(unpadded_row_size, 0);
+ DCHECK_GE(unpadded_row_size, 0u);
if (padded_row_size == 0) {
return 1;
}
@@ -2146,7 +2196,8 @@ const GLubyte* GLES2Implementation::GetStringHelper(GLenum name) {
case GL_EXTENSIONS:
str += std::string(str.empty() ? "" : " ") +
"GL_CHROMIUM_flipy "
- "GL_EXT_unpack_subimage";
+ "GL_EXT_unpack_subimage "
+ "GL_CHROMIUM_map_sub";
if (capabilities_.map_image) {
// The first space character is intentional.
str += " GL_CHROMIUM_map_image";
@@ -2404,24 +2455,24 @@ void GLES2Implementation::GenQueriesEXTHelper(
// deleted the resource.
bool GLES2Implementation::BindBufferHelper(
- GLenum target, GLuint buffer) {
+ GLenum target, GLuint buffer_id) {
// TODO(gman): See note #1 above.
bool changed = false;
switch (target) {
case GL_ARRAY_BUFFER:
- if (bound_array_buffer_id_ != buffer) {
- bound_array_buffer_id_ = buffer;
+ if (bound_array_buffer_id_ != buffer_id) {
+ bound_array_buffer_id_ = buffer_id;
changed = true;
}
break;
case GL_ELEMENT_ARRAY_BUFFER:
- changed = vertex_array_object_manager_->BindElementArray(buffer);
+ changed = vertex_array_object_manager_->BindElementArray(buffer_id);
break;
case GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM:
- bound_pixel_pack_transfer_buffer_id_ = buffer;
+ bound_pixel_pack_transfer_buffer_id_ = buffer_id;
break;
case GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM:
- bound_pixel_unpack_transfer_buffer_id_ = buffer;
+ bound_pixel_unpack_transfer_buffer_id_ = buffer_id;
break;
default:
changed = true;
@@ -2429,7 +2480,7 @@ bool GLES2Implementation::BindBufferHelper(
}
// TODO(gman): There's a bug here. If the target is invalid the ID will not be
// used even though it's marked it as used here.
- GetIdHandler(id_namespaces::kBuffers)->MarkAsUsedForBind(buffer);
+ GetIdHandler(id_namespaces::kBuffers)->MarkAsUsedForBind(buffer_id);
return changed;
}
@@ -2530,7 +2581,7 @@ bool GLES2Implementation::BindTextureHelper(GLenum target, GLuint texture) {
return changed;
}
-bool GLES2Implementation::BindVertexArrayHelper(GLuint array) {
+bool GLES2Implementation::BindVertexArrayOESHelper(GLuint array) {
// TODO(gman): See note #1 above.
bool changed = false;
if (!vertex_array_object_manager_->BindVertexArray(array, &changed)) {
@@ -2545,6 +2596,15 @@ bool GLES2Implementation::BindVertexArrayHelper(GLuint array) {
return changed;
}
+bool GLES2Implementation::UseProgramHelper(GLuint program) {
+ bool changed = false;
+ if (current_program_ != program) {
+ current_program_ = program;
+ changed = true;
+ }
+ return changed;
+}
+
bool GLES2Implementation::IsBufferReservedId(GLuint id) {
return vertex_array_object_manager_->IsReservedId(id);
}
@@ -2563,13 +2623,11 @@ void GLES2Implementation::DeleteBuffersHelper(
bound_array_buffer_id_ = 0;
}
vertex_array_object_manager_->UnbindBuffer(buffers[ii]);
+
BufferTracker::Buffer* buffer = buffer_tracker_->GetBuffer(buffers[ii]);
- if (buffer) {
- // Free buffer memory, pending the passage of a token.
- buffer_tracker_->FreePendingToken(buffer, helper_->InsertToken());
- // Remove buffer.
- buffer_tracker_->RemoveBuffer(buffers[ii]);
- }
+ if (buffer)
+ RemoveTransferBuffer(buffer);
+
if (buffers[ii] == bound_pixel_unpack_transfer_buffer_id_) {
bound_pixel_unpack_transfer_buffer_id_ = 0;
}
@@ -2782,7 +2840,7 @@ void GLES2Implementation::Swap() {
weak_ptr_factory_.GetWeakPtr()));
}
-void GLES2Implementation::PartialSwapBuffers(gfx::Rect sub_buffer) {
+void GLES2Implementation::PartialSwapBuffers(const gfx::Rect& sub_buffer) {
PostSubBufferCHROMIUM(sub_buffer.x(),
sub_buffer.y(),
sub_buffer.width(),
@@ -2796,6 +2854,46 @@ void GLES2Implementation::SetSwapBuffersCompleteCallback(
swap_buffers_complete_callback_ = swap_buffers_complete_callback;
}
+static GLenum GetGLESOverlayTransform(gfx::OverlayTransform plane_transform) {
+ switch (plane_transform) {
+ case gfx::OVERLAY_TRANSFORM_INVALID:
+ break;
+ case gfx::OVERLAY_TRANSFORM_NONE:
+ return GL_OVERLAY_TRANSFORM_NONE_CHROMIUM;
+ case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL:
+ return GL_OVERLAY_TRANSFORM_FLIP_HORIZONTAL_CHROMIUM;
+ case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL:
+ return GL_OVERLAY_TRANSFORM_FLIP_VERTICAL_CHROMIUM;
+ case gfx::OVERLAY_TRANSFORM_ROTATE_90:
+ return GL_OVERLAY_TRANSFORM_ROTATE_90_CHROMIUM;
+ case gfx::OVERLAY_TRANSFORM_ROTATE_180:
+ return GL_OVERLAY_TRANSFORM_ROTATE_180_CHROMIUM;
+ case gfx::OVERLAY_TRANSFORM_ROTATE_270:
+ return GL_OVERLAY_TRANSFORM_ROTATE_270_CHROMIUM;
+ }
+ NOTREACHED();
+ return GL_OVERLAY_TRANSFORM_NONE_CHROMIUM;
+}
+
+void GLES2Implementation::ScheduleOverlayPlane(
+ int plane_z_order,
+ gfx::OverlayTransform plane_transform,
+ unsigned overlay_texture_id,
+ const gfx::Rect& display_bounds,
+ const gfx::RectF& uv_rect) {
+ ScheduleOverlayPlaneCHROMIUM(plane_z_order,
+ GetGLESOverlayTransform(plane_transform),
+ overlay_texture_id,
+ display_bounds.x(),
+ display_bounds.y(),
+ display_bounds.width(),
+ display_bounds.height(),
+ uv_rect.x(),
+ uv_rect.y(),
+ uv_rect.width(),
+ uv_rect.height());
+}
+
void GLES2Implementation::OnSwapBuffersComplete() {
if (!swap_buffers_complete_callback_.is_null())
swap_buffers_complete_callback_.Run();
@@ -2835,10 +2933,11 @@ void* GLES2Implementation::MapBufferSubDataCHROMIUM(
"glMapBufferSubDataCHROMIUM", access, "access");
return NULL;
}
- if (offset < 0 || size < 0) {
- SetGLError(GL_INVALID_VALUE, "glMapBufferSubDataCHROMIUM", "bad range");
+ if (!ValidateSize("glMapBufferSubDataCHROMIUM", size) ||
+ !ValidateOffset("glMapBufferSubDataCHROMIUM", offset)) {
return NULL;
}
+
int32 shm_id;
unsigned int shm_offset;
void* mem = mapped_memory_->Alloc(size, &shm_id, &shm_offset);
@@ -3048,6 +3147,7 @@ void GLES2Implementation::GetMultipleIntegervCHROMIUM(
" " << i << ": " << GLES2Util::GetStringGLState(pnames[i]));
}
});
+ DCHECK(size >= 0 && FitInt32NonNegative<GLsizeiptr>(size));
GetMultipleIntegervState state(pnames, count, results, size);
if (!GetMultipleIntegervSetup(&state)) {
@@ -3208,29 +3308,8 @@ GLuint GLES2Implementation::CreateStreamTextureCHROMIUM(GLuint texture) {
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] CreateStreamTextureCHROMIUM("
<< texture << ")");
TRACE_EVENT0("gpu", "GLES2::CreateStreamTextureCHROMIUM");
- typedef cmds::CreateStreamTextureCHROMIUM::Result Result;
- Result* result = GetResultAs<Result*>();
- if (!result) {
- return GL_ZERO;
- }
- *result = GL_ZERO;
-
- helper_->CreateStreamTextureCHROMIUM(texture,
- GetResultShmId(),
- GetResultShmOffset());
- WaitForCmd();
- GLuint result_value = *result;
- CheckGLError();
- return result_value;
-}
-
-void GLES2Implementation::DestroyStreamTextureCHROMIUM(GLuint texture) {
- GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] DestroyStreamTextureCHROMIUM("
- << texture << ")");
- TRACE_EVENT0("gpu", "GLES2::DestroyStreamTextureCHROMIUM");
- helper_->DestroyStreamTextureCHROMIUM(texture);
- CheckGLError();
+ helper_->CommandBufferHelper::Flush();
+ return gpu_control_->CreateStreamTexture(texture);
}
void GLES2Implementation::PostSubBufferCHROMIUM(
@@ -3290,7 +3369,8 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) {
<< ", " << id << ")");
// if any outstanding queries INV_OP
- if (current_query_) {
+ QueryMap::iterator it = current_queries_.find(target);
+ if (it != current_queries_.end()) {
SetGLError(
GL_INVALID_OPERATION, "glBeginQueryEXT", "query already in progress");
return;
@@ -3309,7 +3389,9 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) {
if (!query) {
query = query_tracker_->CreateQuery(id, target);
if (!query) {
- MustBeContextLost();
+ SetGLError(GL_OUT_OF_MEMORY,
+ "glBeginQueryEXT",
+ "transfer buffer allocation failed");
return;
}
} else if (query->target() != target) {
@@ -3318,7 +3400,7 @@ void GLES2Implementation::BeginQueryEXT(GLenum target, GLuint id) {
return;
}
- current_query_ = query;
+ current_queries_[target] = query;
query->Begin(this);
CheckGLError();
@@ -3333,19 +3415,15 @@ void GLES2Implementation::EndQueryEXT(GLenum target) {
return;
}
- if (!current_query_) {
+ QueryMap::iterator it = current_queries_.find(target);
+ if (it == current_queries_.end()) {
SetGLError(GL_INVALID_OPERATION, "glEndQueryEXT", "no active query");
return;
}
- if (current_query_->target() != target) {
- SetGLError(GL_INVALID_OPERATION,
- "glEndQueryEXT", "target does not match active query");
- return;
- }
-
- current_query_->End(this);
- current_query_ = NULL;
+ QueryTracker::Query* query = it->second;
+ query->End(this);
+ current_queries_.erase(it);
CheckGLError();
}
@@ -3361,8 +3439,13 @@ void GLES2Implementation::GetQueryivEXT(
SetGLErrorInvalidEnum("glGetQueryivEXT", pname, "pname");
return;
}
- *params = (current_query_ && current_query_->target() == target) ?
- current_query_->id() : 0;
+ QueryMap::iterator it = current_queries_.find(target);
+ if (it != current_queries_.end()) {
+ QueryTracker::Query* query = it->second;
+ *params = query->id();
+ } else {
+ *params = 0;
+ }
GPU_CLIENT_LOG(" " << *params);
CheckGLError();
}
@@ -3380,7 +3463,8 @@ void GLES2Implementation::GetQueryObjectuivEXT(
return;
}
- if (query == current_query_) {
+ QueryMap::iterator it = current_queries_.find(query->target());
+ if (it != current_queries_.end()) {
SetGLError(
GL_INVALID_OPERATION,
"glQueryObjectuivEXT", "query active. Did you to call glEndQueryEXT?");
@@ -3399,8 +3483,7 @@ void GLES2Implementation::GetQueryObjectuivEXT(
if (!query->CheckResultsAvailable(helper_)) {
helper_->WaitForToken(query->token());
if (!query->CheckResultsAvailable(helper_)) {
- // TODO(gman): Speed this up.
- WaitForCmd();
+ FinishHelper();
CHECK(query->CheckResultsAvailable(helper_));
}
}
@@ -3471,6 +3554,11 @@ void GLES2Implementation::DrawElementsInstancedANGLE(
if (primcount == 0) {
return;
}
+ if (vertex_array_object_manager_->bound_element_array_buffer() != 0 &&
+ !ValidateOffset("glDrawElementsInstancedANGLE",
+ reinterpret_cast<GLintptr>(indices))) {
+ return;
+ }
GLuint offset = 0;
bool simulated = false;
if (!vertex_array_object_manager_->SetupSimulatedIndexAndClientSideBuffers(
@@ -3490,12 +3578,66 @@ void GLES2Implementation::GenMailboxCHROMIUM(
<< static_cast<const void*>(mailbox) << ")");
TRACE_EVENT0("gpu", "GLES2::GenMailboxCHROMIUM");
- std::vector<gpu::Mailbox> names;
- if (!gpu_control_->GenerateMailboxNames(1, &names)) {
- SetGLError(GL_OUT_OF_MEMORY, "glGenMailboxCHROMIUM", "Generate failed.");
- return;
- }
- memcpy(mailbox, names[0].name, GL_MAILBOX_SIZE_CHROMIUM);
+ gpu::Mailbox result = gpu::Mailbox::Generate();
+ memcpy(mailbox, result.name, sizeof(result.name));
+}
+
+void GLES2Implementation::ProduceTextureCHROMIUM(GLenum target,
+ const GLbyte* data) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glProduceTextureCHROMIUM("
+ << static_cast<const void*>(data) << ")");
+ const Mailbox& mailbox = *reinterpret_cast<const Mailbox*>(data);
+ DCHECK(mailbox.Verify()) << "ProduceTextureCHROMIUM was passed a "
+ "mailbox that was not generated by "
+ "GenMailboxCHROMIUM.";
+ helper_->ProduceTextureCHROMIUMImmediate(target, data);
+ CheckGLError();
+}
+
+void GLES2Implementation::ProduceTextureDirectCHROMIUM(
+ GLuint texture, GLenum target, const GLbyte* data) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glProduceTextureDirectCHROMIUM("
+ << static_cast<const void*>(data) << ")");
+ const Mailbox& mailbox = *reinterpret_cast<const Mailbox*>(data);
+ DCHECK(mailbox.Verify()) << "ProduceTextureDirectCHROMIUM was passed a "
+ "mailbox that was not generated by "
+ "GenMailboxCHROMIUM.";
+ helper_->ProduceTextureDirectCHROMIUMImmediate(texture, target, data);
+ CheckGLError();
+}
+
+void GLES2Implementation::ConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* data) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glConsumeTextureCHROMIUM("
+ << static_cast<const void*>(data) << ")");
+ const Mailbox& mailbox = *reinterpret_cast<const Mailbox*>(data);
+ DCHECK(mailbox.Verify()) << "ConsumeTextureCHROMIUM was passed a "
+ "mailbox that was not generated by "
+ "GenMailboxCHROMIUM.";
+ helper_->ConsumeTextureCHROMIUMImmediate(target, data);
+ CheckGLError();
+}
+
+GLuint GLES2Implementation::CreateAndConsumeTextureCHROMIUM(
+ GLenum target, const GLbyte* data) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateAndConsumeTextureCHROMIUM("
+ << static_cast<const void*>(data) << ")");
+ const Mailbox& mailbox = *reinterpret_cast<const Mailbox*>(data);
+ DCHECK(mailbox.Verify()) << "CreateAndConsumeTextureCHROMIUM was passed a "
+ "mailbox that was not generated by "
+ "GenMailboxCHROMIUM.";
+ GLuint client_id;
+ GetIdHandler(id_namespaces::kTextures)->MakeIds(this, 0, 1, &client_id);
+ helper_->CreateAndConsumeTextureCHROMIUMImmediate(target,
+ client_id, data);
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
+ CheckGLError();
+ return client_id;
}
void GLES2Implementation::PushGroupMarkerEXT(
@@ -3609,9 +3751,9 @@ void* GLES2Implementation::MapBufferCHROMIUM(GLuint target, GLenum access) {
// with this method of synchronization. Until this is fixed,
// MapBufferCHROMIUM will not block even if the transfer is not ready
// for these calls.
- if (buffer->transfer_ready_token()) {
- helper_->WaitForToken(buffer->transfer_ready_token());
- buffer->set_transfer_ready_token(0);
+ if (buffer->last_usage_token()) {
+ helper_->WaitForToken(buffer->last_usage_token());
+ buffer->set_last_usage_token(0);
}
buffer->set_mapped(true);
@@ -3645,8 +3787,73 @@ GLboolean GLES2Implementation::UnmapBufferCHROMIUM(GLuint target) {
return true;
}
+bool GLES2Implementation::EnsureAsyncUploadSync() {
+ if (async_upload_sync_)
+ return true;
+
+ int32 shm_id;
+ unsigned int shm_offset;
+ void* mem = mapped_memory_->Alloc(sizeof(AsyncUploadSync),
+ &shm_id,
+ &shm_offset);
+ if (!mem)
+ return false;
+
+ async_upload_sync_shm_id_ = shm_id;
+ async_upload_sync_shm_offset_ = shm_offset;
+ async_upload_sync_ = static_cast<AsyncUploadSync*>(mem);
+ async_upload_sync_->Reset();
+
+ return true;
+}
+
+uint32 GLES2Implementation::NextAsyncUploadToken() {
+ async_upload_token_++;
+ if (async_upload_token_ == 0)
+ async_upload_token_++;
+ return async_upload_token_;
+}
+
+void GLES2Implementation::PollAsyncUploads() {
+ if (!async_upload_sync_)
+ return;
+
+ if (helper_->IsContextLost()) {
+ DetachedAsyncUploadMemoryList::iterator it =
+ detached_async_upload_memory_.begin();
+ while (it != detached_async_upload_memory_.end()) {
+ mapped_memory_->Free(it->first);
+ it = detached_async_upload_memory_.erase(it);
+ }
+ return;
+ }
+
+ DetachedAsyncUploadMemoryList::iterator it =
+ detached_async_upload_memory_.begin();
+ while (it != detached_async_upload_memory_.end()) {
+ if (HasAsyncUploadTokenPassed(it->second)) {
+ mapped_memory_->Free(it->first);
+ it = detached_async_upload_memory_.erase(it);
+ } else {
+ break;
+ }
+ }
+}
+
+void GLES2Implementation::FreeAllAsyncUploadBuffers() {
+ // Free all completed unmanaged async uploads buffers.
+ PollAsyncUploads();
+
+ // Synchronously free rest of the unmanaged async upload buffers.
+ if (!detached_async_upload_memory_.empty()) {
+ WaitAllAsyncTexImage2DCHROMIUM();
+ WaitForCmd();
+ PollAsyncUploads();
+ }
+}
+
void GLES2Implementation::AsyncTexImage2DCHROMIUM(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
+ GLenum target, GLint level, GLenum internalformat, GLsizei width,
GLsizei height, GLint border, GLenum format, GLenum type,
const void* pixels) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
@@ -3662,6 +3869,10 @@ void GLES2Implementation::AsyncTexImage2DCHROMIUM(
SetGLError(GL_INVALID_VALUE, "glTexImage2D", "dimension < 0");
return;
}
+ if (border != 0) {
+ SetGLError(GL_INVALID_VALUE, "glTexImage2D", "border != 0");
+ return;
+ }
uint32 size;
uint32 unpadded_row_size;
uint32 padded_row_size;
@@ -3675,8 +3886,13 @@ void GLES2Implementation::AsyncTexImage2DCHROMIUM(
// If there's no data/buffer just issue the AsyncTexImage2D
if (!pixels && !bound_pixel_unpack_transfer_buffer_id_) {
helper_->AsyncTexImage2DCHROMIUM(
- target, level, internalformat, width, height, border, format, type,
- 0, 0);
+ target, level, internalformat, width, height, format, type,
+ 0, 0, 0, 0, 0);
+ return;
+ }
+
+ if (!EnsureAsyncUploadSync()) {
+ SetGLError(GL_OUT_OF_MEMORY, "glTexImage2D", "out of memory");
return;
}
@@ -3689,9 +3905,13 @@ void GLES2Implementation::AsyncTexImage2DCHROMIUM(
bound_pixel_unpack_transfer_buffer_id_,
"glAsyncTexImage2DCHROMIUM", offset, size);
if (buffer && buffer->shm_id() != -1) {
+ uint32 async_token = NextAsyncUploadToken();
+ buffer->set_last_async_upload_token(async_token);
helper_->AsyncTexImage2DCHROMIUM(
- target, level, internalformat, width, height, border, format, type,
- buffer->shm_id(), buffer->shm_offset() + offset);
+ target, level, internalformat, width, height, format, type,
+ buffer->shm_id(), buffer->shm_offset() + offset,
+ async_token,
+ async_upload_sync_shm_id_, async_upload_sync_shm_offset_);
}
}
@@ -3724,6 +3944,11 @@ void GLES2Implementation::AsyncTexSubImage2DCHROMIUM(
return;
}
+ if (!EnsureAsyncUploadSync()) {
+ SetGLError(GL_OUT_OF_MEMORY, "glTexImage2D", "out of memory");
+ return;
+ }
+
// Async uploads require a transfer buffer to be bound.
// TODO(hubbe): Make MapBufferCHROMIUM block if someone tries to re-use
// the buffer before the transfer is finished. (Currently such
@@ -3733,9 +3958,13 @@ void GLES2Implementation::AsyncTexSubImage2DCHROMIUM(
bound_pixel_unpack_transfer_buffer_id_,
"glAsyncTexSubImage2DCHROMIUM", offset, size);
if (buffer && buffer->shm_id() != -1) {
+ uint32 async_token = NextAsyncUploadToken();
+ buffer->set_last_async_upload_token(async_token);
helper_->AsyncTexSubImage2DCHROMIUM(
target, level, xoffset, yoffset, width, height, format, type,
- buffer->shm_id(), buffer->shm_offset() + offset);
+ buffer->shm_id(), buffer->shm_offset() + offset,
+ async_token,
+ async_upload_sync_shm_id_, async_upload_sync_shm_offset_);
}
}
@@ -3747,6 +3976,14 @@ void GLES2Implementation::WaitAsyncTexImage2DCHROMIUM(GLenum target) {
CheckGLError();
}
+void GLES2Implementation::WaitAllAsyncTexImage2DCHROMIUM() {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix()
+ << "] glWaitAllAsyncTexImage2DCHROMIUM()");
+ helper_->WaitAllAsyncTexImage2DCHROMIUM();
+ CheckGLError();
+}
+
GLuint GLES2Implementation::InsertSyncPointCHROMIUM() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glInsertSyncPointCHROMIUM");
@@ -3754,8 +3991,10 @@ GLuint GLES2Implementation::InsertSyncPointCHROMIUM() {
return gpu_control_->InsertSyncPoint();
}
-GLuint GLES2Implementation::CreateImageCHROMIUMHelper(
- GLsizei width, GLsizei height, GLenum internalformat) {
+GLuint GLES2Implementation::CreateImageCHROMIUMHelper(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage) {
if (width <= 0) {
SetGLError(GL_INVALID_VALUE, "glCreateImageCHROMIUM", "width <= 0");
return 0;
@@ -3771,7 +4010,7 @@ GLuint GLES2Implementation::CreateImageCHROMIUMHelper(
// Create new buffer.
GLuint buffer_id = gpu_memory_buffer_tracker_->CreateBuffer(
- width, height, internalformat);
+ width, height, internalformat, usage);
if (buffer_id == 0) {
SetGLError(GL_OUT_OF_MEMORY, "glCreateImageCHROMIUM", "out of GPU memory.");
return 0;
@@ -3779,14 +4018,18 @@ GLuint GLES2Implementation::CreateImageCHROMIUMHelper(
return buffer_id;
}
-GLuint GLES2Implementation::CreateImageCHROMIUM(
- GLsizei width, GLsizei height, GLenum internalformat) {
+GLuint GLES2Implementation::CreateImageCHROMIUM(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateImageCHROMIUM("
- << width << ", "
- << height << ", "
- << GLES2Util::GetStringTextureInternalFormat(internalformat) << ")");
- GLuint image_id = CreateImageCHROMIUMHelper(width, height, internalformat);
+ GPU_CLIENT_LOG(
+ "[" << GetLogPrefix() << "] glCreateImageCHROMIUM(" << width << ", "
+ << height << ", "
+ << GLES2Util::GetStringTextureInternalFormat(internalformat) << ", "
+ << GLES2Util::GetStringTextureInternalFormat(usage) << ")");
+ GLuint image_id =
+ CreateImageCHROMIUMHelper(width, height, internalformat, usage);
CheckGLError();
return image_id;
}
@@ -3837,49 +4080,28 @@ void GLES2Implementation::UnmapImageCHROMIUM(GLuint image_id) {
CheckGLError();
}
-void* GLES2Implementation::MapImageCHROMIUMHelper(GLuint image_id,
- GLenum access) {
+void* GLES2Implementation::MapImageCHROMIUMHelper(GLuint image_id) {
gfx::GpuMemoryBuffer* gpu_buffer = gpu_memory_buffer_tracker_->GetBuffer(
image_id);
if (!gpu_buffer) {
SetGLError(GL_INVALID_OPERATION, "glMapImageCHROMIUM", "invalid image");
return NULL;
}
- gfx::GpuMemoryBuffer::AccessMode mode;
- switch(access) {
- case GL_WRITE_ONLY:
- mode = gfx::GpuMemoryBuffer::WRITE_ONLY;
- break;
- case GL_READ_ONLY:
- mode = gfx::GpuMemoryBuffer::READ_ONLY;
- break;
- case GL_READ_WRITE:
- mode = gfx::GpuMemoryBuffer::READ_WRITE;
- break;
- default:
- SetGLError(GL_INVALID_ENUM, "glMapImageCHROMIUM",
- "invalid GPU access mode");
- return NULL;
- }
if (gpu_buffer->IsMapped()) {
SetGLError(GL_INVALID_OPERATION, "glMapImageCHROMIUM", "already mapped");
return NULL;
}
- void* mapped_buffer = NULL;
- gpu_buffer->Map(mode, &mapped_buffer);
- return mapped_buffer;
+ return gpu_buffer->Map();
}
-void* GLES2Implementation::MapImageCHROMIUM(
- GLuint image_id, GLenum access) {
+void* GLES2Implementation::MapImageCHROMIUM(GLuint image_id) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapImageCHROMIUM("
- << image_id << ", "
- << GLES2Util::GetStringEnum(access) << ")");
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glMapImageCHROMIUM(" << image_id
+ << ")");
- void* mapped = MapImageCHROMIUMHelper(image_id, access);
+ void* mapped = MapImageCHROMIUMHelper(image_id);
CheckGLError();
return mapped;
}
@@ -3900,6 +4122,12 @@ void GLES2Implementation::GetImageParameterivCHROMIUMHelper(
return;
}
+ if (!gpu_buffer->IsMapped()) {
+ SetGLError(
+ GL_INVALID_OPERATION, "glGetImageParameterivCHROMIUM", "not mapped");
+ return;
+ }
+
*params = gpu_buffer->GetStride();
}
@@ -3915,6 +4143,30 @@ void GLES2Implementation::GetImageParameterivCHROMIUM(
CheckGLError();
}
+bool GLES2Implementation::ValidateSize(const char* func, GLsizeiptr size) {
+ if (size < 0) {
+ SetGLError(GL_INVALID_VALUE, func, "size < 0");
+ return false;
+ }
+ if (!FitInt32NonNegative<GLsizeiptr>(size)) {
+ SetGLError(GL_INVALID_OPERATION, func, "size more than 32-bit");
+ return false;
+ }
+ return true;
+}
+
+bool GLES2Implementation::ValidateOffset(const char* func, GLintptr offset) {
+ if (offset < 0) {
+ SetGLError(GL_INVALID_VALUE, func, "offset < 0");
+ return false;
+ }
+ if (!FitInt32NonNegative<GLintptr>(offset)) {
+ SetGLError(GL_INVALID_OPERATION, func, "offset more than 32-bit");
+ return false;
+ }
+ return true;
+}
+
// Include the auto-generated part of this file. We split this because it means
// we can easily edit the non-auto generated parts right here in this file
// instead of having to edit some template or the code generator.
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation.h b/chromium/gpu/command_buffer/client/gles2_implementation.h
index 6b6877f18b3..55d42d5a436 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation.h
+++ b/chromium/gpu/command_buffer/client/gles2_implementation.h
@@ -110,6 +110,12 @@ namespace gles2 {
class ImageFactory;
class VertexArrayObjectManager;
+class GLES2ImplementationErrorMessageCallback {
+ public:
+ virtual ~GLES2ImplementationErrorMessageCallback() { }
+ virtual void OnErrorMessage(const char* msg, int id) = 0;
+};
+
// This class emulates GLES2 over command buffers. It can be used by a client
// program so that the program does not need deal with shared memory and command
// buffer management. See gl2_lib.h. Note that there is a performance gain to
@@ -123,11 +129,6 @@ class GLES2_IMPL_EXPORT GLES2Implementation
enum MappedMemoryLimit {
kNoLimit = MappedMemoryManager::kNoLimit,
};
- class ErrorMessageCallback {
- public:
- virtual ~ErrorMessageCallback() { }
- virtual void OnErrorMessage(const char* msg, int id) = 0;
- };
// Stores GL state that never changes.
struct GLES2_IMPL_EXPORT GLStaticState {
@@ -148,6 +149,7 @@ class GLES2_IMPL_EXPORT GLES2Implementation
GLint max_vertex_uniform_vectors;
GLint num_compressed_texture_formats;
GLint num_shader_binary_formats;
+ GLint bind_generates_resource_chromium;
};
IntState int_state;
@@ -180,13 +182,12 @@ class GLES2_IMPL_EXPORT GLES2Implementation
// Number of swap buffers allowed before waiting.
static const size_t kMaxSwapBuffers = 2;
- GLES2Implementation(
- GLES2CmdHelper* helper,
- ShareGroup* share_group,
- TransferBufferInterface* transfer_buffer,
- bool bind_generates_resource,
- bool free_everything_when_invisible,
- GpuControl* gpu_control);
+ GLES2Implementation(GLES2CmdHelper* helper,
+ ShareGroup* share_group,
+ TransferBufferInterface* transfer_buffer,
+ bool bind_generates_resource,
+ bool lose_context_when_out_of_memory,
+ GpuControl* gpu_control);
virtual ~GLES2Implementation();
@@ -217,10 +218,15 @@ class GLES2_IMPL_EXPORT GLES2Implementation
// ContextSupport implementation.
virtual void Swap() OVERRIDE;
- virtual void PartialSwapBuffers(gfx::Rect sub_buffer) OVERRIDE;
+ virtual void PartialSwapBuffers(const gfx::Rect& sub_buffer) OVERRIDE;
virtual void SetSwapBuffersCompleteCallback(
const base::Closure& swap_buffers_complete_callback)
OVERRIDE;
+ virtual void ScheduleOverlayPlane(int plane_z_order,
+ gfx::OverlayTransform plane_transform,
+ unsigned overlay_texture_id,
+ const gfx::Rect& display_bounds,
+ const gfx::RectF& uv_rect) OVERRIDE;
void GetProgramInfoCHROMIUMHelper(GLuint program, std::vector<int8>* result);
GLint GetAttribLocationHelper(GLuint program, const char* name);
@@ -241,10 +247,9 @@ class GLES2_IMPL_EXPORT GLES2Implementation
virtual void SignalQuery(uint32 query,
const base::Closure& callback) OVERRIDE;
virtual void SetSurfaceVisible(bool visible) OVERRIDE;
- virtual void SendManagedMemoryStats(const ManagedMemoryStats& stats)
- OVERRIDE;
- void SetErrorMessageCallback(ErrorMessageCallback* callback) {
+ void SetErrorMessageCallback(
+ GLES2ImplementationErrorMessageCallback* callback) {
error_message_callback_ = callback;
}
@@ -260,6 +265,10 @@ class GLES2_IMPL_EXPORT GLES2Implementation
return gpu_control_;
}
+ ShareGroupContextData* share_group_context_data() {
+ return &share_group_context_data_;
+ }
+
private:
friend class GLES2ImplementationTest;
friend class VertexArrayObjectManager;
@@ -491,12 +500,14 @@ class GLES2_IMPL_EXPORT GLES2Implementation
bool IsRenderbufferReservedId(GLuint id) { return false; }
bool IsTextureReservedId(GLuint id) { return false; }
bool IsVertexArrayReservedId(GLuint id) { return false; }
+ bool IsProgramReservedId(GLuint id) { return false; }
bool BindBufferHelper(GLenum target, GLuint texture);
bool BindFramebufferHelper(GLenum target, GLuint texture);
bool BindRenderbufferHelper(GLenum target, GLuint texture);
bool BindTextureHelper(GLenum target, GLuint texture);
- bool BindVertexArrayHelper(GLuint array);
+ bool BindVertexArrayOESHelper(GLuint array);
+ bool UseProgramHelper(GLuint program);
void GenBuffersHelper(GLsizei n, const GLuint* buffers);
void GenFramebuffersHelper(GLsizei n, const GLuint* framebuffers);
@@ -532,10 +543,12 @@ class GLES2_IMPL_EXPORT GLES2Implementation
GLenum target, GLintptr offset, GLsizeiptr size, const void* data,
ScopedTransferBufferPtr* buffer);
- GLuint CreateImageCHROMIUMHelper(
- GLsizei width, GLsizei height, GLenum internalformat);
+ GLuint CreateImageCHROMIUMHelper(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage);
void DestroyImageCHROMIUMHelper(GLuint image_id);
- void* MapImageCHROMIUMHelper(GLuint image_id, GLenum access);
+ void* MapImageCHROMIUMHelper(GLuint image_id);
void UnmapImageCHROMIUMHelper(GLuint image_id);
void GetImageParameterivCHROMIUMHelper(
GLuint image_id, GLenum pname, GLint* params);
@@ -582,15 +595,50 @@ class GLES2_IMPL_EXPORT GLES2Implementation
void FinishHelper();
- // Asserts that the context is lost.
- // NOTE: This is an expensive call and should only be called
- // for error checking.
- bool MustBeContextLost();
-
void RunIfContextNotLost(const base::Closure& callback);
void OnSwapBuffersComplete();
+ // Validate if an offset is valid, i.e., non-negative and fit into 32-bit.
+ // If not, generate an approriate error, and return false.
+ bool ValidateOffset(const char* func, GLintptr offset);
+
+ // Validate if a size is valid, i.e., non-negative and fit into 32-bit.
+ // If not, generate an approriate error, and return false.
+ bool ValidateSize(const char* func, GLsizeiptr offset);
+
+ // Remove the transfer buffer from the buffer tracker. For buffers used
+ // asynchronously the memory is free:ed if the upload has completed. For
+ // other buffers, the memory is either free:ed immediately or free:ed pending
+ // a token.
+ void RemoveTransferBuffer(BufferTracker::Buffer* buffer);
+
+ // Returns true if the async upload token has passed.
+ //
+ // NOTE: This will detect wrapped async tokens by checking if the most
+ // significant bit of async token to check is 1 but the last read is 0, i.e.
+ // the uint32 wrapped.
+ bool HasAsyncUploadTokenPassed(uint32 token) const {
+ return async_upload_sync_->HasAsyncUploadTokenPassed(token);
+ }
+
+ // Get the next async upload token.
+ uint32 NextAsyncUploadToken();
+
+ // Ensure that the shared memory used for synchronizing async upload tokens
+ // has been mapped.
+ //
+ // Returns false on error, true on success.
+ bool EnsureAsyncUploadSync();
+
+ // Checks the last read asynchronously upload token and frees any unmanaged
+ // transfer buffer that has its async token passed.
+ void PollAsyncUploads();
+
+ // Free every async upload buffer. If some async upload buffer is still in use
+ // wait for them to finish before freeing.
+ void FreeAllAsyncUploadBuffers();
+
bool GetBoundPixelTransferBuffer(
GLenum target, const char* function_name, GLuint* buffer_id);
BufferTracker::Buffer* GetBoundPixelUnpackTransferBufferIfValid(
@@ -663,6 +711,18 @@ class GLES2_IMPL_EXPORT GLES2Implementation
GLuint bound_pixel_pack_transfer_buffer_id_;
GLuint bound_pixel_unpack_transfer_buffer_id_;
+ // The current asynchronous pixel buffer upload token.
+ uint32 async_upload_token_;
+
+ // The shared memory used for synchronizing asynchronous upload tokens.
+ AsyncUploadSync* async_upload_sync_;
+ int32 async_upload_sync_shm_id_;
+ unsigned int async_upload_sync_shm_offset_;
+
+ // Unmanaged pixel transfer buffer memory pending asynchronous upload token.
+ typedef std::list<std::pair<void*, uint32> > DetachedAsyncUploadMemoryList;
+ DetachedAsyncUploadMemoryList detached_async_upload_memory_;
+
// Client side management for vertex array objects. Needed to correctly
// track client side arrays.
scoped_ptr<VertexArrayObjectManager> vertex_array_object_manager_;
@@ -675,6 +735,9 @@ class GLES2_IMPL_EXPORT GLES2Implementation
// Whether or not to print debugging info.
bool debug_;
+ // When true, the context is lost when a GL_OUT_OF_MEMORY error occurs.
+ bool lose_context_when_out_of_memory_;
+
// Used to check for single threaded access.
int use_count_;
@@ -696,26 +759,24 @@ class GLES2_IMPL_EXPORT GLES2Implementation
scoped_ptr<MappedMemoryManager> mapped_memory_;
scoped_refptr<ShareGroup> share_group_;
+ ShareGroupContextData share_group_context_data_;
scoped_ptr<QueryTracker> query_tracker_;
- QueryTracker::Query* current_query_;
+ typedef std::map<GLuint, QueryTracker::Query*> QueryMap;
+ QueryMap current_queries_;
scoped_ptr<BufferTracker> buffer_tracker_;
scoped_ptr<GpuMemoryBufferTracker> gpu_memory_buffer_tracker_;
- ErrorMessageCallback* error_message_callback_;
+ GLES2ImplementationErrorMessageCallback* error_message_callback_;
scoped_ptr<std::string> current_trace_name_;
GpuControl* gpu_control_;
- bool surface_visible_;
- bool free_everything_when_invisible_;
-
Capabilities capabilities_;
- bool use_echo_for_swap_ack_;
base::Closure swap_buffers_complete_callback_;
base::WeakPtrFactory<GLES2Implementation> weak_ptr_factory_;
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation_autogen.h b/chromium/gpu/command_buffer/client/gles2_implementation_autogen.h
index 5703956e415..db6760e162f 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file is included by gles2_implementation.h to declare the
@@ -15,8 +17,9 @@ virtual void ActiveTexture(GLenum texture) OVERRIDE;
virtual void AttachShader(GLuint program, GLuint shader) OVERRIDE;
-virtual void BindAttribLocation(
- GLuint program, GLuint index, const char* name) OVERRIDE;
+virtual void BindAttribLocation(GLuint program,
+ GLuint index,
+ const char* name) OVERRIDE;
virtual void BindBuffer(GLenum target, GLuint buffer) OVERRIDE;
@@ -26,8 +29,10 @@ virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) OVERRIDE;
virtual void BindTexture(GLenum target, GLuint texture) OVERRIDE;
-virtual void BlendColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) OVERRIDE;
+virtual void BlendColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) OVERRIDE;
virtual void BlendEquation(GLenum mode) OVERRIDE;
@@ -35,49 +40,77 @@ virtual void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) OVERRIDE;
virtual void BlendFunc(GLenum sfactor, GLenum dfactor) OVERRIDE;
-virtual void BlendFuncSeparate(
- GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) OVERRIDE;
+virtual void BlendFuncSeparate(GLenum srcRGB,
+ GLenum dstRGB,
+ GLenum srcAlpha,
+ GLenum dstAlpha) OVERRIDE;
-virtual void BufferData(
- GLenum target, GLsizeiptr size, const void* data, GLenum usage) OVERRIDE;
+virtual void BufferData(GLenum target,
+ GLsizeiptr size,
+ const void* data,
+ GLenum usage) OVERRIDE;
-virtual void BufferSubData(
- GLenum target, GLintptr offset, GLsizeiptr size,
- const void* data) OVERRIDE;
+virtual void BufferSubData(GLenum target,
+ GLintptr offset,
+ GLsizeiptr size,
+ const void* data) OVERRIDE;
virtual GLenum CheckFramebufferStatus(GLenum target) OVERRIDE;
virtual void Clear(GLbitfield mask) OVERRIDE;
-virtual void ClearColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) OVERRIDE;
+virtual void ClearColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) OVERRIDE;
virtual void ClearDepthf(GLclampf depth) OVERRIDE;
virtual void ClearStencil(GLint s) OVERRIDE;
-virtual void ColorMask(
- GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) OVERRIDE;
+virtual void ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) OVERRIDE;
virtual void CompileShader(GLuint shader) OVERRIDE;
-virtual void CompressedTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLsizei imageSize,
- const void* data) OVERRIDE;
-
-virtual void CompressedTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize,
- const void* data) OVERRIDE;
-
-virtual void CopyTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border) OVERRIDE;
-
-virtual void CopyTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y,
- GLsizei width, GLsizei height) OVERRIDE;
+virtual void CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void* data) OVERRIDE;
+
+virtual void CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void* data) OVERRIDE;
+
+virtual void CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border) OVERRIDE;
+
+virtual void CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual GLuint CreateProgram() OVERRIDE;
@@ -87,13 +120,12 @@ virtual void CullFace(GLenum mode) OVERRIDE;
virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) OVERRIDE;
-virtual void DeleteFramebuffers(
- GLsizei n, const GLuint* framebuffers) OVERRIDE;
+virtual void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) OVERRIDE;
virtual void DeleteProgram(GLuint program) OVERRIDE;
-virtual void DeleteRenderbuffers(
- GLsizei n, const GLuint* renderbuffers) OVERRIDE;
+virtual void DeleteRenderbuffers(GLsizei n,
+ const GLuint* renderbuffers) OVERRIDE;
virtual void DeleteShader(GLuint shader) OVERRIDE;
@@ -111,8 +143,10 @@ virtual void Disable(GLenum cap) OVERRIDE;
virtual void DrawArrays(GLenum mode, GLint first, GLsizei count) OVERRIDE;
-virtual void DrawElements(
- GLenum mode, GLsizei count, GLenum type, const void* indices) OVERRIDE;
+virtual void DrawElements(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices) OVERRIDE;
virtual void Enable(GLenum cap) OVERRIDE;
@@ -120,13 +154,16 @@ virtual void Finish() OVERRIDE;
virtual void Flush() OVERRIDE;
-virtual void FramebufferRenderbuffer(
- GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer) OVERRIDE;
+virtual void FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer) OVERRIDE;
-virtual void FramebufferTexture2D(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level) OVERRIDE;
+virtual void FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level) OVERRIDE;
virtual void FrontFace(GLenum mode) OVERRIDE;
@@ -140,73 +177,97 @@ virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) OVERRIDE;
virtual void GenTextures(GLsizei n, GLuint* textures) OVERRIDE;
-virtual void GetActiveAttrib(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) OVERRIDE;
-
-virtual void GetActiveUniform(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) OVERRIDE;
-
-virtual void GetAttachedShaders(
- GLuint program, GLsizei maxcount, GLsizei* count,
- GLuint* shaders) OVERRIDE;
+virtual void GetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) OVERRIDE;
+
+virtual void GetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) OVERRIDE;
+
+virtual void GetAttachedShaders(GLuint program,
+ GLsizei maxcount,
+ GLsizei* count,
+ GLuint* shaders) OVERRIDE;
virtual GLint GetAttribLocation(GLuint program, const char* name) OVERRIDE;
virtual void GetBooleanv(GLenum pname, GLboolean* params) OVERRIDE;
-virtual void GetBufferParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetBufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual GLenum GetError() OVERRIDE;
virtual void GetFloatv(GLenum pname, GLfloat* params) OVERRIDE;
-virtual void GetFramebufferAttachmentParameteriv(
- GLenum target, GLenum attachment, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual void GetIntegerv(GLenum pname, GLint* params) OVERRIDE;
-virtual void GetProgramiv(
- GLuint program, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetProgramiv(GLuint program, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetProgramInfoLog(
- GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) OVERRIDE;
+virtual void GetProgramInfoLog(GLuint program,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) OVERRIDE;
-virtual void GetRenderbufferParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetShaderInfoLog(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) OVERRIDE;
+virtual void GetShaderInfoLog(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) OVERRIDE;
-virtual void GetShaderPrecisionFormat(
- GLenum shadertype, GLenum precisiontype, GLint* range,
- GLint* precision) OVERRIDE;
+virtual void GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint* range,
+ GLint* precision) OVERRIDE;
-virtual void GetShaderSource(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) OVERRIDE;
+virtual void GetShaderSource(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) OVERRIDE;
virtual const GLubyte* GetString(GLenum name) OVERRIDE;
-virtual void GetTexParameterfv(
- GLenum target, GLenum pname, GLfloat* params) OVERRIDE;
+virtual void GetTexParameterfv(GLenum target,
+ GLenum pname,
+ GLfloat* params) OVERRIDE;
-virtual void GetTexParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetTexParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
-virtual void GetUniformfv(
- GLuint program, GLint location, GLfloat* params) OVERRIDE;
+virtual void GetUniformfv(GLuint program,
+ GLint location,
+ GLfloat* params) OVERRIDE;
-virtual void GetUniformiv(
- GLuint program, GLint location, GLint* params) OVERRIDE;
+virtual void GetUniformiv(GLuint program,
+ GLint location,
+ GLint* params) OVERRIDE;
virtual GLint GetUniformLocation(GLuint program, const char* name) OVERRIDE;
-virtual void GetVertexAttribPointerv(
- GLuint index, GLenum pname, void** pointer) OVERRIDE;
+virtual void GetVertexAttribPointerv(GLuint index,
+ GLenum pname,
+ void** pointer) OVERRIDE;
virtual void Hint(GLenum target, GLenum mode) OVERRIDE;
@@ -232,27 +293,35 @@ virtual void PixelStorei(GLenum pname, GLint param) OVERRIDE;
virtual void PolygonOffset(GLfloat factor, GLfloat units) OVERRIDE;
-virtual void ReadPixels(
- GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
- void* pixels) OVERRIDE;
+virtual void ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void* pixels) OVERRIDE;
virtual void ReleaseShaderCompiler() OVERRIDE;
-virtual void RenderbufferStorage(
- GLenum target, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
+virtual void RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual void SampleCoverage(GLclampf value, GLboolean invert) OVERRIDE;
virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
-virtual void ShaderBinary(
- GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary,
- GLsizei length) OVERRIDE;
+virtual void ShaderBinary(GLsizei n,
+ const GLuint* shaders,
+ GLenum binaryformat,
+ const void* binary,
+ GLsizei length) OVERRIDE;
-virtual void ShaderSource(
- GLuint shader, GLsizei count, const GLchar* const* str,
- const GLint* length) OVERRIDE;
+virtual void ShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar* const* str,
+ const GLint* length) OVERRIDE;
virtual void ShallowFinishCHROMIUM() OVERRIDE;
@@ -260,8 +329,10 @@ virtual void ShallowFlushCHROMIUM() OVERRIDE;
virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) OVERRIDE;
-virtual void StencilFuncSeparate(
- GLenum face, GLenum func, GLint ref, GLuint mask) OVERRIDE;
+virtual void StencilFuncSeparate(GLenum face,
+ GLenum func,
+ GLint ref,
+ GLuint mask) OVERRIDE;
virtual void StencilMask(GLuint mask) OVERRIDE;
@@ -269,83 +340,108 @@ virtual void StencilMaskSeparate(GLenum face, GLuint mask) OVERRIDE;
virtual void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) OVERRIDE;
-virtual void StencilOpSeparate(
- GLenum face, GLenum fail, GLenum zfail, GLenum zpass) OVERRIDE;
+virtual void StencilOpSeparate(GLenum face,
+ GLenum fail,
+ GLenum zfail,
+ GLenum zpass) OVERRIDE;
-virtual void TexImage2D(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) OVERRIDE;
+virtual void TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
-virtual void TexParameterf(
- GLenum target, GLenum pname, GLfloat param) OVERRIDE;
+virtual void TexParameterf(GLenum target, GLenum pname, GLfloat param) OVERRIDE;
-virtual void TexParameterfv(
- GLenum target, GLenum pname, const GLfloat* params) OVERRIDE;
+virtual void TexParameterfv(GLenum target,
+ GLenum pname,
+ const GLfloat* params) OVERRIDE;
virtual void TexParameteri(GLenum target, GLenum pname, GLint param) OVERRIDE;
-virtual void TexParameteriv(
- GLenum target, GLenum pname, const GLint* params) OVERRIDE;
+virtual void TexParameteriv(GLenum target,
+ GLenum pname,
+ const GLint* params) OVERRIDE;
-virtual void TexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* pixels) OVERRIDE;
+virtual void TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
virtual void Uniform1f(GLint location, GLfloat x) OVERRIDE;
-virtual void Uniform1fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform1fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform1i(GLint location, GLint x) OVERRIDE;
-virtual void Uniform1iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform1iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
virtual void Uniform2f(GLint location, GLfloat x, GLfloat y) OVERRIDE;
-virtual void Uniform2fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform2fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform2i(GLint location, GLint x, GLint y) OVERRIDE;
-virtual void Uniform2iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform2iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void Uniform3f(
- GLint location, GLfloat x, GLfloat y, GLfloat z) OVERRIDE;
+virtual void Uniform3f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) OVERRIDE;
-virtual void Uniform3fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform3fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform3i(GLint location, GLint x, GLint y, GLint z) OVERRIDE;
-virtual void Uniform3iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform3iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void Uniform4f(
- GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) OVERRIDE;
+virtual void Uniform4f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) OVERRIDE;
-virtual void Uniform4fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform4fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
-virtual void Uniform4i(
- GLint location, GLint x, GLint y, GLint z, GLint w) OVERRIDE;
+virtual void Uniform4i(GLint location,
+ GLint x,
+ GLint y,
+ GLint z,
+ GLint w) OVERRIDE;
-virtual void Uniform4iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform4iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void UniformMatrix2fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
+virtual void UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
-virtual void UniformMatrix3fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
+virtual void UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
-virtual void UniformMatrix4fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
+virtual void UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
virtual void UseProgram(GLuint program) OVERRIDE;
@@ -359,43 +455,65 @@ virtual void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) OVERRIDE;
virtual void VertexAttrib2fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttrib3f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z) OVERRIDE;
+virtual void VertexAttrib3f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) OVERRIDE;
virtual void VertexAttrib3fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttrib4f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) OVERRIDE;
+virtual void VertexAttrib4f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) OVERRIDE;
virtual void VertexAttrib4fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttribPointer(
- GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
- const void* ptr) OVERRIDE;
-
-virtual void Viewport(
- GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
-
-virtual void BlitFramebufferCHROMIUM(
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0,
- GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask,
- GLenum filter) OVERRIDE;
-
-virtual void RenderbufferStorageMultisampleCHROMIUM(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
-
-virtual void RenderbufferStorageMultisampleEXT(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
-
-virtual void FramebufferTexture2DMultisampleEXT(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLsizei samples) OVERRIDE;
-
-virtual void TexStorage2DEXT(
- GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
- GLsizei height) OVERRIDE;
+virtual void VertexAttribPointer(GLuint indx,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void* ptr) OVERRIDE;
+
+virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
+
+virtual void BlitFramebufferCHROMIUM(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter) OVERRIDE;
+
+virtual void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
+
+virtual void RenderbufferStorageMultisampleEXT(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
+
+virtual void FramebufferTexture2DMultisampleEXT(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level,
+ GLsizei samples) OVERRIDE;
+
+virtual void TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalFormat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual void GenQueriesEXT(GLsizei n, GLuint* queries) OVERRIDE;
@@ -407,14 +525,14 @@ virtual void BeginQueryEXT(GLenum target, GLuint id) OVERRIDE;
virtual void EndQueryEXT(GLenum target) OVERRIDE;
-virtual void GetQueryivEXT(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetQueryObjectuivEXT(
- GLuint id, GLenum pname, GLuint* params) OVERRIDE;
+virtual void GetQueryObjectuivEXT(GLuint id,
+ GLenum pname,
+ GLuint* params) OVERRIDE;
-virtual void InsertEventMarkerEXT(
- GLsizei length, const GLchar* marker) OVERRIDE;
+virtual void InsertEventMarkerEXT(GLsizei length,
+ const GLchar* marker) OVERRIDE;
virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) OVERRIDE;
@@ -430,17 +548,23 @@ virtual void BindVertexArrayOES(GLuint array) OVERRIDE;
virtual void SwapBuffers() OVERRIDE;
-virtual GLuint GetMaxValueInBufferCHROMIUM(
- GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) OVERRIDE;
+virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+ GLsizei count,
+ GLenum type,
+ GLuint offset) OVERRIDE;
-virtual void GenSharedIdsCHROMIUM(
- GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) OVERRIDE;
+virtual void GenSharedIdsCHROMIUM(GLuint namespace_id,
+ GLuint id_offset,
+ GLsizei n,
+ GLuint* ids) OVERRIDE;
-virtual void DeleteSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) OVERRIDE;
+virtual void DeleteSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) OVERRIDE;
-virtual void RegisterSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) OVERRIDE;
+virtual void RegisterSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) OVERRIDE;
virtual GLboolean EnableFeatureCHROMIUM(const char* feature) OVERRIDE;
@@ -448,23 +572,32 @@ virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) OVERRIDE;
virtual GLboolean UnmapBufferCHROMIUM(GLuint target) OVERRIDE;
-virtual void* MapImageCHROMIUM(GLuint image_id, GLenum access) OVERRIDE;
+virtual void* MapImageCHROMIUM(GLuint image_id) OVERRIDE;
virtual void UnmapImageCHROMIUM(GLuint image_id) OVERRIDE;
-virtual void* MapBufferSubDataCHROMIUM(
- GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) OVERRIDE;
+virtual void* MapBufferSubDataCHROMIUM(GLuint target,
+ GLintptr offset,
+ GLsizeiptr size,
+ GLenum access) OVERRIDE;
virtual void UnmapBufferSubDataCHROMIUM(const void* mem) OVERRIDE;
-virtual void* MapTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, GLenum access) OVERRIDE;
+virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLenum access) OVERRIDE;
virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) OVERRIDE;
-virtual void ResizeCHROMIUM(
- GLuint width, GLuint height, GLfloat scale_factor) OVERRIDE;
+virtual void ResizeCHROMIUM(GLuint width,
+ GLuint height,
+ GLfloat scale_factor) OVERRIDE;
virtual const GLchar* GetRequestableExtensionsCHROMIUM() OVERRIDE;
@@ -472,58 +605,83 @@ virtual void RequestExtensionCHROMIUM(const char* extension) OVERRIDE;
virtual void RateLimitOffscreenContextCHROMIUM() OVERRIDE;
-virtual void GetMultipleIntegervCHROMIUM(
- const GLenum* pnames, GLuint count, GLint* results,
- GLsizeiptr size) OVERRIDE;
+virtual void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+ GLuint count,
+ GLint* results,
+ GLsizeiptr size) OVERRIDE;
-virtual void GetProgramInfoCHROMIUM(
- GLuint program, GLsizei bufsize, GLsizei* size, void* info) OVERRIDE;
+virtual void GetProgramInfoCHROMIUM(GLuint program,
+ GLsizei bufsize,
+ GLsizei* size,
+ void* info) OVERRIDE;
virtual GLuint CreateStreamTextureCHROMIUM(GLuint texture) OVERRIDE;
-virtual void DestroyStreamTextureCHROMIUM(GLuint texture) OVERRIDE;
-
-virtual GLuint CreateImageCHROMIUM(
- GLsizei width, GLsizei height, GLenum internalformat) OVERRIDE;
+virtual GLuint CreateImageCHROMIUM(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage) OVERRIDE;
virtual void DestroyImageCHROMIUM(GLuint image_id) OVERRIDE;
-virtual void GetImageParameterivCHROMIUM(
- GLuint image_id, GLenum pname, GLint* params) OVERRIDE;
-
-virtual void GetTranslatedShaderSourceANGLE(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) OVERRIDE;
-
-virtual void PostSubBufferCHROMIUM(
- GLint x, GLint y, GLint width, GLint height) OVERRIDE;
-
-virtual void TexImageIOSurface2DCHROMIUM(
- GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
- GLuint plane) OVERRIDE;
-
-virtual void CopyTextureCHROMIUM(
- GLenum target, GLenum source_id, GLenum dest_id, GLint level,
- GLint internalformat, GLenum dest_type) OVERRIDE;
-
-virtual void DrawArraysInstancedANGLE(
- GLenum mode, GLint first, GLsizei count, GLsizei primcount) OVERRIDE;
-
-virtual void DrawElementsInstancedANGLE(
- GLenum mode, GLsizei count, GLenum type, const void* indices,
- GLsizei primcount) OVERRIDE;
+virtual void GetImageParameterivCHROMIUM(GLuint image_id,
+ GLenum pname,
+ GLint* params) OVERRIDE;
+
+virtual void GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) OVERRIDE;
+
+virtual void PostSubBufferCHROMIUM(GLint x,
+ GLint y,
+ GLint width,
+ GLint height) OVERRIDE;
+
+virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLuint ioSurfaceId,
+ GLuint plane) OVERRIDE;
+
+virtual void CopyTextureCHROMIUM(GLenum target,
+ GLenum source_id,
+ GLenum dest_id,
+ GLint level,
+ GLint internalformat,
+ GLenum dest_type) OVERRIDE;
+
+virtual void DrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount) OVERRIDE;
+
+virtual void DrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices,
+ GLsizei primcount) OVERRIDE;
virtual void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) OVERRIDE;
virtual void GenMailboxCHROMIUM(GLbyte* mailbox) OVERRIDE;
-virtual void ProduceTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) OVERRIDE;
+virtual void ProduceTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
-virtual void ConsumeTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) OVERRIDE;
+virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
+ GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
-virtual void BindUniformLocationCHROMIUM(
- GLuint program, GLint location, const char* name) OVERRIDE;
+virtual void ConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+
+virtual GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+
+virtual void BindUniformLocationCHROMIUM(GLuint program,
+ GLint location,
+ const char* name) OVERRIDE;
virtual void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) OVERRIDE;
@@ -533,19 +691,33 @@ virtual void TraceBeginCHROMIUM(const char* name) OVERRIDE;
virtual void TraceEndCHROMIUM() OVERRIDE;
-virtual void AsyncTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* data) OVERRIDE;
-
-virtual void AsyncTexImage2DCHROMIUM(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) OVERRIDE;
+virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* data) OVERRIDE;
+
+virtual void AsyncTexImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) OVERRIDE;
-virtual void DiscardFramebufferEXT(
- GLenum target, GLsizei count, const GLenum* attachments) OVERRIDE;
+virtual void WaitAllAsyncTexImage2DCHROMIUM() OVERRIDE;
+
+virtual void DiscardFramebufferEXT(GLenum target,
+ GLsizei count,
+ const GLenum* attachments) OVERRIDE;
virtual void LoseContextCHROMIUM(GLenum current, GLenum other) OVERRIDE;
@@ -557,5 +729,16 @@ virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) OVERRIDE;
virtual void DiscardBackbufferCHROMIUM() OVERRIDE;
-#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
+virtual void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+ GLenum plane_transform,
+ GLuint overlay_texture_id,
+ GLint bounds_x,
+ GLint bounds_y,
+ GLint bounds_width,
+ GLint bounds_height,
+ GLfloat uv_x,
+ GLfloat uv_y,
+ GLfloat uv_width,
+ GLfloat uv_height) OVERRIDE;
+#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/chromium/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
index 3b92eb2933e..4f721a8d1cd 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file is included by gles2_implementation.cc to define the
@@ -13,14 +15,17 @@
void GLES2Implementation::AttachShader(GLuint program, GLuint shader) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glAttachShader(" << program << ", " << shader << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glAttachShader(" << program << ", "
+ << shader << ")");
helper_->AttachShader(program, shader);
CheckGLError();
}
void GLES2Implementation::BindBuffer(GLenum target, GLuint buffer) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindBuffer(" << GLES2Util::GetStringBufferTarget(target) << ", " << buffer << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindBuffer("
+ << GLES2Util::GetStringBufferTarget(target) << ", "
+ << buffer << ")");
if (IsBufferReservedId(buffer)) {
SetGLError(GL_INVALID_OPERATION, "BindBuffer", "buffer reserved id");
return;
@@ -33,7 +38,9 @@ void GLES2Implementation::BindBuffer(GLenum target, GLuint buffer) {
void GLES2Implementation::BindFramebuffer(GLenum target, GLuint framebuffer) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindFramebuffer(" << GLES2Util::GetStringFrameBufferTarget(target) << ", " << framebuffer << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindFramebuffer("
+ << GLES2Util::GetStringFrameBufferTarget(target) << ", "
+ << framebuffer << ")");
if (IsFramebufferReservedId(framebuffer)) {
SetGLError(
GL_INVALID_OPERATION, "BindFramebuffer", "framebuffer reserved id");
@@ -45,10 +52,11 @@ void GLES2Implementation::BindFramebuffer(GLenum target, GLuint framebuffer) {
CheckGLError();
}
-void GLES2Implementation::BindRenderbuffer(
- GLenum target, GLuint renderbuffer) {
+void GLES2Implementation::BindRenderbuffer(GLenum target, GLuint renderbuffer) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindRenderbuffer(" << GLES2Util::GetStringRenderBufferTarget(target) << ", " << renderbuffer << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindRenderbuffer("
+ << GLES2Util::GetStringRenderBufferTarget(target) << ", "
+ << renderbuffer << ")");
if (IsRenderbufferReservedId(renderbuffer)) {
SetGLError(
GL_INVALID_OPERATION, "BindRenderbuffer", "renderbuffer reserved id");
@@ -62,7 +70,9 @@ void GLES2Implementation::BindRenderbuffer(
void GLES2Implementation::BindTexture(GLenum target, GLuint texture) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindTexture(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << texture << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindTexture("
+ << GLES2Util::GetStringTextureBindTarget(target) << ", "
+ << texture << ")");
if (IsTextureReservedId(texture)) {
SetGLError(GL_INVALID_OPERATION, "BindTexture", "texture reserved id");
return;
@@ -73,40 +83,54 @@ void GLES2Implementation::BindTexture(GLenum target, GLuint texture) {
CheckGLError();
}
-void GLES2Implementation::BlendColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
+void GLES2Implementation::BlendColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendColor(" << red << ", " << green << ", " << blue << ", " << alpha << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendColor(" << red << ", "
+ << green << ", " << blue << ", " << alpha << ")");
helper_->BlendColor(red, green, blue, alpha);
CheckGLError();
}
void GLES2Implementation::BlendEquation(GLenum mode) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendEquation(" << GLES2Util::GetStringEquation(mode) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendEquation("
+ << GLES2Util::GetStringEquation(mode) << ")");
helper_->BlendEquation(mode);
CheckGLError();
}
-void GLES2Implementation::BlendEquationSeparate(
- GLenum modeRGB, GLenum modeAlpha) {
+void GLES2Implementation::BlendEquationSeparate(GLenum modeRGB,
+ GLenum modeAlpha) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendEquationSeparate(" << GLES2Util::GetStringEquation(modeRGB) << ", " << GLES2Util::GetStringEquation(modeAlpha) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendEquationSeparate("
+ << GLES2Util::GetStringEquation(modeRGB) << ", "
+ << GLES2Util::GetStringEquation(modeAlpha) << ")");
helper_->BlendEquationSeparate(modeRGB, modeAlpha);
CheckGLError();
}
void GLES2Implementation::BlendFunc(GLenum sfactor, GLenum dfactor) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendFunc(" << GLES2Util::GetStringSrcBlendFactor(sfactor) << ", " << GLES2Util::GetStringDstBlendFactor(dfactor) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendFunc("
+ << GLES2Util::GetStringSrcBlendFactor(sfactor) << ", "
+ << GLES2Util::GetStringDstBlendFactor(dfactor) << ")");
helper_->BlendFunc(sfactor, dfactor);
CheckGLError();
}
-void GLES2Implementation::BlendFuncSeparate(
- GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
+void GLES2Implementation::BlendFuncSeparate(GLenum srcRGB,
+ GLenum dstRGB,
+ GLenum srcAlpha,
+ GLenum dstAlpha) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendFuncSeparate(" << GLES2Util::GetStringSrcBlendFactor(srcRGB) << ", " << GLES2Util::GetStringDstBlendFactor(dstRGB) << ", " << GLES2Util::GetStringSrcBlendFactor(srcAlpha) << ", " << GLES2Util::GetStringDstBlendFactor(dstAlpha) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlendFuncSeparate("
+ << GLES2Util::GetStringSrcBlendFactor(srcRGB) << ", "
+ << GLES2Util::GetStringDstBlendFactor(dstRGB) << ", "
+ << GLES2Util::GetStringSrcBlendFactor(srcAlpha) << ", "
+ << GLES2Util::GetStringDstBlendFactor(dstAlpha) << ")");
helper_->BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
CheckGLError();
}
@@ -114,7 +138,8 @@ void GLES2Implementation::BlendFuncSeparate(
GLenum GLES2Implementation::CheckFramebufferStatus(GLenum target) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
TRACE_EVENT0("gpu", "GLES2Implementation::CheckFramebufferStatus");
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCheckFramebufferStatus(" << GLES2Util::GetStringFrameBufferTarget(target) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCheckFramebufferStatus("
+ << GLES2Util::GetStringFrameBufferTarget(target) << ")");
typedef cmds::CheckFramebufferStatus::Result Result;
Result* result = GetResultAs<Result*>();
if (!result) {
@@ -137,10 +162,13 @@ void GLES2Implementation::Clear(GLbitfield mask) {
CheckGLError();
}
-void GLES2Implementation::ClearColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
+void GLES2Implementation::ClearColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearColor(" << red << ", " << green << ", " << blue << ", " << alpha << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glClearColor(" << red << ", "
+ << green << ", " << blue << ", " << alpha << ")");
helper_->ClearColor(red, green, blue, alpha);
CheckGLError();
}
@@ -159,26 +187,43 @@ void GLES2Implementation::ClearStencil(GLint s) {
CheckGLError();
}
-void GLES2Implementation::ColorMask(
- GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
+void GLES2Implementation::ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glColorMask(" << GLES2Util::GetStringBool(red) << ", " << GLES2Util::GetStringBool(green) << ", " << GLES2Util::GetStringBool(blue) << ", " << GLES2Util::GetStringBool(alpha) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glColorMask("
+ << GLES2Util::GetStringBool(red) << ", "
+ << GLES2Util::GetStringBool(green) << ", "
+ << GLES2Util::GetStringBool(blue) << ", "
+ << GLES2Util::GetStringBool(alpha) << ")");
helper_->ColorMask(red, green, blue, alpha);
CheckGLError();
}
void GLES2Implementation::CompileShader(GLuint shader) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCompileShader(" << shader << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCompileShader(" << shader
+ << ")");
helper_->CompileShader(shader);
CheckGLError();
}
-void GLES2Implementation::CopyTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border) {
+void GLES2Implementation::CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTexImage2D(" << GLES2Util::GetStringTextureTarget(target) << ", " << level << ", " << GLES2Util::GetStringTextureInternalFormat(internalformat) << ", " << x << ", " << y << ", " << width << ", " << height << ", " << border << ")"); // NOLINT
+ GPU_CLIENT_LOG(
+ "[" << GetLogPrefix() << "] glCopyTexImage2D("
+ << GLES2Util::GetStringTextureTarget(target) << ", " << level << ", "
+ << GLES2Util::GetStringTextureInternalFormat(internalformat) << ", "
+ << x << ", " << y << ", " << width << ", " << height << ", " << border
+ << ")");
if (width < 0) {
SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D", "width < 0");
return;
@@ -187,16 +232,27 @@ void GLES2Implementation::CopyTexImage2D(
SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D", "height < 0");
return;
}
- helper_->CopyTexImage2D(
- target, level, internalformat, x, y, width, height, border);
+ if (border != 0) {
+ SetGLError(GL_INVALID_VALUE, "glCopyTexImage2D", "border GL_INVALID_VALUE");
+ return;
+ }
+ helper_->CopyTexImage2D(target, level, internalformat, x, y, width, height);
CheckGLError();
}
-void GLES2Implementation::CopyTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y,
- GLsizei width, GLsizei height) {
+void GLES2Implementation::CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTexSubImage2D(" << GLES2Util::GetStringTextureTarget(target) << ", " << level << ", " << xoffset << ", " << yoffset << ", " << x << ", " << y << ", " << width << ", " << height << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTexSubImage2D("
+ << GLES2Util::GetStringTextureTarget(target) << ", "
+ << level << ", " << xoffset << ", " << yoffset << ", " << x
+ << ", " << y << ", " << width << ", " << height << ")");
if (width < 0) {
SetGLError(GL_INVALID_VALUE, "glCopyTexSubImage2D", "width < 0");
return;
@@ -212,10 +268,11 @@ void GLES2Implementation::CopyTexSubImage2D(
GLuint GLES2Implementation::CreateProgram() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateProgram(" << ")");
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateProgram("
+ << ")");
GLuint client_id;
- GetIdHandler(id_namespaces::kProgramsAndShaders)->
- MakeIds(this, 0, 1, &client_id);
+ GetIdHandler(id_namespaces::kProgramsAndShaders)
+ ->MakeIds(this, 0, 1, &client_id);
helper_->CreateProgram(client_id);
GPU_CLIENT_LOG("returned " << client_id);
CheckGLError();
@@ -224,10 +281,11 @@ GLuint GLES2Implementation::CreateProgram() {
GLuint GLES2Implementation::CreateShader(GLenum type) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateShader(" << GLES2Util::GetStringShaderType(type) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCreateShader("
+ << GLES2Util::GetStringShaderType(type) << ")");
GLuint client_id;
- GetIdHandler(id_namespaces::kProgramsAndShaders)->
- MakeIds(this, 0, 1, &client_id);
+ GetIdHandler(id_namespaces::kProgramsAndShaders)
+ ->MakeIds(this, 0, 1, &client_id);
helper_->CreateShader(type, client_id);
GPU_CLIENT_LOG("returned " << client_id);
CheckGLError();
@@ -236,14 +294,16 @@ GLuint GLES2Implementation::CreateShader(GLenum type) {
void GLES2Implementation::CullFace(GLenum mode) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCullFace(" << GLES2Util::GetStringFaceType(mode) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCullFace("
+ << GLES2Util::GetStringFaceType(mode) << ")");
helper_->CullFace(mode);
CheckGLError();
}
void GLES2Implementation::DeleteBuffers(GLsizei n, const GLuint* buffers) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteBuffers(" << n << ", " << static_cast<const void*>(buffers) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteBuffers(" << n << ", "
+ << static_cast<const void*>(buffers) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << buffers[i]);
@@ -262,10 +322,11 @@ void GLES2Implementation::DeleteBuffers(GLsizei n, const GLuint* buffers) {
CheckGLError();
}
-void GLES2Implementation::DeleteFramebuffers(
- GLsizei n, const GLuint* framebuffers) {
+void GLES2Implementation::DeleteFramebuffers(GLsizei n,
+ const GLuint* framebuffers) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteFramebuffers(" << n << ", " << static_cast<const void*>(framebuffers) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteFramebuffers(" << n << ", "
+ << static_cast<const void*>(framebuffers) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << framebuffers[i]);
@@ -286,16 +347,18 @@ void GLES2Implementation::DeleteFramebuffers(
void GLES2Implementation::DeleteProgram(GLuint program) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteProgram(" << program << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteProgram(" << program
+ << ")");
GPU_CLIENT_DCHECK(program != 0);
DeleteProgramHelper(program);
CheckGLError();
}
-void GLES2Implementation::DeleteRenderbuffers(
- GLsizei n, const GLuint* renderbuffers) {
+void GLES2Implementation::DeleteRenderbuffers(GLsizei n,
+ const GLuint* renderbuffers) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteRenderbuffers(" << n << ", " << static_cast<const void*>(renderbuffers) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteRenderbuffers(" << n
+ << ", " << static_cast<const void*>(renderbuffers) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << renderbuffers[i]);
@@ -324,7 +387,8 @@ void GLES2Implementation::DeleteShader(GLuint shader) {
void GLES2Implementation::DeleteTextures(GLsizei n, const GLuint* textures) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteTextures(" << n << ", " << static_cast<const void*>(textures) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteTextures(" << n << ", "
+ << static_cast<const void*>(textures) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << textures[i]);
@@ -345,70 +409,92 @@ void GLES2Implementation::DeleteTextures(GLsizei n, const GLuint* textures) {
void GLES2Implementation::DepthFunc(GLenum func) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthFunc(" << GLES2Util::GetStringCmpFunction(func) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthFunc("
+ << GLES2Util::GetStringCmpFunction(func) << ")");
helper_->DepthFunc(func);
CheckGLError();
}
void GLES2Implementation::DepthMask(GLboolean flag) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthMask(" << GLES2Util::GetStringBool(flag) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthMask("
+ << GLES2Util::GetStringBool(flag) << ")");
helper_->DepthMask(flag);
CheckGLError();
}
void GLES2Implementation::DepthRangef(GLclampf zNear, GLclampf zFar) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthRangef(" << zNear << ", " << zFar << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDepthRangef(" << zNear << ", "
+ << zFar << ")");
helper_->DepthRangef(zNear, zFar);
CheckGLError();
}
void GLES2Implementation::DetachShader(GLuint program, GLuint shader) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDetachShader(" << program << ", " << shader << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDetachShader(" << program << ", "
+ << shader << ")");
helper_->DetachShader(program, shader);
CheckGLError();
}
-void GLES2Implementation::FramebufferRenderbuffer(
- GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer) {
+void GLES2Implementation::FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferRenderbuffer(" << GLES2Util::GetStringFrameBufferTarget(target) << ", " << GLES2Util::GetStringAttachment(attachment) << ", " << GLES2Util::GetStringRenderBufferTarget(renderbuffertarget) << ", " << renderbuffer << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferRenderbuffer("
+ << GLES2Util::GetStringFrameBufferTarget(target) << ", "
+ << GLES2Util::GetStringAttachment(attachment) << ", "
+ << GLES2Util::GetStringRenderBufferTarget(
+ renderbuffertarget) << ", " << renderbuffer << ")");
helper_->FramebufferRenderbuffer(
target, attachment, renderbuffertarget, renderbuffer);
CheckGLError();
}
-void GLES2Implementation::FramebufferTexture2D(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level) {
+void GLES2Implementation::FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferTexture2D(" << GLES2Util::GetStringFrameBufferTarget(target) << ", " << GLES2Util::GetStringAttachment(attachment) << ", " << GLES2Util::GetStringTextureTarget(textarget) << ", " << texture << ", " << level << ")"); // NOLINT
- helper_->FramebufferTexture2D(target, attachment, textarget, texture, level);
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferTexture2D("
+ << GLES2Util::GetStringFrameBufferTarget(target) << ", "
+ << GLES2Util::GetStringAttachment(attachment) << ", "
+ << GLES2Util::GetStringTextureTarget(textarget) << ", "
+ << texture << ", " << level << ")");
+ if (level != 0) {
+ SetGLError(
+ GL_INVALID_VALUE, "glFramebufferTexture2D", "level GL_INVALID_VALUE");
+ return;
+ }
+ helper_->FramebufferTexture2D(target, attachment, textarget, texture);
CheckGLError();
}
void GLES2Implementation::FrontFace(GLenum mode) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFrontFace(" << GLES2Util::GetStringFaceMode(mode) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFrontFace("
+ << GLES2Util::GetStringFaceMode(mode) << ")");
helper_->FrontFace(mode);
CheckGLError();
}
void GLES2Implementation::GenBuffers(GLsizei n, GLuint* buffers) {
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenBuffers(" << n << ", " << static_cast<const void*>(buffers) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenBuffers(" << n << ", "
+ << static_cast<const void*>(buffers) << ")");
if (n < 0) {
SetGLError(GL_INVALID_VALUE, "glGenBuffers", "n < 0");
return;
}
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GetIdHandler(id_namespaces::kBuffers)->
- MakeIds(this, 0, n, buffers);
+ GetIdHandler(id_namespaces::kBuffers)->MakeIds(this, 0, n, buffers);
GenBuffersHelper(n, buffers);
helper_->GenBuffersImmediate(n, buffers);
- helper_->CommandBufferHelper::Flush();
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << buffers[i]);
@@ -419,23 +505,25 @@ void GLES2Implementation::GenBuffers(GLsizei n, GLuint* buffers) {
void GLES2Implementation::GenerateMipmap(GLenum target) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenerateMipmap(" << GLES2Util::GetStringTextureBindTarget(target) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenerateMipmap("
+ << GLES2Util::GetStringTextureBindTarget(target) << ")");
helper_->GenerateMipmap(target);
CheckGLError();
}
void GLES2Implementation::GenFramebuffers(GLsizei n, GLuint* framebuffers) {
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenFramebuffers(" << n << ", " << static_cast<const void*>(framebuffers) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenFramebuffers(" << n << ", "
+ << static_cast<const void*>(framebuffers) << ")");
if (n < 0) {
SetGLError(GL_INVALID_VALUE, "glGenFramebuffers", "n < 0");
return;
}
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GetIdHandler(id_namespaces::kFramebuffers)->
- MakeIds(this, 0, n, framebuffers);
+ GetIdHandler(id_namespaces::kFramebuffers)->MakeIds(this, 0, n, framebuffers);
GenFramebuffersHelper(n, framebuffers);
helper_->GenFramebuffersImmediate(n, framebuffers);
- helper_->CommandBufferHelper::Flush();
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << framebuffers[i]);
@@ -445,17 +533,19 @@ void GLES2Implementation::GenFramebuffers(GLsizei n, GLuint* framebuffers) {
}
void GLES2Implementation::GenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenRenderbuffers(" << n << ", " << static_cast<const void*>(renderbuffers) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenRenderbuffers(" << n << ", "
+ << static_cast<const void*>(renderbuffers) << ")");
if (n < 0) {
SetGLError(GL_INVALID_VALUE, "glGenRenderbuffers", "n < 0");
return;
}
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GetIdHandler(id_namespaces::kRenderbuffers)->
- MakeIds(this, 0, n, renderbuffers);
+ GetIdHandler(id_namespaces::kRenderbuffers)
+ ->MakeIds(this, 0, n, renderbuffers);
GenRenderbuffersHelper(n, renderbuffers);
helper_->GenRenderbuffersImmediate(n, renderbuffers);
- helper_->CommandBufferHelper::Flush();
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << renderbuffers[i]);
@@ -465,17 +555,18 @@ void GLES2Implementation::GenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
}
void GLES2Implementation::GenTextures(GLsizei n, GLuint* textures) {
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenTextures(" << n << ", " << static_cast<const void*>(textures) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenTextures(" << n << ", "
+ << static_cast<const void*>(textures) << ")");
if (n < 0) {
SetGLError(GL_INVALID_VALUE, "glGenTextures", "n < 0");
return;
}
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GetIdHandler(id_namespaces::kTextures)->
- MakeIds(this, 0, n, textures);
+ GetIdHandler(id_namespaces::kTextures)->MakeIds(this, 0, n, textures);
GenTexturesHelper(n, textures);
helper_->GenTexturesImmediate(n, textures);
- helper_->CommandBufferHelper::Flush();
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << textures[i]);
@@ -487,7 +578,9 @@ void GLES2Implementation::GenTextures(GLsizei n, GLuint* textures) {
void GLES2Implementation::GetBooleanv(GLenum pname, GLboolean* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLboolean, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetBooleanv(" << GLES2Util::GetStringGLState(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetBooleanv("
+ << GLES2Util::GetStringGLState(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetBooleanv");
if (GetBooleanvHelper(pname, params)) {
return;
@@ -498,22 +591,25 @@ void GLES2Implementation::GetBooleanv(GLenum pname, GLboolean* params) {
return;
}
result->SetNumResults(0);
- helper_->GetBooleanv(pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetBooleanv(pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}
-void GLES2Implementation::GetBufferParameteriv(
- GLenum target, GLenum pname, GLint* params) {
+void GLES2Implementation::GetBufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetBufferParameteriv(" << GLES2Util::GetStringBufferTarget(target) << ", " << GLES2Util::GetStringBufferParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetBufferParameteriv("
+ << GLES2Util::GetStringBufferTarget(target) << ", "
+ << GLES2Util::GetStringBufferParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetBufferParameteriv");
if (GetBufferParameterivHelper(target, pname, params)) {
return;
@@ -524,12 +620,12 @@ void GLES2Implementation::GetBufferParameteriv(
return;
}
result->SetNumResults(0);
- helper_->GetBufferParameteriv(target, pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetBufferParameteriv(
+ target, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
@@ -537,7 +633,9 @@ void GLES2Implementation::GetBufferParameteriv(
}
void GLES2Implementation::GetFloatv(GLenum pname, GLfloat* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetFloatv(" << GLES2Util::GetStringGLState(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetFloatv("
+ << GLES2Util::GetStringGLState(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetFloatv");
if (GetFloatvHelper(pname, params)) {
return;
@@ -548,25 +646,32 @@ void GLES2Implementation::GetFloatv(GLenum pname, GLfloat* params) {
return;
}
result->SetNumResults(0);
- helper_->GetFloatv(pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetFloatv(pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}
-void GLES2Implementation::GetFramebufferAttachmentParameteriv(
- GLenum target, GLenum attachment, GLenum pname, GLint* params) {
+void GLES2Implementation::GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetFramebufferAttachmentParameteriv(" << GLES2Util::GetStringFrameBufferTarget(target) << ", " << GLES2Util::GetStringAttachment(attachment) << ", " << GLES2Util::GetStringFrameBufferParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
- TRACE_EVENT0("gpu", "GLES2Implementation::GetFramebufferAttachmentParameteriv"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix()
+ << "] glGetFramebufferAttachmentParameteriv("
+ << GLES2Util::GetStringFrameBufferTarget(target) << ", "
+ << GLES2Util::GetStringAttachment(attachment) << ", "
+ << GLES2Util::GetStringFrameBufferParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
+ TRACE_EVENT0("gpu",
+ "GLES2Implementation::GetFramebufferAttachmentParameteriv");
if (GetFramebufferAttachmentParameterivHelper(
- target, attachment, pname, params)) {
+ target, attachment, pname, params)) {
return;
}
typedef cmds::GetFramebufferAttachmentParameteriv::Result Result;
@@ -575,12 +680,12 @@ void GLES2Implementation::GetFramebufferAttachmentParameteriv(
return;
}
result->SetNumResults(0);
- helper_->GetFramebufferAttachmentParameteriv(target, attachment, pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetFramebufferAttachmentParameteriv(
+ target, attachment, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
@@ -589,7 +694,9 @@ void GLES2Implementation::GetFramebufferAttachmentParameteriv(
void GLES2Implementation::GetIntegerv(GLenum pname, GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetIntegerv(" << GLES2Util::GetStringGLState(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetIntegerv("
+ << GLES2Util::GetStringGLState(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetIntegerv");
if (GetIntegervHelper(pname, params)) {
return;
@@ -600,22 +707,24 @@ void GLES2Implementation::GetIntegerv(GLenum pname, GLint* params) {
return;
}
result->SetNumResults(0);
- helper_->GetIntegerv(pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetIntegerv(pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}
-void GLES2Implementation::GetProgramiv(
- GLuint program, GLenum pname, GLint* params) {
+void GLES2Implementation::GetProgramiv(GLuint program,
+ GLenum pname,
+ GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetProgramiv(" << program << ", " << GLES2Util::GetStringProgramParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetProgramiv(" << program << ", "
+ << GLES2Util::GetStringProgramParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetProgramiv");
if (GetProgramivHelper(program, pname, params)) {
return;
@@ -626,35 +735,33 @@ void GLES2Implementation::GetProgramiv(
return;
}
result->SetNumResults(0);
- helper_->GetProgramiv(program, pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetProgramiv(program, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}
-void GLES2Implementation::GetProgramInfoLog(
- GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) {
+void GLES2Implementation::GetProgramInfoLog(GLuint program,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_OPTIONAL_INITALIZATION(GLsizei, length);
- GPU_CLIENT_LOG("[" << GetLogPrefix()
- << "] glGetProgramInfoLog" << "("
- << program << ", "
- << bufsize << ", "
- << static_cast<void*>(length) << ", "
- << static_cast<void*>(infolog) << ")");
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetProgramInfoLog"
+ << "(" << program << ", " << bufsize << ", "
+ << static_cast<void*>(length) << ", "
+ << static_cast<void*>(infolog) << ")");
helper_->SetBucketSize(kResultBucketId, 0);
helper_->GetProgramInfoLog(program, kResultBucketId);
std::string str;
GLsizei max_size = 0;
if (GetBucketAsString(kResultBucketId, &str)) {
if (bufsize > 0) {
- max_size =
- std::min(static_cast<size_t>(bufsize) - 1, str.size());
+ max_size = std::min(static_cast<size_t>(bufsize) - 1, str.size());
memcpy(infolog, str.c_str(), max_size);
infolog[max_size] = '\0';
GPU_CLIENT_LOG("------\n" << infolog << "\n------");
@@ -665,11 +772,15 @@ void GLES2Implementation::GetProgramInfoLog(
}
CheckGLError();
}
-void GLES2Implementation::GetRenderbufferParameteriv(
- GLenum target, GLenum pname, GLint* params) {
+void GLES2Implementation::GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetRenderbufferParameteriv(" << GLES2Util::GetStringRenderBufferTarget(target) << ", " << GLES2Util::GetStringRenderBufferParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetRenderbufferParameteriv("
+ << GLES2Util::GetStringRenderBufferTarget(target) << ", "
+ << GLES2Util::GetStringRenderBufferParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetRenderbufferParameteriv");
if (GetRenderbufferParameterivHelper(target, pname, params)) {
return;
@@ -680,22 +791,25 @@ void GLES2Implementation::GetRenderbufferParameteriv(
return;
}
result->SetNumResults(0);
- helper_->GetRenderbufferParameteriv(target, pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetRenderbufferParameteriv(
+ target, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}
-void GLES2Implementation::GetShaderiv(
- GLuint shader, GLenum pname, GLint* params) {
+void GLES2Implementation::GetShaderiv(GLuint shader,
+ GLenum pname,
+ GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetShaderiv(" << shader << ", " << GLES2Util::GetStringShaderParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetShaderiv(" << shader << ", "
+ << GLES2Util::GetStringShaderParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetShaderiv");
if (GetShaderivHelper(shader, pname, params)) {
return;
@@ -706,35 +820,33 @@ void GLES2Implementation::GetShaderiv(
return;
}
result->SetNumResults(0);
- helper_->GetShaderiv(shader, pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetShaderiv(shader, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}
-void GLES2Implementation::GetShaderInfoLog(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) {
+void GLES2Implementation::GetShaderInfoLog(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_OPTIONAL_INITALIZATION(GLsizei, length);
- GPU_CLIENT_LOG("[" << GetLogPrefix()
- << "] glGetShaderInfoLog" << "("
- << shader << ", "
- << bufsize << ", "
- << static_cast<void*>(length) << ", "
- << static_cast<void*>(infolog) << ")");
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetShaderInfoLog"
+ << "(" << shader << ", " << bufsize << ", "
+ << static_cast<void*>(length) << ", "
+ << static_cast<void*>(infolog) << ")");
helper_->SetBucketSize(kResultBucketId, 0);
helper_->GetShaderInfoLog(shader, kResultBucketId);
std::string str;
GLsizei max_size = 0;
if (GetBucketAsString(kResultBucketId, &str)) {
if (bufsize > 0) {
- max_size =
- std::min(static_cast<size_t>(bufsize) - 1, str.size());
+ max_size = std::min(static_cast<size_t>(bufsize) - 1, str.size());
memcpy(infolog, str.c_str(), max_size);
infolog[max_size] = '\0';
GPU_CLIENT_LOG("------\n" << infolog << "\n------");
@@ -745,24 +857,23 @@ void GLES2Implementation::GetShaderInfoLog(
}
CheckGLError();
}
-void GLES2Implementation::GetShaderSource(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) {
+void GLES2Implementation::GetShaderSource(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_OPTIONAL_INITALIZATION(GLsizei, length);
- GPU_CLIENT_LOG("[" << GetLogPrefix()
- << "] glGetShaderSource" << "("
- << shader << ", "
- << bufsize << ", "
- << static_cast<void*>(length) << ", "
- << static_cast<void*>(source) << ")");
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetShaderSource"
+ << "(" << shader << ", " << bufsize << ", "
+ << static_cast<void*>(length) << ", "
+ << static_cast<void*>(source) << ")");
helper_->SetBucketSize(kResultBucketId, 0);
helper_->GetShaderSource(shader, kResultBucketId);
std::string str;
GLsizei max_size = 0;
if (GetBucketAsString(kResultBucketId, &str)) {
if (bufsize > 0) {
- max_size =
- std::min(static_cast<size_t>(bufsize) - 1, str.size());
+ max_size = std::min(static_cast<size_t>(bufsize) - 1, str.size());
memcpy(source, str.c_str(), max_size);
source[max_size] = '\0';
GPU_CLIENT_LOG("------\n" << source << "\n------");
@@ -773,10 +884,14 @@ void GLES2Implementation::GetShaderSource(
}
CheckGLError();
}
-void GLES2Implementation::GetTexParameterfv(
- GLenum target, GLenum pname, GLfloat* params) {
+void GLES2Implementation::GetTexParameterfv(GLenum target,
+ GLenum pname,
+ GLfloat* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetTexParameterfv(" << GLES2Util::GetStringGetTexParamTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetTexParameterfv("
+ << GLES2Util::GetStringGetTexParamTarget(target) << ", "
+ << GLES2Util::GetStringTextureParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetTexParameterfv");
if (GetTexParameterfvHelper(target, pname, params)) {
return;
@@ -787,22 +902,26 @@ void GLES2Implementation::GetTexParameterfv(
return;
}
result->SetNumResults(0);
- helper_->GetTexParameterfv(target, pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetTexParameterfv(
+ target, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
CheckGLError();
}
-void GLES2Implementation::GetTexParameteriv(
- GLenum target, GLenum pname, GLint* params) {
+void GLES2Implementation::GetTexParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_INITALIZATION(GLint, params);
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetTexParameteriv(" << GLES2Util::GetStringGetTexParamTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetTexParameteriv("
+ << GLES2Util::GetStringGetTexParamTarget(target) << ", "
+ << GLES2Util::GetStringTextureParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
TRACE_EVENT0("gpu", "GLES2Implementation::GetTexParameteriv");
if (GetTexParameterivHelper(target, pname, params)) {
return;
@@ -813,12 +932,12 @@ void GLES2Implementation::GetTexParameteriv(
return;
}
result->SetNumResults(0);
- helper_->GetTexParameteriv(target, pname,
- GetResultShmId(), GetResultShmOffset());
+ helper_->GetTexParameteriv(
+ target, pname, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
result->CopyResult(params);
GPU_CLIENT_LOG_CODE_BLOCK({
- for (int32 i = 0; i < result->GetNumResults(); ++i) {
+ for (int32_t i = 0; i < result->GetNumResults(); ++i) {
GPU_CLIENT_LOG(" " << i << ": " << result->GetData()[i]);
}
});
@@ -826,7 +945,9 @@ void GLES2Implementation::GetTexParameteriv(
}
void GLES2Implementation::Hint(GLenum target, GLenum mode) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glHint(" << GLES2Util::GetStringHintTarget(target) << ", " << GLES2Util::GetStringHintMode(mode) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glHint("
+ << GLES2Util::GetStringHintTarget(target) << ", "
+ << GLES2Util::GetStringHintMode(mode) << ")");
helper_->Hint(target, mode);
CheckGLError();
}
@@ -852,7 +973,8 @@ GLboolean GLES2Implementation::IsBuffer(GLuint buffer) {
GLboolean GLES2Implementation::IsFramebuffer(GLuint framebuffer) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
TRACE_EVENT0("gpu", "GLES2Implementation::IsFramebuffer");
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsFramebuffer(" << framebuffer << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsFramebuffer(" << framebuffer
+ << ")");
typedef cmds::IsFramebuffer::Result Result;
Result* result = GetResultAs<Result*>();
if (!result) {
@@ -888,15 +1010,15 @@ GLboolean GLES2Implementation::IsProgram(GLuint program) {
GLboolean GLES2Implementation::IsRenderbuffer(GLuint renderbuffer) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
TRACE_EVENT0("gpu", "GLES2Implementation::IsRenderbuffer");
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsRenderbuffer(" << renderbuffer << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsRenderbuffer(" << renderbuffer
+ << ")");
typedef cmds::IsRenderbuffer::Result Result;
Result* result = GetResultAs<Result*>();
if (!result) {
return GL_FALSE;
}
*result = 0;
- helper_->IsRenderbuffer(
- renderbuffer, GetResultShmId(), GetResultShmOffset());
+ helper_->IsRenderbuffer(renderbuffer, GetResultShmId(), GetResultShmOffset());
WaitForCmd();
GLboolean result_value = *result;
GPU_CLIENT_LOG("returned " << result_value);
@@ -949,22 +1071,29 @@ void GLES2Implementation::LineWidth(GLfloat width) {
void GLES2Implementation::PolygonOffset(GLfloat factor, GLfloat units) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPolygonOffset(" << factor << ", " << units << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glPolygonOffset(" << factor << ", "
+ << units << ")");
helper_->PolygonOffset(factor, units);
CheckGLError();
}
void GLES2Implementation::ReleaseShaderCompiler() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReleaseShaderCompiler(" << ")");
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReleaseShaderCompiler("
+ << ")");
helper_->ReleaseShaderCompiler();
CheckGLError();
}
-void GLES2Implementation::RenderbufferStorage(
- GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
+void GLES2Implementation::RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRenderbufferStorage(" << GLES2Util::GetStringRenderBufferTarget(target) << ", " << GLES2Util::GetStringRenderBufferFormat(internalformat) << ", " << width << ", " << height << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRenderbufferStorage("
+ << GLES2Util::GetStringRenderBufferTarget(target) << ", "
+ << GLES2Util::GetStringRenderBufferFormat(internalformat)
+ << ", " << width << ", " << height << ")");
if (width < 0) {
SetGLError(GL_INVALID_VALUE, "glRenderbufferStorage", "width < 0");
return;
@@ -979,15 +1108,19 @@ void GLES2Implementation::RenderbufferStorage(
void GLES2Implementation::SampleCoverage(GLclampf value, GLboolean invert) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glSampleCoverage(" << value << ", " << GLES2Util::GetStringBool(invert) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glSampleCoverage(" << value << ", "
+ << GLES2Util::GetStringBool(invert) << ")");
helper_->SampleCoverage(value, invert);
CheckGLError();
}
-void GLES2Implementation::Scissor(
- GLint x, GLint y, GLsizei width, GLsizei height) {
+void GLES2Implementation::Scissor(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glScissor(" << x << ", " << y << ", " << width << ", " << height << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glScissor(" << x << ", " << y
+ << ", " << width << ", " << height << ")");
if (width < 0) {
SetGLError(GL_INVALID_VALUE, "glScissor", "width < 0");
return;
@@ -1002,15 +1135,22 @@ void GLES2Implementation::Scissor(
void GLES2Implementation::StencilFunc(GLenum func, GLint ref, GLuint mask) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFunc(" << GLES2Util::GetStringCmpFunction(func) << ", " << ref << ", " << mask << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFunc("
+ << GLES2Util::GetStringCmpFunction(func) << ", " << ref
+ << ", " << mask << ")");
helper_->StencilFunc(func, ref, mask);
CheckGLError();
}
-void GLES2Implementation::StencilFuncSeparate(
- GLenum face, GLenum func, GLint ref, GLuint mask) {
+void GLES2Implementation::StencilFuncSeparate(GLenum face,
+ GLenum func,
+ GLint ref,
+ GLuint mask) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFuncSeparate(" << GLES2Util::GetStringFaceType(face) << ", " << GLES2Util::GetStringCmpFunction(func) << ", " << ref << ", " << mask << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilFuncSeparate("
+ << GLES2Util::GetStringFaceType(face) << ", "
+ << GLES2Util::GetStringCmpFunction(func) << ", " << ref
+ << ", " << mask << ")");
helper_->StencilFuncSeparate(face, func, ref, mask);
CheckGLError();
}
@@ -1024,55 +1164,82 @@ void GLES2Implementation::StencilMask(GLuint mask) {
void GLES2Implementation::StencilMaskSeparate(GLenum face, GLuint mask) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilMaskSeparate(" << GLES2Util::GetStringFaceType(face) << ", " << mask << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilMaskSeparate("
+ << GLES2Util::GetStringFaceType(face) << ", " << mask
+ << ")");
helper_->StencilMaskSeparate(face, mask);
CheckGLError();
}
void GLES2Implementation::StencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilOp(" << GLES2Util::GetStringStencilOp(fail) << ", " << GLES2Util::GetStringStencilOp(zfail) << ", " << GLES2Util::GetStringStencilOp(zpass) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilOp("
+ << GLES2Util::GetStringStencilOp(fail) << ", "
+ << GLES2Util::GetStringStencilOp(zfail) << ", "
+ << GLES2Util::GetStringStencilOp(zpass) << ")");
helper_->StencilOp(fail, zfail, zpass);
CheckGLError();
}
-void GLES2Implementation::StencilOpSeparate(
- GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {
+void GLES2Implementation::StencilOpSeparate(GLenum face,
+ GLenum fail,
+ GLenum zfail,
+ GLenum zpass) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilOpSeparate(" << GLES2Util::GetStringFaceType(face) << ", " << GLES2Util::GetStringStencilOp(fail) << ", " << GLES2Util::GetStringStencilOp(zfail) << ", " << GLES2Util::GetStringStencilOp(zpass) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glStencilOpSeparate("
+ << GLES2Util::GetStringFaceType(face) << ", "
+ << GLES2Util::GetStringStencilOp(fail) << ", "
+ << GLES2Util::GetStringStencilOp(zfail) << ", "
+ << GLES2Util::GetStringStencilOp(zpass) << ")");
helper_->StencilOpSeparate(face, fail, zfail, zpass);
CheckGLError();
}
-void GLES2Implementation::TexParameterf(
- GLenum target, GLenum pname, GLfloat param) {
+void GLES2Implementation::TexParameterf(GLenum target,
+ GLenum pname,
+ GLfloat param) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameterf(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << param << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameterf("
+ << GLES2Util::GetStringTextureBindTarget(target) << ", "
+ << GLES2Util::GetStringTextureParameter(pname) << ", "
+ << param << ")");
helper_->TexParameterf(target, pname, param);
CheckGLError();
}
-void GLES2Implementation::TexParameterfv(
- GLenum target, GLenum pname, const GLfloat* params) {
+void GLES2Implementation::TexParameterfv(GLenum target,
+ GLenum pname,
+ const GLfloat* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameterfv(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameterfv("
+ << GLES2Util::GetStringTextureBindTarget(target) << ", "
+ << GLES2Util::GetStringTextureParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
GPU_CLIENT_LOG("values: " << params[0]);
helper_->TexParameterfvImmediate(target, pname, params);
CheckGLError();
}
-void GLES2Implementation::TexParameteri(
- GLenum target, GLenum pname, GLint param) {
+void GLES2Implementation::TexParameteri(GLenum target,
+ GLenum pname,
+ GLint param) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameteri(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << param << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameteri("
+ << GLES2Util::GetStringTextureBindTarget(target) << ", "
+ << GLES2Util::GetStringTextureParameter(pname) << ", "
+ << param << ")");
helper_->TexParameteri(target, pname, param);
CheckGLError();
}
-void GLES2Implementation::TexParameteriv(
- GLenum target, GLenum pname, const GLint* params) {
+void GLES2Implementation::TexParameteriv(GLenum target,
+ GLenum pname,
+ const GLint* params) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameteriv(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << GLES2Util::GetStringTextureParameter(pname) << ", " << static_cast<const void*>(params) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexParameteriv("
+ << GLES2Util::GetStringTextureBindTarget(target) << ", "
+ << GLES2Util::GetStringTextureParameter(pname) << ", "
+ << static_cast<const void*>(params) << ")");
GPU_CLIENT_LOG("values: " << params[0]);
helper_->TexParameterivImmediate(target, pname, params);
CheckGLError();
@@ -1080,18 +1247,21 @@ void GLES2Implementation::TexParameteriv(
void GLES2Implementation::Uniform1f(GLint location, GLfloat x) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1f(" << location << ", " << x << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1f(" << location << ", "
+ << x << ")");
helper_->Uniform1f(location, x);
CheckGLError();
}
-void GLES2Implementation::Uniform1fv(
- GLint location, GLsizei count, const GLfloat* v) {
+void GLES2Implementation::Uniform1fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1fv(" << location << ", " << count << ", " << static_cast<const void*>(v) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1fv(" << location << ", "
+ << count << ", " << static_cast<const void*>(v) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 1]);
+ GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 1]);
}
});
if (count < 0) {
@@ -1104,18 +1274,21 @@ void GLES2Implementation::Uniform1fv(
void GLES2Implementation::Uniform1i(GLint location, GLint x) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1i(" << location << ", " << x << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1i(" << location << ", "
+ << x << ")");
helper_->Uniform1i(location, x);
CheckGLError();
}
-void GLES2Implementation::Uniform1iv(
- GLint location, GLsizei count, const GLint* v) {
+void GLES2Implementation::Uniform1iv(GLint location,
+ GLsizei count,
+ const GLint* v) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1iv(" << location << ", " << count << ", " << static_cast<const void*>(v) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform1iv(" << location << ", "
+ << count << ", " << static_cast<const void*>(v) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 1]);
+ GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 1]);
}
});
if (count < 0) {
@@ -1128,18 +1301,21 @@ void GLES2Implementation::Uniform1iv(
void GLES2Implementation::Uniform2f(GLint location, GLfloat x, GLfloat y) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2f(" << location << ", " << x << ", " << y << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2f(" << location << ", "
+ << x << ", " << y << ")");
helper_->Uniform2f(location, x, y);
CheckGLError();
}
-void GLES2Implementation::Uniform2fv(
- GLint location, GLsizei count, const GLfloat* v) {
+void GLES2Implementation::Uniform2fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2fv(" << location << ", " << count << ", " << static_cast<const void*>(v) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2fv(" << location << ", "
+ << count << ", " << static_cast<const void*>(v) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 2] << ", " << v[1 + i * 2]); // NOLINT
+ GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 2] << ", " << v[1 + i * 2]);
}
});
if (count < 0) {
@@ -1152,18 +1328,21 @@ void GLES2Implementation::Uniform2fv(
void GLES2Implementation::Uniform2i(GLint location, GLint x, GLint y) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2i(" << location << ", " << x << ", " << y << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2i(" << location << ", "
+ << x << ", " << y << ")");
helper_->Uniform2i(location, x, y);
CheckGLError();
}
-void GLES2Implementation::Uniform2iv(
- GLint location, GLsizei count, const GLint* v) {
+void GLES2Implementation::Uniform2iv(GLint location,
+ GLsizei count,
+ const GLint* v) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2iv(" << location << ", " << count << ", " << static_cast<const void*>(v) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform2iv(" << location << ", "
+ << count << ", " << static_cast<const void*>(v) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 2] << ", " << v[1 + i * 2]); // NOLINT
+ GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 2] << ", " << v[1 + i * 2]);
}
});
if (count < 0) {
@@ -1174,21 +1353,27 @@ void GLES2Implementation::Uniform2iv(
CheckGLError();
}
-void GLES2Implementation::Uniform3f(
- GLint location, GLfloat x, GLfloat y, GLfloat z) {
+void GLES2Implementation::Uniform3f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3f(" << location << ", " << x << ", " << y << ", " << z << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3f(" << location << ", "
+ << x << ", " << y << ", " << z << ")");
helper_->Uniform3f(location, x, y, z);
CheckGLError();
}
-void GLES2Implementation::Uniform3fv(
- GLint location, GLsizei count, const GLfloat* v) {
+void GLES2Implementation::Uniform3fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3fv(" << location << ", " << count << ", " << static_cast<const void*>(v) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3fv(" << location << ", "
+ << count << ", " << static_cast<const void*>(v) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 3] << ", " << v[1 + i * 3] << ", " << v[2 + i * 3]); // NOLINT
+ GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 3] << ", " << v[1 + i * 3]
+ << ", " << v[2 + i * 3]);
}
});
if (count < 0) {
@@ -1199,21 +1384,24 @@ void GLES2Implementation::Uniform3fv(
CheckGLError();
}
-void GLES2Implementation::Uniform3i(
- GLint location, GLint x, GLint y, GLint z) {
+void GLES2Implementation::Uniform3i(GLint location, GLint x, GLint y, GLint z) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3i(" << location << ", " << x << ", " << y << ", " << z << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3i(" << location << ", "
+ << x << ", " << y << ", " << z << ")");
helper_->Uniform3i(location, x, y, z);
CheckGLError();
}
-void GLES2Implementation::Uniform3iv(
- GLint location, GLsizei count, const GLint* v) {
+void GLES2Implementation::Uniform3iv(GLint location,
+ GLsizei count,
+ const GLint* v) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3iv(" << location << ", " << count << ", " << static_cast<const void*>(v) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform3iv(" << location << ", "
+ << count << ", " << static_cast<const void*>(v) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 3] << ", " << v[1 + i * 3] << ", " << v[2 + i * 3]); // NOLINT
+ GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 3] << ", " << v[1 + i * 3]
+ << ", " << v[2 + i * 3]);
}
});
if (count < 0) {
@@ -1224,21 +1412,28 @@ void GLES2Implementation::Uniform3iv(
CheckGLError();
}
-void GLES2Implementation::Uniform4f(
- GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+void GLES2Implementation::Uniform4f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4f(" << location << ", " << x << ", " << y << ", " << z << ", " << w << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4f(" << location << ", "
+ << x << ", " << y << ", " << z << ", " << w << ")");
helper_->Uniform4f(location, x, y, z, w);
CheckGLError();
}
-void GLES2Implementation::Uniform4fv(
- GLint location, GLsizei count, const GLfloat* v) {
+void GLES2Implementation::Uniform4fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4fv(" << location << ", " << count << ", " << static_cast<const void*>(v) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4fv(" << location << ", "
+ << count << ", " << static_cast<const void*>(v) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 4] << ", " << v[1 + i * 4] << ", " << v[2 + i * 4] << ", " << v[3 + i * 4]); // NOLINT
+ GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 4] << ", " << v[1 + i * 4]
+ << ", " << v[2 + i * 4] << ", " << v[3 + i * 4]);
}
});
if (count < 0) {
@@ -1249,21 +1444,28 @@ void GLES2Implementation::Uniform4fv(
CheckGLError();
}
-void GLES2Implementation::Uniform4i(
- GLint location, GLint x, GLint y, GLint z, GLint w) {
+void GLES2Implementation::Uniform4i(GLint location,
+ GLint x,
+ GLint y,
+ GLint z,
+ GLint w) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4i(" << location << ", " << x << ", " << y << ", " << z << ", " << w << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4i(" << location << ", "
+ << x << ", " << y << ", " << z << ", " << w << ")");
helper_->Uniform4i(location, x, y, z, w);
CheckGLError();
}
-void GLES2Implementation::Uniform4iv(
- GLint location, GLsizei count, const GLint* v) {
+void GLES2Implementation::Uniform4iv(GLint location,
+ GLsizei count,
+ const GLint* v) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4iv(" << location << ", " << count << ", " << static_cast<const void*>(v) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniform4iv(" << location << ", "
+ << count << ", " << static_cast<const void*>(v) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 4] << ", " << v[1 + i * 4] << ", " << v[2 + i * 4] << ", " << v[3 + i * 4]); // NOLINT
+ GPU_CLIENT_LOG(" " << i << ": " << v[0 + i * 4] << ", " << v[1 + i * 4]
+ << ", " << v[2 + i * 4] << ", " << v[3 + i * 4]);
}
});
if (count < 0) {
@@ -1274,74 +1476,135 @@ void GLES2Implementation::Uniform4iv(
CheckGLError();
}
-void GLES2Implementation::UniformMatrix2fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2Implementation::UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix2fv(" << location << ", " << count << ", " << GLES2Util::GetStringBool(transpose) << ", " << static_cast<const void*>(value) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix2fv(" << location
+ << ", " << count << ", "
+ << GLES2Util::GetStringBool(transpose) << ", "
+ << static_cast<const void*>(value) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << value[0 + i * 4] << ", " << value[1 + i * 4] << ", " << value[2 + i * 4] << ", " << value[3 + i * 4]); // NOLINT
+ GPU_CLIENT_LOG(" " << i << ": " << value[0 + i * 4] << ", "
+ << value[1 + i * 4] << ", " << value[2 + i * 4]
+ << ", " << value[3 + i * 4]);
}
});
if (count < 0) {
SetGLError(GL_INVALID_VALUE, "glUniformMatrix2fv", "count < 0");
return;
}
- helper_->UniformMatrix2fvImmediate(location, count, transpose, value);
+ if (transpose != false) {
+ SetGLError(
+ GL_INVALID_VALUE, "glUniformMatrix2fv", "transpose GL_INVALID_VALUE");
+ return;
+ }
+ helper_->UniformMatrix2fvImmediate(location, count, value);
CheckGLError();
}
-void GLES2Implementation::UniformMatrix3fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2Implementation::UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix3fv(" << location << ", " << count << ", " << GLES2Util::GetStringBool(transpose) << ", " << static_cast<const void*>(value) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix3fv(" << location
+ << ", " << count << ", "
+ << GLES2Util::GetStringBool(transpose) << ", "
+ << static_cast<const void*>(value) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << value[0 + i * 9] << ", " << value[1 + i * 9] << ", " << value[2 + i * 9] << ", " << value[3 + i * 9] << ", " << value[4 + i * 9] << ", " << value[5 + i * 9] << ", " << value[6 + i * 9] << ", " << value[7 + i * 9] << ", " << value[8 + i * 9]); // NOLINT
+ GPU_CLIENT_LOG(" " << i << ": " << value[0 + i * 9] << ", "
+ << value[1 + i * 9] << ", " << value[2 + i * 9]
+ << ", " << value[3 + i * 9] << ", "
+ << value[4 + i * 9] << ", " << value[5 + i * 9]
+ << ", " << value[6 + i * 9] << ", "
+ << value[7 + i * 9] << ", " << value[8 + i * 9]);
}
});
if (count < 0) {
SetGLError(GL_INVALID_VALUE, "glUniformMatrix3fv", "count < 0");
return;
}
- helper_->UniformMatrix3fvImmediate(location, count, transpose, value);
+ if (transpose != false) {
+ SetGLError(
+ GL_INVALID_VALUE, "glUniformMatrix3fv", "transpose GL_INVALID_VALUE");
+ return;
+ }
+ helper_->UniformMatrix3fvImmediate(location, count, value);
CheckGLError();
}
-void GLES2Implementation::UniformMatrix4fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2Implementation::UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix4fv(" << location << ", " << count << ", " << GLES2Util::GetStringBool(transpose) << ", " << static_cast<const void*>(value) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUniformMatrix4fv(" << location
+ << ", " << count << ", "
+ << GLES2Util::GetStringBool(transpose) << ", "
+ << static_cast<const void*>(value) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << value[0 + i * 16] << ", " << value[1 + i * 16] << ", " << value[2 + i * 16] << ", " << value[3 + i * 16] << ", " << value[4 + i * 16] << ", " << value[5 + i * 16] << ", " << value[6 + i * 16] << ", " << value[7 + i * 16] << ", " << value[8 + i * 16] << ", " << value[9 + i * 16] << ", " << value[10 + i * 16] << ", " << value[11 + i * 16] << ", " << value[12 + i * 16] << ", " << value[13 + i * 16] << ", " << value[14 + i * 16] << ", " << value[15 + i * 16]); // NOLINT
+ GPU_CLIENT_LOG(
+ " " << i << ": " << value[0 + i * 16] << ", " << value[1 + i * 16]
+ << ", " << value[2 + i * 16] << ", " << value[3 + i * 16] << ", "
+ << value[4 + i * 16] << ", " << value[5 + i * 16] << ", "
+ << value[6 + i * 16] << ", " << value[7 + i * 16] << ", "
+ << value[8 + i * 16] << ", " << value[9 + i * 16] << ", "
+ << value[10 + i * 16] << ", " << value[11 + i * 16] << ", "
+ << value[12 + i * 16] << ", " << value[13 + i * 16] << ", "
+ << value[14 + i * 16] << ", " << value[15 + i * 16]);
}
});
if (count < 0) {
SetGLError(GL_INVALID_VALUE, "glUniformMatrix4fv", "count < 0");
return;
}
- helper_->UniformMatrix4fvImmediate(location, count, transpose, value);
+ if (transpose != false) {
+ SetGLError(
+ GL_INVALID_VALUE, "glUniformMatrix4fv", "transpose GL_INVALID_VALUE");
+ return;
+ }
+ helper_->UniformMatrix4fvImmediate(location, count, value);
+ CheckGLError();
+}
+
+void GLES2Implementation::UseProgram(GLuint program) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glUseProgram(" << program << ")");
+ if (IsProgramReservedId(program)) {
+ SetGLError(GL_INVALID_OPERATION, "UseProgram", "program reserved id");
+ return;
+ }
+ if (UseProgramHelper(program)) {
+ helper_->UseProgram(program);
+ }
CheckGLError();
}
void GLES2Implementation::ValidateProgram(GLuint program) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glValidateProgram(" << program << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glValidateProgram(" << program
+ << ")");
helper_->ValidateProgram(program);
CheckGLError();
}
void GLES2Implementation::VertexAttrib1f(GLuint indx, GLfloat x) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1f(" << indx << ", " << x << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1f(" << indx << ", "
+ << x << ")");
helper_->VertexAttrib1f(indx, x);
CheckGLError();
}
void GLES2Implementation::VertexAttrib1fv(GLuint indx, const GLfloat* values) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1fv(" << indx << ", " << static_cast<const void*>(values) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib1fv(" << indx << ", "
+ << static_cast<const void*>(values) << ")");
GPU_CLIENT_LOG("values: " << values[0]);
helper_->VertexAttrib1fvImmediate(indx, values);
CheckGLError();
@@ -1349,55 +1612,71 @@ void GLES2Implementation::VertexAttrib1fv(GLuint indx, const GLfloat* values) {
void GLES2Implementation::VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2f(" << indx << ", " << x << ", " << y << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2f(" << indx << ", "
+ << x << ", " << y << ")");
helper_->VertexAttrib2f(indx, x, y);
CheckGLError();
}
void GLES2Implementation::VertexAttrib2fv(GLuint indx, const GLfloat* values) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2fv(" << indx << ", " << static_cast<const void*>(values) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib2fv(" << indx << ", "
+ << static_cast<const void*>(values) << ")");
GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1]);
helper_->VertexAttrib2fvImmediate(indx, values);
CheckGLError();
}
-void GLES2Implementation::VertexAttrib3f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
+void GLES2Implementation::VertexAttrib3f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3f(" << indx << ", " << x << ", " << y << ", " << z << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3f(" << indx << ", "
+ << x << ", " << y << ", " << z << ")");
helper_->VertexAttrib3f(indx, x, y, z);
CheckGLError();
}
void GLES2Implementation::VertexAttrib3fv(GLuint indx, const GLfloat* values) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3fv(" << indx << ", " << static_cast<const void*>(values) << ")"); // NOLINT
- GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", " << values[2]); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib3fv(" << indx << ", "
+ << static_cast<const void*>(values) << ")");
+ GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", "
+ << values[2]);
helper_->VertexAttrib3fvImmediate(indx, values);
CheckGLError();
}
-void GLES2Implementation::VertexAttrib4f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+void GLES2Implementation::VertexAttrib4f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4f(" << indx << ", " << x << ", " << y << ", " << z << ", " << w << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4f(" << indx << ", "
+ << x << ", " << y << ", " << z << ", " << w << ")");
helper_->VertexAttrib4f(indx, x, y, z, w);
CheckGLError();
}
void GLES2Implementation::VertexAttrib4fv(GLuint indx, const GLfloat* values) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4fv(" << indx << ", " << static_cast<const void*>(values) << ")"); // NOLINT
- GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", " << values[2] << ", " << values[3]); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glVertexAttrib4fv(" << indx << ", "
+ << static_cast<const void*>(values) << ")");
+ GPU_CLIENT_LOG("values: " << values[0] << ", " << values[1] << ", "
+ << values[2] << ", " << values[3]);
helper_->VertexAttrib4fvImmediate(indx, values);
CheckGLError();
}
-void GLES2Implementation::Viewport(
- GLint x, GLint y, GLsizei width, GLsizei height) {
+void GLES2Implementation::Viewport(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glViewport(" << x << ", " << y << ", " << width << ", " << height << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glViewport(" << x << ", " << y
+ << ", " << width << ", " << height << ")");
if (width < 0) {
SetGLError(GL_INVALID_VALUE, "glViewport", "width < 0");
return;
@@ -1410,34 +1689,55 @@ void GLES2Implementation::Viewport(
CheckGLError();
}
-void GLES2Implementation::BlitFramebufferCHROMIUM(
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0,
- GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
+void GLES2Implementation::BlitFramebufferCHROMIUM(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlitFramebufferCHROMIUM(" << srcX0 << ", " << srcY0 << ", " << srcX1 << ", " << srcY1 << ", " << dstX0 << ", " << dstY0 << ", " << dstX1 << ", " << dstY1 << ", " << mask << ", " << GLES2Util::GetStringBlitFilter(filter) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBlitFramebufferCHROMIUM("
+ << srcX0 << ", " << srcY0 << ", " << srcX1 << ", " << srcY1
+ << ", " << dstX0 << ", " << dstY0 << ", " << dstX1 << ", "
+ << dstY1 << ", " << mask << ", "
+ << GLES2Util::GetStringBlitFilter(filter) << ")");
helper_->BlitFramebufferCHROMIUM(
srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
CheckGLError();
}
void GLES2Implementation::RenderbufferStorageMultisampleCHROMIUM(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
+ GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
GLsizei height) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRenderbufferStorageMultisampleCHROMIUM(" << GLES2Util::GetStringRenderBufferTarget(target) << ", " << samples << ", " << GLES2Util::GetStringRenderBufferFormat(internalformat) << ", " << width << ", " << height << ")"); // NOLINT
+ GPU_CLIENT_LOG(
+ "[" << GetLogPrefix() << "] glRenderbufferStorageMultisampleCHROMIUM("
+ << GLES2Util::GetStringRenderBufferTarget(target) << ", " << samples
+ << ", " << GLES2Util::GetStringRenderBufferFormat(internalformat)
+ << ", " << width << ", " << height << ")");
if (samples < 0) {
- SetGLError(
- GL_INVALID_VALUE, "glRenderbufferStorageMultisampleCHROMIUM", "samples < 0"); // NOLINT
+ SetGLError(GL_INVALID_VALUE,
+ "glRenderbufferStorageMultisampleCHROMIUM",
+ "samples < 0");
return;
}
if (width < 0) {
- SetGLError(
- GL_INVALID_VALUE, "glRenderbufferStorageMultisampleCHROMIUM", "width < 0"); // NOLINT
+ SetGLError(GL_INVALID_VALUE,
+ "glRenderbufferStorageMultisampleCHROMIUM",
+ "width < 0");
return;
}
if (height < 0) {
- SetGLError(
- GL_INVALID_VALUE, "glRenderbufferStorageMultisampleCHROMIUM", "height < 0"); // NOLINT
+ SetGLError(GL_INVALID_VALUE,
+ "glRenderbufferStorageMultisampleCHROMIUM",
+ "height < 0");
return;
}
helper_->RenderbufferStorageMultisampleCHROMIUM(
@@ -1446,10 +1746,17 @@ void GLES2Implementation::RenderbufferStorageMultisampleCHROMIUM(
}
void GLES2Implementation::RenderbufferStorageMultisampleEXT(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
+ GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
GLsizei height) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glRenderbufferStorageMultisampleEXT(" << GLES2Util::GetStringRenderBufferTarget(target) << ", " << samples << ", " << GLES2Util::GetStringRenderBufferFormat(internalformat) << ", " << width << ", " << height << ")"); // NOLINT
+ GPU_CLIENT_LOG(
+ "[" << GetLogPrefix() << "] glRenderbufferStorageMultisampleEXT("
+ << GLES2Util::GetStringRenderBufferTarget(target) << ", " << samples
+ << ", " << GLES2Util::GetStringRenderBufferFormat(internalformat)
+ << ", " << width << ", " << height << ")");
if (samples < 0) {
SetGLError(
GL_INVALID_VALUE, "glRenderbufferStorageMultisampleEXT", "samples < 0");
@@ -1470,26 +1777,47 @@ void GLES2Implementation::RenderbufferStorageMultisampleEXT(
CheckGLError();
}
-void GLES2Implementation::FramebufferTexture2DMultisampleEXT(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLsizei samples) {
+void GLES2Implementation::FramebufferTexture2DMultisampleEXT(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level,
+ GLsizei samples) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferTexture2DMultisampleEXT(" << GLES2Util::GetStringFrameBufferTarget(target) << ", " << GLES2Util::GetStringAttachment(attachment) << ", " << GLES2Util::GetStringTextureTarget(textarget) << ", " << texture << ", " << level << ", " << samples << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix()
+ << "] glFramebufferTexture2DMultisampleEXT("
+ << GLES2Util::GetStringFrameBufferTarget(target) << ", "
+ << GLES2Util::GetStringAttachment(attachment) << ", "
+ << GLES2Util::GetStringTextureTarget(textarget) << ", "
+ << texture << ", " << level << ", " << samples << ")");
+ if (level != 0) {
+ SetGLError(GL_INVALID_VALUE,
+ "glFramebufferTexture2DMultisampleEXT",
+ "level GL_INVALID_VALUE");
+ return;
+ }
if (samples < 0) {
- SetGLError(
- GL_INVALID_VALUE, "glFramebufferTexture2DMultisampleEXT", "samples < 0"); // NOLINT
+ SetGLError(GL_INVALID_VALUE,
+ "glFramebufferTexture2DMultisampleEXT",
+ "samples < 0");
return;
}
helper_->FramebufferTexture2DMultisampleEXT(
- target, attachment, textarget, texture, level, samples);
+ target, attachment, textarget, texture, samples);
CheckGLError();
}
-void GLES2Implementation::TexStorage2DEXT(
- GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
- GLsizei height) {
+void GLES2Implementation::TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalFormat,
+ GLsizei width,
+ GLsizei height) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexStorage2DEXT(" << GLES2Util::GetStringTextureTarget(target) << ", " << levels << ", " << GLES2Util::GetStringTextureInternalFormatStorage(internalFormat) << ", " << width << ", " << height << ")"); // NOLINT
+ GPU_CLIENT_LOG(
+ "[" << GetLogPrefix() << "] glTexStorage2DEXT("
+ << GLES2Util::GetStringTextureTarget(target) << ", " << levels << ", "
+ << GLES2Util::GetStringTextureInternalFormatStorage(internalFormat)
+ << ", " << width << ", " << height << ")");
if (levels < 0) {
SetGLError(GL_INVALID_VALUE, "glTexStorage2DEXT", "levels < 0");
return;
@@ -1507,17 +1835,18 @@ void GLES2Implementation::TexStorage2DEXT(
}
void GLES2Implementation::GenQueriesEXT(GLsizei n, GLuint* queries) {
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenQueriesEXT(" << n << ", " << static_cast<const void*>(queries) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenQueriesEXT(" << n << ", "
+ << static_cast<const void*>(queries) << ")");
if (n < 0) {
SetGLError(GL_INVALID_VALUE, "glGenQueriesEXT", "n < 0");
return;
}
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GetIdHandler(id_namespaces::kQueries)->
- MakeIds(this, 0, n, queries);
+ GetIdHandler(id_namespaces::kQueries)->MakeIds(this, 0, n, queries);
GenQueriesEXTHelper(n, queries);
helper_->GenQueriesEXTImmediate(n, queries);
- helper_->CommandBufferHelper::Flush();
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << queries[i]);
@@ -1528,7 +1857,8 @@ void GLES2Implementation::GenQueriesEXT(GLsizei n, GLuint* queries) {
void GLES2Implementation::DeleteQueriesEXT(GLsizei n, const GLuint* queries) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteQueriesEXT(" << n << ", " << static_cast<const void*>(queries) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteQueriesEXT(" << n << ", "
+ << static_cast<const void*>(queries) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << queries[i]);
@@ -1548,17 +1878,18 @@ void GLES2Implementation::DeleteQueriesEXT(GLsizei n, const GLuint* queries) {
}
void GLES2Implementation::GenVertexArraysOES(GLsizei n, GLuint* arrays) {
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenVertexArraysOES(" << n << ", " << static_cast<const void*>(arrays) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGenVertexArraysOES(" << n << ", "
+ << static_cast<const void*>(arrays) << ")");
if (n < 0) {
SetGLError(GL_INVALID_VALUE, "glGenVertexArraysOES", "n < 0");
return;
}
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GetIdHandler(id_namespaces::kVertexArrays)->
- MakeIds(this, 0, n, arrays);
+ GetIdHandler(id_namespaces::kVertexArrays)->MakeIds(this, 0, n, arrays);
GenVertexArraysOESHelper(n, arrays);
helper_->GenVertexArraysOESImmediate(n, arrays);
- helper_->CommandBufferHelper::Flush();
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << arrays[i]);
@@ -1567,10 +1898,11 @@ void GLES2Implementation::GenVertexArraysOES(GLsizei n, GLuint* arrays) {
CheckGLError();
}
-void GLES2Implementation::DeleteVertexArraysOES(
- GLsizei n, const GLuint* arrays) {
+void GLES2Implementation::DeleteVertexArraysOES(GLsizei n,
+ const GLuint* arrays) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteVertexArraysOES(" << n << ", " << static_cast<const void*>(arrays) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDeleteVertexArraysOES(" << n
+ << ", " << static_cast<const void*>(arrays) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < n; ++i) {
GPU_CLIENT_LOG(" " << i << ": " << arrays[i]);
@@ -1592,7 +1924,8 @@ void GLES2Implementation::DeleteVertexArraysOES(
GLboolean GLES2Implementation::IsVertexArrayOES(GLuint array) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
TRACE_EVENT0("gpu", "GLES2Implementation::IsVertexArrayOES");
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsVertexArrayOES(" << array << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glIsVertexArrayOES(" << array
+ << ")");
typedef cmds::IsVertexArrayOES::Result Result;
Result* result = GetResultAs<Result*>();
if (!result) {
@@ -1609,36 +1942,35 @@ GLboolean GLES2Implementation::IsVertexArrayOES(GLuint array) {
void GLES2Implementation::BindVertexArrayOES(GLuint array) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindVertexArrayOES(" << array << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindVertexArrayOES(" << array
+ << ")");
if (IsVertexArrayReservedId(array)) {
- SetGLError(
- GL_INVALID_OPERATION, "BindVertexArrayOES", "array reserved id");
+ SetGLError(GL_INVALID_OPERATION, "BindVertexArrayOES", "array reserved id");
return;
}
- if (BindVertexArrayHelper(array)) {
+ if (BindVertexArrayOESHelper(array)) {
helper_->BindVertexArrayOES(array);
}
CheckGLError();
}
-void GLES2Implementation::GetTranslatedShaderSourceANGLE(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) {
+void GLES2Implementation::GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_VALIDATE_DESTINATION_OPTIONAL_INITALIZATION(GLsizei, length);
- GPU_CLIENT_LOG("[" << GetLogPrefix()
- << "] glGetTranslatedShaderSourceANGLE" << "("
- << shader << ", "
- << bufsize << ", "
- << static_cast<void*>(length) << ", "
- << static_cast<void*>(source) << ")");
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glGetTranslatedShaderSourceANGLE"
+ << "(" << shader << ", " << bufsize << ", "
+ << static_cast<void*>(length) << ", "
+ << static_cast<void*>(source) << ")");
helper_->SetBucketSize(kResultBucketId, 0);
helper_->GetTranslatedShaderSourceANGLE(shader, kResultBucketId);
std::string str;
GLsizei max_size = 0;
if (GetBucketAsString(kResultBucketId, &str)) {
if (bufsize > 0) {
- max_size =
- std::min(static_cast<size_t>(bufsize) - 1, str.size());
+ max_size = std::min(static_cast<size_t>(bufsize) - 1, str.size());
memcpy(source, str.c_str(), max_size);
source[max_size] = '\0';
GPU_CLIENT_LOG("------\n" << source << "\n------");
@@ -1649,18 +1981,22 @@ void GLES2Implementation::GetTranslatedShaderSourceANGLE(
}
CheckGLError();
}
-void GLES2Implementation::TexImageIOSurface2DCHROMIUM(
- GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
- GLuint plane) {
+void GLES2Implementation::TexImageIOSurface2DCHROMIUM(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLuint ioSurfaceId,
+ GLuint plane) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexImageIOSurface2DCHROMIUM(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << width << ", " << height << ", " << ioSurfaceId << ", " << plane << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glTexImageIOSurface2DCHROMIUM("
+ << GLES2Util::GetStringTextureBindTarget(target) << ", "
+ << width << ", " << height << ", " << ioSurfaceId << ", "
+ << plane << ")");
if (width < 0) {
SetGLError(GL_INVALID_VALUE, "glTexImageIOSurface2DCHROMIUM", "width < 0");
return;
}
if (height < 0) {
- SetGLError(
- GL_INVALID_VALUE, "glTexImageIOSurface2DCHROMIUM", "height < 0");
+ SetGLError(GL_INVALID_VALUE, "glTexImageIOSurface2DCHROMIUM", "height < 0");
return;
}
helper_->TexImageIOSurface2DCHROMIUM(
@@ -1668,57 +2004,53 @@ void GLES2Implementation::TexImageIOSurface2DCHROMIUM(
CheckGLError();
}
-void GLES2Implementation::CopyTextureCHROMIUM(
- GLenum target, GLenum source_id, GLenum dest_id, GLint level,
- GLint internalformat, GLenum dest_type) {
+void GLES2Implementation::CopyTextureCHROMIUM(GLenum target,
+ GLenum source_id,
+ GLenum dest_id,
+ GLint level,
+ GLint internalformat,
+ GLenum dest_type) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTextureCHROMIUM(" << GLES2Util::GetStringEnum(target) << ", " << GLES2Util::GetStringEnum(source_id) << ", " << GLES2Util::GetStringEnum(dest_id) << ", " << level << ", " << internalformat << ", " << GLES2Util::GetStringPixelType(dest_type) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glCopyTextureCHROMIUM("
+ << GLES2Util::GetStringEnum(target) << ", "
+ << GLES2Util::GetStringEnum(source_id) << ", "
+ << GLES2Util::GetStringEnum(dest_id) << ", " << level
+ << ", " << internalformat << ", "
+ << GLES2Util::GetStringPixelType(dest_type) << ")");
helper_->CopyTextureCHROMIUM(
target, source_id, dest_id, level, internalformat, dest_type);
CheckGLError();
}
-void GLES2Implementation::ProduceTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) {
+void GLES2Implementation::BindTexImage2DCHROMIUM(GLenum target, GLint imageId) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glProduceTextureCHROMIUM(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << static_cast<const void*>(mailbox) << ")"); // NOLINT
- GPU_CLIENT_LOG("values: " << mailbox[0] << ", " << mailbox[1] << ", " << mailbox[2] << ", " << mailbox[3] << ", " << mailbox[4] << ", " << mailbox[5] << ", " << mailbox[6] << ", " << mailbox[7] << ", " << mailbox[8] << ", " << mailbox[9] << ", " << mailbox[10] << ", " << mailbox[11] << ", " << mailbox[12] << ", " << mailbox[13] << ", " << mailbox[14] << ", " << mailbox[15] << ", " << mailbox[16] << ", " << mailbox[17] << ", " << mailbox[18] << ", " << mailbox[19] << ", " << mailbox[20] << ", " << mailbox[21] << ", " << mailbox[22] << ", " << mailbox[23] << ", " << mailbox[24] << ", " << mailbox[25] << ", " << mailbox[26] << ", " << mailbox[27] << ", " << mailbox[28] << ", " << mailbox[29] << ", " << mailbox[30] << ", " << mailbox[31] << ", " << mailbox[32] << ", " << mailbox[33] << ", " << mailbox[34] << ", " << mailbox[35] << ", " << mailbox[36] << ", " << mailbox[37] << ", " << mailbox[38] << ", " << mailbox[39] << ", " << mailbox[40] << ", " << mailbox[41] << ", " << mailbox[42] << ", " << mailbox[43] << ", " << mailbox[44] << ", " << mailbox[45] << ", " << mailbox[46] << ", " << mailbox[47] << ", " << mailbox[48] << ", " << mailbox[49] << ", " << mailbox[50] << ", " << mailbox[51] << ", " << mailbox[52] << ", " << mailbox[53] << ", " << mailbox[54] << ", " << mailbox[55] << ", " << mailbox[56] << ", " << mailbox[57] << ", " << mailbox[58] << ", " << mailbox[59] << ", " << mailbox[60] << ", " << mailbox[61] << ", " << mailbox[62] << ", " << mailbox[63]); // NOLINT
- helper_->ProduceTextureCHROMIUMImmediate(target, mailbox);
- CheckGLError();
-}
-
-void GLES2Implementation::ConsumeTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) {
- GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glConsumeTextureCHROMIUM(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << static_cast<const void*>(mailbox) << ")"); // NOLINT
- GPU_CLIENT_LOG("values: " << mailbox[0] << ", " << mailbox[1] << ", " << mailbox[2] << ", " << mailbox[3] << ", " << mailbox[4] << ", " << mailbox[5] << ", " << mailbox[6] << ", " << mailbox[7] << ", " << mailbox[8] << ", " << mailbox[9] << ", " << mailbox[10] << ", " << mailbox[11] << ", " << mailbox[12] << ", " << mailbox[13] << ", " << mailbox[14] << ", " << mailbox[15] << ", " << mailbox[16] << ", " << mailbox[17] << ", " << mailbox[18] << ", " << mailbox[19] << ", " << mailbox[20] << ", " << mailbox[21] << ", " << mailbox[22] << ", " << mailbox[23] << ", " << mailbox[24] << ", " << mailbox[25] << ", " << mailbox[26] << ", " << mailbox[27] << ", " << mailbox[28] << ", " << mailbox[29] << ", " << mailbox[30] << ", " << mailbox[31] << ", " << mailbox[32] << ", " << mailbox[33] << ", " << mailbox[34] << ", " << mailbox[35] << ", " << mailbox[36] << ", " << mailbox[37] << ", " << mailbox[38] << ", " << mailbox[39] << ", " << mailbox[40] << ", " << mailbox[41] << ", " << mailbox[42] << ", " << mailbox[43] << ", " << mailbox[44] << ", " << mailbox[45] << ", " << mailbox[46] << ", " << mailbox[47] << ", " << mailbox[48] << ", " << mailbox[49] << ", " << mailbox[50] << ", " << mailbox[51] << ", " << mailbox[52] << ", " << mailbox[53] << ", " << mailbox[54] << ", " << mailbox[55] << ", " << mailbox[56] << ", " << mailbox[57] << ", " << mailbox[58] << ", " << mailbox[59] << ", " << mailbox[60] << ", " << mailbox[61] << ", " << mailbox[62] << ", " << mailbox[63]); // NOLINT
- helper_->ConsumeTextureCHROMIUMImmediate(target, mailbox);
- CheckGLError();
-}
-
-void GLES2Implementation::BindTexImage2DCHROMIUM(
- GLenum target, GLint imageId) {
- GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindTexImage2DCHROMIUM(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << imageId << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glBindTexImage2DCHROMIUM("
+ << GLES2Util::GetStringTextureBindTarget(target) << ", "
+ << imageId << ")");
helper_->BindTexImage2DCHROMIUM(target, imageId);
CheckGLError();
}
-void GLES2Implementation::ReleaseTexImage2DCHROMIUM(
- GLenum target, GLint imageId) {
+void GLES2Implementation::ReleaseTexImage2DCHROMIUM(GLenum target,
+ GLint imageId) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReleaseTexImage2DCHROMIUM(" << GLES2Util::GetStringTextureBindTarget(target) << ", " << imageId << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glReleaseTexImage2DCHROMIUM("
+ << GLES2Util::GetStringTextureBindTarget(target) << ", "
+ << imageId << ")");
helper_->ReleaseTexImage2DCHROMIUM(target, imageId);
CheckGLError();
}
-void GLES2Implementation::DiscardFramebufferEXT(
- GLenum target, GLsizei count, const GLenum* attachments) {
+void GLES2Implementation::DiscardFramebufferEXT(GLenum target,
+ GLsizei count,
+ const GLenum* attachments) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDiscardFramebufferEXT(" << GLES2Util::GetStringEnum(target) << ", " << count << ", " << static_cast<const void*>(attachments) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDiscardFramebufferEXT("
+ << GLES2Util::GetStringEnum(target) << ", " << count
+ << ", " << static_cast<const void*>(attachments) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << attachments[0 + i * 1]);
+ GPU_CLIENT_LOG(" " << i << ": " << attachments[0 + i * 1]);
}
});
if (count < 0) {
@@ -1731,24 +2063,28 @@ void GLES2Implementation::DiscardFramebufferEXT(
void GLES2Implementation::LoseContextCHROMIUM(GLenum current, GLenum other) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glLoseContextCHROMIUM(" << GLES2Util::GetStringEnum(current) << ", " << GLES2Util::GetStringEnum(other) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glLoseContextCHROMIUM("
+ << GLES2Util::GetStringResetStatus(current) << ", "
+ << GLES2Util::GetStringResetStatus(other) << ")");
helper_->LoseContextCHROMIUM(current, other);
CheckGLError();
}
void GLES2Implementation::WaitSyncPointCHROMIUM(GLuint sync_point) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glWaitSyncPointCHROMIUM(" << sync_point << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glWaitSyncPointCHROMIUM("
+ << sync_point << ")");
helper_->WaitSyncPointCHROMIUM(sync_point);
CheckGLError();
}
void GLES2Implementation::DrawBuffersEXT(GLsizei count, const GLenum* bufs) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawBuffersEXT(" << count << ", " << static_cast<const void*>(bufs) << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawBuffersEXT(" << count << ", "
+ << static_cast<const void*>(bufs) << ")");
GPU_CLIENT_LOG_CODE_BLOCK({
for (GLsizei i = 0; i < count; ++i) {
- GPU_CLIENT_LOG(" " << i << ": " << bufs[0 + i * 1]);
+ GPU_CLIENT_LOG(" " << i << ": " << bufs[0 + i * 1]);
}
});
if (count < 0) {
@@ -1761,10 +2097,43 @@ void GLES2Implementation::DrawBuffersEXT(GLsizei count, const GLenum* bufs) {
void GLES2Implementation::DiscardBackbufferCHROMIUM() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDiscardBackbufferCHROMIUM(" << ")"); // NOLINT
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDiscardBackbufferCHROMIUM("
+ << ")");
helper_->DiscardBackbufferCHROMIUM();
CheckGLError();
}
-#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_IMPL_AUTOGEN_H_
+void GLES2Implementation::ScheduleOverlayPlaneCHROMIUM(
+ GLint plane_z_order,
+ GLenum plane_transform,
+ GLuint overlay_texture_id,
+ GLint bounds_x,
+ GLint bounds_y,
+ GLint bounds_width,
+ GLint bounds_height,
+ GLfloat uv_x,
+ GLfloat uv_y,
+ GLfloat uv_width,
+ GLfloat uv_height) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG(
+ "[" << GetLogPrefix() << "] glScheduleOverlayPlaneCHROMIUM("
+ << plane_z_order << ", " << GLES2Util::GetStringEnum(plane_transform)
+ << ", " << overlay_texture_id << ", " << bounds_x << ", " << bounds_y
+ << ", " << bounds_width << ", " << bounds_height << ", " << uv_x
+ << ", " << uv_y << ", " << uv_width << ", " << uv_height << ")");
+ helper_->ScheduleOverlayPlaneCHROMIUM(plane_z_order,
+ plane_transform,
+ overlay_texture_id,
+ bounds_x,
+ bounds_y,
+ bounds_width,
+ bounds_height,
+ uv_x,
+ uv_y,
+ uv_width,
+ uv_height);
+ CheckGLError();
+}
+#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_IMPL_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation_unittest.cc b/chromium/gpu/command_buffer/client/gles2_implementation_unittest.cc
index e6e0861d188..a318ab8f33f 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation_unittest.cc
+++ b/chromium/gpu/command_buffer/client/gles2_implementation_unittest.cc
@@ -6,6 +6,8 @@
#include "gpu/command_buffer/client/gles2_implementation.h"
+#include <limits>
+
#include <GLES2/gl2ext.h>
#include <GLES2/gl2extchromium.h>
#include "base/compiler_specific.h"
@@ -167,11 +169,11 @@ class MockTransferBuffer : public TransferBufferInterface {
static const int kNumBuffers = 2;
uint8* actual_buffer() const {
- return static_cast<uint8*>(buffers_[actual_buffer_index_].ptr);
+ return static_cast<uint8*>(buffers_[actual_buffer_index_]->memory());
}
uint8* expected_buffer() const {
- return static_cast<uint8*>(buffers_[expected_buffer_index_].ptr);
+ return static_cast<uint8*>(buffers_[expected_buffer_index_]->memory());
}
uint32 AllocateExpectedTransferBuffer(size_t size) {
@@ -214,7 +216,7 @@ class MockTransferBuffer : public TransferBufferInterface {
size_t result_size_;
uint32 alignment_;
int buffer_ids_[kNumBuffers];
- gpu::Buffer buffers_[kNumBuffers];
+ scoped_refptr<Buffer> buffers_[kNumBuffers];
int actual_buffer_index_;
int expected_buffer_index_;
void* last_alloc_;
@@ -297,8 +299,65 @@ void MockTransferBuffer::FreePendingToken(void* p, unsigned int /* token */) {
last_alloc_ = NULL;
}
+// API wrapper for Buffers.
+class GenBuffersAPI {
+ public:
+ static void Gen(GLES2Implementation* gl_impl, GLsizei n, GLuint* ids) {
+ gl_impl->GenBuffers(n, ids);
+ }
+
+ static void Delete(GLES2Implementation* gl_impl,
+ GLsizei n,
+ const GLuint* ids) {
+ gl_impl->DeleteBuffers(n, ids);
+ }
+};
+
+// API wrapper for Framebuffers.
+class GenFramebuffersAPI {
+ public:
+ static void Gen(GLES2Implementation* gl_impl, GLsizei n, GLuint* ids) {
+ gl_impl->GenFramebuffers(n, ids);
+ }
+
+ static void Delete(GLES2Implementation* gl_impl,
+ GLsizei n,
+ const GLuint* ids) {
+ gl_impl->DeleteFramebuffers(n, ids);
+ }
+};
+
+// API wrapper for Renderbuffers.
+class GenRenderbuffersAPI {
+ public:
+ static void Gen(GLES2Implementation* gl_impl, GLsizei n, GLuint* ids) {
+ gl_impl->GenRenderbuffers(n, ids);
+ }
+
+ static void Delete(GLES2Implementation* gl_impl,
+ GLsizei n,
+ const GLuint* ids) {
+ gl_impl->DeleteRenderbuffers(n, ids);
+ }
+};
+
+// API wrapper for Textures.
+class GenTexturesAPI {
+ public:
+ static void Gen(GLES2Implementation* gl_impl, GLsizei n, GLuint* ids) {
+ gl_impl->GenTextures(n, ids);
+ }
+
+ static void Delete(GLES2Implementation* gl_impl,
+ GLsizei n,
+ const GLuint* ids) {
+ gl_impl->DeleteTextures(n, ids);
+ }
+};
+
class GLES2ImplementationTest : public testing::Test {
protected:
+ static const int kNumTestContexts = 2;
static const uint8 kInitialValue = 0xBD;
static const int32 kNumCommandEntries = 500;
static const int32 kCommandBufferSizeBytes =
@@ -319,7 +378,7 @@ class GLES2ImplementationTest : public testing::Test {
static const GLint kNumShaderBinaryFormats = 0;
static const GLuint kStartId = 1024;
static const GLuint kBuffersStartId =
- GLES2Implementation::kClientSideArrayId + 2;
+ GLES2Implementation::kClientSideArrayId + 2 * kNumTestContexts;
static const GLuint kFramebuffersStartId = 1;
static const GLuint kProgramsAndShadersStartId = 1;
static const GLuint kRenderbuffersStartId = 1;
@@ -329,18 +388,130 @@ class GLES2ImplementationTest : public testing::Test {
typedef MockTransferBuffer::ExpectedMemoryInfo ExpectedMemoryInfo;
- GLES2ImplementationTest()
- : commands_(NULL),
- token_(0) {
- }
+ class TestContext {
+ public:
+ TestContext() : commands_(NULL), token_(0) {}
+
+ bool Initialize(ShareGroup* share_group,
+ bool bind_generates_resource,
+ bool lose_context_when_out_of_memory) {
+ command_buffer_.reset(new StrictMock<MockClientCommandBuffer>());
+ if (!command_buffer_->Initialize())
+ return false;
+
+ transfer_buffer_.reset(
+ new MockTransferBuffer(command_buffer_.get(),
+ kTransferBufferSize,
+ GLES2Implementation::kStartingOffset,
+ GLES2Implementation::kAlignment));
+
+ helper_.reset(new GLES2CmdHelper(command_buffer()));
+ helper_->Initialize(kCommandBufferSizeBytes);
+
+ gpu_control_.reset(new StrictMock<MockClientGpuControl>());
+ EXPECT_CALL(*gpu_control_, GetCapabilities())
+ .WillOnce(testing::Return(Capabilities()));
+
+ GLES2Implementation::GLStaticState state;
+ GLES2Implementation::GLStaticState::IntState& int_state = state.int_state;
+ int_state.max_combined_texture_image_units =
+ kMaxCombinedTextureImageUnits;
+ int_state.max_cube_map_texture_size = kMaxCubeMapTextureSize;
+ int_state.max_fragment_uniform_vectors = kMaxFragmentUniformVectors;
+ int_state.max_renderbuffer_size = kMaxRenderbufferSize;
+ int_state.max_texture_image_units = kMaxTextureImageUnits;
+ int_state.max_texture_size = kMaxTextureSize;
+ int_state.max_varying_vectors = kMaxVaryingVectors;
+ int_state.max_vertex_attribs = kMaxVertexAttribs;
+ int_state.max_vertex_texture_image_units = kMaxVertexTextureImageUnits;
+ int_state.max_vertex_uniform_vectors = kMaxVertexUniformVectors;
+ int_state.num_compressed_texture_formats = kNumCompressedTextureFormats;
+ int_state.num_shader_binary_formats = kNumShaderBinaryFormats;
+ int_state.bind_generates_resource_chromium =
+ bind_generates_resource ? 1 : 0;
+
+ // This just happens to work for now because IntState has 1 GLint per
+ // state.
+ // If IntState gets more complicated this code will need to get more
+ // complicated.
+ ExpectedMemoryInfo mem1 = transfer_buffer_->GetExpectedMemory(
+ sizeof(GLES2Implementation::GLStaticState::IntState) * 2 +
+ sizeof(cmds::GetShaderPrecisionFormat::Result) * 12);
+
+ {
+ InSequence sequence;
+
+ EXPECT_CALL(*command_buffer_, OnFlush())
+ .WillOnce(SetMemory(mem1.ptr + sizeof(int_state), int_state))
+ .RetiresOnSaturation();
+ GetNextToken(); // eat the token that starting up will use.
+
+ gl_.reset(new GLES2Implementation(helper_.get(),
+ share_group,
+ transfer_buffer_.get(),
+ bind_generates_resource,
+ lose_context_when_out_of_memory,
+ gpu_control_.get()));
+
+ if (!gl_->Initialize(kTransferBufferSize,
+ kTransferBufferSize,
+ kTransferBufferSize,
+ GLES2Implementation::kNoLimit))
+ return false;
+ }
+
+ EXPECT_CALL(*command_buffer_, OnFlush()).Times(1).RetiresOnSaturation();
+ helper_->CommandBufferHelper::Finish();
+ ::testing::Mock::VerifyAndClearExpectations(gl_.get());
+
+ scoped_refptr<Buffer> ring_buffer = helper_->get_ring_buffer();
+ commands_ = static_cast<CommandBufferEntry*>(ring_buffer->memory()) +
+ command_buffer()->GetLastState().put_offset;
+ ClearCommands();
+ EXPECT_TRUE(transfer_buffer_->InSync());
+
+ ::testing::Mock::VerifyAndClearExpectations(command_buffer());
+ return true;
+ }
+
+ void TearDown() {
+ Mock::VerifyAndClear(gl_.get());
+ EXPECT_CALL(*command_buffer(), OnFlush()).Times(AnyNumber());
+ // For command buffer.
+ EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_))
+ .Times(AtLeast(1));
+ gl_.reset();
+ }
+
+ MockClientCommandBuffer* command_buffer() const {
+ return command_buffer_.get();
+ }
+
+ int GetNextToken() { return ++token_; }
+
+ void ClearCommands() {
+ scoped_refptr<Buffer> ring_buffer = helper_->get_ring_buffer();
+ memset(ring_buffer->memory(), kInitialValue, ring_buffer->size());
+ }
+
+ scoped_ptr<MockClientCommandBuffer> command_buffer_;
+ scoped_ptr<MockClientGpuControl> gpu_control_;
+ scoped_ptr<GLES2CmdHelper> helper_;
+ scoped_ptr<MockTransferBuffer> transfer_buffer_;
+ scoped_ptr<GLES2Implementation> gl_;
+ CommandBufferEntry* commands_;
+ int token_;
+ };
+
+ GLES2ImplementationTest() : commands_(NULL) {}
virtual void SetUp() OVERRIDE;
virtual void TearDown() OVERRIDE;
bool NoCommandsWritten() {
- Buffer ring_buffer = helper_->get_ring_buffer();
- const uint8* cmds = reinterpret_cast<const uint8*>(ring_buffer.ptr);
- const uint8* end = cmds + ring_buffer.size;
+ scoped_refptr<Buffer> ring_buffer = helper_->get_ring_buffer();
+ const uint8* cmds = reinterpret_cast<const uint8*>(ring_buffer->memory());
+ const uint8* end = cmds + ring_buffer->size();
for (; cmds < end; ++cmds) {
if (*cmds != kInitialValue) {
return false;
@@ -353,97 +524,51 @@ class GLES2ImplementationTest : public testing::Test {
return gl_->query_tracker_->GetQuery(id);
}
- void Initialize(bool bind_generates_resource) {
- command_buffer_.reset(new StrictMock<MockClientCommandBuffer>());
- ASSERT_TRUE(command_buffer_->Initialize());
-
- transfer_buffer_.reset(new MockTransferBuffer(
- command_buffer(),
- kTransferBufferSize,
- GLES2Implementation::kStartingOffset,
- GLES2Implementation::kAlignment));
-
- helper_.reset(new GLES2CmdHelper(command_buffer()));
- helper_->Initialize(kCommandBufferSizeBytes);
-
- gpu_control_.reset(new StrictMock<MockClientGpuControl>());
- EXPECT_CALL(*gpu_control_, GetCapabilities())
- .WillOnce(testing::Return(Capabilities()));
-
- GLES2Implementation::GLStaticState state;
- GLES2Implementation::GLStaticState::IntState& int_state = state.int_state;
- int_state.max_combined_texture_image_units = kMaxCombinedTextureImageUnits;
- int_state.max_cube_map_texture_size = kMaxCubeMapTextureSize;
- int_state.max_fragment_uniform_vectors = kMaxFragmentUniformVectors;
- int_state.max_renderbuffer_size = kMaxRenderbufferSize;
- int_state.max_texture_image_units = kMaxTextureImageUnits;
- int_state.max_texture_size = kMaxTextureSize;
- int_state.max_varying_vectors = kMaxVaryingVectors;
- int_state.max_vertex_attribs = kMaxVertexAttribs;
- int_state.max_vertex_texture_image_units = kMaxVertexTextureImageUnits;
- int_state.max_vertex_uniform_vectors = kMaxVertexUniformVectors;
- int_state.num_compressed_texture_formats = kNumCompressedTextureFormats;
- int_state.num_shader_binary_formats = kNumShaderBinaryFormats;
-
- // This just happens to work for now because IntState has 1 GLint per state.
- // If IntState gets more complicated this code will need to get more
- // complicated.
- ExpectedMemoryInfo mem1 = GetExpectedMemory(
- sizeof(GLES2Implementation::GLStaticState::IntState) * 2 +
- sizeof(cmds::GetShaderPrecisionFormat::Result) * 12);
-
- {
- InSequence sequence;
-
- EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(mem1.ptr + sizeof(int_state), int_state))
- .RetiresOnSaturation();
- GetNextToken(); // eat the token that starting up will use.
-
- gl_.reset(new GLES2Implementation(
- helper_.get(),
- NULL,
- transfer_buffer_.get(),
- bind_generates_resource,
- false /* free_everything_when_invisible */,
- gpu_control_.get()));
- ASSERT_TRUE(gl_->Initialize(
- kTransferBufferSize,
- kTransferBufferSize,
- kTransferBufferSize,
- GLES2Implementation::kNoLimit));
- }
+ struct ContextInitOptions {
+ ContextInitOptions()
+ : bind_generates_resource_client(true),
+ bind_generates_resource_service(true),
+ lose_context_when_out_of_memory(false) {}
- EXPECT_CALL(*command_buffer(), OnFlush())
- .Times(1)
- .RetiresOnSaturation();
- helper_->CommandBufferHelper::Finish();
- ::testing::Mock::VerifyAndClearExpectations(gl_.get());
+ bool bind_generates_resource_client;
+ bool bind_generates_resource_service;
+ bool lose_context_when_out_of_memory;
+ };
- Buffer ring_buffer = helper_->get_ring_buffer();
- commands_ = static_cast<CommandBufferEntry*>(ring_buffer.ptr) +
- command_buffer()->GetState().put_offset;
- ClearCommands();
- EXPECT_TRUE(transfer_buffer_->InSync());
+ bool Initialize(const ContextInitOptions& init_options) {
+ bool success = true;
+ share_group_ = new ShareGroup(init_options.bind_generates_resource_service);
- ::testing::Mock::VerifyAndClearExpectations(command_buffer());
+ for (int i = 0; i < kNumTestContexts; i++) {
+ if (!test_contexts_[i].Initialize(
+ share_group_.get(),
+ init_options.bind_generates_resource_client,
+ init_options.lose_context_when_out_of_memory))
+ success = false;
+ }
+
+ // Default to test context 0.
+ gpu_control_ = test_contexts_[0].gpu_control_.get();
+ helper_ = test_contexts_[0].helper_.get();
+ transfer_buffer_ = test_contexts_[0].transfer_buffer_.get();
+ gl_ = test_contexts_[0].gl_.get();
+ commands_ = test_contexts_[0].commands_;
+ return success;
}
MockClientCommandBuffer* command_buffer() const {
- return command_buffer_.get();
+ return test_contexts_[0].command_buffer_.get();
}
- int GetNextToken() {
- return ++token_;
- }
+ int GetNextToken() { return test_contexts_[0].GetNextToken(); }
const void* GetPut() {
return helper_->GetSpace(0);
}
void ClearCommands() {
- Buffer ring_buffer = helper_->get_ring_buffer();
- memset(ring_buffer.ptr, kInitialValue, ring_buffer.size);
+ scoped_refptr<Buffer> ring_buffer = helper_->get_ring_buffer();
+ memset(ring_buffer->memory(), kInitialValue, ring_buffer->size());
}
size_t MaxTransferBufferSize() {
@@ -473,40 +598,133 @@ class GLES2ImplementationTest : public testing::Test {
return gl_->GetError();
}
+ const std::string& GetLastError() {
+ return gl_->GetLastError();
+ }
+
bool GetBucketContents(uint32 bucket_id, std::vector<int8>* data) {
return gl_->GetBucketContents(bucket_id, data);
}
- Sequence sequence_;
- scoped_ptr<MockClientCommandBuffer> command_buffer_;
- scoped_ptr<MockClientGpuControl> gpu_control_;
- scoped_ptr<GLES2CmdHelper> helper_;
- scoped_ptr<MockTransferBuffer> transfer_buffer_;
- scoped_ptr<GLES2Implementation> gl_;
+ TestContext test_contexts_[kNumTestContexts];
+
+ scoped_refptr<ShareGroup> share_group_;
+ MockClientGpuControl* gpu_control_;
+ GLES2CmdHelper* helper_;
+ MockTransferBuffer* transfer_buffer_;
+ GLES2Implementation* gl_;
CommandBufferEntry* commands_;
- int token_;
};
void GLES2ImplementationTest::SetUp() {
- Initialize(true);
+ ContextInitOptions init_options;
+ ASSERT_TRUE(Initialize(init_options));
}
void GLES2ImplementationTest::TearDown() {
- Mock::VerifyAndClear(gl_.get());
- EXPECT_CALL(*command_buffer(), OnFlush()).Times(AnyNumber());
- // For command buffer.
- EXPECT_CALL(*command_buffer(), DestroyTransferBuffer(_))
- .Times(AtLeast(1));
- gl_.reset();
+ for (int i = 0; i < kNumTestContexts; i++)
+ test_contexts_[i].TearDown();
}
+class GLES2ImplementationManualInitTest : public GLES2ImplementationTest {
+ protected:
+ virtual void SetUp() OVERRIDE {}
+};
+
class GLES2ImplementationStrictSharedTest : public GLES2ImplementationTest {
protected:
virtual void SetUp() OVERRIDE;
+
+ template <class ResApi>
+ void FlushGenerationTest() {
+ GLuint id1, id2, id3;
+
+ // Generate valid id.
+ ResApi::Gen(gl_, 1, &id1);
+ EXPECT_NE(id1, 0u);
+
+ // Delete id1 and generate id2. id1 should not be reused.
+ ResApi::Delete(gl_, 1, &id1);
+ ResApi::Gen(gl_, 1, &id2);
+ EXPECT_NE(id2, 0u);
+ EXPECT_NE(id2, id1);
+
+ // Expect id1 reuse after Flush.
+ gl_->Flush();
+ ResApi::Gen(gl_, 1, &id3);
+ EXPECT_EQ(id3, id1);
+ }
+
+ // Ids should not be reused unless the |Deleting| context does a Flush()
+ // AND triggers a lazy release after that.
+ template <class ResApi>
+ void CrossContextGenerationTest() {
+ GLES2Implementation* gl1 = test_contexts_[0].gl_.get();
+ GLES2Implementation* gl2 = test_contexts_[1].gl_.get();
+ GLuint id1, id2, id3;
+
+ // Delete, no flush on context 1. No reuse.
+ ResApi::Gen(gl1, 1, &id1);
+ ResApi::Delete(gl1, 1, &id1);
+ ResApi::Gen(gl1, 1, &id2);
+ EXPECT_NE(id1, id2);
+
+ // Flush context 2. Still no reuse.
+ gl2->Flush();
+ ResApi::Gen(gl2, 1, &id3);
+ EXPECT_NE(id1, id3);
+ EXPECT_NE(id2, id3);
+
+ // Flush on context 1, but no lazy release. Still no reuse.
+ gl1->Flush();
+ ResApi::Gen(gl2, 1, &id3);
+ EXPECT_NE(id1, id3);
+
+ // Lazy release triggered by another Delete. Should reuse id1.
+ ResApi::Delete(gl1, 1, &id2);
+ ResApi::Gen(gl2, 1, &id3);
+ EXPECT_EQ(id1, id3);
+ }
+
+ // Same as CrossContextGenerationTest(), but triggers an Auto Flush on
+ // the Delete(). Tests an edge case regression.
+ template <class ResApi>
+ void CrossContextGenerationAutoFlushTest() {
+ GLES2Implementation* gl1 = test_contexts_[0].gl_.get();
+ GLES2Implementation* gl2 = test_contexts_[1].gl_.get();
+ GLuint id1, id2, id3;
+
+ // Delete, no flush on context 1. No reuse.
+ // By half filling the buffer, an internal flush is forced on the Delete().
+ ResApi::Gen(gl1, 1, &id1);
+ gl1->helper()->Noop(kNumCommandEntries / 2);
+ ResApi::Delete(gl1, 1, &id1);
+ ResApi::Gen(gl1, 1, &id2);
+ EXPECT_NE(id1, id2);
+
+ // Flush context 2. Still no reuse.
+ gl2->Flush();
+ ResApi::Gen(gl2, 1, &id3);
+ EXPECT_NE(id1, id3);
+ EXPECT_NE(id2, id3);
+
+ // Flush on context 1, but no lazy release. Still no reuse.
+ gl1->Flush();
+ ResApi::Gen(gl2, 1, &id3);
+ EXPECT_NE(id1, id3);
+
+ // Lazy release triggered by another Delete. Should reuse id1.
+ ResApi::Delete(gl1, 1, &id2);
+ ResApi::Gen(gl2, 1, &id3);
+ EXPECT_EQ(id1, id3);
+ }
};
void GLES2ImplementationStrictSharedTest::SetUp() {
- Initialize(false);
+ ContextInitOptions init_options;
+ init_options.bind_generates_resource_client = false;
+ init_options.bind_generates_resource_service = false;
+ ASSERT_TRUE(Initialize(init_options));
}
// GCC requires these declarations, but MSVC requires they not be present
@@ -2091,7 +2309,7 @@ TEST_F(GLES2ImplementationTest, TexImage2D) {
Cmds expected;
expected.tex_image_2d.Init(
- kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
+ kTarget, kLevel, kFormat, kWidth, kHeight, kFormat, kType,
mem1.id, mem1.offset);
expected.set_token.Init(GetNextToken());
gl_->TexImage2D(
@@ -2108,7 +2326,7 @@ TEST_F(GLES2ImplementationTest, TexImage2D) {
ExpectedMemoryInfo mem2 = GetExpectedMemory(sizeof(pixels));
Cmds2 expected2;
expected2.tex_image_2d.Init(
- kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
+ kTarget, kLevel, kFormat, kWidth, kHeight, kFormat, kType,
mem2.id, mem2.offset);
expected2.set_token.Init(GetNextToken());
const void* commands2 = GetPut();
@@ -2163,7 +2381,7 @@ TEST_F(GLES2ImplementationTest, TexImage2D2Writes) {
Cmds expected;
expected.tex_image_2d.Init(
- kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
+ kTarget, kLevel, kFormat, kWidth, kHeight, kFormat, kType,
0, 0);
expected.tex_sub_image_2d1.Init(
kTarget, kLevel, 0, 0, kWidth, kHeight / 2, kFormat, kType,
@@ -2196,7 +2414,7 @@ TEST_F(GLES2ImplementationTest, TexImage2D2Writes) {
ExpectedMemoryInfo mem3 = GetExpectedMemory(half_size);
ExpectedMemoryInfo mem4 = GetExpectedMemory(half_size);
expected.tex_image_2d.Init(
- kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
+ kTarget, kLevel, kFormat, kWidth, kHeight, kFormat, kType,
0, 0);
expected.tex_sub_image_2d1.Init(
kTarget, kLevel, 0, kHeight / 2, kWidth, kHeight / 2, kFormat, kType,
@@ -2260,7 +2478,7 @@ TEST_F(GLES2ImplementationTest, TexSubImage2DFlipY) {
Cmds expected;
expected.pixel_store_i1.Init(GL_UNPACK_ALIGNMENT, kPixelStoreUnpackAlignment);
expected.tex_image_2d.Init(
- kTarget, kLevel, kFormat, kTextureWidth, kTextureHeight, kBorder, kFormat,
+ kTarget, kLevel, kFormat, kTextureWidth, kTextureHeight, kFormat,
kType, 0, 0);
expected.pixel_store_i2.Init(GL_UNPACK_FLIP_Y_CHROMIUM, GL_TRUE);
expected.tex_sub_image_2d1.Init(kTarget, kLevel, kSubImageXOffset,
@@ -2355,9 +2573,9 @@ TEST_F(GLES2ImplementationTest, SubImageUnpack) {
const void* commands = GetPut();
gl_->PixelStorei(GL_UNPACK_ALIGNMENT, alignment);
- gl_->PixelStorei(GL_UNPACK_ROW_LENGTH, kSrcWidth);
- gl_->PixelStorei(GL_UNPACK_SKIP_PIXELS, kSrcSubImageX0);
- gl_->PixelStorei(GL_UNPACK_SKIP_ROWS, kSrcSubImageY0);
+ gl_->PixelStorei(GL_UNPACK_ROW_LENGTH_EXT, kSrcWidth);
+ gl_->PixelStorei(GL_UNPACK_SKIP_PIXELS_EXT, kSrcSubImageX0);
+ gl_->PixelStorei(GL_UNPACK_SKIP_ROWS_EXT, kSrcSubImageY0);
gl_->PixelStorei(GL_UNPACK_FLIP_Y_CHROMIUM, flip_y);
if (sub) {
gl_->TexImage2D(
@@ -2372,7 +2590,7 @@ TEST_F(GLES2ImplementationTest, SubImageUnpack) {
texSubImageExpected.pixel_store_i2.Init(
GL_UNPACK_FLIP_Y_CHROMIUM, flip_y);
texSubImageExpected.tex_image_2d.Init(
- GL_TEXTURE_2D, kLevel, kFormat, kTexWidth, kTexHeight, kBorder,
+ GL_TEXTURE_2D, kLevel, kFormat, kTexWidth, kTexHeight,
kFormat, kType, 0, 0);
texSubImageExpected.tex_sub_image_2d.Init(
GL_TEXTURE_2D, kLevel, kTexSubXOffset, kTexSubYOffset,
@@ -2390,7 +2608,7 @@ TEST_F(GLES2ImplementationTest, SubImageUnpack) {
GL_UNPACK_FLIP_Y_CHROMIUM, flip_y);
texImageExpected.tex_image_2d.Init(
GL_TEXTURE_2D, kLevel, kFormat, kSrcSubImageWidth,
- kSrcSubImageHeight, kBorder, kFormat, kType, mem.id, mem.offset);
+ kSrcSubImageHeight, kFormat, kType, mem.id, mem.offset);
EXPECT_EQ(0, memcmp(
&texImageExpected, commands, sizeof(texImageExpected)));
}
@@ -2413,6 +2631,93 @@ TEST_F(GLES2ImplementationTest, SubImageUnpack) {
}
}
+// Test texture related calls with invalid arguments.
+TEST_F(GLES2ImplementationTest, TextureInvalidArguments) {
+ struct Cmds {
+ cmds::TexImage2D tex_image_2d;
+ cmd::SetToken set_token;
+ };
+ const GLenum kTarget = GL_TEXTURE_2D;
+ const GLint kLevel = 0;
+ const GLenum kFormat = GL_RGB;
+ const GLsizei kWidth = 3;
+ const GLsizei kHeight = 4;
+ const GLint kBorder = 0;
+ const GLint kInvalidBorder = 1;
+ const GLenum kType = GL_UNSIGNED_BYTE;
+ const GLint kPixelStoreUnpackAlignment = 4;
+ static uint8 pixels[] = {
+ 11, 12, 13, 13, 14, 15, 15, 16, 17, 101, 102, 103,
+ 21, 22, 23, 23, 24, 25, 25, 26, 27, 201, 202, 203,
+ 31, 32, 33, 33, 34, 35, 35, 36, 37, 123, 124, 125,
+ 41, 42, 43, 43, 44, 45, 45, 46, 47,
+ };
+
+ // Verify that something works.
+
+ ExpectedMemoryInfo mem1 = GetExpectedMemory(sizeof(pixels));
+
+ Cmds expected;
+ expected.tex_image_2d.Init(
+ kTarget, kLevel, kFormat, kWidth, kHeight, kFormat, kType,
+ mem1.id, mem1.offset);
+ expected.set_token.Init(GetNextToken());
+ gl_->TexImage2D(
+ kTarget, kLevel, kFormat, kWidth, kHeight, kBorder, kFormat, kType,
+ pixels);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+ EXPECT_TRUE(CheckRect(
+ kWidth, kHeight, kFormat, kType, kPixelStoreUnpackAlignment, false,
+ pixels, mem1.ptr));
+
+ ClearCommands();
+
+ // Use invalid border.
+ gl_->TexImage2D(
+ kTarget, kLevel, kFormat, kWidth, kHeight, kInvalidBorder, kFormat, kType,
+ pixels);
+
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+
+ ClearCommands();
+
+ gl_->AsyncTexImage2DCHROMIUM(
+ kTarget, kLevel, kFormat, kWidth, kHeight, kInvalidBorder, kFormat, kType,
+ NULL);
+
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+
+ ClearCommands();
+
+ // Checking for CompressedTexImage2D argument validation is a bit tricky due
+ // to (runtime-detected) compression formats. Try to infer the error with an
+ // aux check.
+ const GLenum kCompressedFormat = GL_ETC1_RGB8_OES;
+ gl_->CompressedTexImage2D(
+ kTarget, kLevel, kCompressedFormat, kWidth, kHeight, kBorder,
+ arraysize(pixels), pixels);
+
+ // In the above, kCompressedFormat and arraysize(pixels) are possibly wrong
+ // values. First ensure that these do not cause failures at the client. If
+ // this check ever fails, it probably means that client checks more than at
+ // the time of writing of this test. In this case, more code needs to be
+ // written for this test.
+ EXPECT_FALSE(NoCommandsWritten());
+
+ ClearCommands();
+
+ // Changing border to invalid border should make the call fail at the client
+ // checks.
+ gl_->CompressedTexImage2D(
+ kTarget, kLevel, kCompressedFormat, kWidth, kHeight, kInvalidBorder,
+ arraysize(pixels), pixels);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+}
+
+
// Binds can not be cached with bind_generates_resource = false because
// our id might not be valid. More specifically if you bind on contextA then
// delete on contextB the resource is still bound on contextA but GetInterger
@@ -2444,32 +2749,56 @@ TEST_F(GLES2ImplementationStrictSharedTest, BindsNotCached) {
}
}
-TEST_F(GLES2ImplementationTest, CreateStreamTextureCHROMIUM) {
- const GLuint kTextureId = 123;
- const GLuint kResult = 456;
-
- struct Cmds {
- cmds::CreateStreamTextureCHROMIUM create_stream;
- };
-
- ExpectedMemoryInfo result1 =
- GetExpectedResultMemory(
- sizeof(cmds::CreateStreamTextureCHROMIUM::Result));
- ExpectedMemoryInfo result2 =
- GetExpectedResultMemory(sizeof(cmds::GetError::Result));
-
- Cmds expected;
- expected.create_stream.Init(kTextureId, result1.id, result1.offset);
+// glGen* Ids must not be reused until glDelete* commands have been
+// flushed by glFlush.
+TEST_F(GLES2ImplementationStrictSharedTest, FlushGenerationTestBuffers) {
+ FlushGenerationTest<GenBuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest, FlushGenerationTestFramebuffers) {
+ FlushGenerationTest<GenFramebuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest, FlushGenerationTestRenderbuffers) {
+ FlushGenerationTest<GenRenderbuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest, FlushGenerationTestTextures) {
+ FlushGenerationTest<GenTexturesAPI>();
+}
- EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, kResult))
- .WillOnce(SetMemory(result2.ptr, GLuint(GL_NO_ERROR)))
- .RetiresOnSaturation();
+// glGen* Ids must not be reused cross-context until glDelete* commands are
+// flushed by glFlush, and the Ids are lazily freed after.
+TEST_F(GLES2ImplementationStrictSharedTest, CrossContextGenerationTestBuffers) {
+ CrossContextGenerationTest<GenBuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest,
+ CrossContextGenerationTestFramebuffers) {
+ CrossContextGenerationTest<GenFramebuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest,
+ CrossContextGenerationTestRenderbuffers) {
+ CrossContextGenerationTest<GenRenderbuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest,
+ CrossContextGenerationTestTextures) {
+ CrossContextGenerationTest<GenTexturesAPI>();
+}
- GLuint handle = gl_->CreateStreamTextureCHROMIUM(kTextureId);
- EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
- EXPECT_EQ(handle, kResult);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), gl_->GetError());
+// Test Delete which causes auto flush. Tests a regression case that occurred
+// in testing.
+TEST_F(GLES2ImplementationStrictSharedTest,
+ CrossContextGenerationAutoFlushTestBuffers) {
+ CrossContextGenerationAutoFlushTest<GenBuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest,
+ CrossContextGenerationAutoFlushTestFramebuffers) {
+ CrossContextGenerationAutoFlushTest<GenFramebuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest,
+ CrossContextGenerationAutoFlushTestRenderbuffers) {
+ CrossContextGenerationAutoFlushTest<GenRenderbuffersAPI>();
+}
+TEST_F(GLES2ImplementationStrictSharedTest,
+ CrossContextGenerationAutoFlushTestTextures) {
+ CrossContextGenerationAutoFlushTest<GenTexturesAPI>();
}
TEST_F(GLES2ImplementationTest, GetString) {
@@ -2480,7 +2809,8 @@ TEST_F(GLES2ImplementationTest, GetString) {
const char* expected_str =
"foobar "
"GL_CHROMIUM_flipy "
- "GL_EXT_unpack_subimage";
+ "GL_EXT_unpack_subimage "
+ "GL_CHROMIUM_map_sub";
const char kBad = 0x12;
struct Cmds {
cmd::SetBucketSize set_bucket_size1;
@@ -2668,9 +2998,6 @@ TEST_F(GLES2ImplementationTest, BeginEndQueryEXT) {
EXPECT_TRUE(NoCommandsWritten());
EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
- // Test BeginQueryEXT fails if id not GENed.
- // TODO(gman):
-
// Test BeginQueryEXT inserts command.
struct BeginCmds {
cmds::BeginQueryEXT begin_query;
@@ -2724,7 +3051,7 @@ TEST_F(GLES2ImplementationTest, BeginEndQueryEXT) {
EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
// Test 2nd Begin/End increments count.
- uint32 old_submit_count = query->submit_count();
+ base::subtle::Atomic32 old_submit_count = query->submit_count();
gl_->BeginQueryEXT(GL_ANY_SAMPLES_PASSED_EXT, id1);
EXPECT_NE(old_submit_count, query->submit_count());
expected_end_cmds.end_query.Init(
@@ -2758,7 +3085,6 @@ TEST_F(GLES2ImplementationTest, BeginEndQueryEXT) {
// Test GetQueryObjectuivEXT CheckResultsAvailable
ClearCommands();
gl_->GetQueryObjectuivEXT(id1, GL_QUERY_RESULT_AVAILABLE_EXT, &available);
- EXPECT_TRUE(NoCommandsWritten());
EXPECT_EQ(0u, available);
}
@@ -2873,6 +3199,212 @@ TEST_F(GLES2ImplementationTest, Enable) {
EXPECT_TRUE(NoCommandsWritten());
}
+TEST_F(GLES2ImplementationTest, ConsumeTextureCHROMIUM) {
+ struct Cmds {
+ cmds::ConsumeTextureCHROMIUMImmediate cmd;
+ GLbyte data[64];
+ };
+
+ Mailbox mailbox = Mailbox::Generate();
+ Cmds expected;
+ expected.cmd.Init(GL_TEXTURE_2D, mailbox.name);
+ gl_->ConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
+TEST_F(GLES2ImplementationTest, CreateAndConsumeTextureCHROMIUM) {
+ struct Cmds {
+ cmds::CreateAndConsumeTextureCHROMIUMImmediate cmd;
+ GLbyte data[64];
+ };
+
+ Mailbox mailbox = Mailbox::Generate();
+ Cmds expected;
+ expected.cmd.Init(GL_TEXTURE_2D, kTexturesStartId, mailbox.name);
+ GLuint id = gl_->CreateAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+ EXPECT_EQ(kTexturesStartId, id);
+}
+
+TEST_F(GLES2ImplementationTest, ProduceTextureCHROMIUM) {
+ struct Cmds {
+ cmds::ProduceTextureCHROMIUMImmediate cmd;
+ GLbyte data[64];
+ };
+
+ Mailbox mailbox = Mailbox::Generate();
+ Cmds expected;
+ expected.cmd.Init(GL_TEXTURE_2D, mailbox.name);
+ gl_->ProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
+TEST_F(GLES2ImplementationTest, ProduceTextureDirectCHROMIUM) {
+ struct Cmds {
+ cmds::ProduceTextureDirectCHROMIUMImmediate cmd;
+ GLbyte data[64];
+ };
+
+ Mailbox mailbox = Mailbox::Generate();
+ Cmds expected;
+ expected.cmd.Init(kTexturesStartId, GL_TEXTURE_2D, mailbox.name);
+ gl_->ProduceTextureDirectCHROMIUM(
+ kTexturesStartId, GL_TEXTURE_2D, mailbox.name);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
+TEST_F(GLES2ImplementationTest, LimitSizeAndOffsetTo32Bit) {
+ GLsizeiptr size;
+ GLintptr offset;
+ if (sizeof(size) <= 4 || sizeof(offset) <= 4)
+ return;
+ // The below two casts should be no-op, as we return early if
+ // it's 32-bit system.
+ int64 value64 = 0x100000000;
+ size = static_cast<GLsizeiptr>(value64);
+ offset = static_cast<GLintptr>(value64);
+
+ const char kSizeOverflowMessage[] = "size more than 32-bit";
+ const char kOffsetOverflowMessage[] = "offset more than 32-bit";
+
+ const GLfloat buf[] = { 1.0, 1.0, 1.0, 1.0 };
+ const GLubyte indices[] = { 0 };
+
+ const GLuint kClientArrayBufferId = 0x789;
+ const GLuint kClientElementArrayBufferId = 0x790;
+ gl_->BindBuffer(GL_ARRAY_BUFFER, kClientArrayBufferId);
+ gl_->BindBuffer(GL_ELEMENT_ARRAY_BUFFER, kClientElementArrayBufferId);
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+
+ // Call BufferData() should succeed with legal paramaters.
+ gl_->BufferData(GL_ARRAY_BUFFER, sizeof(buf), buf, GL_DYNAMIC_DRAW);
+ gl_->BufferData(
+ GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_DYNAMIC_DRAW);
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+
+ // BufferData: size
+ gl_->BufferData(GL_ARRAY_BUFFER, size, buf, GL_DYNAMIC_DRAW);
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
+ EXPECT_STREQ(kSizeOverflowMessage, GetLastError().c_str());
+
+ // Call BufferSubData() should succeed with legal paramaters.
+ gl_->BufferSubData(GL_ARRAY_BUFFER, 0, sizeof(buf[0]), buf);
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+
+ // BufferSubData: offset
+ gl_->BufferSubData(GL_ARRAY_BUFFER, offset, 1, buf);
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
+ EXPECT_STREQ(kOffsetOverflowMessage, GetLastError().c_str());
+
+ // BufferSubData: size
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+ gl_->BufferSubData(GL_ARRAY_BUFFER, 0, size, buf);
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
+ EXPECT_STREQ(kSizeOverflowMessage, GetLastError().c_str());
+
+ // Call MapBufferSubDataCHROMIUM() should succeed with legal paramaters.
+ void* mem =
+ gl_->MapBufferSubDataCHROMIUM(GL_ARRAY_BUFFER, 0, 1, GL_WRITE_ONLY);
+ EXPECT_TRUE(NULL != mem);
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+ gl_->UnmapBufferSubDataCHROMIUM(mem);
+
+ // MapBufferSubDataCHROMIUM: offset
+ EXPECT_TRUE(NULL == gl_->MapBufferSubDataCHROMIUM(
+ GL_ARRAY_BUFFER, offset, 1, GL_WRITE_ONLY));
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
+ EXPECT_STREQ(kOffsetOverflowMessage, GetLastError().c_str());
+
+ // MapBufferSubDataCHROMIUM: size
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+ EXPECT_TRUE(NULL == gl_->MapBufferSubDataCHROMIUM(
+ GL_ARRAY_BUFFER, 0, size, GL_WRITE_ONLY));
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
+ EXPECT_STREQ(kSizeOverflowMessage, GetLastError().c_str());
+
+ // Call DrawElements() should succeed with legal paramaters.
+ gl_->DrawElements(GL_POINTS, 1, GL_UNSIGNED_BYTE, NULL);
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+
+ // DrawElements: offset
+ gl_->DrawElements(
+ GL_POINTS, 1, GL_UNSIGNED_BYTE, reinterpret_cast<void*>(offset));
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
+ EXPECT_STREQ(kOffsetOverflowMessage, GetLastError().c_str());
+
+ // Call DrawElementsInstancedANGLE() should succeed with legal paramaters.
+ gl_->DrawElementsInstancedANGLE(GL_POINTS, 1, GL_UNSIGNED_BYTE, NULL, 1);
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+
+ // DrawElementsInstancedANGLE: offset
+ gl_->DrawElementsInstancedANGLE(
+ GL_POINTS, 1, GL_UNSIGNED_BYTE, reinterpret_cast<void*>(offset), 1);
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
+ EXPECT_STREQ(kOffsetOverflowMessage, GetLastError().c_str());
+
+ // Call VertexAttribPointer() should succeed with legal paramaters.
+ const GLuint kAttribIndex = 1;
+ const GLsizei kStride = 4;
+ gl_->VertexAttribPointer(
+ kAttribIndex, 1, GL_FLOAT, GL_FALSE, kStride, NULL);
+ EXPECT_EQ(GL_NO_ERROR, CheckError());
+
+ // VertexAttribPointer: offset
+ gl_->VertexAttribPointer(
+ kAttribIndex, 1, GL_FLOAT, GL_FALSE, kStride,
+ reinterpret_cast<void*>(offset));
+ EXPECT_EQ(GL_INVALID_OPERATION, CheckError());
+ EXPECT_STREQ(kOffsetOverflowMessage, GetLastError().c_str());
+}
+
+TEST_F(GLES2ImplementationManualInitTest, LoseContextOnOOM) {
+ ContextInitOptions init_options;
+ init_options.lose_context_when_out_of_memory = true;
+ ASSERT_TRUE(Initialize(init_options));
+
+ struct Cmds {
+ cmds::LoseContextCHROMIUM cmd;
+ };
+
+ GLsizei max = std::numeric_limits<GLsizei>::max();
+ EXPECT_CALL(*gpu_control_, CreateGpuMemoryBuffer(max, max, _, _, _))
+ .WillOnce(Return(static_cast<gfx::GpuMemoryBuffer*>(NULL)));
+ gl_->CreateImageCHROMIUM(max, max, 0, GL_IMAGE_MAP_CHROMIUM);
+ // The context should be lost.
+ Cmds expected;
+ expected.cmd.Init(GL_GUILTY_CONTEXT_RESET_ARB, GL_UNKNOWN_CONTEXT_RESET_ARB);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
+TEST_F(GLES2ImplementationManualInitTest, NoLoseContextOnOOM) {
+ ContextInitOptions init_options;
+ ASSERT_TRUE(Initialize(init_options));
+
+ struct Cmds {
+ cmds::LoseContextCHROMIUM cmd;
+ };
+
+ GLsizei max = std::numeric_limits<GLsizei>::max();
+ EXPECT_CALL(*gpu_control_, CreateGpuMemoryBuffer(max, max, _, _, _))
+ .WillOnce(Return(static_cast<gfx::GpuMemoryBuffer*>(NULL)));
+ gl_->CreateImageCHROMIUM(max, max, 0, GL_IMAGE_MAP_CHROMIUM);
+ // The context should not be lost.
+ EXPECT_TRUE(NoCommandsWritten());
+}
+
+TEST_F(GLES2ImplementationManualInitTest, FailInitOnBGRMismatch1) {
+ ContextInitOptions init_options;
+ init_options.bind_generates_resource_client = false;
+ init_options.bind_generates_resource_service = true;
+ EXPECT_FALSE(Initialize(init_options));
+}
+
+TEST_F(GLES2ImplementationManualInitTest, FailInitOnBGRMismatch2) {
+ ContextInitOptions init_options;
+ init_options.bind_generates_resource_client = true;
+ init_options.bind_generates_resource_service = false;
+ EXPECT_FALSE(Initialize(init_options));
+}
#include "gpu/command_buffer/client/gles2_implementation_unittest_autogen.h"
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/chromium/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
index 38e32a69b25..d75697e357e 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file is included by gles2_implementation.h to declare the
@@ -11,7 +13,6 @@
#ifndef GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_UNITTEST_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_UNITTEST_AUTOGEN_H_
-
TEST_F(GLES2ImplementationTest, AttachShader) {
struct Cmds {
cmds::AttachShader cmd;
@@ -126,14 +127,13 @@ TEST_F(GLES2ImplementationTest, CheckFramebufferStatus) {
cmds::CheckFramebufferStatus cmd;
};
- typedef cmds::CheckFramebufferStatus::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::CheckFramebufferStatus::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->CheckFramebufferStatus(1);
@@ -168,9 +168,9 @@ TEST_F(GLES2ImplementationTest, ClearDepthf) {
cmds::ClearDepthf cmd;
};
Cmds expected;
- expected.cmd.Init(1);
+ expected.cmd.Init(0.5f);
- gl_->ClearDepthf(1);
+ gl_->ClearDepthf(0.5f);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
@@ -214,12 +214,18 @@ TEST_F(GLES2ImplementationTest, CopyTexImage2D) {
cmds::CopyTexImage2D cmd;
};
Cmds expected;
- expected.cmd.Init(GL_TEXTURE_2D, 2, GL_ALPHA, 4, 5, 6, 7, 0);
+ expected.cmd.Init(GL_TEXTURE_2D, 2, GL_ALPHA, 4, 5, 6, 7);
gl_->CopyTexImage2D(GL_TEXTURE_2D, 2, GL_ALPHA, 4, 5, 6, 7, 0);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
+TEST_F(GLES2ImplementationTest, CopyTexImage2DInvalidConstantArg7) {
+ gl_->CopyTexImage2D(GL_TEXTURE_2D, 2, GL_ALPHA, 4, 5, 6, 7, 1);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+}
+
TEST_F(GLES2ImplementationTest, CopyTexSubImage2D) {
struct Cmds {
cmds::CopyTexSubImage2D cmd;
@@ -243,7 +249,7 @@ TEST_F(GLES2ImplementationTest, CullFace) {
}
TEST_F(GLES2ImplementationTest, DeleteBuffers) {
- GLuint ids[2] = { kBuffersStartId, kBuffersStartId + 1 };
+ GLuint ids[2] = {kBuffersStartId, kBuffersStartId + 1};
struct Cmds {
cmds::DeleteBuffersImmediate del;
GLuint data[2];
@@ -257,7 +263,7 @@ TEST_F(GLES2ImplementationTest, DeleteBuffers) {
}
TEST_F(GLES2ImplementationTest, DeleteFramebuffers) {
- GLuint ids[2] = { kFramebuffersStartId, kFramebuffersStartId + 1 };
+ GLuint ids[2] = {kFramebuffersStartId, kFramebuffersStartId + 1};
struct Cmds {
cmds::DeleteFramebuffersImmediate del;
GLuint data[2];
@@ -282,7 +288,7 @@ TEST_F(GLES2ImplementationTest, DeleteProgram) {
}
TEST_F(GLES2ImplementationTest, DeleteRenderbuffers) {
- GLuint ids[2] = { kRenderbuffersStartId, kRenderbuffersStartId + 1 };
+ GLuint ids[2] = {kRenderbuffersStartId, kRenderbuffersStartId + 1};
struct Cmds {
cmds::DeleteRenderbuffersImmediate del;
GLuint data[2];
@@ -307,7 +313,7 @@ TEST_F(GLES2ImplementationTest, DeleteShader) {
}
TEST_F(GLES2ImplementationTest, DeleteTextures) {
- GLuint ids[2] = { kTexturesStartId, kTexturesStartId + 1 };
+ GLuint ids[2] = {kTexturesStartId, kTexturesStartId + 1};
struct Cmds {
cmds::DeleteTexturesImmediate del;
GLuint data[2];
@@ -425,13 +431,20 @@ TEST_F(GLES2ImplementationTest, FramebufferTexture2D) {
cmds::FramebufferTexture2D cmd;
};
Cmds expected;
- expected.cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 0);
+ expected.cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4);
gl_->FramebufferTexture2D(
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 0);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
+TEST_F(GLES2ImplementationTest, FramebufferTexture2DInvalidConstantArg4) {
+ gl_->FramebufferTexture2D(
+ GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 1);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+}
+
TEST_F(GLES2ImplementationTest, FrontFace) {
struct Cmds {
cmds::FrontFace cmd;
@@ -444,7 +457,9 @@ TEST_F(GLES2ImplementationTest, FrontFace) {
}
TEST_F(GLES2ImplementationTest, GenBuffers) {
- GLuint ids[2] = { 0, };
+ GLuint ids[2] = {
+ 0,
+ };
struct Cmds {
cmds::GenBuffersImmediate gen;
GLuint data[2];
@@ -471,7 +486,9 @@ TEST_F(GLES2ImplementationTest, GenerateMipmap) {
}
TEST_F(GLES2ImplementationTest, GenFramebuffers) {
- GLuint ids[2] = { 0, };
+ GLuint ids[2] = {
+ 0,
+ };
struct Cmds {
cmds::GenFramebuffersImmediate gen;
GLuint data[2];
@@ -487,7 +504,9 @@ TEST_F(GLES2ImplementationTest, GenFramebuffers) {
}
TEST_F(GLES2ImplementationTest, GenRenderbuffers) {
- GLuint ids[2] = { 0, };
+ GLuint ids[2] = {
+ 0,
+ };
struct Cmds {
cmds::GenRenderbuffersImmediate gen;
GLuint data[2];
@@ -503,7 +522,9 @@ TEST_F(GLES2ImplementationTest, GenRenderbuffers) {
}
TEST_F(GLES2ImplementationTest, GenTextures) {
- GLuint ids[2] = { 0, };
+ GLuint ids[2] = {
+ 0,
+ };
struct Cmds {
cmds::GenTexturesImmediate gen;
GLuint data[2];
@@ -581,14 +602,18 @@ TEST_F(GLES2ImplementationTest, GetFramebufferAttachmentParameteriv) {
Result::Type result = 0;
Cmds expected;
ExpectedMemoryInfo result1 = GetExpectedResultMemory(4);
- expected.cmd.Init(
- 123, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
- result1.id, result1.offset);
+ expected.cmd.Init(123,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ result1.id,
+ result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
.WillOnce(SetMemory(result1.ptr, SizedResultHelper<Result::Type>(1)))
.RetiresOnSaturation();
gl_->GetFramebufferAttachmentParameteriv(
- 123, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ 123,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
&result);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
EXPECT_EQ(static_cast<Result::Type>(1), result);
@@ -754,14 +779,13 @@ TEST_F(GLES2ImplementationTest, IsBuffer) {
cmds::IsBuffer cmd;
};
- typedef cmds::IsBuffer::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::IsBuffer::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->IsBuffer(1);
@@ -774,14 +798,13 @@ TEST_F(GLES2ImplementationTest, IsEnabled) {
cmds::IsEnabled cmd;
};
- typedef cmds::IsEnabled::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::IsEnabled::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->IsEnabled(1);
@@ -794,14 +817,13 @@ TEST_F(GLES2ImplementationTest, IsFramebuffer) {
cmds::IsFramebuffer cmd;
};
- typedef cmds::IsFramebuffer::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::IsFramebuffer::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->IsFramebuffer(1);
@@ -814,14 +836,13 @@ TEST_F(GLES2ImplementationTest, IsProgram) {
cmds::IsProgram cmd;
};
- typedef cmds::IsProgram::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::IsProgram::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->IsProgram(1);
@@ -834,14 +855,13 @@ TEST_F(GLES2ImplementationTest, IsRenderbuffer) {
cmds::IsRenderbuffer cmd;
};
- typedef cmds::IsRenderbuffer::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::IsRenderbuffer::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->IsRenderbuffer(1);
@@ -854,14 +874,13 @@ TEST_F(GLES2ImplementationTest, IsShader) {
cmds::IsShader cmd;
};
- typedef cmds::IsShader::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::IsShader::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->IsShader(1);
@@ -874,14 +893,13 @@ TEST_F(GLES2ImplementationTest, IsTexture) {
cmds::IsTexture cmd;
};
- typedef cmds::IsTexture::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::IsTexture::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->IsTexture(1);
@@ -894,9 +912,9 @@ TEST_F(GLES2ImplementationTest, LineWidth) {
cmds::LineWidth cmd;
};
Cmds expected;
- expected.cmd.Init(1);
+ expected.cmd.Init(0.5f);
- gl_->LineWidth(1);
+ gl_->LineWidth(0.5f);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
@@ -1048,9 +1066,9 @@ TEST_F(GLES2ImplementationTest, TexParameterf) {
cmds::TexParameterf cmd;
};
Cmds expected;
- expected.cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 3);
+ expected.cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- gl_->TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 3);
+ gl_->TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
@@ -1075,9 +1093,9 @@ TEST_F(GLES2ImplementationTest, TexParameteri) {
cmds::TexParameteri cmd;
};
Cmds expected;
- expected.cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 3);
+ expected.cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, 3);
+ gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
@@ -1342,11 +1360,23 @@ TEST_F(GLES2ImplementationTest, UniformMatrix2fv) {
data[ii][jj] = static_cast<GLfloat>(ii * 4 + jj);
}
}
- expected.cmd.Init(1, 2, false, &data[0][0]);
+ expected.cmd.Init(1, 2, &data[0][0]);
gl_->UniformMatrix2fv(1, 2, false, &data[0][0]);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
+TEST_F(GLES2ImplementationTest, UniformMatrix2fvInvalidConstantArg2) {
+ GLfloat data[2][4] = {{0}};
+ for (int ii = 0; ii < 2; ++ii) {
+ for (int jj = 0; jj < 4; ++jj) {
+ data[ii][jj] = static_cast<GLfloat>(ii * 4 + jj);
+ }
+ }
+ gl_->UniformMatrix2fv(1, 2, true, &data[0][0]);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+}
+
TEST_F(GLES2ImplementationTest, UniformMatrix3fv) {
GLfloat data[2][9] = {{0}};
struct Cmds {
@@ -1360,11 +1390,23 @@ TEST_F(GLES2ImplementationTest, UniformMatrix3fv) {
data[ii][jj] = static_cast<GLfloat>(ii * 9 + jj);
}
}
- expected.cmd.Init(1, 2, false, &data[0][0]);
+ expected.cmd.Init(1, 2, &data[0][0]);
gl_->UniformMatrix3fv(1, 2, false, &data[0][0]);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
+TEST_F(GLES2ImplementationTest, UniformMatrix3fvInvalidConstantArg2) {
+ GLfloat data[2][9] = {{0}};
+ for (int ii = 0; ii < 2; ++ii) {
+ for (int jj = 0; jj < 9; ++jj) {
+ data[ii][jj] = static_cast<GLfloat>(ii * 9 + jj);
+ }
+ }
+ gl_->UniformMatrix3fv(1, 2, true, &data[0][0]);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+}
+
TEST_F(GLES2ImplementationTest, UniformMatrix4fv) {
GLfloat data[2][16] = {{0}};
struct Cmds {
@@ -1378,11 +1420,23 @@ TEST_F(GLES2ImplementationTest, UniformMatrix4fv) {
data[ii][jj] = static_cast<GLfloat>(ii * 16 + jj);
}
}
- expected.cmd.Init(1, 2, false, &data[0][0]);
+ expected.cmd.Init(1, 2, &data[0][0]);
gl_->UniformMatrix4fv(1, 2, false, &data[0][0]);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
+TEST_F(GLES2ImplementationTest, UniformMatrix4fvInvalidConstantArg2) {
+ GLfloat data[2][16] = {{0}};
+ for (int ii = 0; ii < 2; ++ii) {
+ for (int jj = 0; jj < 16; ++jj) {
+ data[ii][jj] = static_cast<GLfloat>(ii * 16 + jj);
+ }
+ }
+ gl_->UniformMatrix4fv(1, 2, true, &data[0][0]);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+}
+
TEST_F(GLES2ImplementationTest, UseProgram) {
struct Cmds {
cmds::UseProgram cmd;
@@ -1392,6 +1446,9 @@ TEST_F(GLES2ImplementationTest, UseProgram) {
gl_->UseProgram(1);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+ ClearCommands();
+ gl_->UseProgram(1);
+ EXPECT_TRUE(NoCommandsWritten());
}
TEST_F(GLES2ImplementationTest, ValidateProgram) {
@@ -1563,14 +1620,21 @@ TEST_F(GLES2ImplementationTest, FramebufferTexture2DMultisampleEXT) {
cmds::FramebufferTexture2DMultisampleEXT cmd;
};
Cmds expected;
- expected.cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 0, 6);
+ expected.cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 6);
gl_->FramebufferTexture2DMultisampleEXT(
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 0, 6);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
+TEST_F(GLES2ImplementationTest,
+ FramebufferTexture2DMultisampleEXTInvalidConstantArg4) {
+ gl_->FramebufferTexture2DMultisampleEXT(
+ GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 4, 1, 6);
+ EXPECT_TRUE(NoCommandsWritten());
+ EXPECT_EQ(GL_INVALID_VALUE, CheckError());
+}
+
TEST_F(GLES2ImplementationTest, TexStorage2DEXT) {
struct Cmds {
cmds::TexStorage2DEXT cmd;
@@ -1583,7 +1647,9 @@ TEST_F(GLES2ImplementationTest, TexStorage2DEXT) {
}
TEST_F(GLES2ImplementationTest, GenQueriesEXT) {
- GLuint ids[2] = { 0, };
+ GLuint ids[2] = {
+ 0,
+ };
struct Cmds {
cmds::GenQueriesEXTImmediate gen;
GLuint data[2];
@@ -1599,7 +1665,7 @@ TEST_F(GLES2ImplementationTest, GenQueriesEXT) {
}
TEST_F(GLES2ImplementationTest, DeleteQueriesEXT) {
- GLuint ids[2] = { kQueriesStartId, kQueriesStartId + 1 };
+ GLuint ids[2] = {kQueriesStartId, kQueriesStartId + 1};
struct Cmds {
cmds::DeleteQueriesEXTImmediate del;
GLuint data[2];
@@ -1627,7 +1693,9 @@ TEST_F(GLES2ImplementationTest, PopGroupMarkerEXT) {
}
TEST_F(GLES2ImplementationTest, GenVertexArraysOES) {
- GLuint ids[2] = { 0, };
+ GLuint ids[2] = {
+ 0,
+ };
struct Cmds {
cmds::GenVertexArraysOESImmediate gen;
GLuint data[2];
@@ -1643,7 +1711,7 @@ TEST_F(GLES2ImplementationTest, GenVertexArraysOES) {
}
TEST_F(GLES2ImplementationTest, DeleteVertexArraysOES) {
- GLuint ids[2] = { kVertexArraysStartId, kVertexArraysStartId + 1 };
+ GLuint ids[2] = {kVertexArraysStartId, kVertexArraysStartId + 1};
struct Cmds {
cmds::DeleteVertexArraysOESImmediate del;
GLuint data[2];
@@ -1661,14 +1729,13 @@ TEST_F(GLES2ImplementationTest, IsVertexArrayOES) {
cmds::IsVertexArrayOES cmd;
};
- typedef cmds::IsVertexArrayOES::Result Result;
Cmds expected;
ExpectedMemoryInfo result1 =
GetExpectedResultMemory(sizeof(cmds::IsVertexArrayOES::Result));
expected.cmd.Init(1, result1.id, result1.offset);
EXPECT_CALL(*command_buffer(), OnFlush())
- .WillOnce(SetMemory(result1.ptr, uint32(1)))
+ .WillOnce(SetMemory(result1.ptr, uint32_t(1)))
.RetiresOnSaturation();
GLboolean result = gl_->IsVertexArrayOES(1);
@@ -1691,17 +1758,7 @@ TEST_F(GLES2ImplementationTest, ResizeCHROMIUM) {
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
// TODO: Implement unit test for GetRequestableExtensionsCHROMIUM
-
-TEST_F(GLES2ImplementationTest, DestroyStreamTextureCHROMIUM) {
- struct Cmds {
- cmds::DestroyStreamTextureCHROMIUM cmd;
- };
- Cmds expected;
- expected.cmd.Init(1);
-
- gl_->DestroyStreamTextureCHROMIUM(1);
- EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
+// TODO: Implement unit test for CreateStreamTextureCHROMIUM
// TODO: Implement unit test for GetTranslatedShaderSourceANGLE
TEST_F(GLES2ImplementationTest, TexImageIOSurface2DCHROMIUM) {
@@ -1748,38 +1805,6 @@ TEST_F(GLES2ImplementationTest, VertexAttribDivisorANGLE) {
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
// TODO: Implement unit test for GenMailboxCHROMIUM
-
-TEST_F(GLES2ImplementationTest, ProduceTextureCHROMIUM) {
- GLbyte data[64] = {0};
- struct Cmds {
- cmds::ProduceTextureCHROMIUMImmediate cmd;
- GLbyte data[64];
- };
-
- for (int jj = 0; jj < 64; ++jj) {
- data[jj] = static_cast<GLbyte>(jj);
- }
- Cmds expected;
- expected.cmd.Init(GL_TEXTURE_2D, &data[0]);
- gl_->ProduceTextureCHROMIUM(GL_TEXTURE_2D, &data[0]);
- EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
-
-TEST_F(GLES2ImplementationTest, ConsumeTextureCHROMIUM) {
- GLbyte data[64] = {0};
- struct Cmds {
- cmds::ConsumeTextureCHROMIUMImmediate cmd;
- GLbyte data[64];
- };
-
- for (int jj = 0; jj < 64; ++jj) {
- data[jj] = static_cast<GLbyte>(jj);
- }
- Cmds expected;
- expected.cmd.Init(GL_TEXTURE_2D, &data[0]);
- gl_->ConsumeTextureCHROMIUM(GL_TEXTURE_2D, &data[0]);
- EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
-}
// TODO: Implement unit test for BindUniformLocationCHROMIUM
TEST_F(GLES2ImplementationTest, BindTexImage2DCHROMIUM) {
@@ -1827,9 +1852,10 @@ TEST_F(GLES2ImplementationTest, LoseContextCHROMIUM) {
cmds::LoseContextCHROMIUM cmd;
};
Cmds expected;
- expected.cmd.Init(1, 2);
+ expected.cmd.Init(GL_GUILTY_CONTEXT_RESET_ARB, GL_GUILTY_CONTEXT_RESET_ARB);
- gl_->LoseContextCHROMIUM(1, 2);
+ gl_->LoseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
+ GL_GUILTY_CONTEXT_RESET_ARB);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
// TODO: Implement unit test for InsertSyncPointCHROMIUM
@@ -1874,4 +1900,3 @@ TEST_F(GLES2ImplementationTest, DiscardBackbufferCHROMIUM) {
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_IMPLEMENTATION_UNITTEST_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/gles2_interface_autogen.h b/chromium/gpu/command_buffer/client/gles2_interface_autogen.h
index 029bf691bc1..ad0a418ff2e 100644
--- a/chromium/gpu/command_buffer/client/gles2_interface_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file is included by gles2_interface.h to declare the
@@ -13,44 +15,78 @@
virtual void ActiveTexture(GLenum texture) = 0;
virtual void AttachShader(GLuint program, GLuint shader) = 0;
-virtual void BindAttribLocation(
- GLuint program, GLuint index, const char* name) = 0;
+virtual void BindAttribLocation(GLuint program,
+ GLuint index,
+ const char* name) = 0;
virtual void BindBuffer(GLenum target, GLuint buffer) = 0;
virtual void BindFramebuffer(GLenum target, GLuint framebuffer) = 0;
virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) = 0;
virtual void BindTexture(GLenum target, GLuint texture) = 0;
-virtual void BlendColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) = 0;
+virtual void BlendColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) = 0;
virtual void BlendEquation(GLenum mode) = 0;
virtual void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) = 0;
virtual void BlendFunc(GLenum sfactor, GLenum dfactor) = 0;
-virtual void BlendFuncSeparate(
- GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) = 0;
-virtual void BufferData(
- GLenum target, GLsizeiptr size, const void* data, GLenum usage) = 0;
-virtual void BufferSubData(
- GLenum target, GLintptr offset, GLsizeiptr size, const void* data) = 0;
+virtual void BlendFuncSeparate(GLenum srcRGB,
+ GLenum dstRGB,
+ GLenum srcAlpha,
+ GLenum dstAlpha) = 0;
+virtual void BufferData(GLenum target,
+ GLsizeiptr size,
+ const void* data,
+ GLenum usage) = 0;
+virtual void BufferSubData(GLenum target,
+ GLintptr offset,
+ GLsizeiptr size,
+ const void* data) = 0;
virtual GLenum CheckFramebufferStatus(GLenum target) = 0;
virtual void Clear(GLbitfield mask) = 0;
-virtual void ClearColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) = 0;
+virtual void ClearColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) = 0;
virtual void ClearDepthf(GLclampf depth) = 0;
virtual void ClearStencil(GLint s) = 0;
-virtual void ColorMask(
- GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) = 0;
+virtual void ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) = 0;
virtual void CompileShader(GLuint shader) = 0;
-virtual void CompressedTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLsizei imageSize, const void* data) = 0;
-virtual void CompressedTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, const void* data) = 0;
-virtual void CopyTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border) = 0;
-virtual void CopyTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y,
- GLsizei width, GLsizei height) = 0;
+virtual void CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void* data) = 0;
+virtual void CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void* data) = 0;
+virtual void CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border) = 0;
+virtual void CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) = 0;
virtual GLuint CreateProgram() = 0;
virtual GLuint CreateShader(GLenum type) = 0;
virtual void CullFace(GLenum mode) = 0;
@@ -67,66 +103,93 @@ virtual void DetachShader(GLuint program, GLuint shader) = 0;
virtual void Disable(GLenum cap) = 0;
virtual void DisableVertexAttribArray(GLuint index) = 0;
virtual void DrawArrays(GLenum mode, GLint first, GLsizei count) = 0;
-virtual void DrawElements(
- GLenum mode, GLsizei count, GLenum type, const void* indices) = 0;
+virtual void DrawElements(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices) = 0;
virtual void Enable(GLenum cap) = 0;
virtual void EnableVertexAttribArray(GLuint index) = 0;
virtual void Finish() = 0;
virtual void Flush() = 0;
-virtual void FramebufferRenderbuffer(
- GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer) = 0;
-virtual void FramebufferTexture2D(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level) = 0;
+virtual void FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer) = 0;
+virtual void FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level) = 0;
virtual void FrontFace(GLenum mode) = 0;
virtual void GenBuffers(GLsizei n, GLuint* buffers) = 0;
virtual void GenerateMipmap(GLenum target) = 0;
virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) = 0;
virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) = 0;
virtual void GenTextures(GLsizei n, GLuint* textures) = 0;
-virtual void GetActiveAttrib(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) = 0;
-virtual void GetActiveUniform(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) = 0;
-virtual void GetAttachedShaders(
- GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) = 0;
+virtual void GetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) = 0;
+virtual void GetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) = 0;
+virtual void GetAttachedShaders(GLuint program,
+ GLsizei maxcount,
+ GLsizei* count,
+ GLuint* shaders) = 0;
virtual GLint GetAttribLocation(GLuint program, const char* name) = 0;
virtual void GetBooleanv(GLenum pname, GLboolean* params) = 0;
-virtual void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params) =
- 0;
+virtual void GetBufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) = 0;
virtual GLenum GetError() = 0;
virtual void GetFloatv(GLenum pname, GLfloat* params) = 0;
-virtual void GetFramebufferAttachmentParameteriv(
- GLenum target, GLenum attachment, GLenum pname, GLint* params) = 0;
+virtual void GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint* params) = 0;
virtual void GetIntegerv(GLenum pname, GLint* params) = 0;
virtual void GetProgramiv(GLuint program, GLenum pname, GLint* params) = 0;
-virtual void GetProgramInfoLog(
- GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) = 0;
-virtual void GetRenderbufferParameteriv(
- GLenum target, GLenum pname, GLint* params) = 0;
+virtual void GetProgramInfoLog(GLuint program,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) = 0;
+virtual void GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) = 0;
virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) = 0;
-virtual void GetShaderInfoLog(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) = 0;
-virtual void GetShaderPrecisionFormat(
- GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) =
- 0;
-virtual void GetShaderSource(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) = 0;
+virtual void GetShaderInfoLog(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) = 0;
+virtual void GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint* range,
+ GLint* precision) = 0;
+virtual void GetShaderSource(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) = 0;
virtual const GLubyte* GetString(GLenum name) = 0;
-virtual void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) =
- 0;
+virtual void GetTexParameterfv(GLenum target,
+ GLenum pname,
+ GLfloat* params) = 0;
virtual void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) = 0;
virtual void GetUniformfv(GLuint program, GLint location, GLfloat* params) = 0;
virtual void GetUniformiv(GLuint program, GLint location, GLint* params) = 0;
virtual GLint GetUniformLocation(GLuint program, const char* name) = 0;
-virtual void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) =
- 0;
+virtual void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) = 0;
virtual void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) = 0;
-virtual void GetVertexAttribPointerv(
- GLuint index, GLenum pname, void** pointer) = 0;
+virtual void GetVertexAttribPointerv(GLuint index,
+ GLenum pname,
+ void** pointer) = 0;
virtual void Hint(GLenum target, GLenum mode) = 0;
virtual GLboolean IsBuffer(GLuint buffer) = 0;
virtual GLboolean IsEnabled(GLenum cap) = 0;
@@ -139,43 +202,69 @@ virtual void LineWidth(GLfloat width) = 0;
virtual void LinkProgram(GLuint program) = 0;
virtual void PixelStorei(GLenum pname, GLint param) = 0;
virtual void PolygonOffset(GLfloat factor, GLfloat units) = 0;
-virtual void ReadPixels(
- GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
- void* pixels) = 0;
+virtual void ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void* pixels) = 0;
virtual void ReleaseShaderCompiler() = 0;
-virtual void RenderbufferStorage(
- GLenum target, GLenum internalformat, GLsizei width, GLsizei height) = 0;
+virtual void RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) = 0;
virtual void SampleCoverage(GLclampf value, GLboolean invert) = 0;
virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) = 0;
-virtual void ShaderBinary(
- GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary,
- GLsizei length) = 0;
-virtual void ShaderSource(
- GLuint shader, GLsizei count, const GLchar* const* str,
- const GLint* length) = 0;
+virtual void ShaderBinary(GLsizei n,
+ const GLuint* shaders,
+ GLenum binaryformat,
+ const void* binary,
+ GLsizei length) = 0;
+virtual void ShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar* const* str,
+ const GLint* length) = 0;
virtual void ShallowFinishCHROMIUM() = 0;
virtual void ShallowFlushCHROMIUM() = 0;
virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) = 0;
-virtual void StencilFuncSeparate(
- GLenum face, GLenum func, GLint ref, GLuint mask) = 0;
+virtual void StencilFuncSeparate(GLenum face,
+ GLenum func,
+ GLint ref,
+ GLuint mask) = 0;
virtual void StencilMask(GLuint mask) = 0;
virtual void StencilMaskSeparate(GLenum face, GLuint mask) = 0;
virtual void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) = 0;
-virtual void StencilOpSeparate(
- GLenum face, GLenum fail, GLenum zfail, GLenum zpass) = 0;
-virtual void TexImage2D(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) = 0;
+virtual void StencilOpSeparate(GLenum face,
+ GLenum fail,
+ GLenum zfail,
+ GLenum zpass) = 0;
+virtual void TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) = 0;
virtual void TexParameterf(GLenum target, GLenum pname, GLfloat param) = 0;
-virtual void TexParameterfv(
- GLenum target, GLenum pname, const GLfloat* params) = 0;
+virtual void TexParameterfv(GLenum target,
+ GLenum pname,
+ const GLfloat* params) = 0;
virtual void TexParameteri(GLenum target, GLenum pname, GLint param) = 0;
-virtual void TexParameteriv(GLenum target, GLenum pname, const GLint* params) =
- 0;
-virtual void TexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* pixels) = 0;
+virtual void TexParameteriv(GLenum target,
+ GLenum pname,
+ const GLint* params) = 0;
+virtual void TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* pixels) = 0;
virtual void Uniform1f(GLint location, GLfloat x) = 0;
virtual void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) = 0;
virtual void Uniform1i(GLint location, GLint x) = 0;
@@ -188,20 +277,26 @@ virtual void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) = 0;
virtual void Uniform3fv(GLint location, GLsizei count, const GLfloat* v) = 0;
virtual void Uniform3i(GLint location, GLint x, GLint y, GLint z) = 0;
virtual void Uniform3iv(GLint location, GLsizei count, const GLint* v) = 0;
-virtual void Uniform4f(
- GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) = 0;
+virtual void Uniform4f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) = 0;
virtual void Uniform4fv(GLint location, GLsizei count, const GLfloat* v) = 0;
virtual void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) = 0;
virtual void Uniform4iv(GLint location, GLsizei count, const GLint* v) = 0;
-virtual void UniformMatrix2fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) =
- 0;
-virtual void UniformMatrix3fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) =
- 0;
-virtual void UniformMatrix4fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) =
- 0;
+virtual void UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) = 0;
+virtual void UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) = 0;
+virtual void UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) = 0;
virtual void UseProgram(GLuint program) = 0;
virtual void ValidateProgram(GLuint program) = 0;
virtual void VertexAttrib1f(GLuint indx, GLfloat x) = 0;
@@ -210,28 +305,50 @@ virtual void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) = 0;
virtual void VertexAttrib2fv(GLuint indx, const GLfloat* values) = 0;
virtual void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) = 0;
virtual void VertexAttrib3fv(GLuint indx, const GLfloat* values) = 0;
-virtual void VertexAttrib4f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) = 0;
+virtual void VertexAttrib4f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) = 0;
virtual void VertexAttrib4fv(GLuint indx, const GLfloat* values) = 0;
-virtual void VertexAttribPointer(
- GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
- const void* ptr) = 0;
+virtual void VertexAttribPointer(GLuint indx,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void* ptr) = 0;
virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) = 0;
-virtual void BlitFramebufferCHROMIUM(
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0,
- GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) = 0;
-virtual void RenderbufferStorageMultisampleCHROMIUM(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) = 0;
-virtual void RenderbufferStorageMultisampleEXT(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) = 0;
-virtual void FramebufferTexture2DMultisampleEXT(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLsizei samples) = 0;
-virtual void TexStorage2DEXT(
- GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
- GLsizei height) = 0;
+virtual void BlitFramebufferCHROMIUM(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter) = 0;
+virtual void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) = 0;
+virtual void RenderbufferStorageMultisampleEXT(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) = 0;
+virtual void FramebufferTexture2DMultisampleEXT(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level,
+ GLsizei samples) = 0;
+virtual void TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalFormat,
+ GLsizei width,
+ GLsizei height) = 0;
virtual void GenQueriesEXT(GLsizei n, GLuint* queries) = 0;
virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) = 0;
virtual GLboolean IsQueryEXT(GLuint id) = 0;
@@ -247,81 +364,144 @@ virtual void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) = 0;
virtual GLboolean IsVertexArrayOES(GLuint array) = 0;
virtual void BindVertexArrayOES(GLuint array) = 0;
virtual void SwapBuffers() = 0;
-virtual GLuint GetMaxValueInBufferCHROMIUM(
- GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) = 0;
-virtual void GenSharedIdsCHROMIUM(
- GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) = 0;
-virtual void DeleteSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) = 0;
-virtual void RegisterSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) = 0;
+virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+ GLsizei count,
+ GLenum type,
+ GLuint offset) = 0;
+virtual void GenSharedIdsCHROMIUM(GLuint namespace_id,
+ GLuint id_offset,
+ GLsizei n,
+ GLuint* ids) = 0;
+virtual void DeleteSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) = 0;
+virtual void RegisterSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) = 0;
virtual GLboolean EnableFeatureCHROMIUM(const char* feature) = 0;
virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) = 0;
virtual GLboolean UnmapBufferCHROMIUM(GLuint target) = 0;
-virtual void* MapImageCHROMIUM(GLuint image_id, GLenum access) = 0;
+virtual void* MapImageCHROMIUM(GLuint image_id) = 0;
virtual void UnmapImageCHROMIUM(GLuint image_id) = 0;
-virtual void* MapBufferSubDataCHROMIUM(
- GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) = 0;
+virtual void* MapBufferSubDataCHROMIUM(GLuint target,
+ GLintptr offset,
+ GLsizeiptr size,
+ GLenum access) = 0;
virtual void UnmapBufferSubDataCHROMIUM(const void* mem) = 0;
-virtual void* MapTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, GLenum access) = 0;
+virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLenum access) = 0;
virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) = 0;
-virtual void ResizeCHROMIUM(GLuint width, GLuint height, GLfloat scale_factor) =
- 0;
+virtual void ResizeCHROMIUM(GLuint width,
+ GLuint height,
+ GLfloat scale_factor) = 0;
virtual const GLchar* GetRequestableExtensionsCHROMIUM() = 0;
virtual void RequestExtensionCHROMIUM(const char* extension) = 0;
virtual void RateLimitOffscreenContextCHROMIUM() = 0;
-virtual void GetMultipleIntegervCHROMIUM(
- const GLenum* pnames, GLuint count, GLint* results, GLsizeiptr size) = 0;
-virtual void GetProgramInfoCHROMIUM(
- GLuint program, GLsizei bufsize, GLsizei* size, void* info) = 0;
+virtual void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+ GLuint count,
+ GLint* results,
+ GLsizeiptr size) = 0;
+virtual void GetProgramInfoCHROMIUM(GLuint program,
+ GLsizei bufsize,
+ GLsizei* size,
+ void* info) = 0;
virtual GLuint CreateStreamTextureCHROMIUM(GLuint texture) = 0;
-virtual void DestroyStreamTextureCHROMIUM(GLuint texture) = 0;
-virtual GLuint CreateImageCHROMIUM(
- GLsizei width, GLsizei height, GLenum internalformat) = 0;
+virtual GLuint CreateImageCHROMIUM(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage) = 0;
virtual void DestroyImageCHROMIUM(GLuint image_id) = 0;
-virtual void GetImageParameterivCHROMIUM(
- GLuint image_id, GLenum pname, GLint* params) = 0;
-virtual void GetTranslatedShaderSourceANGLE(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) = 0;
-virtual void PostSubBufferCHROMIUM(
- GLint x, GLint y, GLint width, GLint height) = 0;
-virtual void TexImageIOSurface2DCHROMIUM(
- GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
- GLuint plane) = 0;
-virtual void CopyTextureCHROMIUM(
- GLenum target, GLenum source_id, GLenum dest_id, GLint level,
- GLint internalformat, GLenum dest_type) = 0;
-virtual void DrawArraysInstancedANGLE(
- GLenum mode, GLint first, GLsizei count, GLsizei primcount) = 0;
-virtual void DrawElementsInstancedANGLE(
- GLenum mode, GLsizei count, GLenum type, const void* indices,
- GLsizei primcount) = 0;
+virtual void GetImageParameterivCHROMIUM(GLuint image_id,
+ GLenum pname,
+ GLint* params) = 0;
+virtual void GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) = 0;
+virtual void PostSubBufferCHROMIUM(GLint x,
+ GLint y,
+ GLint width,
+ GLint height) = 0;
+virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLuint ioSurfaceId,
+ GLuint plane) = 0;
+virtual void CopyTextureCHROMIUM(GLenum target,
+ GLenum source_id,
+ GLenum dest_id,
+ GLint level,
+ GLint internalformat,
+ GLenum dest_type) = 0;
+virtual void DrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount) = 0;
+virtual void DrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices,
+ GLsizei primcount) = 0;
virtual void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) = 0;
virtual void GenMailboxCHROMIUM(GLbyte* mailbox) = 0;
virtual void ProduceTextureCHROMIUM(GLenum target, const GLbyte* mailbox) = 0;
+virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
+ GLenum target,
+ const GLbyte* mailbox) = 0;
virtual void ConsumeTextureCHROMIUM(GLenum target, const GLbyte* mailbox) = 0;
-virtual void BindUniformLocationCHROMIUM(
- GLuint program, GLint location, const char* name) = 0;
+virtual GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) = 0;
+virtual void BindUniformLocationCHROMIUM(GLuint program,
+ GLint location,
+ const char* name) = 0;
virtual void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) = 0;
virtual void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) = 0;
virtual void TraceBeginCHROMIUM(const char* name) = 0;
virtual void TraceEndCHROMIUM() = 0;
-virtual void AsyncTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* data) = 0;
-virtual void AsyncTexImage2DCHROMIUM(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) = 0;
+virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* data) = 0;
+virtual void AsyncTexImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) = 0;
virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) = 0;
-virtual void DiscardFramebufferEXT(
- GLenum target, GLsizei count, const GLenum* attachments) = 0;
+virtual void WaitAllAsyncTexImage2DCHROMIUM() = 0;
+virtual void DiscardFramebufferEXT(GLenum target,
+ GLsizei count,
+ const GLenum* attachments) = 0;
virtual void LoseContextCHROMIUM(GLenum current, GLenum other) = 0;
virtual GLuint InsertSyncPointCHROMIUM() = 0;
virtual void WaitSyncPointCHROMIUM(GLuint sync_point) = 0;
virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) = 0;
virtual void DiscardBackbufferCHROMIUM() = 0;
+virtual void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+ GLenum plane_transform,
+ GLuint overlay_texture_id,
+ GLint bounds_x,
+ GLint bounds_y,
+ GLint bounds_width,
+ GLint bounds_height,
+ GLfloat uv_x,
+ GLfloat uv_y,
+ GLfloat uv_width,
+ GLfloat uv_height) = 0;
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/chromium/gpu/command_buffer/client/gles2_interface_stub_autogen.h
index 59c0ce9e8fb..25bdd96c126 100644
--- a/chromium/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file is included by gles2_interface_stub.h.
@@ -12,56 +14,86 @@
virtual void ActiveTexture(GLenum texture) OVERRIDE;
virtual void AttachShader(GLuint program, GLuint shader) OVERRIDE;
-virtual void BindAttribLocation(
- GLuint program, GLuint index, const char* name) OVERRIDE;
+virtual void BindAttribLocation(GLuint program,
+ GLuint index,
+ const char* name) OVERRIDE;
virtual void BindBuffer(GLenum target, GLuint buffer) OVERRIDE;
virtual void BindFramebuffer(GLenum target, GLuint framebuffer) OVERRIDE;
virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) OVERRIDE;
virtual void BindTexture(GLenum target, GLuint texture) OVERRIDE;
-virtual void BlendColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) OVERRIDE;
+virtual void BlendColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) OVERRIDE;
virtual void BlendEquation(GLenum mode) OVERRIDE;
virtual void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) OVERRIDE;
virtual void BlendFunc(GLenum sfactor, GLenum dfactor) OVERRIDE;
-virtual void BlendFuncSeparate(
- GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) OVERRIDE;
-virtual void BufferData(
- GLenum target, GLsizeiptr size, const void* data, GLenum usage) OVERRIDE;
-virtual void BufferSubData(
- GLenum target, GLintptr offset, GLsizeiptr size,
- const void* data) OVERRIDE;
+virtual void BlendFuncSeparate(GLenum srcRGB,
+ GLenum dstRGB,
+ GLenum srcAlpha,
+ GLenum dstAlpha) OVERRIDE;
+virtual void BufferData(GLenum target,
+ GLsizeiptr size,
+ const void* data,
+ GLenum usage) OVERRIDE;
+virtual void BufferSubData(GLenum target,
+ GLintptr offset,
+ GLsizeiptr size,
+ const void* data) OVERRIDE;
virtual GLenum CheckFramebufferStatus(GLenum target) OVERRIDE;
virtual void Clear(GLbitfield mask) OVERRIDE;
-virtual void ClearColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) OVERRIDE;
+virtual void ClearColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) OVERRIDE;
virtual void ClearDepthf(GLclampf depth) OVERRIDE;
virtual void ClearStencil(GLint s) OVERRIDE;
-virtual void ColorMask(
- GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) OVERRIDE;
+virtual void ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) OVERRIDE;
virtual void CompileShader(GLuint shader) OVERRIDE;
-virtual void CompressedTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLsizei imageSize,
- const void* data) OVERRIDE;
-virtual void CompressedTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize,
- const void* data) OVERRIDE;
-virtual void CopyTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border) OVERRIDE;
-virtual void CopyTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y,
- GLsizei width, GLsizei height) OVERRIDE;
+virtual void CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void* data) OVERRIDE;
+virtual void CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void* data) OVERRIDE;
+virtual void CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border) OVERRIDE;
+virtual void CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual GLuint CreateProgram() OVERRIDE;
virtual GLuint CreateShader(GLenum type) OVERRIDE;
virtual void CullFace(GLenum mode) OVERRIDE;
virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) OVERRIDE;
-virtual void DeleteFramebuffers(
- GLsizei n, const GLuint* framebuffers) OVERRIDE;
+virtual void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) OVERRIDE;
virtual void DeleteProgram(GLuint program) OVERRIDE;
-virtual void DeleteRenderbuffers(
- GLsizei n, const GLuint* renderbuffers) OVERRIDE;
+virtual void DeleteRenderbuffers(GLsizei n,
+ const GLuint* renderbuffers) OVERRIDE;
virtual void DeleteShader(GLuint shader) OVERRIDE;
virtual void DeleteTextures(GLsizei n, const GLuint* textures) OVERRIDE;
virtual void DepthFunc(GLenum func) OVERRIDE;
@@ -71,72 +103,103 @@ virtual void DetachShader(GLuint program, GLuint shader) OVERRIDE;
virtual void Disable(GLenum cap) OVERRIDE;
virtual void DisableVertexAttribArray(GLuint index) OVERRIDE;
virtual void DrawArrays(GLenum mode, GLint first, GLsizei count) OVERRIDE;
-virtual void DrawElements(
- GLenum mode, GLsizei count, GLenum type, const void* indices) OVERRIDE;
+virtual void DrawElements(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices) OVERRIDE;
virtual void Enable(GLenum cap) OVERRIDE;
virtual void EnableVertexAttribArray(GLuint index) OVERRIDE;
virtual void Finish() OVERRIDE;
virtual void Flush() OVERRIDE;
-virtual void FramebufferRenderbuffer(
- GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer) OVERRIDE;
-virtual void FramebufferTexture2D(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level) OVERRIDE;
+virtual void FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer) OVERRIDE;
+virtual void FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level) OVERRIDE;
virtual void FrontFace(GLenum mode) OVERRIDE;
virtual void GenBuffers(GLsizei n, GLuint* buffers) OVERRIDE;
virtual void GenerateMipmap(GLenum target) OVERRIDE;
virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) OVERRIDE;
virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) OVERRIDE;
virtual void GenTextures(GLsizei n, GLuint* textures) OVERRIDE;
-virtual void GetActiveAttrib(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) OVERRIDE;
-virtual void GetActiveUniform(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) OVERRIDE;
-virtual void GetAttachedShaders(
- GLuint program, GLsizei maxcount, GLsizei* count,
- GLuint* shaders) OVERRIDE;
+virtual void GetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) OVERRIDE;
+virtual void GetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) OVERRIDE;
+virtual void GetAttachedShaders(GLuint program,
+ GLsizei maxcount,
+ GLsizei* count,
+ GLuint* shaders) OVERRIDE;
virtual GLint GetAttribLocation(GLuint program, const char* name) OVERRIDE;
virtual void GetBooleanv(GLenum pname, GLboolean* params) OVERRIDE;
-virtual void GetBufferParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetBufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual GLenum GetError() OVERRIDE;
virtual void GetFloatv(GLenum pname, GLfloat* params) OVERRIDE;
-virtual void GetFramebufferAttachmentParameteriv(
- GLenum target, GLenum attachment, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual void GetIntegerv(GLenum pname, GLint* params) OVERRIDE;
-virtual void GetProgramiv(
- GLuint program, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetProgramInfoLog(
- GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) OVERRIDE;
-virtual void GetRenderbufferParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetProgramiv(GLuint program, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetProgramInfoLog(GLuint program,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) OVERRIDE;
+virtual void GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetShaderInfoLog(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) OVERRIDE;
-virtual void GetShaderPrecisionFormat(
- GLenum shadertype, GLenum precisiontype, GLint* range,
- GLint* precision) OVERRIDE;
-virtual void GetShaderSource(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) OVERRIDE;
+virtual void GetShaderInfoLog(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) OVERRIDE;
+virtual void GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint* range,
+ GLint* precision) OVERRIDE;
+virtual void GetShaderSource(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) OVERRIDE;
virtual const GLubyte* GetString(GLenum name) OVERRIDE;
-virtual void GetTexParameterfv(
- GLenum target, GLenum pname, GLfloat* params) OVERRIDE;
-virtual void GetTexParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetUniformfv(
- GLuint program, GLint location, GLfloat* params) OVERRIDE;
-virtual void GetUniformiv(
- GLuint program, GLint location, GLint* params) OVERRIDE;
+virtual void GetTexParameterfv(GLenum target,
+ GLenum pname,
+ GLfloat* params) OVERRIDE;
+virtual void GetTexParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
+virtual void GetUniformfv(GLuint program,
+ GLint location,
+ GLfloat* params) OVERRIDE;
+virtual void GetUniformiv(GLuint program,
+ GLint location,
+ GLint* params) OVERRIDE;
virtual GLint GetUniformLocation(GLuint program, const char* name) OVERRIDE;
-virtual void GetVertexAttribfv(
- GLuint index, GLenum pname, GLfloat* params) OVERRIDE;
-virtual void GetVertexAttribiv(
- GLuint index, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetVertexAttribPointerv(
- GLuint index, GLenum pname, void** pointer) OVERRIDE;
+virtual void GetVertexAttribfv(GLuint index,
+ GLenum pname,
+ GLfloat* params) OVERRIDE;
+virtual void GetVertexAttribiv(GLuint index,
+ GLenum pname,
+ GLint* params) OVERRIDE;
+virtual void GetVertexAttribPointerv(GLuint index,
+ GLenum pname,
+ void** pointer) OVERRIDE;
virtual void Hint(GLenum target, GLenum mode) OVERRIDE;
virtual GLboolean IsBuffer(GLuint buffer) OVERRIDE;
virtual GLboolean IsEnabled(GLenum cap) OVERRIDE;
@@ -149,125 +212,182 @@ virtual void LineWidth(GLfloat width) OVERRIDE;
virtual void LinkProgram(GLuint program) OVERRIDE;
virtual void PixelStorei(GLenum pname, GLint param) OVERRIDE;
virtual void PolygonOffset(GLfloat factor, GLfloat units) OVERRIDE;
-virtual void ReadPixels(
- GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
- void* pixels) OVERRIDE;
+virtual void ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void* pixels) OVERRIDE;
virtual void ReleaseShaderCompiler() OVERRIDE;
-virtual void RenderbufferStorage(
- GLenum target, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
+virtual void RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual void SampleCoverage(GLclampf value, GLboolean invert) OVERRIDE;
virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
-virtual void ShaderBinary(
- GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary,
- GLsizei length) OVERRIDE;
-virtual void ShaderSource(
- GLuint shader, GLsizei count, const GLchar* const* str,
- const GLint* length) OVERRIDE;
+virtual void ShaderBinary(GLsizei n,
+ const GLuint* shaders,
+ GLenum binaryformat,
+ const void* binary,
+ GLsizei length) OVERRIDE;
+virtual void ShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar* const* str,
+ const GLint* length) OVERRIDE;
virtual void ShallowFinishCHROMIUM() OVERRIDE;
virtual void ShallowFlushCHROMIUM() OVERRIDE;
virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) OVERRIDE;
-virtual void StencilFuncSeparate(
- GLenum face, GLenum func, GLint ref, GLuint mask) OVERRIDE;
+virtual void StencilFuncSeparate(GLenum face,
+ GLenum func,
+ GLint ref,
+ GLuint mask) OVERRIDE;
virtual void StencilMask(GLuint mask) OVERRIDE;
virtual void StencilMaskSeparate(GLenum face, GLuint mask) OVERRIDE;
virtual void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) OVERRIDE;
-virtual void StencilOpSeparate(
- GLenum face, GLenum fail, GLenum zfail, GLenum zpass) OVERRIDE;
-virtual void TexImage2D(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) OVERRIDE;
-virtual void TexParameterf(
- GLenum target, GLenum pname, GLfloat param) OVERRIDE;
-virtual void TexParameterfv(
- GLenum target, GLenum pname, const GLfloat* params) OVERRIDE;
+virtual void StencilOpSeparate(GLenum face,
+ GLenum fail,
+ GLenum zfail,
+ GLenum zpass) OVERRIDE;
+virtual void TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
+virtual void TexParameterf(GLenum target, GLenum pname, GLfloat param) OVERRIDE;
+virtual void TexParameterfv(GLenum target,
+ GLenum pname,
+ const GLfloat* params) OVERRIDE;
virtual void TexParameteri(GLenum target, GLenum pname, GLint param) OVERRIDE;
-virtual void TexParameteriv(
- GLenum target, GLenum pname, const GLint* params) OVERRIDE;
-virtual void TexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* pixels) OVERRIDE;
+virtual void TexParameteriv(GLenum target,
+ GLenum pname,
+ const GLint* params) OVERRIDE;
+virtual void TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
virtual void Uniform1f(GLint location, GLfloat x) OVERRIDE;
-virtual void Uniform1fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform1fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform1i(GLint location, GLint x) OVERRIDE;
-virtual void Uniform1iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform1iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
virtual void Uniform2f(GLint location, GLfloat x, GLfloat y) OVERRIDE;
-virtual void Uniform2fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform2fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform2i(GLint location, GLint x, GLint y) OVERRIDE;
-virtual void Uniform2iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void Uniform3f(
- GLint location, GLfloat x, GLfloat y, GLfloat z) OVERRIDE;
-virtual void Uniform3fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform2iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform3f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) OVERRIDE;
+virtual void Uniform3fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform3i(GLint location, GLint x, GLint y, GLint z) OVERRIDE;
-virtual void Uniform3iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void Uniform4f(
- GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) OVERRIDE;
-virtual void Uniform4fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
-virtual void Uniform4i(
- GLint location, GLint x, GLint y, GLint z, GLint w) OVERRIDE;
-virtual void Uniform4iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void UniformMatrix2fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
-virtual void UniformMatrix3fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
-virtual void UniformMatrix4fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
+virtual void Uniform3iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform4f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) OVERRIDE;
+virtual void Uniform4fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
+virtual void Uniform4i(GLint location,
+ GLint x,
+ GLint y,
+ GLint z,
+ GLint w) OVERRIDE;
+virtual void Uniform4iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
+virtual void UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
+virtual void UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
virtual void UseProgram(GLuint program) OVERRIDE;
virtual void ValidateProgram(GLuint program) OVERRIDE;
virtual void VertexAttrib1f(GLuint indx, GLfloat x) OVERRIDE;
virtual void VertexAttrib1fv(GLuint indx, const GLfloat* values) OVERRIDE;
virtual void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) OVERRIDE;
virtual void VertexAttrib2fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttrib3f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z) OVERRIDE;
+virtual void VertexAttrib3f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) OVERRIDE;
virtual void VertexAttrib3fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttrib4f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) OVERRIDE;
+virtual void VertexAttrib4f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) OVERRIDE;
virtual void VertexAttrib4fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttribPointer(
- GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
- const void* ptr) OVERRIDE;
-virtual void Viewport(
- GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
-virtual void BlitFramebufferCHROMIUM(
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0,
- GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask,
- GLenum filter) OVERRIDE;
-virtual void RenderbufferStorageMultisampleCHROMIUM(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
-virtual void RenderbufferStorageMultisampleEXT(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
-virtual void FramebufferTexture2DMultisampleEXT(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLsizei samples) OVERRIDE;
-virtual void TexStorage2DEXT(
- GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
- GLsizei height) OVERRIDE;
+virtual void VertexAttribPointer(GLuint indx,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void* ptr) OVERRIDE;
+virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
+virtual void BlitFramebufferCHROMIUM(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter) OVERRIDE;
+virtual void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
+virtual void RenderbufferStorageMultisampleEXT(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
+virtual void FramebufferTexture2DMultisampleEXT(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level,
+ GLsizei samples) OVERRIDE;
+virtual void TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalFormat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual void GenQueriesEXT(GLsizei n, GLuint* queries) OVERRIDE;
virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) OVERRIDE;
virtual GLboolean IsQueryEXT(GLuint id) OVERRIDE;
virtual void BeginQueryEXT(GLenum target, GLuint id) OVERRIDE;
virtual void EndQueryEXT(GLenum target) OVERRIDE;
-virtual void GetQueryivEXT(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetQueryObjectuivEXT(
- GLuint id, GLenum pname, GLuint* params) OVERRIDE;
-virtual void InsertEventMarkerEXT(
- GLsizei length, const GLchar* marker) OVERRIDE;
+virtual void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetQueryObjectuivEXT(GLuint id,
+ GLenum pname,
+ GLuint* params) OVERRIDE;
+virtual void InsertEventMarkerEXT(GLsizei length,
+ const GLchar* marker) OVERRIDE;
virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) OVERRIDE;
virtual void PopGroupMarkerEXT() OVERRIDE;
virtual void GenVertexArraysOES(GLsizei n, GLuint* arrays) OVERRIDE;
@@ -275,84 +395,146 @@ virtual void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) OVERRIDE;
virtual GLboolean IsVertexArrayOES(GLuint array) OVERRIDE;
virtual void BindVertexArrayOES(GLuint array) OVERRIDE;
virtual void SwapBuffers() OVERRIDE;
-virtual GLuint GetMaxValueInBufferCHROMIUM(
- GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) OVERRIDE;
-virtual void GenSharedIdsCHROMIUM(
- GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) OVERRIDE;
-virtual void DeleteSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) OVERRIDE;
-virtual void RegisterSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) OVERRIDE;
+virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+ GLsizei count,
+ GLenum type,
+ GLuint offset) OVERRIDE;
+virtual void GenSharedIdsCHROMIUM(GLuint namespace_id,
+ GLuint id_offset,
+ GLsizei n,
+ GLuint* ids) OVERRIDE;
+virtual void DeleteSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) OVERRIDE;
+virtual void RegisterSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) OVERRIDE;
virtual GLboolean EnableFeatureCHROMIUM(const char* feature) OVERRIDE;
virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) OVERRIDE;
virtual GLboolean UnmapBufferCHROMIUM(GLuint target) OVERRIDE;
-virtual void* MapImageCHROMIUM(GLuint image_id, GLenum access) OVERRIDE;
+virtual void* MapImageCHROMIUM(GLuint image_id) OVERRIDE;
virtual void UnmapImageCHROMIUM(GLuint image_id) OVERRIDE;
-virtual void* MapBufferSubDataCHROMIUM(
- GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) OVERRIDE;
+virtual void* MapBufferSubDataCHROMIUM(GLuint target,
+ GLintptr offset,
+ GLsizeiptr size,
+ GLenum access) OVERRIDE;
virtual void UnmapBufferSubDataCHROMIUM(const void* mem) OVERRIDE;
-virtual void* MapTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, GLenum access) OVERRIDE;
+virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLenum access) OVERRIDE;
virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) OVERRIDE;
-virtual void ResizeCHROMIUM(
- GLuint width, GLuint height, GLfloat scale_factor) OVERRIDE;
+virtual void ResizeCHROMIUM(GLuint width,
+ GLuint height,
+ GLfloat scale_factor) OVERRIDE;
virtual const GLchar* GetRequestableExtensionsCHROMIUM() OVERRIDE;
virtual void RequestExtensionCHROMIUM(const char* extension) OVERRIDE;
virtual void RateLimitOffscreenContextCHROMIUM() OVERRIDE;
-virtual void GetMultipleIntegervCHROMIUM(
- const GLenum* pnames, GLuint count, GLint* results,
- GLsizeiptr size) OVERRIDE;
-virtual void GetProgramInfoCHROMIUM(
- GLuint program, GLsizei bufsize, GLsizei* size, void* info) OVERRIDE;
+virtual void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+ GLuint count,
+ GLint* results,
+ GLsizeiptr size) OVERRIDE;
+virtual void GetProgramInfoCHROMIUM(GLuint program,
+ GLsizei bufsize,
+ GLsizei* size,
+ void* info) OVERRIDE;
virtual GLuint CreateStreamTextureCHROMIUM(GLuint texture) OVERRIDE;
-virtual void DestroyStreamTextureCHROMIUM(GLuint texture) OVERRIDE;
-virtual GLuint CreateImageCHROMIUM(
- GLsizei width, GLsizei height, GLenum internalformat) OVERRIDE;
+virtual GLuint CreateImageCHROMIUM(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage) OVERRIDE;
virtual void DestroyImageCHROMIUM(GLuint image_id) OVERRIDE;
-virtual void GetImageParameterivCHROMIUM(
- GLuint image_id, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetTranslatedShaderSourceANGLE(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) OVERRIDE;
-virtual void PostSubBufferCHROMIUM(
- GLint x, GLint y, GLint width, GLint height) OVERRIDE;
-virtual void TexImageIOSurface2DCHROMIUM(
- GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
- GLuint plane) OVERRIDE;
-virtual void CopyTextureCHROMIUM(
- GLenum target, GLenum source_id, GLenum dest_id, GLint level,
- GLint internalformat, GLenum dest_type) OVERRIDE;
-virtual void DrawArraysInstancedANGLE(
- GLenum mode, GLint first, GLsizei count, GLsizei primcount) OVERRIDE;
-virtual void DrawElementsInstancedANGLE(
- GLenum mode, GLsizei count, GLenum type, const void* indices,
- GLsizei primcount) OVERRIDE;
+virtual void GetImageParameterivCHROMIUM(GLuint image_id,
+ GLenum pname,
+ GLint* params) OVERRIDE;
+virtual void GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) OVERRIDE;
+virtual void PostSubBufferCHROMIUM(GLint x,
+ GLint y,
+ GLint width,
+ GLint height) OVERRIDE;
+virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLuint ioSurfaceId,
+ GLuint plane) OVERRIDE;
+virtual void CopyTextureCHROMIUM(GLenum target,
+ GLenum source_id,
+ GLenum dest_id,
+ GLint level,
+ GLint internalformat,
+ GLenum dest_type) OVERRIDE;
+virtual void DrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount) OVERRIDE;
+virtual void DrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices,
+ GLsizei primcount) OVERRIDE;
virtual void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) OVERRIDE;
virtual void GenMailboxCHROMIUM(GLbyte* mailbox) OVERRIDE;
-virtual void ProduceTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) OVERRIDE;
-virtual void ConsumeTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) OVERRIDE;
-virtual void BindUniformLocationCHROMIUM(
- GLuint program, GLint location, const char* name) OVERRIDE;
+virtual void ProduceTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
+ GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+virtual void ConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+virtual GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+virtual void BindUniformLocationCHROMIUM(GLuint program,
+ GLint location,
+ const char* name) OVERRIDE;
virtual void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) OVERRIDE;
virtual void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) OVERRIDE;
virtual void TraceBeginCHROMIUM(const char* name) OVERRIDE;
virtual void TraceEndCHROMIUM() OVERRIDE;
-virtual void AsyncTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* data) OVERRIDE;
-virtual void AsyncTexImage2DCHROMIUM(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) OVERRIDE;
+virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* data) OVERRIDE;
+virtual void AsyncTexImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) OVERRIDE;
-virtual void DiscardFramebufferEXT(
- GLenum target, GLsizei count, const GLenum* attachments) OVERRIDE;
+virtual void WaitAllAsyncTexImage2DCHROMIUM() OVERRIDE;
+virtual void DiscardFramebufferEXT(GLenum target,
+ GLsizei count,
+ const GLenum* attachments) OVERRIDE;
virtual void LoseContextCHROMIUM(GLenum current, GLenum other) OVERRIDE;
virtual GLuint InsertSyncPointCHROMIUM() OVERRIDE;
virtual void WaitSyncPointCHROMIUM(GLuint sync_point) OVERRIDE;
virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) OVERRIDE;
virtual void DiscardBackbufferCHROMIUM() OVERRIDE;
+virtual void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+ GLenum plane_transform,
+ GLuint overlay_texture_id,
+ GLint bounds_x,
+ GLint bounds_y,
+ GLint bounds_width,
+ GLint bounds_height,
+ GLfloat uv_x,
+ GLfloat uv_y,
+ GLfloat uv_width,
+ GLfloat uv_height) OVERRIDE;
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_STUB_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/chromium/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
index e6a26d43d40..4e83921be4e 100644
--- a/chromium/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file is included by gles2_interface_stub.cc.
@@ -12,85 +14,108 @@
void GLES2InterfaceStub::ActiveTexture(GLenum /* texture */) {
}
-void GLES2InterfaceStub::AttachShader(
- GLuint /* program */, GLuint /* shader */) {
+void GLES2InterfaceStub::AttachShader(GLuint /* program */,
+ GLuint /* shader */) {
}
-void GLES2InterfaceStub::BindAttribLocation(
- GLuint /* program */, GLuint /* index */, const char* /* name */) {
+void GLES2InterfaceStub::BindAttribLocation(GLuint /* program */,
+ GLuint /* index */,
+ const char* /* name */) {
}
void GLES2InterfaceStub::BindBuffer(GLenum /* target */, GLuint /* buffer */) {
}
-void GLES2InterfaceStub::BindFramebuffer(
- GLenum /* target */, GLuint /* framebuffer */) {
+void GLES2InterfaceStub::BindFramebuffer(GLenum /* target */,
+ GLuint /* framebuffer */) {
}
-void GLES2InterfaceStub::BindRenderbuffer(
- GLenum /* target */, GLuint /* renderbuffer */) {
+void GLES2InterfaceStub::BindRenderbuffer(GLenum /* target */,
+ GLuint /* renderbuffer */) {
}
-void GLES2InterfaceStub::BindTexture(
- GLenum /* target */, GLuint /* texture */) {
+void GLES2InterfaceStub::BindTexture(GLenum /* target */,
+ GLuint /* texture */) {
}
-void GLES2InterfaceStub::BlendColor(
- GLclampf /* red */, GLclampf /* green */, GLclampf /* blue */,
- GLclampf /* alpha */) {
+void GLES2InterfaceStub::BlendColor(GLclampf /* red */,
+ GLclampf /* green */,
+ GLclampf /* blue */,
+ GLclampf /* alpha */) {
}
void GLES2InterfaceStub::BlendEquation(GLenum /* mode */) {
}
-void GLES2InterfaceStub::BlendEquationSeparate(
- GLenum /* modeRGB */, GLenum /* modeAlpha */) {
+void GLES2InterfaceStub::BlendEquationSeparate(GLenum /* modeRGB */,
+ GLenum /* modeAlpha */) {
}
-void GLES2InterfaceStub::BlendFunc(
- GLenum /* sfactor */, GLenum /* dfactor */) {
+void GLES2InterfaceStub::BlendFunc(GLenum /* sfactor */, GLenum /* dfactor */) {
}
-void GLES2InterfaceStub::BlendFuncSeparate(
- GLenum /* srcRGB */, GLenum /* dstRGB */, GLenum /* srcAlpha */,
- GLenum /* dstAlpha */) {
+void GLES2InterfaceStub::BlendFuncSeparate(GLenum /* srcRGB */,
+ GLenum /* dstRGB */,
+ GLenum /* srcAlpha */,
+ GLenum /* dstAlpha */) {
}
-void GLES2InterfaceStub::BufferData(
- GLenum /* target */, GLsizeiptr /* size */, const void* /* data */,
- GLenum /* usage */) {
+void GLES2InterfaceStub::BufferData(GLenum /* target */,
+ GLsizeiptr /* size */,
+ const void* /* data */,
+ GLenum /* usage */) {
}
-void GLES2InterfaceStub::BufferSubData(
- GLenum /* target */, GLintptr /* offset */, GLsizeiptr /* size */,
- const void* /* data */) {
+void GLES2InterfaceStub::BufferSubData(GLenum /* target */,
+ GLintptr /* offset */,
+ GLsizeiptr /* size */,
+ const void* /* data */) {
}
GLenum GLES2InterfaceStub::CheckFramebufferStatus(GLenum /* target */) {
return 0;
}
void GLES2InterfaceStub::Clear(GLbitfield /* mask */) {
}
-void GLES2InterfaceStub::ClearColor(
- GLclampf /* red */, GLclampf /* green */, GLclampf /* blue */,
- GLclampf /* alpha */) {
+void GLES2InterfaceStub::ClearColor(GLclampf /* red */,
+ GLclampf /* green */,
+ GLclampf /* blue */,
+ GLclampf /* alpha */) {
}
void GLES2InterfaceStub::ClearDepthf(GLclampf /* depth */) {
}
void GLES2InterfaceStub::ClearStencil(GLint /* s */) {
}
-void GLES2InterfaceStub::ColorMask(
- GLboolean /* red */, GLboolean /* green */, GLboolean /* blue */,
- GLboolean /* alpha */) {
+void GLES2InterfaceStub::ColorMask(GLboolean /* red */,
+ GLboolean /* green */,
+ GLboolean /* blue */,
+ GLboolean /* alpha */) {
}
void GLES2InterfaceStub::CompileShader(GLuint /* shader */) {
}
-void GLES2InterfaceStub::CompressedTexImage2D(
- GLenum /* target */, GLint /* level */, GLenum /* internalformat */,
- GLsizei /* width */, GLsizei /* height */, GLint /* border */,
- GLsizei /* imageSize */, const void* /* data */) {
-}
-void GLES2InterfaceStub::CompressedTexSubImage2D(
- GLenum /* target */, GLint /* level */, GLint /* xoffset */,
- GLint /* yoffset */, GLsizei /* width */, GLsizei /* height */,
- GLenum /* format */, GLsizei /* imageSize */, const void* /* data */) {
-}
-void GLES2InterfaceStub::CopyTexImage2D(
- GLenum /* target */, GLint /* level */, GLenum /* internalformat */,
- GLint /* x */, GLint /* y */, GLsizei /* width */, GLsizei /* height */,
- GLint /* border */) {
-}
-void GLES2InterfaceStub::CopyTexSubImage2D(
- GLenum /* target */, GLint /* level */, GLint /* xoffset */,
- GLint /* yoffset */, GLint /* x */, GLint /* y */, GLsizei /* width */,
- GLsizei /* height */) {
+void GLES2InterfaceStub::CompressedTexImage2D(GLenum /* target */,
+ GLint /* level */,
+ GLenum /* internalformat */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLint /* border */,
+ GLsizei /* imageSize */,
+ const void* /* data */) {
+}
+void GLES2InterfaceStub::CompressedTexSubImage2D(GLenum /* target */,
+ GLint /* level */,
+ GLint /* xoffset */,
+ GLint /* yoffset */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLenum /* format */,
+ GLsizei /* imageSize */,
+ const void* /* data */) {
+}
+void GLES2InterfaceStub::CopyTexImage2D(GLenum /* target */,
+ GLint /* level */,
+ GLenum /* internalformat */,
+ GLint /* x */,
+ GLint /* y */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLint /* border */) {
+}
+void GLES2InterfaceStub::CopyTexSubImage2D(GLenum /* target */,
+ GLint /* level */,
+ GLint /* xoffset */,
+ GLint /* yoffset */,
+ GLint /* x */,
+ GLint /* y */,
+ GLsizei /* width */,
+ GLsizei /* height */) {
}
GLuint GLES2InterfaceStub::CreateProgram() {
return 0;
@@ -100,42 +125,45 @@ GLuint GLES2InterfaceStub::CreateShader(GLenum /* type */) {
}
void GLES2InterfaceStub::CullFace(GLenum /* mode */) {
}
-void GLES2InterfaceStub::DeleteBuffers(
- GLsizei /* n */, const GLuint* /* buffers */) {
+void GLES2InterfaceStub::DeleteBuffers(GLsizei /* n */,
+ const GLuint* /* buffers */) {
}
-void GLES2InterfaceStub::DeleteFramebuffers(
- GLsizei /* n */, const GLuint* /* framebuffers */) {
+void GLES2InterfaceStub::DeleteFramebuffers(GLsizei /* n */,
+ const GLuint* /* framebuffers */) {
}
void GLES2InterfaceStub::DeleteProgram(GLuint /* program */) {
}
void GLES2InterfaceStub::DeleteRenderbuffers(
- GLsizei /* n */, const GLuint* /* renderbuffers */) {
+ GLsizei /* n */,
+ const GLuint* /* renderbuffers */) {
}
void GLES2InterfaceStub::DeleteShader(GLuint /* shader */) {
}
-void GLES2InterfaceStub::DeleteTextures(
- GLsizei /* n */, const GLuint* /* textures */) {
+void GLES2InterfaceStub::DeleteTextures(GLsizei /* n */,
+ const GLuint* /* textures */) {
}
void GLES2InterfaceStub::DepthFunc(GLenum /* func */) {
}
void GLES2InterfaceStub::DepthMask(GLboolean /* flag */) {
}
-void GLES2InterfaceStub::DepthRangef(
- GLclampf /* zNear */, GLclampf /* zFar */) {
+void GLES2InterfaceStub::DepthRangef(GLclampf /* zNear */,
+ GLclampf /* zFar */) {
}
-void GLES2InterfaceStub::DetachShader(
- GLuint /* program */, GLuint /* shader */) {
+void GLES2InterfaceStub::DetachShader(GLuint /* program */,
+ GLuint /* shader */) {
}
void GLES2InterfaceStub::Disable(GLenum /* cap */) {
}
void GLES2InterfaceStub::DisableVertexAttribArray(GLuint /* index */) {
}
-void GLES2InterfaceStub::DrawArrays(
- GLenum /* mode */, GLint /* first */, GLsizei /* count */) {
+void GLES2InterfaceStub::DrawArrays(GLenum /* mode */,
+ GLint /* first */,
+ GLsizei /* count */) {
}
-void GLES2InterfaceStub::DrawElements(
- GLenum /* mode */, GLsizei /* count */, GLenum /* type */,
- const void* /* indices */) {
+void GLES2InterfaceStub::DrawElements(GLenum /* mode */,
+ GLsizei /* count */,
+ GLenum /* type */,
+ const void* /* indices */) {
}
void GLES2InterfaceStub::Enable(GLenum /* cap */) {
}
@@ -146,12 +174,16 @@ void GLES2InterfaceStub::Finish() {
void GLES2InterfaceStub::Flush() {
}
void GLES2InterfaceStub::FramebufferRenderbuffer(
- GLenum /* target */, GLenum /* attachment */,
- GLenum /* renderbuffertarget */, GLuint /* renderbuffer */) {
+ GLenum /* target */,
+ GLenum /* attachment */,
+ GLenum /* renderbuffertarget */,
+ GLuint /* renderbuffer */) {
}
-void GLES2InterfaceStub::FramebufferTexture2D(
- GLenum /* target */, GLenum /* attachment */, GLenum /* textarget */,
- GLuint /* texture */, GLint /* level */) {
+void GLES2InterfaceStub::FramebufferTexture2D(GLenum /* target */,
+ GLenum /* attachment */,
+ GLenum /* textarget */,
+ GLuint /* texture */,
+ GLint /* level */) {
}
void GLES2InterfaceStub::FrontFace(GLenum /* mode */) {
}
@@ -159,37 +191,45 @@ void GLES2InterfaceStub::GenBuffers(GLsizei /* n */, GLuint* /* buffers */) {
}
void GLES2InterfaceStub::GenerateMipmap(GLenum /* target */) {
}
-void GLES2InterfaceStub::GenFramebuffers(
- GLsizei /* n */, GLuint* /* framebuffers */) {
+void GLES2InterfaceStub::GenFramebuffers(GLsizei /* n */,
+ GLuint* /* framebuffers */) {
}
-void GLES2InterfaceStub::GenRenderbuffers(
- GLsizei /* n */, GLuint* /* renderbuffers */) {
+void GLES2InterfaceStub::GenRenderbuffers(GLsizei /* n */,
+ GLuint* /* renderbuffers */) {
}
void GLES2InterfaceStub::GenTextures(GLsizei /* n */, GLuint* /* textures */) {
}
-void GLES2InterfaceStub::GetActiveAttrib(
- GLuint /* program */, GLuint /* index */, GLsizei /* bufsize */,
- GLsizei* /* length */, GLint* /* size */, GLenum* /* type */,
- char* /* name */) {
-}
-void GLES2InterfaceStub::GetActiveUniform(
- GLuint /* program */, GLuint /* index */, GLsizei /* bufsize */,
- GLsizei* /* length */, GLint* /* size */, GLenum* /* type */,
- char* /* name */) {
-}
-void GLES2InterfaceStub::GetAttachedShaders(
- GLuint /* program */, GLsizei /* maxcount */, GLsizei* /* count */,
- GLuint* /* shaders */) {
-}
-GLint GLES2InterfaceStub::GetAttribLocation(
- GLuint /* program */, const char* /* name */) {
+void GLES2InterfaceStub::GetActiveAttrib(GLuint /* program */,
+ GLuint /* index */,
+ GLsizei /* bufsize */,
+ GLsizei* /* length */,
+ GLint* /* size */,
+ GLenum* /* type */,
+ char* /* name */) {
+}
+void GLES2InterfaceStub::GetActiveUniform(GLuint /* program */,
+ GLuint /* index */,
+ GLsizei /* bufsize */,
+ GLsizei* /* length */,
+ GLint* /* size */,
+ GLenum* /* type */,
+ char* /* name */) {
+}
+void GLES2InterfaceStub::GetAttachedShaders(GLuint /* program */,
+ GLsizei /* maxcount */,
+ GLsizei* /* count */,
+ GLuint* /* shaders */) {
+}
+GLint GLES2InterfaceStub::GetAttribLocation(GLuint /* program */,
+ const char* /* name */) {
return 0;
}
-void GLES2InterfaceStub::GetBooleanv(
- GLenum /* pname */, GLboolean* /* params */) {
+void GLES2InterfaceStub::GetBooleanv(GLenum /* pname */,
+ GLboolean* /* params */) {
}
-void GLES2InterfaceStub::GetBufferParameteriv(
- GLenum /* target */, GLenum /* pname */, GLint* /* params */) {
+void GLES2InterfaceStub::GetBufferParameteriv(GLenum /* target */,
+ GLenum /* pname */,
+ GLint* /* params */) {
}
GLenum GLES2InterfaceStub::GetError() {
return 0;
@@ -197,63 +237,79 @@ GLenum GLES2InterfaceStub::GetError() {
void GLES2InterfaceStub::GetFloatv(GLenum /* pname */, GLfloat* /* params */) {
}
void GLES2InterfaceStub::GetFramebufferAttachmentParameteriv(
- GLenum /* target */, GLenum /* attachment */, GLenum /* pname */,
+ GLenum /* target */,
+ GLenum /* attachment */,
+ GLenum /* pname */,
GLint* /* params */) {
}
void GLES2InterfaceStub::GetIntegerv(GLenum /* pname */, GLint* /* params */) {
}
-void GLES2InterfaceStub::GetProgramiv(
- GLuint /* program */, GLenum /* pname */, GLint* /* params */) {
+void GLES2InterfaceStub::GetProgramiv(GLuint /* program */,
+ GLenum /* pname */,
+ GLint* /* params */) {
}
-void GLES2InterfaceStub::GetProgramInfoLog(
- GLuint /* program */, GLsizei /* bufsize */, GLsizei* /* length */,
- char* /* infolog */) {
+void GLES2InterfaceStub::GetProgramInfoLog(GLuint /* program */,
+ GLsizei /* bufsize */,
+ GLsizei* /* length */,
+ char* /* infolog */) {
}
-void GLES2InterfaceStub::GetRenderbufferParameteriv(
- GLenum /* target */, GLenum /* pname */, GLint* /* params */) {
+void GLES2InterfaceStub::GetRenderbufferParameteriv(GLenum /* target */,
+ GLenum /* pname */,
+ GLint* /* params */) {
}
-void GLES2InterfaceStub::GetShaderiv(
- GLuint /* shader */, GLenum /* pname */, GLint* /* params */) {
+void GLES2InterfaceStub::GetShaderiv(GLuint /* shader */,
+ GLenum /* pname */,
+ GLint* /* params */) {
}
-void GLES2InterfaceStub::GetShaderInfoLog(
- GLuint /* shader */, GLsizei /* bufsize */, GLsizei* /* length */,
- char* /* infolog */) {
+void GLES2InterfaceStub::GetShaderInfoLog(GLuint /* shader */,
+ GLsizei /* bufsize */,
+ GLsizei* /* length */,
+ char* /* infolog */) {
}
-void GLES2InterfaceStub::GetShaderPrecisionFormat(
- GLenum /* shadertype */, GLenum /* precisiontype */, GLint* /* range */,
- GLint* /* precision */) {
+void GLES2InterfaceStub::GetShaderPrecisionFormat(GLenum /* shadertype */,
+ GLenum /* precisiontype */,
+ GLint* /* range */,
+ GLint* /* precision */) {
}
-void GLES2InterfaceStub::GetShaderSource(
- GLuint /* shader */, GLsizei /* bufsize */, GLsizei* /* length */,
- char* /* source */) {
+void GLES2InterfaceStub::GetShaderSource(GLuint /* shader */,
+ GLsizei /* bufsize */,
+ GLsizei* /* length */,
+ char* /* source */) {
}
const GLubyte* GLES2InterfaceStub::GetString(GLenum /* name */) {
return 0;
}
-void GLES2InterfaceStub::GetTexParameterfv(
- GLenum /* target */, GLenum /* pname */, GLfloat* /* params */) {
+void GLES2InterfaceStub::GetTexParameterfv(GLenum /* target */,
+ GLenum /* pname */,
+ GLfloat* /* params */) {
}
-void GLES2InterfaceStub::GetTexParameteriv(
- GLenum /* target */, GLenum /* pname */, GLint* /* params */) {
+void GLES2InterfaceStub::GetTexParameteriv(GLenum /* target */,
+ GLenum /* pname */,
+ GLint* /* params */) {
}
-void GLES2InterfaceStub::GetUniformfv(
- GLuint /* program */, GLint /* location */, GLfloat* /* params */) {
+void GLES2InterfaceStub::GetUniformfv(GLuint /* program */,
+ GLint /* location */,
+ GLfloat* /* params */) {
}
-void GLES2InterfaceStub::GetUniformiv(
- GLuint /* program */, GLint /* location */, GLint* /* params */) {
+void GLES2InterfaceStub::GetUniformiv(GLuint /* program */,
+ GLint /* location */,
+ GLint* /* params */) {
}
-GLint GLES2InterfaceStub::GetUniformLocation(
- GLuint /* program */, const char* /* name */) {
+GLint GLES2InterfaceStub::GetUniformLocation(GLuint /* program */,
+ const char* /* name */) {
return 0;
}
-void GLES2InterfaceStub::GetVertexAttribfv(
- GLuint /* index */, GLenum /* pname */, GLfloat* /* params */) {
+void GLES2InterfaceStub::GetVertexAttribfv(GLuint /* index */,
+ GLenum /* pname */,
+ GLfloat* /* params */) {
}
-void GLES2InterfaceStub::GetVertexAttribiv(
- GLuint /* index */, GLenum /* pname */, GLint* /* params */) {
+void GLES2InterfaceStub::GetVertexAttribiv(GLuint /* index */,
+ GLenum /* pname */,
+ GLint* /* params */) {
}
-void GLES2InterfaceStub::GetVertexAttribPointerv(
- GLuint /* index */, GLenum /* pname */, void** /* pointer */) {
+void GLES2InterfaceStub::GetVertexAttribPointerv(GLuint /* index */,
+ GLenum /* pname */,
+ void** /* pointer */) {
}
void GLES2InterfaceStub::Hint(GLenum /* target */, GLenum /* mode */) {
}
@@ -284,136 +340,186 @@ void GLES2InterfaceStub::LinkProgram(GLuint /* program */) {
}
void GLES2InterfaceStub::PixelStorei(GLenum /* pname */, GLint /* param */) {
}
-void GLES2InterfaceStub::PolygonOffset(
- GLfloat /* factor */, GLfloat /* units */) {
+void GLES2InterfaceStub::PolygonOffset(GLfloat /* factor */,
+ GLfloat /* units */) {
}
-void GLES2InterfaceStub::ReadPixels(
- GLint /* x */, GLint /* y */, GLsizei /* width */, GLsizei /* height */,
- GLenum /* format */, GLenum /* type */, void* /* pixels */) {
+void GLES2InterfaceStub::ReadPixels(GLint /* x */,
+ GLint /* y */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLenum /* format */,
+ GLenum /* type */,
+ void* /* pixels */) {
}
void GLES2InterfaceStub::ReleaseShaderCompiler() {
}
-void GLES2InterfaceStub::RenderbufferStorage(
- GLenum /* target */, GLenum /* internalformat */, GLsizei /* width */,
- GLsizei /* height */) {
+void GLES2InterfaceStub::RenderbufferStorage(GLenum /* target */,
+ GLenum /* internalformat */,
+ GLsizei /* width */,
+ GLsizei /* height */) {
}
-void GLES2InterfaceStub::SampleCoverage(
- GLclampf /* value */, GLboolean /* invert */) {
+void GLES2InterfaceStub::SampleCoverage(GLclampf /* value */,
+ GLboolean /* invert */) {
}
-void GLES2InterfaceStub::Scissor(
- GLint /* x */, GLint /* y */, GLsizei /* width */, GLsizei /* height */) {
+void GLES2InterfaceStub::Scissor(GLint /* x */,
+ GLint /* y */,
+ GLsizei /* width */,
+ GLsizei /* height */) {
}
-void GLES2InterfaceStub::ShaderBinary(
- GLsizei /* n */, const GLuint* /* shaders */, GLenum /* binaryformat */,
- const void* /* binary */, GLsizei /* length */) {
+void GLES2InterfaceStub::ShaderBinary(GLsizei /* n */,
+ const GLuint* /* shaders */,
+ GLenum /* binaryformat */,
+ const void* /* binary */,
+ GLsizei /* length */) {
}
-void GLES2InterfaceStub::ShaderSource(
- GLuint /* shader */, GLsizei /* count */, const GLchar* const* /* str */,
- const GLint* /* length */) {
+void GLES2InterfaceStub::ShaderSource(GLuint /* shader */,
+ GLsizei /* count */,
+ const GLchar* const* /* str */,
+ const GLint* /* length */) {
}
void GLES2InterfaceStub::ShallowFinishCHROMIUM() {
}
void GLES2InterfaceStub::ShallowFlushCHROMIUM() {
}
-void GLES2InterfaceStub::StencilFunc(
- GLenum /* func */, GLint /* ref */, GLuint /* mask */) {
+void GLES2InterfaceStub::StencilFunc(GLenum /* func */,
+ GLint /* ref */,
+ GLuint /* mask */) {
}
-void GLES2InterfaceStub::StencilFuncSeparate(
- GLenum /* face */, GLenum /* func */, GLint /* ref */, GLuint /* mask */) {
+void GLES2InterfaceStub::StencilFuncSeparate(GLenum /* face */,
+ GLenum /* func */,
+ GLint /* ref */,
+ GLuint /* mask */) {
}
void GLES2InterfaceStub::StencilMask(GLuint /* mask */) {
}
-void GLES2InterfaceStub::StencilMaskSeparate(
- GLenum /* face */, GLuint /* mask */) {
-}
-void GLES2InterfaceStub::StencilOp(
- GLenum /* fail */, GLenum /* zfail */, GLenum /* zpass */) {
-}
-void GLES2InterfaceStub::StencilOpSeparate(
- GLenum /* face */, GLenum /* fail */, GLenum /* zfail */,
- GLenum /* zpass */) {
-}
-void GLES2InterfaceStub::TexImage2D(
- GLenum /* target */, GLint /* level */, GLint /* internalformat */,
- GLsizei /* width */, GLsizei /* height */, GLint /* border */,
- GLenum /* format */, GLenum /* type */, const void* /* pixels */) {
-}
-void GLES2InterfaceStub::TexParameterf(
- GLenum /* target */, GLenum /* pname */, GLfloat /* param */) {
-}
-void GLES2InterfaceStub::TexParameterfv(
- GLenum /* target */, GLenum /* pname */, const GLfloat* /* params */) {
-}
-void GLES2InterfaceStub::TexParameteri(
- GLenum /* target */, GLenum /* pname */, GLint /* param */) {
-}
-void GLES2InterfaceStub::TexParameteriv(
- GLenum /* target */, GLenum /* pname */, const GLint* /* params */) {
-}
-void GLES2InterfaceStub::TexSubImage2D(
- GLenum /* target */, GLint /* level */, GLint /* xoffset */,
- GLint /* yoffset */, GLsizei /* width */, GLsizei /* height */,
- GLenum /* format */, GLenum /* type */, const void* /* pixels */) {
+void GLES2InterfaceStub::StencilMaskSeparate(GLenum /* face */,
+ GLuint /* mask */) {
+}
+void GLES2InterfaceStub::StencilOp(GLenum /* fail */,
+ GLenum /* zfail */,
+ GLenum /* zpass */) {
+}
+void GLES2InterfaceStub::StencilOpSeparate(GLenum /* face */,
+ GLenum /* fail */,
+ GLenum /* zfail */,
+ GLenum /* zpass */) {
+}
+void GLES2InterfaceStub::TexImage2D(GLenum /* target */,
+ GLint /* level */,
+ GLint /* internalformat */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLint /* border */,
+ GLenum /* format */,
+ GLenum /* type */,
+ const void* /* pixels */) {
+}
+void GLES2InterfaceStub::TexParameterf(GLenum /* target */,
+ GLenum /* pname */,
+ GLfloat /* param */) {
+}
+void GLES2InterfaceStub::TexParameterfv(GLenum /* target */,
+ GLenum /* pname */,
+ const GLfloat* /* params */) {
+}
+void GLES2InterfaceStub::TexParameteri(GLenum /* target */,
+ GLenum /* pname */,
+ GLint /* param */) {
+}
+void GLES2InterfaceStub::TexParameteriv(GLenum /* target */,
+ GLenum /* pname */,
+ const GLint* /* params */) {
+}
+void GLES2InterfaceStub::TexSubImage2D(GLenum /* target */,
+ GLint /* level */,
+ GLint /* xoffset */,
+ GLint /* yoffset */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLenum /* format */,
+ GLenum /* type */,
+ const void* /* pixels */) {
}
void GLES2InterfaceStub::Uniform1f(GLint /* location */, GLfloat /* x */) {
}
-void GLES2InterfaceStub::Uniform1fv(
- GLint /* location */, GLsizei /* count */, const GLfloat* /* v */) {
+void GLES2InterfaceStub::Uniform1fv(GLint /* location */,
+ GLsizei /* count */,
+ const GLfloat* /* v */) {
}
void GLES2InterfaceStub::Uniform1i(GLint /* location */, GLint /* x */) {
}
-void GLES2InterfaceStub::Uniform1iv(
- GLint /* location */, GLsizei /* count */, const GLint* /* v */) {
-}
-void GLES2InterfaceStub::Uniform2f(
- GLint /* location */, GLfloat /* x */, GLfloat /* y */) {
-}
-void GLES2InterfaceStub::Uniform2fv(
- GLint /* location */, GLsizei /* count */, const GLfloat* /* v */) {
-}
-void GLES2InterfaceStub::Uniform2i(
- GLint /* location */, GLint /* x */, GLint /* y */) {
-}
-void GLES2InterfaceStub::Uniform2iv(
- GLint /* location */, GLsizei /* count */, const GLint* /* v */) {
-}
-void GLES2InterfaceStub::Uniform3f(
- GLint /* location */, GLfloat /* x */, GLfloat /* y */, GLfloat /* z */) {
-}
-void GLES2InterfaceStub::Uniform3fv(
- GLint /* location */, GLsizei /* count */, const GLfloat* /* v */) {
-}
-void GLES2InterfaceStub::Uniform3i(
- GLint /* location */, GLint /* x */, GLint /* y */, GLint /* z */) {
-}
-void GLES2InterfaceStub::Uniform3iv(
- GLint /* location */, GLsizei /* count */, const GLint* /* v */) {
-}
-void GLES2InterfaceStub::Uniform4f(
- GLint /* location */, GLfloat /* x */, GLfloat /* y */, GLfloat /* z */,
- GLfloat /* w */) {
-}
-void GLES2InterfaceStub::Uniform4fv(
- GLint /* location */, GLsizei /* count */, const GLfloat* /* v */) {
-}
-void GLES2InterfaceStub::Uniform4i(
- GLint /* location */, GLint /* x */, GLint /* y */, GLint /* z */,
- GLint /* w */) {
-}
-void GLES2InterfaceStub::Uniform4iv(
- GLint /* location */, GLsizei /* count */, const GLint* /* v */) {
-}
-void GLES2InterfaceStub::UniformMatrix2fv(
- GLint /* location */, GLsizei /* count */, GLboolean /* transpose */,
- const GLfloat* /* value */) {
-}
-void GLES2InterfaceStub::UniformMatrix3fv(
- GLint /* location */, GLsizei /* count */, GLboolean /* transpose */,
- const GLfloat* /* value */) {
-}
-void GLES2InterfaceStub::UniformMatrix4fv(
- GLint /* location */, GLsizei /* count */, GLboolean /* transpose */,
- const GLfloat* /* value */) {
+void GLES2InterfaceStub::Uniform1iv(GLint /* location */,
+ GLsizei /* count */,
+ const GLint* /* v */) {
+}
+void GLES2InterfaceStub::Uniform2f(GLint /* location */,
+ GLfloat /* x */,
+ GLfloat /* y */) {
+}
+void GLES2InterfaceStub::Uniform2fv(GLint /* location */,
+ GLsizei /* count */,
+ const GLfloat* /* v */) {
+}
+void GLES2InterfaceStub::Uniform2i(GLint /* location */,
+ GLint /* x */,
+ GLint /* y */) {
+}
+void GLES2InterfaceStub::Uniform2iv(GLint /* location */,
+ GLsizei /* count */,
+ const GLint* /* v */) {
+}
+void GLES2InterfaceStub::Uniform3f(GLint /* location */,
+ GLfloat /* x */,
+ GLfloat /* y */,
+ GLfloat /* z */) {
+}
+void GLES2InterfaceStub::Uniform3fv(GLint /* location */,
+ GLsizei /* count */,
+ const GLfloat* /* v */) {
+}
+void GLES2InterfaceStub::Uniform3i(GLint /* location */,
+ GLint /* x */,
+ GLint /* y */,
+ GLint /* z */) {
+}
+void GLES2InterfaceStub::Uniform3iv(GLint /* location */,
+ GLsizei /* count */,
+ const GLint* /* v */) {
+}
+void GLES2InterfaceStub::Uniform4f(GLint /* location */,
+ GLfloat /* x */,
+ GLfloat /* y */,
+ GLfloat /* z */,
+ GLfloat /* w */) {
+}
+void GLES2InterfaceStub::Uniform4fv(GLint /* location */,
+ GLsizei /* count */,
+ const GLfloat* /* v */) {
+}
+void GLES2InterfaceStub::Uniform4i(GLint /* location */,
+ GLint /* x */,
+ GLint /* y */,
+ GLint /* z */,
+ GLint /* w */) {
+}
+void GLES2InterfaceStub::Uniform4iv(GLint /* location */,
+ GLsizei /* count */,
+ const GLint* /* v */) {
+}
+void GLES2InterfaceStub::UniformMatrix2fv(GLint /* location */,
+ GLsizei /* count */,
+ GLboolean /* transpose */,
+ const GLfloat* /* value */) {
+}
+void GLES2InterfaceStub::UniformMatrix3fv(GLint /* location */,
+ GLsizei /* count */,
+ GLboolean /* transpose */,
+ const GLfloat* /* value */) {
+}
+void GLES2InterfaceStub::UniformMatrix4fv(GLint /* location */,
+ GLsizei /* count */,
+ GLboolean /* transpose */,
+ const GLfloat* /* value */) {
}
void GLES2InterfaceStub::UseProgram(GLuint /* program */) {
}
@@ -421,61 +527,88 @@ void GLES2InterfaceStub::ValidateProgram(GLuint /* program */) {
}
void GLES2InterfaceStub::VertexAttrib1f(GLuint /* indx */, GLfloat /* x */) {
}
-void GLES2InterfaceStub::VertexAttrib1fv(
- GLuint /* indx */, const GLfloat* /* values */) {
-}
-void GLES2InterfaceStub::VertexAttrib2f(
- GLuint /* indx */, GLfloat /* x */, GLfloat /* y */) {
-}
-void GLES2InterfaceStub::VertexAttrib2fv(
- GLuint /* indx */, const GLfloat* /* values */) {
-}
-void GLES2InterfaceStub::VertexAttrib3f(
- GLuint /* indx */, GLfloat /* x */, GLfloat /* y */, GLfloat /* z */) {
-}
-void GLES2InterfaceStub::VertexAttrib3fv(
- GLuint /* indx */, const GLfloat* /* values */) {
-}
-void GLES2InterfaceStub::VertexAttrib4f(
- GLuint /* indx */, GLfloat /* x */, GLfloat /* y */, GLfloat /* z */,
- GLfloat /* w */) {
-}
-void GLES2InterfaceStub::VertexAttrib4fv(
- GLuint /* indx */, const GLfloat* /* values */) {
-}
-void GLES2InterfaceStub::VertexAttribPointer(
- GLuint /* indx */, GLint /* size */, GLenum /* type */,
- GLboolean /* normalized */, GLsizei /* stride */, const void* /* ptr */) {
-}
-void GLES2InterfaceStub::Viewport(
- GLint /* x */, GLint /* y */, GLsizei /* width */, GLsizei /* height */) {
-}
-void GLES2InterfaceStub::BlitFramebufferCHROMIUM(
- GLint /* srcX0 */, GLint /* srcY0 */, GLint /* srcX1 */, GLint /* srcY1 */,
- GLint /* dstX0 */, GLint /* dstY0 */, GLint /* dstX1 */, GLint /* dstY1 */,
- GLbitfield /* mask */, GLenum /* filter */) {
+void GLES2InterfaceStub::VertexAttrib1fv(GLuint /* indx */,
+ const GLfloat* /* values */) {
+}
+void GLES2InterfaceStub::VertexAttrib2f(GLuint /* indx */,
+ GLfloat /* x */,
+ GLfloat /* y */) {
+}
+void GLES2InterfaceStub::VertexAttrib2fv(GLuint /* indx */,
+ const GLfloat* /* values */) {
+}
+void GLES2InterfaceStub::VertexAttrib3f(GLuint /* indx */,
+ GLfloat /* x */,
+ GLfloat /* y */,
+ GLfloat /* z */) {
+}
+void GLES2InterfaceStub::VertexAttrib3fv(GLuint /* indx */,
+ const GLfloat* /* values */) {
+}
+void GLES2InterfaceStub::VertexAttrib4f(GLuint /* indx */,
+ GLfloat /* x */,
+ GLfloat /* y */,
+ GLfloat /* z */,
+ GLfloat /* w */) {
+}
+void GLES2InterfaceStub::VertexAttrib4fv(GLuint /* indx */,
+ const GLfloat* /* values */) {
+}
+void GLES2InterfaceStub::VertexAttribPointer(GLuint /* indx */,
+ GLint /* size */,
+ GLenum /* type */,
+ GLboolean /* normalized */,
+ GLsizei /* stride */,
+ const void* /* ptr */) {
+}
+void GLES2InterfaceStub::Viewport(GLint /* x */,
+ GLint /* y */,
+ GLsizei /* width */,
+ GLsizei /* height */) {
+}
+void GLES2InterfaceStub::BlitFramebufferCHROMIUM(GLint /* srcX0 */,
+ GLint /* srcY0 */,
+ GLint /* srcX1 */,
+ GLint /* srcY1 */,
+ GLint /* dstX0 */,
+ GLint /* dstY0 */,
+ GLint /* dstX1 */,
+ GLint /* dstY1 */,
+ GLbitfield /* mask */,
+ GLenum /* filter */) {
}
void GLES2InterfaceStub::RenderbufferStorageMultisampleCHROMIUM(
- GLenum /* target */, GLsizei /* samples */, GLenum /* internalformat */,
- GLsizei /* width */, GLsizei /* height */) {
+ GLenum /* target */,
+ GLsizei /* samples */,
+ GLenum /* internalformat */,
+ GLsizei /* width */,
+ GLsizei /* height */) {
}
void GLES2InterfaceStub::RenderbufferStorageMultisampleEXT(
- GLenum /* target */, GLsizei /* samples */, GLenum /* internalformat */,
- GLsizei /* width */, GLsizei /* height */) {
+ GLenum /* target */,
+ GLsizei /* samples */,
+ GLenum /* internalformat */,
+ GLsizei /* width */,
+ GLsizei /* height */) {
}
void GLES2InterfaceStub::FramebufferTexture2DMultisampleEXT(
- GLenum /* target */, GLenum /* attachment */, GLenum /* textarget */,
- GLuint /* texture */, GLint /* level */, GLsizei /* samples */) {
+ GLenum /* target */,
+ GLenum /* attachment */,
+ GLenum /* textarget */,
+ GLuint /* texture */,
+ GLint /* level */,
+ GLsizei /* samples */) {
}
-void GLES2InterfaceStub::TexStorage2DEXT(
- GLenum /* target */, GLsizei /* levels */, GLenum /* internalFormat */,
- GLsizei /* width */, GLsizei /* height */) {
+void GLES2InterfaceStub::TexStorage2DEXT(GLenum /* target */,
+ GLsizei /* levels */,
+ GLenum /* internalFormat */,
+ GLsizei /* width */,
+ GLsizei /* height */) {
}
-void GLES2InterfaceStub::GenQueriesEXT(
- GLsizei /* n */, GLuint* /* queries */) {
+void GLES2InterfaceStub::GenQueriesEXT(GLsizei /* n */, GLuint* /* queries */) {
}
-void GLES2InterfaceStub::DeleteQueriesEXT(
- GLsizei /* n */, const GLuint* /* queries */) {
+void GLES2InterfaceStub::DeleteQueriesEXT(GLsizei /* n */,
+ const GLuint* /* queries */) {
}
GLboolean GLES2InterfaceStub::IsQueryEXT(GLuint /* id */) {
return 0;
@@ -484,25 +617,27 @@ void GLES2InterfaceStub::BeginQueryEXT(GLenum /* target */, GLuint /* id */) {
}
void GLES2InterfaceStub::EndQueryEXT(GLenum /* target */) {
}
-void GLES2InterfaceStub::GetQueryivEXT(
- GLenum /* target */, GLenum /* pname */, GLint* /* params */) {
+void GLES2InterfaceStub::GetQueryivEXT(GLenum /* target */,
+ GLenum /* pname */,
+ GLint* /* params */) {
}
-void GLES2InterfaceStub::GetQueryObjectuivEXT(
- GLuint /* id */, GLenum /* pname */, GLuint* /* params */) {
+void GLES2InterfaceStub::GetQueryObjectuivEXT(GLuint /* id */,
+ GLenum /* pname */,
+ GLuint* /* params */) {
}
-void GLES2InterfaceStub::InsertEventMarkerEXT(
- GLsizei /* length */, const GLchar* /* marker */) {
+void GLES2InterfaceStub::InsertEventMarkerEXT(GLsizei /* length */,
+ const GLchar* /* marker */) {
}
-void GLES2InterfaceStub::PushGroupMarkerEXT(
- GLsizei /* length */, const GLchar* /* marker */) {
+void GLES2InterfaceStub::PushGroupMarkerEXT(GLsizei /* length */,
+ const GLchar* /* marker */) {
}
void GLES2InterfaceStub::PopGroupMarkerEXT() {
}
-void GLES2InterfaceStub::GenVertexArraysOES(
- GLsizei /* n */, GLuint* /* arrays */) {
+void GLES2InterfaceStub::GenVertexArraysOES(GLsizei /* n */,
+ GLuint* /* arrays */) {
}
-void GLES2InterfaceStub::DeleteVertexArraysOES(
- GLsizei /* n */, const GLuint* /* arrays */) {
+void GLES2InterfaceStub::DeleteVertexArraysOES(GLsizei /* n */,
+ const GLuint* /* arrays */) {
}
GLboolean GLES2InterfaceStub::IsVertexArrayOES(GLuint /* array */) {
return 0;
@@ -511,161 +646,219 @@ void GLES2InterfaceStub::BindVertexArrayOES(GLuint /* array */) {
}
void GLES2InterfaceStub::SwapBuffers() {
}
-GLuint GLES2InterfaceStub::GetMaxValueInBufferCHROMIUM(
- GLuint /* buffer_id */, GLsizei /* count */, GLenum /* type */,
- GLuint /* offset */) {
+GLuint GLES2InterfaceStub::GetMaxValueInBufferCHROMIUM(GLuint /* buffer_id */,
+ GLsizei /* count */,
+ GLenum /* type */,
+ GLuint /* offset */) {
return 0;
}
-void GLES2InterfaceStub::GenSharedIdsCHROMIUM(
- GLuint /* namespace_id */, GLuint /* id_offset */, GLsizei /* n */,
- GLuint* /* ids */) {
+void GLES2InterfaceStub::GenSharedIdsCHROMIUM(GLuint /* namespace_id */,
+ GLuint /* id_offset */,
+ GLsizei /* n */,
+ GLuint* /* ids */) {
}
-void GLES2InterfaceStub::DeleteSharedIdsCHROMIUM(
- GLuint /* namespace_id */, GLsizei /* n */, const GLuint* /* ids */) {
+void GLES2InterfaceStub::DeleteSharedIdsCHROMIUM(GLuint /* namespace_id */,
+ GLsizei /* n */,
+ const GLuint* /* ids */) {
}
-void GLES2InterfaceStub::RegisterSharedIdsCHROMIUM(
- GLuint /* namespace_id */, GLsizei /* n */, const GLuint* /* ids */) {
+void GLES2InterfaceStub::RegisterSharedIdsCHROMIUM(GLuint /* namespace_id */,
+ GLsizei /* n */,
+ const GLuint* /* ids */) {
}
-GLboolean GLES2InterfaceStub::EnableFeatureCHROMIUM(
- const char* /* feature */) {
+GLboolean GLES2InterfaceStub::EnableFeatureCHROMIUM(const char* /* feature */) {
return 0;
}
-void* GLES2InterfaceStub::MapBufferCHROMIUM(
- GLuint /* target */, GLenum /* access */) {
+void* GLES2InterfaceStub::MapBufferCHROMIUM(GLuint /* target */,
+ GLenum /* access */) {
return 0;
}
GLboolean GLES2InterfaceStub::UnmapBufferCHROMIUM(GLuint /* target */) {
return 0;
}
-void* GLES2InterfaceStub::MapImageCHROMIUM(
- GLuint /* image_id */, GLenum /* access */) {
+void* GLES2InterfaceStub::MapImageCHROMIUM(GLuint /* image_id */) {
return 0;
}
void GLES2InterfaceStub::UnmapImageCHROMIUM(GLuint /* image_id */) {
}
-void* GLES2InterfaceStub::MapBufferSubDataCHROMIUM(
- GLuint /* target */, GLintptr /* offset */, GLsizeiptr /* size */,
- GLenum /* access */) {
+void* GLES2InterfaceStub::MapBufferSubDataCHROMIUM(GLuint /* target */,
+ GLintptr /* offset */,
+ GLsizeiptr /* size */,
+ GLenum /* access */) {
return 0;
}
void GLES2InterfaceStub::UnmapBufferSubDataCHROMIUM(const void* /* mem */) {
}
-void* GLES2InterfaceStub::MapTexSubImage2DCHROMIUM(
- GLenum /* target */, GLint /* level */, GLint /* xoffset */,
- GLint /* yoffset */, GLsizei /* width */, GLsizei /* height */,
- GLenum /* format */, GLenum /* type */, GLenum /* access */) {
+void* GLES2InterfaceStub::MapTexSubImage2DCHROMIUM(GLenum /* target */,
+ GLint /* level */,
+ GLint /* xoffset */,
+ GLint /* yoffset */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLenum /* format */,
+ GLenum /* type */,
+ GLenum /* access */) {
return 0;
}
void GLES2InterfaceStub::UnmapTexSubImage2DCHROMIUM(const void* /* mem */) {
}
-void GLES2InterfaceStub::ResizeCHROMIUM(
- GLuint /* width */, GLuint /* height */, GLfloat /* scale_factor */) {
+void GLES2InterfaceStub::ResizeCHROMIUM(GLuint /* width */,
+ GLuint /* height */,
+ GLfloat /* scale_factor */) {
}
const GLchar* GLES2InterfaceStub::GetRequestableExtensionsCHROMIUM() {
return 0;
}
-void GLES2InterfaceStub::RequestExtensionCHROMIUM(
- const char* /* extension */) {
+void GLES2InterfaceStub::RequestExtensionCHROMIUM(const char* /* extension */) {
}
void GLES2InterfaceStub::RateLimitOffscreenContextCHROMIUM() {
}
-void GLES2InterfaceStub::GetMultipleIntegervCHROMIUM(
- const GLenum* /* pnames */, GLuint /* count */, GLint* /* results */,
- GLsizeiptr /* size */) {
+void GLES2InterfaceStub::GetMultipleIntegervCHROMIUM(const GLenum* /* pnames */,
+ GLuint /* count */,
+ GLint* /* results */,
+ GLsizeiptr /* size */) {
}
-void GLES2InterfaceStub::GetProgramInfoCHROMIUM(
- GLuint /* program */, GLsizei /* bufsize */, GLsizei* /* size */,
- void* /* info */) {
+void GLES2InterfaceStub::GetProgramInfoCHROMIUM(GLuint /* program */,
+ GLsizei /* bufsize */,
+ GLsizei* /* size */,
+ void* /* info */) {
}
GLuint GLES2InterfaceStub::CreateStreamTextureCHROMIUM(GLuint /* texture */) {
return 0;
}
-void GLES2InterfaceStub::DestroyStreamTextureCHROMIUM(GLuint /* texture */) {
-}
-GLuint GLES2InterfaceStub::CreateImageCHROMIUM(
- GLsizei /* width */, GLsizei /* height */, GLenum /* internalformat */) {
+GLuint GLES2InterfaceStub::CreateImageCHROMIUM(GLsizei /* width */,
+ GLsizei /* height */,
+ GLenum /* internalformat */,
+ GLenum /* usage */) {
return 0;
}
void GLES2InterfaceStub::DestroyImageCHROMIUM(GLuint /* image_id */) {
}
-void GLES2InterfaceStub::GetImageParameterivCHROMIUM(
- GLuint /* image_id */, GLenum /* pname */, GLint* /* params */) {
-}
-void GLES2InterfaceStub::GetTranslatedShaderSourceANGLE(
- GLuint /* shader */, GLsizei /* bufsize */, GLsizei* /* length */,
- char* /* source */) {
-}
-void GLES2InterfaceStub::PostSubBufferCHROMIUM(
- GLint /* x */, GLint /* y */, GLint /* width */, GLint /* height */) {
-}
-void GLES2InterfaceStub::TexImageIOSurface2DCHROMIUM(
- GLenum /* target */, GLsizei /* width */, GLsizei /* height */,
- GLuint /* ioSurfaceId */, GLuint /* plane */) {
+void GLES2InterfaceStub::GetImageParameterivCHROMIUM(GLuint /* image_id */,
+ GLenum /* pname */,
+ GLint* /* params */) {
+}
+void GLES2InterfaceStub::GetTranslatedShaderSourceANGLE(GLuint /* shader */,
+ GLsizei /* bufsize */,
+ GLsizei* /* length */,
+ char* /* source */) {
+}
+void GLES2InterfaceStub::PostSubBufferCHROMIUM(GLint /* x */,
+ GLint /* y */,
+ GLint /* width */,
+ GLint /* height */) {
+}
+void GLES2InterfaceStub::TexImageIOSurface2DCHROMIUM(GLenum /* target */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLuint /* ioSurfaceId */,
+ GLuint /* plane */) {
+}
+void GLES2InterfaceStub::CopyTextureCHROMIUM(GLenum /* target */,
+ GLenum /* source_id */,
+ GLenum /* dest_id */,
+ GLint /* level */,
+ GLint /* internalformat */,
+ GLenum /* dest_type */) {
+}
+void GLES2InterfaceStub::DrawArraysInstancedANGLE(GLenum /* mode */,
+ GLint /* first */,
+ GLsizei /* count */,
+ GLsizei /* primcount */) {
+}
+void GLES2InterfaceStub::DrawElementsInstancedANGLE(GLenum /* mode */,
+ GLsizei /* count */,
+ GLenum /* type */,
+ const void* /* indices */,
+ GLsizei /* primcount */) {
+}
+void GLES2InterfaceStub::VertexAttribDivisorANGLE(GLuint /* index */,
+ GLuint /* divisor */) {
}
-void GLES2InterfaceStub::CopyTextureCHROMIUM(
- GLenum /* target */, GLenum /* source_id */, GLenum /* dest_id */,
- GLint /* level */, GLint /* internalformat */, GLenum /* dest_type */) {
-}
-void GLES2InterfaceStub::DrawArraysInstancedANGLE(
- GLenum /* mode */, GLint /* first */, GLsizei /* count */,
- GLsizei /* primcount */) {
+void GLES2InterfaceStub::GenMailboxCHROMIUM(GLbyte* /* mailbox */) {
}
-void GLES2InterfaceStub::DrawElementsInstancedANGLE(
- GLenum /* mode */, GLsizei /* count */, GLenum /* type */,
- const void* /* indices */, GLsizei /* primcount */) {
+void GLES2InterfaceStub::ProduceTextureCHROMIUM(GLenum /* target */,
+ const GLbyte* /* mailbox */) {
}
-void GLES2InterfaceStub::VertexAttribDivisorANGLE(
- GLuint /* index */, GLuint /* divisor */) {
+void GLES2InterfaceStub::ProduceTextureDirectCHROMIUM(
+ GLuint /* texture */,
+ GLenum /* target */,
+ const GLbyte* /* mailbox */) {
}
-void GLES2InterfaceStub::GenMailboxCHROMIUM(GLbyte* /* mailbox */) {
+void GLES2InterfaceStub::ConsumeTextureCHROMIUM(GLenum /* target */,
+ const GLbyte* /* mailbox */) {
}
-void GLES2InterfaceStub::ProduceTextureCHROMIUM(
- GLenum /* target */, const GLbyte* /* mailbox */) {
-}
-void GLES2InterfaceStub::ConsumeTextureCHROMIUM(
- GLenum /* target */, const GLbyte* /* mailbox */) {
+GLuint GLES2InterfaceStub::CreateAndConsumeTextureCHROMIUM(
+ GLenum /* target */,
+ const GLbyte* /* mailbox */) {
+ return 0;
}
-void GLES2InterfaceStub::BindUniformLocationCHROMIUM(
- GLuint /* program */, GLint /* location */, const char* /* name */) {
+void GLES2InterfaceStub::BindUniformLocationCHROMIUM(GLuint /* program */,
+ GLint /* location */,
+ const char* /* name */) {
}
-void GLES2InterfaceStub::BindTexImage2DCHROMIUM(
- GLenum /* target */, GLint /* imageId */) {
+void GLES2InterfaceStub::BindTexImage2DCHROMIUM(GLenum /* target */,
+ GLint /* imageId */) {
}
-void GLES2InterfaceStub::ReleaseTexImage2DCHROMIUM(
- GLenum /* target */, GLint /* imageId */) {
+void GLES2InterfaceStub::ReleaseTexImage2DCHROMIUM(GLenum /* target */,
+ GLint /* imageId */) {
}
void GLES2InterfaceStub::TraceBeginCHROMIUM(const char* /* name */) {
}
void GLES2InterfaceStub::TraceEndCHROMIUM() {
}
-void GLES2InterfaceStub::AsyncTexSubImage2DCHROMIUM(
- GLenum /* target */, GLint /* level */, GLint /* xoffset */,
- GLint /* yoffset */, GLsizei /* width */, GLsizei /* height */,
- GLenum /* format */, GLenum /* type */, const void* /* data */) {
-}
-void GLES2InterfaceStub::AsyncTexImage2DCHROMIUM(
- GLenum /* target */, GLint /* level */, GLint /* internalformat */,
- GLsizei /* width */, GLsizei /* height */, GLint /* border */,
- GLenum /* format */, GLenum /* type */, const void* /* pixels */) {
+void GLES2InterfaceStub::AsyncTexSubImage2DCHROMIUM(GLenum /* target */,
+ GLint /* level */,
+ GLint /* xoffset */,
+ GLint /* yoffset */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLenum /* format */,
+ GLenum /* type */,
+ const void* /* data */) {
+}
+void GLES2InterfaceStub::AsyncTexImage2DCHROMIUM(GLenum /* target */,
+ GLint /* level */,
+ GLenum /* internalformat */,
+ GLsizei /* width */,
+ GLsizei /* height */,
+ GLint /* border */,
+ GLenum /* format */,
+ GLenum /* type */,
+ const void* /* pixels */) {
}
void GLES2InterfaceStub::WaitAsyncTexImage2DCHROMIUM(GLenum /* target */) {
}
+void GLES2InterfaceStub::WaitAllAsyncTexImage2DCHROMIUM() {
+}
void GLES2InterfaceStub::DiscardFramebufferEXT(
- GLenum /* target */, GLsizei /* count */,
+ GLenum /* target */,
+ GLsizei /* count */,
const GLenum* /* attachments */) {
}
-void GLES2InterfaceStub::LoseContextCHROMIUM(
- GLenum /* current */, GLenum /* other */) {
+void GLES2InterfaceStub::LoseContextCHROMIUM(GLenum /* current */,
+ GLenum /* other */) {
}
GLuint GLES2InterfaceStub::InsertSyncPointCHROMIUM() {
return 0;
}
void GLES2InterfaceStub::WaitSyncPointCHROMIUM(GLuint /* sync_point */) {
}
-void GLES2InterfaceStub::DrawBuffersEXT(
- GLsizei /* count */, const GLenum* /* bufs */) {
+void GLES2InterfaceStub::DrawBuffersEXT(GLsizei /* count */,
+ const GLenum* /* bufs */) {
}
void GLES2InterfaceStub::DiscardBackbufferCHROMIUM() {
}
+void GLES2InterfaceStub::ScheduleOverlayPlaneCHROMIUM(
+ GLint /* plane_z_order */,
+ GLenum /* plane_transform */,
+ GLuint /* overlay_texture_id */,
+ GLint /* bounds_x */,
+ GLint /* bounds_y */,
+ GLint /* bounds_width */,
+ GLint /* bounds_height */,
+ GLfloat /* uv_x */,
+ GLfloat /* uv_y */,
+ GLfloat /* uv_width */,
+ GLfloat /* uv_height */) {
+}
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_INTERFACE_STUB_IMPL_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/chromium/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
index d811db571a8..b40ae9a46a2 100644
--- a/chromium/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file is included by gles2_trace_implementation.h
@@ -12,56 +14,86 @@
virtual void ActiveTexture(GLenum texture) OVERRIDE;
virtual void AttachShader(GLuint program, GLuint shader) OVERRIDE;
-virtual void BindAttribLocation(
- GLuint program, GLuint index, const char* name) OVERRIDE;
+virtual void BindAttribLocation(GLuint program,
+ GLuint index,
+ const char* name) OVERRIDE;
virtual void BindBuffer(GLenum target, GLuint buffer) OVERRIDE;
virtual void BindFramebuffer(GLenum target, GLuint framebuffer) OVERRIDE;
virtual void BindRenderbuffer(GLenum target, GLuint renderbuffer) OVERRIDE;
virtual void BindTexture(GLenum target, GLuint texture) OVERRIDE;
-virtual void BlendColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) OVERRIDE;
+virtual void BlendColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) OVERRIDE;
virtual void BlendEquation(GLenum mode) OVERRIDE;
virtual void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) OVERRIDE;
virtual void BlendFunc(GLenum sfactor, GLenum dfactor) OVERRIDE;
-virtual void BlendFuncSeparate(
- GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) OVERRIDE;
-virtual void BufferData(
- GLenum target, GLsizeiptr size, const void* data, GLenum usage) OVERRIDE;
-virtual void BufferSubData(
- GLenum target, GLintptr offset, GLsizeiptr size,
- const void* data) OVERRIDE;
+virtual void BlendFuncSeparate(GLenum srcRGB,
+ GLenum dstRGB,
+ GLenum srcAlpha,
+ GLenum dstAlpha) OVERRIDE;
+virtual void BufferData(GLenum target,
+ GLsizeiptr size,
+ const void* data,
+ GLenum usage) OVERRIDE;
+virtual void BufferSubData(GLenum target,
+ GLintptr offset,
+ GLsizeiptr size,
+ const void* data) OVERRIDE;
virtual GLenum CheckFramebufferStatus(GLenum target) OVERRIDE;
virtual void Clear(GLbitfield mask) OVERRIDE;
-virtual void ClearColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) OVERRIDE;
+virtual void ClearColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) OVERRIDE;
virtual void ClearDepthf(GLclampf depth) OVERRIDE;
virtual void ClearStencil(GLint s) OVERRIDE;
-virtual void ColorMask(
- GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) OVERRIDE;
+virtual void ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) OVERRIDE;
virtual void CompileShader(GLuint shader) OVERRIDE;
-virtual void CompressedTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLsizei imageSize,
- const void* data) OVERRIDE;
-virtual void CompressedTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize,
- const void* data) OVERRIDE;
-virtual void CopyTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border) OVERRIDE;
-virtual void CopyTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y,
- GLsizei width, GLsizei height) OVERRIDE;
+virtual void CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void* data) OVERRIDE;
+virtual void CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void* data) OVERRIDE;
+virtual void CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border) OVERRIDE;
+virtual void CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual GLuint CreateProgram() OVERRIDE;
virtual GLuint CreateShader(GLenum type) OVERRIDE;
virtual void CullFace(GLenum mode) OVERRIDE;
virtual void DeleteBuffers(GLsizei n, const GLuint* buffers) OVERRIDE;
-virtual void DeleteFramebuffers(
- GLsizei n, const GLuint* framebuffers) OVERRIDE;
+virtual void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) OVERRIDE;
virtual void DeleteProgram(GLuint program) OVERRIDE;
-virtual void DeleteRenderbuffers(
- GLsizei n, const GLuint* renderbuffers) OVERRIDE;
+virtual void DeleteRenderbuffers(GLsizei n,
+ const GLuint* renderbuffers) OVERRIDE;
virtual void DeleteShader(GLuint shader) OVERRIDE;
virtual void DeleteTextures(GLsizei n, const GLuint* textures) OVERRIDE;
virtual void DepthFunc(GLenum func) OVERRIDE;
@@ -71,72 +103,103 @@ virtual void DetachShader(GLuint program, GLuint shader) OVERRIDE;
virtual void Disable(GLenum cap) OVERRIDE;
virtual void DisableVertexAttribArray(GLuint index) OVERRIDE;
virtual void DrawArrays(GLenum mode, GLint first, GLsizei count) OVERRIDE;
-virtual void DrawElements(
- GLenum mode, GLsizei count, GLenum type, const void* indices) OVERRIDE;
+virtual void DrawElements(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices) OVERRIDE;
virtual void Enable(GLenum cap) OVERRIDE;
virtual void EnableVertexAttribArray(GLuint index) OVERRIDE;
virtual void Finish() OVERRIDE;
virtual void Flush() OVERRIDE;
-virtual void FramebufferRenderbuffer(
- GLenum target, GLenum attachment, GLenum renderbuffertarget,
- GLuint renderbuffer) OVERRIDE;
-virtual void FramebufferTexture2D(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level) OVERRIDE;
+virtual void FramebufferRenderbuffer(GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
+ GLuint renderbuffer) OVERRIDE;
+virtual void FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level) OVERRIDE;
virtual void FrontFace(GLenum mode) OVERRIDE;
virtual void GenBuffers(GLsizei n, GLuint* buffers) OVERRIDE;
virtual void GenerateMipmap(GLenum target) OVERRIDE;
virtual void GenFramebuffers(GLsizei n, GLuint* framebuffers) OVERRIDE;
virtual void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) OVERRIDE;
virtual void GenTextures(GLsizei n, GLuint* textures) OVERRIDE;
-virtual void GetActiveAttrib(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) OVERRIDE;
-virtual void GetActiveUniform(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) OVERRIDE;
-virtual void GetAttachedShaders(
- GLuint program, GLsizei maxcount, GLsizei* count,
- GLuint* shaders) OVERRIDE;
+virtual void GetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) OVERRIDE;
+virtual void GetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) OVERRIDE;
+virtual void GetAttachedShaders(GLuint program,
+ GLsizei maxcount,
+ GLsizei* count,
+ GLuint* shaders) OVERRIDE;
virtual GLint GetAttribLocation(GLuint program, const char* name) OVERRIDE;
virtual void GetBooleanv(GLenum pname, GLboolean* params) OVERRIDE;
-virtual void GetBufferParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetBufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual GLenum GetError() OVERRIDE;
virtual void GetFloatv(GLenum pname, GLfloat* params) OVERRIDE;
-virtual void GetFramebufferAttachmentParameteriv(
- GLenum target, GLenum attachment, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetFramebufferAttachmentParameteriv(GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual void GetIntegerv(GLenum pname, GLint* params) OVERRIDE;
-virtual void GetProgramiv(
- GLuint program, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetProgramInfoLog(
- GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) OVERRIDE;
-virtual void GetRenderbufferParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetProgramiv(GLuint program, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetProgramInfoLog(GLuint program,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) OVERRIDE;
+virtual void GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
virtual void GetShaderiv(GLuint shader, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetShaderInfoLog(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) OVERRIDE;
-virtual void GetShaderPrecisionFormat(
- GLenum shadertype, GLenum precisiontype, GLint* range,
- GLint* precision) OVERRIDE;
-virtual void GetShaderSource(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) OVERRIDE;
+virtual void GetShaderInfoLog(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) OVERRIDE;
+virtual void GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint* range,
+ GLint* precision) OVERRIDE;
+virtual void GetShaderSource(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) OVERRIDE;
virtual const GLubyte* GetString(GLenum name) OVERRIDE;
-virtual void GetTexParameterfv(
- GLenum target, GLenum pname, GLfloat* params) OVERRIDE;
-virtual void GetTexParameteriv(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetUniformfv(
- GLuint program, GLint location, GLfloat* params) OVERRIDE;
-virtual void GetUniformiv(
- GLuint program, GLint location, GLint* params) OVERRIDE;
+virtual void GetTexParameterfv(GLenum target,
+ GLenum pname,
+ GLfloat* params) OVERRIDE;
+virtual void GetTexParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) OVERRIDE;
+virtual void GetUniformfv(GLuint program,
+ GLint location,
+ GLfloat* params) OVERRIDE;
+virtual void GetUniformiv(GLuint program,
+ GLint location,
+ GLint* params) OVERRIDE;
virtual GLint GetUniformLocation(GLuint program, const char* name) OVERRIDE;
-virtual void GetVertexAttribfv(
- GLuint index, GLenum pname, GLfloat* params) OVERRIDE;
-virtual void GetVertexAttribiv(
- GLuint index, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetVertexAttribPointerv(
- GLuint index, GLenum pname, void** pointer) OVERRIDE;
+virtual void GetVertexAttribfv(GLuint index,
+ GLenum pname,
+ GLfloat* params) OVERRIDE;
+virtual void GetVertexAttribiv(GLuint index,
+ GLenum pname,
+ GLint* params) OVERRIDE;
+virtual void GetVertexAttribPointerv(GLuint index,
+ GLenum pname,
+ void** pointer) OVERRIDE;
virtual void Hint(GLenum target, GLenum mode) OVERRIDE;
virtual GLboolean IsBuffer(GLuint buffer) OVERRIDE;
virtual GLboolean IsEnabled(GLenum cap) OVERRIDE;
@@ -149,125 +212,182 @@ virtual void LineWidth(GLfloat width) OVERRIDE;
virtual void LinkProgram(GLuint program) OVERRIDE;
virtual void PixelStorei(GLenum pname, GLint param) OVERRIDE;
virtual void PolygonOffset(GLfloat factor, GLfloat units) OVERRIDE;
-virtual void ReadPixels(
- GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
- void* pixels) OVERRIDE;
+virtual void ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void* pixels) OVERRIDE;
virtual void ReleaseShaderCompiler() OVERRIDE;
-virtual void RenderbufferStorage(
- GLenum target, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
+virtual void RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual void SampleCoverage(GLclampf value, GLboolean invert) OVERRIDE;
virtual void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
-virtual void ShaderBinary(
- GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary,
- GLsizei length) OVERRIDE;
-virtual void ShaderSource(
- GLuint shader, GLsizei count, const GLchar* const* str,
- const GLint* length) OVERRIDE;
+virtual void ShaderBinary(GLsizei n,
+ const GLuint* shaders,
+ GLenum binaryformat,
+ const void* binary,
+ GLsizei length) OVERRIDE;
+virtual void ShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar* const* str,
+ const GLint* length) OVERRIDE;
virtual void ShallowFinishCHROMIUM() OVERRIDE;
virtual void ShallowFlushCHROMIUM() OVERRIDE;
virtual void StencilFunc(GLenum func, GLint ref, GLuint mask) OVERRIDE;
-virtual void StencilFuncSeparate(
- GLenum face, GLenum func, GLint ref, GLuint mask) OVERRIDE;
+virtual void StencilFuncSeparate(GLenum face,
+ GLenum func,
+ GLint ref,
+ GLuint mask) OVERRIDE;
virtual void StencilMask(GLuint mask) OVERRIDE;
virtual void StencilMaskSeparate(GLenum face, GLuint mask) OVERRIDE;
virtual void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) OVERRIDE;
-virtual void StencilOpSeparate(
- GLenum face, GLenum fail, GLenum zfail, GLenum zpass) OVERRIDE;
-virtual void TexImage2D(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) OVERRIDE;
-virtual void TexParameterf(
- GLenum target, GLenum pname, GLfloat param) OVERRIDE;
-virtual void TexParameterfv(
- GLenum target, GLenum pname, const GLfloat* params) OVERRIDE;
+virtual void StencilOpSeparate(GLenum face,
+ GLenum fail,
+ GLenum zfail,
+ GLenum zpass) OVERRIDE;
+virtual void TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
+virtual void TexParameterf(GLenum target, GLenum pname, GLfloat param) OVERRIDE;
+virtual void TexParameterfv(GLenum target,
+ GLenum pname,
+ const GLfloat* params) OVERRIDE;
virtual void TexParameteri(GLenum target, GLenum pname, GLint param) OVERRIDE;
-virtual void TexParameteriv(
- GLenum target, GLenum pname, const GLint* params) OVERRIDE;
-virtual void TexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* pixels) OVERRIDE;
+virtual void TexParameteriv(GLenum target,
+ GLenum pname,
+ const GLint* params) OVERRIDE;
+virtual void TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
virtual void Uniform1f(GLint location, GLfloat x) OVERRIDE;
-virtual void Uniform1fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform1fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform1i(GLint location, GLint x) OVERRIDE;
-virtual void Uniform1iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform1iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
virtual void Uniform2f(GLint location, GLfloat x, GLfloat y) OVERRIDE;
-virtual void Uniform2fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform2fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform2i(GLint location, GLint x, GLint y) OVERRIDE;
-virtual void Uniform2iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void Uniform3f(
- GLint location, GLfloat x, GLfloat y, GLfloat z) OVERRIDE;
-virtual void Uniform3fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
+virtual void Uniform2iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform3f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) OVERRIDE;
+virtual void Uniform3fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
virtual void Uniform3i(GLint location, GLint x, GLint y, GLint z) OVERRIDE;
-virtual void Uniform3iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void Uniform4f(
- GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) OVERRIDE;
-virtual void Uniform4fv(
- GLint location, GLsizei count, const GLfloat* v) OVERRIDE;
-virtual void Uniform4i(
- GLint location, GLint x, GLint y, GLint z, GLint w) OVERRIDE;
-virtual void Uniform4iv(
- GLint location, GLsizei count, const GLint* v) OVERRIDE;
-virtual void UniformMatrix2fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
-virtual void UniformMatrix3fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
-virtual void UniformMatrix4fv(
- GLint location, GLsizei count, GLboolean transpose,
- const GLfloat* value) OVERRIDE;
+virtual void Uniform3iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void Uniform4f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) OVERRIDE;
+virtual void Uniform4fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) OVERRIDE;
+virtual void Uniform4i(GLint location,
+ GLint x,
+ GLint y,
+ GLint z,
+ GLint w) OVERRIDE;
+virtual void Uniform4iv(GLint location, GLsizei count, const GLint* v) OVERRIDE;
+virtual void UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
+virtual void UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
+virtual void UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) OVERRIDE;
virtual void UseProgram(GLuint program) OVERRIDE;
virtual void ValidateProgram(GLuint program) OVERRIDE;
virtual void VertexAttrib1f(GLuint indx, GLfloat x) OVERRIDE;
virtual void VertexAttrib1fv(GLuint indx, const GLfloat* values) OVERRIDE;
virtual void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) OVERRIDE;
virtual void VertexAttrib2fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttrib3f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z) OVERRIDE;
+virtual void VertexAttrib3f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) OVERRIDE;
virtual void VertexAttrib3fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttrib4f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) OVERRIDE;
+virtual void VertexAttrib4f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) OVERRIDE;
virtual void VertexAttrib4fv(GLuint indx, const GLfloat* values) OVERRIDE;
-virtual void VertexAttribPointer(
- GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
- const void* ptr) OVERRIDE;
-virtual void Viewport(
- GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
-virtual void BlitFramebufferCHROMIUM(
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0,
- GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask,
- GLenum filter) OVERRIDE;
-virtual void RenderbufferStorageMultisampleCHROMIUM(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
-virtual void RenderbufferStorageMultisampleEXT(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
- GLsizei height) OVERRIDE;
-virtual void FramebufferTexture2DMultisampleEXT(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLsizei samples) OVERRIDE;
-virtual void TexStorage2DEXT(
- GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
- GLsizei height) OVERRIDE;
+virtual void VertexAttribPointer(GLuint indx,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void* ptr) OVERRIDE;
+virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) OVERRIDE;
+virtual void BlitFramebufferCHROMIUM(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter) OVERRIDE;
+virtual void RenderbufferStorageMultisampleCHROMIUM(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
+virtual void RenderbufferStorageMultisampleEXT(GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
+virtual void FramebufferTexture2DMultisampleEXT(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level,
+ GLsizei samples) OVERRIDE;
+virtual void TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalFormat,
+ GLsizei width,
+ GLsizei height) OVERRIDE;
virtual void GenQueriesEXT(GLsizei n, GLuint* queries) OVERRIDE;
virtual void DeleteQueriesEXT(GLsizei n, const GLuint* queries) OVERRIDE;
virtual GLboolean IsQueryEXT(GLuint id) OVERRIDE;
virtual void BeginQueryEXT(GLenum target, GLuint id) OVERRIDE;
virtual void EndQueryEXT(GLenum target) OVERRIDE;
-virtual void GetQueryivEXT(
- GLenum target, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetQueryObjectuivEXT(
- GLuint id, GLenum pname, GLuint* params) OVERRIDE;
-virtual void InsertEventMarkerEXT(
- GLsizei length, const GLchar* marker) OVERRIDE;
+virtual void GetQueryivEXT(GLenum target, GLenum pname, GLint* params) OVERRIDE;
+virtual void GetQueryObjectuivEXT(GLuint id,
+ GLenum pname,
+ GLuint* params) OVERRIDE;
+virtual void InsertEventMarkerEXT(GLsizei length,
+ const GLchar* marker) OVERRIDE;
virtual void PushGroupMarkerEXT(GLsizei length, const GLchar* marker) OVERRIDE;
virtual void PopGroupMarkerEXT() OVERRIDE;
virtual void GenVertexArraysOES(GLsizei n, GLuint* arrays) OVERRIDE;
@@ -275,84 +395,146 @@ virtual void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) OVERRIDE;
virtual GLboolean IsVertexArrayOES(GLuint array) OVERRIDE;
virtual void BindVertexArrayOES(GLuint array) OVERRIDE;
virtual void SwapBuffers() OVERRIDE;
-virtual GLuint GetMaxValueInBufferCHROMIUM(
- GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) OVERRIDE;
-virtual void GenSharedIdsCHROMIUM(
- GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) OVERRIDE;
-virtual void DeleteSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) OVERRIDE;
-virtual void RegisterSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) OVERRIDE;
+virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+ GLsizei count,
+ GLenum type,
+ GLuint offset) OVERRIDE;
+virtual void GenSharedIdsCHROMIUM(GLuint namespace_id,
+ GLuint id_offset,
+ GLsizei n,
+ GLuint* ids) OVERRIDE;
+virtual void DeleteSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) OVERRIDE;
+virtual void RegisterSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) OVERRIDE;
virtual GLboolean EnableFeatureCHROMIUM(const char* feature) OVERRIDE;
virtual void* MapBufferCHROMIUM(GLuint target, GLenum access) OVERRIDE;
virtual GLboolean UnmapBufferCHROMIUM(GLuint target) OVERRIDE;
-virtual void* MapImageCHROMIUM(GLuint image_id, GLenum access) OVERRIDE;
+virtual void* MapImageCHROMIUM(GLuint image_id) OVERRIDE;
virtual void UnmapImageCHROMIUM(GLuint image_id) OVERRIDE;
-virtual void* MapBufferSubDataCHROMIUM(
- GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) OVERRIDE;
+virtual void* MapBufferSubDataCHROMIUM(GLuint target,
+ GLintptr offset,
+ GLsizeiptr size,
+ GLenum access) OVERRIDE;
virtual void UnmapBufferSubDataCHROMIUM(const void* mem) OVERRIDE;
-virtual void* MapTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, GLenum access) OVERRIDE;
+virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLenum access) OVERRIDE;
virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) OVERRIDE;
-virtual void ResizeCHROMIUM(
- GLuint width, GLuint height, GLfloat scale_factor) OVERRIDE;
+virtual void ResizeCHROMIUM(GLuint width,
+ GLuint height,
+ GLfloat scale_factor) OVERRIDE;
virtual const GLchar* GetRequestableExtensionsCHROMIUM() OVERRIDE;
virtual void RequestExtensionCHROMIUM(const char* extension) OVERRIDE;
virtual void RateLimitOffscreenContextCHROMIUM() OVERRIDE;
-virtual void GetMultipleIntegervCHROMIUM(
- const GLenum* pnames, GLuint count, GLint* results,
- GLsizeiptr size) OVERRIDE;
-virtual void GetProgramInfoCHROMIUM(
- GLuint program, GLsizei bufsize, GLsizei* size, void* info) OVERRIDE;
+virtual void GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+ GLuint count,
+ GLint* results,
+ GLsizeiptr size) OVERRIDE;
+virtual void GetProgramInfoCHROMIUM(GLuint program,
+ GLsizei bufsize,
+ GLsizei* size,
+ void* info) OVERRIDE;
virtual GLuint CreateStreamTextureCHROMIUM(GLuint texture) OVERRIDE;
-virtual void DestroyStreamTextureCHROMIUM(GLuint texture) OVERRIDE;
-virtual GLuint CreateImageCHROMIUM(
- GLsizei width, GLsizei height, GLenum internalformat) OVERRIDE;
+virtual GLuint CreateImageCHROMIUM(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage) OVERRIDE;
virtual void DestroyImageCHROMIUM(GLuint image_id) OVERRIDE;
-virtual void GetImageParameterivCHROMIUM(
- GLuint image_id, GLenum pname, GLint* params) OVERRIDE;
-virtual void GetTranslatedShaderSourceANGLE(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) OVERRIDE;
-virtual void PostSubBufferCHROMIUM(
- GLint x, GLint y, GLint width, GLint height) OVERRIDE;
-virtual void TexImageIOSurface2DCHROMIUM(
- GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
- GLuint plane) OVERRIDE;
-virtual void CopyTextureCHROMIUM(
- GLenum target, GLenum source_id, GLenum dest_id, GLint level,
- GLint internalformat, GLenum dest_type) OVERRIDE;
-virtual void DrawArraysInstancedANGLE(
- GLenum mode, GLint first, GLsizei count, GLsizei primcount) OVERRIDE;
-virtual void DrawElementsInstancedANGLE(
- GLenum mode, GLsizei count, GLenum type, const void* indices,
- GLsizei primcount) OVERRIDE;
+virtual void GetImageParameterivCHROMIUM(GLuint image_id,
+ GLenum pname,
+ GLint* params) OVERRIDE;
+virtual void GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) OVERRIDE;
+virtual void PostSubBufferCHROMIUM(GLint x,
+ GLint y,
+ GLint width,
+ GLint height) OVERRIDE;
+virtual void TexImageIOSurface2DCHROMIUM(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLuint ioSurfaceId,
+ GLuint plane) OVERRIDE;
+virtual void CopyTextureCHROMIUM(GLenum target,
+ GLenum source_id,
+ GLenum dest_id,
+ GLint level,
+ GLint internalformat,
+ GLenum dest_type) OVERRIDE;
+virtual void DrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount) OVERRIDE;
+virtual void DrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices,
+ GLsizei primcount) OVERRIDE;
virtual void VertexAttribDivisorANGLE(GLuint index, GLuint divisor) OVERRIDE;
virtual void GenMailboxCHROMIUM(GLbyte* mailbox) OVERRIDE;
-virtual void ProduceTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) OVERRIDE;
-virtual void ConsumeTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) OVERRIDE;
-virtual void BindUniformLocationCHROMIUM(
- GLuint program, GLint location, const char* name) OVERRIDE;
+virtual void ProduceTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+virtual void ProduceTextureDirectCHROMIUM(GLuint texture,
+ GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+virtual void ConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+virtual GLuint CreateAndConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) OVERRIDE;
+virtual void BindUniformLocationCHROMIUM(GLuint program,
+ GLint location,
+ const char* name) OVERRIDE;
virtual void BindTexImage2DCHROMIUM(GLenum target, GLint imageId) OVERRIDE;
virtual void ReleaseTexImage2DCHROMIUM(GLenum target, GLint imageId) OVERRIDE;
virtual void TraceBeginCHROMIUM(const char* name) OVERRIDE;
virtual void TraceEndCHROMIUM() OVERRIDE;
-virtual void AsyncTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* data) OVERRIDE;
-virtual void AsyncTexImage2DCHROMIUM(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) OVERRIDE;
+virtual void AsyncTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* data) OVERRIDE;
+virtual void AsyncTexImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) OVERRIDE;
virtual void WaitAsyncTexImage2DCHROMIUM(GLenum target) OVERRIDE;
-virtual void DiscardFramebufferEXT(
- GLenum target, GLsizei count, const GLenum* attachments) OVERRIDE;
+virtual void WaitAllAsyncTexImage2DCHROMIUM() OVERRIDE;
+virtual void DiscardFramebufferEXT(GLenum target,
+ GLsizei count,
+ const GLenum* attachments) OVERRIDE;
virtual void LoseContextCHROMIUM(GLenum current, GLenum other) OVERRIDE;
virtual GLuint InsertSyncPointCHROMIUM() OVERRIDE;
virtual void WaitSyncPointCHROMIUM(GLuint sync_point) OVERRIDE;
virtual void DrawBuffersEXT(GLsizei count, const GLenum* bufs) OVERRIDE;
virtual void DiscardBackbufferCHROMIUM() OVERRIDE;
+virtual void ScheduleOverlayPlaneCHROMIUM(GLint plane_z_order,
+ GLenum plane_transform,
+ GLuint overlay_texture_id,
+ GLint bounds_x,
+ GLint bounds_y,
+ GLint bounds_width,
+ GLint bounds_height,
+ GLfloat uv_x,
+ GLfloat uv_y,
+ GLfloat uv_width,
+ GLfloat uv_height) OVERRIDE;
#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_TRACE_IMPLEMENTATION_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/chromium/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
index 49d7ab2a947..ec4a365b7a3 100644
--- a/chromium/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file is included by gles2_trace_implementation.cc
@@ -20,8 +22,9 @@ void GLES2TraceImplementation::AttachShader(GLuint program, GLuint shader) {
gl_->AttachShader(program, shader);
}
-void GLES2TraceImplementation::BindAttribLocation(
- GLuint program, GLuint index, const char* name) {
+void GLES2TraceImplementation::BindAttribLocation(GLuint program,
+ GLuint index,
+ const char* name) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BindAttribLocation");
gl_->BindAttribLocation(program, index, name);
}
@@ -31,14 +34,14 @@ void GLES2TraceImplementation::BindBuffer(GLenum target, GLuint buffer) {
gl_->BindBuffer(target, buffer);
}
-void GLES2TraceImplementation::BindFramebuffer(
- GLenum target, GLuint framebuffer) {
+void GLES2TraceImplementation::BindFramebuffer(GLenum target,
+ GLuint framebuffer) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BindFramebuffer");
gl_->BindFramebuffer(target, framebuffer);
}
-void GLES2TraceImplementation::BindRenderbuffer(
- GLenum target, GLuint renderbuffer) {
+void GLES2TraceImplementation::BindRenderbuffer(GLenum target,
+ GLuint renderbuffer) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BindRenderbuffer");
gl_->BindRenderbuffer(target, renderbuffer);
}
@@ -48,8 +51,10 @@ void GLES2TraceImplementation::BindTexture(GLenum target, GLuint texture) {
gl_->BindTexture(target, texture);
}
-void GLES2TraceImplementation::BlendColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
+void GLES2TraceImplementation::BlendColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BlendColor");
gl_->BlendColor(red, green, blue, alpha);
}
@@ -59,8 +64,8 @@ void GLES2TraceImplementation::BlendEquation(GLenum mode) {
gl_->BlendEquation(mode);
}
-void GLES2TraceImplementation::BlendEquationSeparate(
- GLenum modeRGB, GLenum modeAlpha) {
+void GLES2TraceImplementation::BlendEquationSeparate(GLenum modeRGB,
+ GLenum modeAlpha) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BlendEquationSeparate");
gl_->BlendEquationSeparate(modeRGB, modeAlpha);
}
@@ -70,20 +75,26 @@ void GLES2TraceImplementation::BlendFunc(GLenum sfactor, GLenum dfactor) {
gl_->BlendFunc(sfactor, dfactor);
}
-void GLES2TraceImplementation::BlendFuncSeparate(
- GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {
+void GLES2TraceImplementation::BlendFuncSeparate(GLenum srcRGB,
+ GLenum dstRGB,
+ GLenum srcAlpha,
+ GLenum dstAlpha) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BlendFuncSeparate");
gl_->BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
}
-void GLES2TraceImplementation::BufferData(
- GLenum target, GLsizeiptr size, const void* data, GLenum usage) {
+void GLES2TraceImplementation::BufferData(GLenum target,
+ GLsizeiptr size,
+ const void* data,
+ GLenum usage) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BufferData");
gl_->BufferData(target, size, data, usage);
}
-void GLES2TraceImplementation::BufferSubData(
- GLenum target, GLintptr offset, GLsizeiptr size, const void* data) {
+void GLES2TraceImplementation::BufferSubData(GLenum target,
+ GLintptr offset,
+ GLsizeiptr size,
+ const void* data) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BufferSubData");
gl_->BufferSubData(target, offset, size, data);
}
@@ -98,8 +109,10 @@ void GLES2TraceImplementation::Clear(GLbitfield mask) {
gl_->Clear(mask);
}
-void GLES2TraceImplementation::ClearColor(
- GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {
+void GLES2TraceImplementation::ClearColor(GLclampf red,
+ GLclampf green,
+ GLclampf blue,
+ GLclampf alpha) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ClearColor");
gl_->ClearColor(red, green, blue, alpha);
}
@@ -114,8 +127,10 @@ void GLES2TraceImplementation::ClearStencil(GLint s) {
gl_->ClearStencil(s);
}
-void GLES2TraceImplementation::ColorMask(
- GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {
+void GLES2TraceImplementation::ColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ColorMask");
gl_->ColorMask(red, green, blue, alpha);
}
@@ -125,33 +140,54 @@ void GLES2TraceImplementation::CompileShader(GLuint shader) {
gl_->CompileShader(shader);
}
-void GLES2TraceImplementation::CompressedTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLsizei width,
- GLsizei height, GLint border, GLsizei imageSize, const void* data) {
+void GLES2TraceImplementation::CompressedTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLsizei imageSize,
+ const void* data) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CompressedTexImage2D");
gl_->CompressedTexImage2D(
target, level, internalformat, width, height, border, imageSize, data);
}
-void GLES2TraceImplementation::CompressedTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLsizei imageSize, const void* data) {
+void GLES2TraceImplementation::CompressedTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLsizei imageSize,
+ const void* data) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CompressedTexSubImage2D");
gl_->CompressedTexSubImage2D(
target, level, xoffset, yoffset, width, height, format, imageSize, data);
}
-void GLES2TraceImplementation::CopyTexImage2D(
- GLenum target, GLint level, GLenum internalformat, GLint x, GLint y,
- GLsizei width, GLsizei height, GLint border) {
+void GLES2TraceImplementation::CopyTexImage2D(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLint border) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CopyTexImage2D");
gl_->CopyTexImage2D(
target, level, internalformat, x, y, width, height, border);
}
-void GLES2TraceImplementation::CopyTexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y,
- GLsizei width, GLsizei height) {
+void GLES2TraceImplementation::CopyTexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CopyTexSubImage2D");
gl_->CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
}
@@ -171,14 +207,13 @@ void GLES2TraceImplementation::CullFace(GLenum mode) {
gl_->CullFace(mode);
}
-void GLES2TraceImplementation::DeleteBuffers(
- GLsizei n, const GLuint* buffers) {
+void GLES2TraceImplementation::DeleteBuffers(GLsizei n, const GLuint* buffers) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DeleteBuffers");
gl_->DeleteBuffers(n, buffers);
}
-void GLES2TraceImplementation::DeleteFramebuffers(
- GLsizei n, const GLuint* framebuffers) {
+void GLES2TraceImplementation::DeleteFramebuffers(GLsizei n,
+ const GLuint* framebuffers) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DeleteFramebuffers");
gl_->DeleteFramebuffers(n, framebuffers);
}
@@ -189,7 +224,8 @@ void GLES2TraceImplementation::DeleteProgram(GLuint program) {
}
void GLES2TraceImplementation::DeleteRenderbuffers(
- GLsizei n, const GLuint* renderbuffers) {
+ GLsizei n,
+ const GLuint* renderbuffers) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DeleteRenderbuffers");
gl_->DeleteRenderbuffers(n, renderbuffers);
}
@@ -199,8 +235,8 @@ void GLES2TraceImplementation::DeleteShader(GLuint shader) {
gl_->DeleteShader(shader);
}
-void GLES2TraceImplementation::DeleteTextures(
- GLsizei n, const GLuint* textures) {
+void GLES2TraceImplementation::DeleteTextures(GLsizei n,
+ const GLuint* textures) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DeleteTextures");
gl_->DeleteTextures(n, textures);
}
@@ -235,14 +271,17 @@ void GLES2TraceImplementation::DisableVertexAttribArray(GLuint index) {
gl_->DisableVertexAttribArray(index);
}
-void GLES2TraceImplementation::DrawArrays(
- GLenum mode, GLint first, GLsizei count) {
+void GLES2TraceImplementation::DrawArrays(GLenum mode,
+ GLint first,
+ GLsizei count) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DrawArrays");
gl_->DrawArrays(mode, first, count);
}
-void GLES2TraceImplementation::DrawElements(
- GLenum mode, GLsizei count, GLenum type, const void* indices) {
+void GLES2TraceImplementation::DrawElements(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DrawElements");
gl_->DrawElements(mode, count, type, indices);
}
@@ -268,16 +307,20 @@ void GLES2TraceImplementation::Flush() {
}
void GLES2TraceImplementation::FramebufferRenderbuffer(
- GLenum target, GLenum attachment, GLenum renderbuffertarget,
+ GLenum target,
+ GLenum attachment,
+ GLenum renderbuffertarget,
GLuint renderbuffer) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::FramebufferRenderbuffer");
gl_->FramebufferRenderbuffer(
target, attachment, renderbuffertarget, renderbuffer);
}
-void GLES2TraceImplementation::FramebufferTexture2D(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level) {
+void GLES2TraceImplementation::FramebufferTexture2D(GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::FramebufferTexture2D");
gl_->FramebufferTexture2D(target, attachment, textarget, texture, level);
}
@@ -297,14 +340,14 @@ void GLES2TraceImplementation::GenerateMipmap(GLenum target) {
gl_->GenerateMipmap(target);
}
-void GLES2TraceImplementation::GenFramebuffers(
- GLsizei n, GLuint* framebuffers) {
+void GLES2TraceImplementation::GenFramebuffers(GLsizei n,
+ GLuint* framebuffers) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GenFramebuffers");
gl_->GenFramebuffers(n, framebuffers);
}
-void GLES2TraceImplementation::GenRenderbuffers(
- GLsizei n, GLuint* renderbuffers) {
+void GLES2TraceImplementation::GenRenderbuffers(GLsizei n,
+ GLuint* renderbuffers) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GenRenderbuffers");
gl_->GenRenderbuffers(n, renderbuffers);
}
@@ -314,28 +357,38 @@ void GLES2TraceImplementation::GenTextures(GLsizei n, GLuint* textures) {
gl_->GenTextures(n, textures);
}
-void GLES2TraceImplementation::GetActiveAttrib(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) {
+void GLES2TraceImplementation::GetActiveAttrib(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetActiveAttrib");
gl_->GetActiveAttrib(program, index, bufsize, length, size, type, name);
}
-void GLES2TraceImplementation::GetActiveUniform(
- GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
- GLenum* type, char* name) {
+void GLES2TraceImplementation::GetActiveUniform(GLuint program,
+ GLuint index,
+ GLsizei bufsize,
+ GLsizei* length,
+ GLint* size,
+ GLenum* type,
+ char* name) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetActiveUniform");
gl_->GetActiveUniform(program, index, bufsize, length, size, type, name);
}
-void GLES2TraceImplementation::GetAttachedShaders(
- GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) {
+void GLES2TraceImplementation::GetAttachedShaders(GLuint program,
+ GLsizei maxcount,
+ GLsizei* count,
+ GLuint* shaders) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetAttachedShaders");
gl_->GetAttachedShaders(program, maxcount, count, shaders);
}
-GLint GLES2TraceImplementation::GetAttribLocation(
- GLuint program, const char* name) {
+GLint GLES2TraceImplementation::GetAttribLocation(GLuint program,
+ const char* name) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetAttribLocation");
return gl_->GetAttribLocation(program, name);
}
@@ -345,8 +398,9 @@ void GLES2TraceImplementation::GetBooleanv(GLenum pname, GLboolean* params) {
gl_->GetBooleanv(pname, params);
}
-void GLES2TraceImplementation::GetBufferParameteriv(
- GLenum target, GLenum pname, GLint* params) {
+void GLES2TraceImplementation::GetBufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetBufferParameteriv");
gl_->GetBufferParameteriv(target, pname, params);
}
@@ -362,8 +416,12 @@ void GLES2TraceImplementation::GetFloatv(GLenum pname, GLfloat* params) {
}
void GLES2TraceImplementation::GetFramebufferAttachmentParameteriv(
- GLenum target, GLenum attachment, GLenum pname, GLint* params) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetFramebufferAttachmentParameteriv"); // NOLINT
+ GLenum target,
+ GLenum attachment,
+ GLenum pname,
+ GLint* params) {
+ TRACE_EVENT_BINARY_EFFICIENT0(
+ "gpu", "GLES2Trace::GetFramebufferAttachmentParameteriv");
gl_->GetFramebufferAttachmentParameteriv(target, attachment, pname, params);
}
@@ -372,44 +430,56 @@ void GLES2TraceImplementation::GetIntegerv(GLenum pname, GLint* params) {
gl_->GetIntegerv(pname, params);
}
-void GLES2TraceImplementation::GetProgramiv(
- GLuint program, GLenum pname, GLint* params) {
+void GLES2TraceImplementation::GetProgramiv(GLuint program,
+ GLenum pname,
+ GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetProgramiv");
gl_->GetProgramiv(program, pname, params);
}
-void GLES2TraceImplementation::GetProgramInfoLog(
- GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) {
+void GLES2TraceImplementation::GetProgramInfoLog(GLuint program,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetProgramInfoLog");
gl_->GetProgramInfoLog(program, bufsize, length, infolog);
}
-void GLES2TraceImplementation::GetRenderbufferParameteriv(
- GLenum target, GLenum pname, GLint* params) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetRenderbufferParameteriv"); // NOLINT
+void GLES2TraceImplementation::GetRenderbufferParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::GetRenderbufferParameteriv");
gl_->GetRenderbufferParameteriv(target, pname, params);
}
-void GLES2TraceImplementation::GetShaderiv(
- GLuint shader, GLenum pname, GLint* params) {
+void GLES2TraceImplementation::GetShaderiv(GLuint shader,
+ GLenum pname,
+ GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetShaderiv");
gl_->GetShaderiv(shader, pname, params);
}
-void GLES2TraceImplementation::GetShaderInfoLog(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) {
+void GLES2TraceImplementation::GetShaderInfoLog(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* infolog) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetShaderInfoLog");
gl_->GetShaderInfoLog(shader, bufsize, length, infolog);
}
-void GLES2TraceImplementation::GetShaderPrecisionFormat(
- GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) {
+void GLES2TraceImplementation::GetShaderPrecisionFormat(GLenum shadertype,
+ GLenum precisiontype,
+ GLint* range,
+ GLint* precision) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetShaderPrecisionFormat");
gl_->GetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
}
-void GLES2TraceImplementation::GetShaderSource(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) {
+void GLES2TraceImplementation::GetShaderSource(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetShaderSource");
gl_->GetShaderSource(shader, bufsize, length, source);
}
@@ -419,50 +489,57 @@ const GLubyte* GLES2TraceImplementation::GetString(GLenum name) {
return gl_->GetString(name);
}
-void GLES2TraceImplementation::GetTexParameterfv(
- GLenum target, GLenum pname, GLfloat* params) {
+void GLES2TraceImplementation::GetTexParameterfv(GLenum target,
+ GLenum pname,
+ GLfloat* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetTexParameterfv");
gl_->GetTexParameterfv(target, pname, params);
}
-void GLES2TraceImplementation::GetTexParameteriv(
- GLenum target, GLenum pname, GLint* params) {
+void GLES2TraceImplementation::GetTexParameteriv(GLenum target,
+ GLenum pname,
+ GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetTexParameteriv");
gl_->GetTexParameteriv(target, pname, params);
}
-void GLES2TraceImplementation::GetUniformfv(
- GLuint program, GLint location, GLfloat* params) {
+void GLES2TraceImplementation::GetUniformfv(GLuint program,
+ GLint location,
+ GLfloat* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetUniformfv");
gl_->GetUniformfv(program, location, params);
}
-void GLES2TraceImplementation::GetUniformiv(
- GLuint program, GLint location, GLint* params) {
+void GLES2TraceImplementation::GetUniformiv(GLuint program,
+ GLint location,
+ GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetUniformiv");
gl_->GetUniformiv(program, location, params);
}
-GLint GLES2TraceImplementation::GetUniformLocation(
- GLuint program, const char* name) {
+GLint GLES2TraceImplementation::GetUniformLocation(GLuint program,
+ const char* name) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetUniformLocation");
return gl_->GetUniformLocation(program, name);
}
-void GLES2TraceImplementation::GetVertexAttribfv(
- GLuint index, GLenum pname, GLfloat* params) {
+void GLES2TraceImplementation::GetVertexAttribfv(GLuint index,
+ GLenum pname,
+ GLfloat* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetVertexAttribfv");
gl_->GetVertexAttribfv(index, pname, params);
}
-void GLES2TraceImplementation::GetVertexAttribiv(
- GLuint index, GLenum pname, GLint* params) {
+void GLES2TraceImplementation::GetVertexAttribiv(GLuint index,
+ GLenum pname,
+ GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetVertexAttribiv");
gl_->GetVertexAttribiv(index, pname, params);
}
-void GLES2TraceImplementation::GetVertexAttribPointerv(
- GLuint index, GLenum pname, void** pointer) {
+void GLES2TraceImplementation::GetVertexAttribPointerv(GLuint index,
+ GLenum pname,
+ void** pointer) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetVertexAttribPointerv");
gl_->GetVertexAttribPointerv(index, pname, pointer);
}
@@ -527,9 +604,13 @@ void GLES2TraceImplementation::PolygonOffset(GLfloat factor, GLfloat units) {
gl_->PolygonOffset(factor, units);
}
-void GLES2TraceImplementation::ReadPixels(
- GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type,
- void* pixels) {
+void GLES2TraceImplementation::ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void* pixels) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ReadPixels");
gl_->ReadPixels(x, y, width, height, format, type, pixels);
}
@@ -539,34 +620,41 @@ void GLES2TraceImplementation::ReleaseShaderCompiler() {
gl_->ReleaseShaderCompiler();
}
-void GLES2TraceImplementation::RenderbufferStorage(
- GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
+void GLES2TraceImplementation::RenderbufferStorage(GLenum target,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::RenderbufferStorage");
gl_->RenderbufferStorage(target, internalformat, width, height);
}
-void GLES2TraceImplementation::SampleCoverage(
- GLclampf value, GLboolean invert) {
+void GLES2TraceImplementation::SampleCoverage(GLclampf value,
+ GLboolean invert) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::SampleCoverage");
gl_->SampleCoverage(value, invert);
}
-void GLES2TraceImplementation::Scissor(
- GLint x, GLint y, GLsizei width, GLsizei height) {
+void GLES2TraceImplementation::Scissor(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Scissor");
gl_->Scissor(x, y, width, height);
}
-void GLES2TraceImplementation::ShaderBinary(
- GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary,
- GLsizei length) {
+void GLES2TraceImplementation::ShaderBinary(GLsizei n,
+ const GLuint* shaders,
+ GLenum binaryformat,
+ const void* binary,
+ GLsizei length) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ShaderBinary");
gl_->ShaderBinary(n, shaders, binaryformat, binary, length);
}
-void GLES2TraceImplementation::ShaderSource(
- GLuint shader, GLsizei count, const GLchar* const* str,
- const GLint* length) {
+void GLES2TraceImplementation::ShaderSource(GLuint shader,
+ GLsizei count,
+ const GLchar* const* str,
+ const GLint* length) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ShaderSource");
gl_->ShaderSource(shader, count, str, length);
}
@@ -581,14 +669,17 @@ void GLES2TraceImplementation::ShallowFlushCHROMIUM() {
gl_->ShallowFlushCHROMIUM();
}
-void GLES2TraceImplementation::StencilFunc(
- GLenum func, GLint ref, GLuint mask) {
+void GLES2TraceImplementation::StencilFunc(GLenum func,
+ GLint ref,
+ GLuint mask) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::StencilFunc");
gl_->StencilFunc(func, ref, mask);
}
-void GLES2TraceImplementation::StencilFuncSeparate(
- GLenum face, GLenum func, GLint ref, GLuint mask) {
+void GLES2TraceImplementation::StencilFuncSeparate(GLenum face,
+ GLenum func,
+ GLint ref,
+ GLuint mask) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::StencilFuncSeparate");
gl_->StencilFuncSeparate(face, func, ref, mask);
}
@@ -603,55 +694,79 @@ void GLES2TraceImplementation::StencilMaskSeparate(GLenum face, GLuint mask) {
gl_->StencilMaskSeparate(face, mask);
}
-void GLES2TraceImplementation::StencilOp(
- GLenum fail, GLenum zfail, GLenum zpass) {
+void GLES2TraceImplementation::StencilOp(GLenum fail,
+ GLenum zfail,
+ GLenum zpass) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::StencilOp");
gl_->StencilOp(fail, zfail, zpass);
}
-void GLES2TraceImplementation::StencilOpSeparate(
- GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {
+void GLES2TraceImplementation::StencilOpSeparate(GLenum face,
+ GLenum fail,
+ GLenum zfail,
+ GLenum zpass) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::StencilOpSeparate");
gl_->StencilOpSeparate(face, fail, zfail, zpass);
}
-void GLES2TraceImplementation::TexImage2D(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) {
+void GLES2TraceImplementation::TexImage2D(GLenum target,
+ GLint level,
+ GLint internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TexImage2D");
- gl_->TexImage2D(
- target, level, internalformat, width, height, border, format, type,
- pixels);
-}
-
-void GLES2TraceImplementation::TexParameterf(
- GLenum target, GLenum pname, GLfloat param) {
+ gl_->TexImage2D(target,
+ level,
+ internalformat,
+ width,
+ height,
+ border,
+ format,
+ type,
+ pixels);
+}
+
+void GLES2TraceImplementation::TexParameterf(GLenum target,
+ GLenum pname,
+ GLfloat param) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TexParameterf");
gl_->TexParameterf(target, pname, param);
}
-void GLES2TraceImplementation::TexParameterfv(
- GLenum target, GLenum pname, const GLfloat* params) {
+void GLES2TraceImplementation::TexParameterfv(GLenum target,
+ GLenum pname,
+ const GLfloat* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TexParameterfv");
gl_->TexParameterfv(target, pname, params);
}
-void GLES2TraceImplementation::TexParameteri(
- GLenum target, GLenum pname, GLint param) {
+void GLES2TraceImplementation::TexParameteri(GLenum target,
+ GLenum pname,
+ GLint param) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TexParameteri");
gl_->TexParameteri(target, pname, param);
}
-void GLES2TraceImplementation::TexParameteriv(
- GLenum target, GLenum pname, const GLint* params) {
+void GLES2TraceImplementation::TexParameteriv(GLenum target,
+ GLenum pname,
+ const GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TexParameteriv");
gl_->TexParameteriv(target, pname, params);
}
-void GLES2TraceImplementation::TexSubImage2D(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* pixels) {
+void GLES2TraceImplementation::TexSubImage2D(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* pixels) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TexSubImage2D");
gl_->TexSubImage2D(
target, level, xoffset, yoffset, width, height, format, type, pixels);
@@ -662,8 +777,9 @@ void GLES2TraceImplementation::Uniform1f(GLint location, GLfloat x) {
gl_->Uniform1f(location, x);
}
-void GLES2TraceImplementation::Uniform1fv(
- GLint location, GLsizei count, const GLfloat* v) {
+void GLES2TraceImplementation::Uniform1fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform1fv");
gl_->Uniform1fv(location, count, v);
}
@@ -673,20 +789,21 @@ void GLES2TraceImplementation::Uniform1i(GLint location, GLint x) {
gl_->Uniform1i(location, x);
}
-void GLES2TraceImplementation::Uniform1iv(
- GLint location, GLsizei count, const GLint* v) {
+void GLES2TraceImplementation::Uniform1iv(GLint location,
+ GLsizei count,
+ const GLint* v) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform1iv");
gl_->Uniform1iv(location, count, v);
}
-void GLES2TraceImplementation::Uniform2f(
- GLint location, GLfloat x, GLfloat y) {
+void GLES2TraceImplementation::Uniform2f(GLint location, GLfloat x, GLfloat y) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform2f");
gl_->Uniform2f(location, x, y);
}
-void GLES2TraceImplementation::Uniform2fv(
- GLint location, GLsizei count, const GLfloat* v) {
+void GLES2TraceImplementation::Uniform2fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform2fv");
gl_->Uniform2fv(location, count, v);
}
@@ -696,74 +813,95 @@ void GLES2TraceImplementation::Uniform2i(GLint location, GLint x, GLint y) {
gl_->Uniform2i(location, x, y);
}
-void GLES2TraceImplementation::Uniform2iv(
- GLint location, GLsizei count, const GLint* v) {
+void GLES2TraceImplementation::Uniform2iv(GLint location,
+ GLsizei count,
+ const GLint* v) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform2iv");
gl_->Uniform2iv(location, count, v);
}
-void GLES2TraceImplementation::Uniform3f(
- GLint location, GLfloat x, GLfloat y, GLfloat z) {
+void GLES2TraceImplementation::Uniform3f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform3f");
gl_->Uniform3f(location, x, y, z);
}
-void GLES2TraceImplementation::Uniform3fv(
- GLint location, GLsizei count, const GLfloat* v) {
+void GLES2TraceImplementation::Uniform3fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform3fv");
gl_->Uniform3fv(location, count, v);
}
-void GLES2TraceImplementation::Uniform3i(
- GLint location, GLint x, GLint y, GLint z) {
+void GLES2TraceImplementation::Uniform3i(GLint location,
+ GLint x,
+ GLint y,
+ GLint z) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform3i");
gl_->Uniform3i(location, x, y, z);
}
-void GLES2TraceImplementation::Uniform3iv(
- GLint location, GLsizei count, const GLint* v) {
+void GLES2TraceImplementation::Uniform3iv(GLint location,
+ GLsizei count,
+ const GLint* v) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform3iv");
gl_->Uniform3iv(location, count, v);
}
-void GLES2TraceImplementation::Uniform4f(
- GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+void GLES2TraceImplementation::Uniform4f(GLint location,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform4f");
gl_->Uniform4f(location, x, y, z, w);
}
-void GLES2TraceImplementation::Uniform4fv(
- GLint location, GLsizei count, const GLfloat* v) {
+void GLES2TraceImplementation::Uniform4fv(GLint location,
+ GLsizei count,
+ const GLfloat* v) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform4fv");
gl_->Uniform4fv(location, count, v);
}
-void GLES2TraceImplementation::Uniform4i(
- GLint location, GLint x, GLint y, GLint z, GLint w) {
+void GLES2TraceImplementation::Uniform4i(GLint location,
+ GLint x,
+ GLint y,
+ GLint z,
+ GLint w) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform4i");
gl_->Uniform4i(location, x, y, z, w);
}
-void GLES2TraceImplementation::Uniform4iv(
- GLint location, GLsizei count, const GLint* v) {
+void GLES2TraceImplementation::Uniform4iv(GLint location,
+ GLsizei count,
+ const GLint* v) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Uniform4iv");
gl_->Uniform4iv(location, count, v);
}
-void GLES2TraceImplementation::UniformMatrix2fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2TraceImplementation::UniformMatrix2fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::UniformMatrix2fv");
gl_->UniformMatrix2fv(location, count, transpose, value);
}
-void GLES2TraceImplementation::UniformMatrix3fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2TraceImplementation::UniformMatrix3fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::UniformMatrix3fv");
gl_->UniformMatrix3fv(location, count, transpose, value);
}
-void GLES2TraceImplementation::UniformMatrix4fv(
- GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) {
+void GLES2TraceImplementation::UniformMatrix4fv(GLint location,
+ GLsizei count,
+ GLboolean transpose,
+ const GLfloat* value) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::UniformMatrix4fv");
gl_->UniformMatrix4fv(location, count, transpose, value);
}
@@ -783,96 +921,129 @@ void GLES2TraceImplementation::VertexAttrib1f(GLuint indx, GLfloat x) {
gl_->VertexAttrib1f(indx, x);
}
-void GLES2TraceImplementation::VertexAttrib1fv(
- GLuint indx, const GLfloat* values) {
+void GLES2TraceImplementation::VertexAttrib1fv(GLuint indx,
+ const GLfloat* values) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttrib1fv");
gl_->VertexAttrib1fv(indx, values);
}
-void GLES2TraceImplementation::VertexAttrib2f(
- GLuint indx, GLfloat x, GLfloat y) {
+void GLES2TraceImplementation::VertexAttrib2f(GLuint indx,
+ GLfloat x,
+ GLfloat y) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttrib2f");
gl_->VertexAttrib2f(indx, x, y);
}
-void GLES2TraceImplementation::VertexAttrib2fv(
- GLuint indx, const GLfloat* values) {
+void GLES2TraceImplementation::VertexAttrib2fv(GLuint indx,
+ const GLfloat* values) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttrib2fv");
gl_->VertexAttrib2fv(indx, values);
}
-void GLES2TraceImplementation::VertexAttrib3f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
+void GLES2TraceImplementation::VertexAttrib3f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttrib3f");
gl_->VertexAttrib3f(indx, x, y, z);
}
-void GLES2TraceImplementation::VertexAttrib3fv(
- GLuint indx, const GLfloat* values) {
+void GLES2TraceImplementation::VertexAttrib3fv(GLuint indx,
+ const GLfloat* values) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttrib3fv");
gl_->VertexAttrib3fv(indx, values);
}
-void GLES2TraceImplementation::VertexAttrib4f(
- GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {
+void GLES2TraceImplementation::VertexAttrib4f(GLuint indx,
+ GLfloat x,
+ GLfloat y,
+ GLfloat z,
+ GLfloat w) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttrib4f");
gl_->VertexAttrib4f(indx, x, y, z, w);
}
-void GLES2TraceImplementation::VertexAttrib4fv(
- GLuint indx, const GLfloat* values) {
+void GLES2TraceImplementation::VertexAttrib4fv(GLuint indx,
+ const GLfloat* values) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttrib4fv");
gl_->VertexAttrib4fv(indx, values);
}
-void GLES2TraceImplementation::VertexAttribPointer(
- GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride,
- const void* ptr) {
+void GLES2TraceImplementation::VertexAttribPointer(GLuint indx,
+ GLint size,
+ GLenum type,
+ GLboolean normalized,
+ GLsizei stride,
+ const void* ptr) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttribPointer");
gl_->VertexAttribPointer(indx, size, type, normalized, stride, ptr);
}
-void GLES2TraceImplementation::Viewport(
- GLint x, GLint y, GLsizei width, GLsizei height) {
+void GLES2TraceImplementation::Viewport(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::Viewport");
gl_->Viewport(x, y, width, height);
}
-void GLES2TraceImplementation::BlitFramebufferCHROMIUM(
- GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0,
- GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
+void GLES2TraceImplementation::BlitFramebufferCHROMIUM(GLint srcX0,
+ GLint srcY0,
+ GLint srcX1,
+ GLint srcY1,
+ GLint dstX0,
+ GLint dstY0,
+ GLint dstX1,
+ GLint dstY1,
+ GLbitfield mask,
+ GLenum filter) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BlitFramebufferCHROMIUM");
gl_->BlitFramebufferCHROMIUM(
srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
}
void GLES2TraceImplementation::RenderbufferStorageMultisampleCHROMIUM(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
+ GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
GLsizei height) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::RenderbufferStorageMultisampleCHROMIUM"); // NOLINT
+ TRACE_EVENT_BINARY_EFFICIENT0(
+ "gpu", "GLES2Trace::RenderbufferStorageMultisampleCHROMIUM");
gl_->RenderbufferStorageMultisampleCHROMIUM(
target, samples, internalformat, width, height);
}
void GLES2TraceImplementation::RenderbufferStorageMultisampleEXT(
- GLenum target, GLsizei samples, GLenum internalformat, GLsizei width,
+ GLenum target,
+ GLsizei samples,
+ GLenum internalformat,
+ GLsizei width,
GLsizei height) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::RenderbufferStorageMultisampleEXT"); // NOLINT
+ TRACE_EVENT_BINARY_EFFICIENT0(
+ "gpu", "GLES2Trace::RenderbufferStorageMultisampleEXT");
gl_->RenderbufferStorageMultisampleEXT(
target, samples, internalformat, width, height);
}
void GLES2TraceImplementation::FramebufferTexture2DMultisampleEXT(
- GLenum target, GLenum attachment, GLenum textarget, GLuint texture,
- GLint level, GLsizei samples) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::FramebufferTexture2DMultisampleEXT"); // NOLINT
+ GLenum target,
+ GLenum attachment,
+ GLenum textarget,
+ GLuint texture,
+ GLint level,
+ GLsizei samples) {
+ TRACE_EVENT_BINARY_EFFICIENT0(
+ "gpu", "GLES2Trace::FramebufferTexture2DMultisampleEXT");
gl_->FramebufferTexture2DMultisampleEXT(
target, attachment, textarget, texture, level, samples);
}
-void GLES2TraceImplementation::TexStorage2DEXT(
- GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width,
- GLsizei height) {
+void GLES2TraceImplementation::TexStorage2DEXT(GLenum target,
+ GLsizei levels,
+ GLenum internalFormat,
+ GLsizei width,
+ GLsizei height) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TexStorage2DEXT");
gl_->TexStorage2DEXT(target, levels, internalFormat, width, height);
}
@@ -882,8 +1053,8 @@ void GLES2TraceImplementation::GenQueriesEXT(GLsizei n, GLuint* queries) {
gl_->GenQueriesEXT(n, queries);
}
-void GLES2TraceImplementation::DeleteQueriesEXT(
- GLsizei n, const GLuint* queries) {
+void GLES2TraceImplementation::DeleteQueriesEXT(GLsizei n,
+ const GLuint* queries) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DeleteQueriesEXT");
gl_->DeleteQueriesEXT(n, queries);
}
@@ -903,26 +1074,28 @@ void GLES2TraceImplementation::EndQueryEXT(GLenum target) {
gl_->EndQueryEXT(target);
}
-void GLES2TraceImplementation::GetQueryivEXT(
- GLenum target, GLenum pname, GLint* params) {
+void GLES2TraceImplementation::GetQueryivEXT(GLenum target,
+ GLenum pname,
+ GLint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetQueryivEXT");
gl_->GetQueryivEXT(target, pname, params);
}
-void GLES2TraceImplementation::GetQueryObjectuivEXT(
- GLuint id, GLenum pname, GLuint* params) {
+void GLES2TraceImplementation::GetQueryObjectuivEXT(GLuint id,
+ GLenum pname,
+ GLuint* params) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetQueryObjectuivEXT");
gl_->GetQueryObjectuivEXT(id, pname, params);
}
-void GLES2TraceImplementation::InsertEventMarkerEXT(
- GLsizei length, const GLchar* marker) {
+void GLES2TraceImplementation::InsertEventMarkerEXT(GLsizei length,
+ const GLchar* marker) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::InsertEventMarkerEXT");
gl_->InsertEventMarkerEXT(length, marker);
}
-void GLES2TraceImplementation::PushGroupMarkerEXT(
- GLsizei length, const GLchar* marker) {
+void GLES2TraceImplementation::PushGroupMarkerEXT(GLsizei length,
+ const GLchar* marker) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::PushGroupMarkerEXT");
gl_->PushGroupMarkerEXT(length, marker);
}
@@ -937,8 +1110,8 @@ void GLES2TraceImplementation::GenVertexArraysOES(GLsizei n, GLuint* arrays) {
gl_->GenVertexArraysOES(n, arrays);
}
-void GLES2TraceImplementation::DeleteVertexArraysOES(
- GLsizei n, const GLuint* arrays) {
+void GLES2TraceImplementation::DeleteVertexArraysOES(GLsizei n,
+ const GLuint* arrays) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DeleteVertexArraysOES");
gl_->DeleteVertexArraysOES(n, arrays);
}
@@ -958,38 +1131,44 @@ void GLES2TraceImplementation::SwapBuffers() {
gl_->SwapBuffers();
}
-GLuint GLES2TraceImplementation::GetMaxValueInBufferCHROMIUM(
- GLuint buffer_id, GLsizei count, GLenum type, GLuint offset) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetMaxValueInBufferCHROMIUM"); // NOLINT
+GLuint GLES2TraceImplementation::GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
+ GLsizei count,
+ GLenum type,
+ GLuint offset) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::GetMaxValueInBufferCHROMIUM");
return gl_->GetMaxValueInBufferCHROMIUM(buffer_id, count, type, offset);
}
-void GLES2TraceImplementation::GenSharedIdsCHROMIUM(
- GLuint namespace_id, GLuint id_offset, GLsizei n, GLuint* ids) {
+void GLES2TraceImplementation::GenSharedIdsCHROMIUM(GLuint namespace_id,
+ GLuint id_offset,
+ GLsizei n,
+ GLuint* ids) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GenSharedIdsCHROMIUM");
gl_->GenSharedIdsCHROMIUM(namespace_id, id_offset, n, ids);
}
-void GLES2TraceImplementation::DeleteSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) {
+void GLES2TraceImplementation::DeleteSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DeleteSharedIdsCHROMIUM");
gl_->DeleteSharedIdsCHROMIUM(namespace_id, n, ids);
}
-void GLES2TraceImplementation::RegisterSharedIdsCHROMIUM(
- GLuint namespace_id, GLsizei n, const GLuint* ids) {
+void GLES2TraceImplementation::RegisterSharedIdsCHROMIUM(GLuint namespace_id,
+ GLsizei n,
+ const GLuint* ids) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::RegisterSharedIdsCHROMIUM");
gl_->RegisterSharedIdsCHROMIUM(namespace_id, n, ids);
}
-GLboolean GLES2TraceImplementation::EnableFeatureCHROMIUM(
- const char* feature) {
+GLboolean GLES2TraceImplementation::EnableFeatureCHROMIUM(const char* feature) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::EnableFeatureCHROMIUM");
return gl_->EnableFeatureCHROMIUM(feature);
}
-void* GLES2TraceImplementation::MapBufferCHROMIUM(
- GLuint target, GLenum access) {
+void* GLES2TraceImplementation::MapBufferCHROMIUM(GLuint target,
+ GLenum access) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::MapBufferCHROMIUM");
return gl_->MapBufferCHROMIUM(target, access);
}
@@ -999,10 +1178,9 @@ GLboolean GLES2TraceImplementation::UnmapBufferCHROMIUM(GLuint target) {
return gl_->UnmapBufferCHROMIUM(target);
}
-void* GLES2TraceImplementation::MapImageCHROMIUM(
- GLuint image_id, GLenum access) {
+void* GLES2TraceImplementation::MapImageCHROMIUM(GLuint image_id) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::MapImageCHROMIUM");
- return gl_->MapImageCHROMIUM(image_id, access);
+ return gl_->MapImageCHROMIUM(image_id);
}
void GLES2TraceImplementation::UnmapImageCHROMIUM(GLuint image_id) {
@@ -1010,78 +1188,93 @@ void GLES2TraceImplementation::UnmapImageCHROMIUM(GLuint image_id) {
gl_->UnmapImageCHROMIUM(image_id);
}
-void* GLES2TraceImplementation::MapBufferSubDataCHROMIUM(
- GLuint target, GLintptr offset, GLsizeiptr size, GLenum access) {
+void* GLES2TraceImplementation::MapBufferSubDataCHROMIUM(GLuint target,
+ GLintptr offset,
+ GLsizeiptr size,
+ GLenum access) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::MapBufferSubDataCHROMIUM");
return gl_->MapBufferSubDataCHROMIUM(target, offset, size, access);
}
void GLES2TraceImplementation::UnmapBufferSubDataCHROMIUM(const void* mem) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::UnmapBufferSubDataCHROMIUM"); // NOLINT
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::UnmapBufferSubDataCHROMIUM");
gl_->UnmapBufferSubDataCHROMIUM(mem);
}
-void* GLES2TraceImplementation::MapTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, GLenum access) {
+void* GLES2TraceImplementation::MapTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ GLenum access) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::MapTexSubImage2DCHROMIUM");
return gl_->MapTexSubImage2DCHROMIUM(
target, level, xoffset, yoffset, width, height, format, type, access);
}
void GLES2TraceImplementation::UnmapTexSubImage2DCHROMIUM(const void* mem) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::UnmapTexSubImage2DCHROMIUM"); // NOLINT
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::UnmapTexSubImage2DCHROMIUM");
gl_->UnmapTexSubImage2DCHROMIUM(mem);
}
-void GLES2TraceImplementation::ResizeCHROMIUM(
- GLuint width, GLuint height, GLfloat scale_factor) {
+void GLES2TraceImplementation::ResizeCHROMIUM(GLuint width,
+ GLuint height,
+ GLfloat scale_factor) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ResizeCHROMIUM");
gl_->ResizeCHROMIUM(width, height, scale_factor);
}
const GLchar* GLES2TraceImplementation::GetRequestableExtensionsCHROMIUM() {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetRequestableExtensionsCHROMIUM"); // NOLINT
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::GetRequestableExtensionsCHROMIUM");
return gl_->GetRequestableExtensionsCHROMIUM();
}
-void GLES2TraceImplementation::RequestExtensionCHROMIUM(
- const char* extension) {
+void GLES2TraceImplementation::RequestExtensionCHROMIUM(const char* extension) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::RequestExtensionCHROMIUM");
gl_->RequestExtensionCHROMIUM(extension);
}
void GLES2TraceImplementation::RateLimitOffscreenContextCHROMIUM() {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::RateLimitOffscreenContextCHROMIUM"); // NOLINT
+ TRACE_EVENT_BINARY_EFFICIENT0(
+ "gpu", "GLES2Trace::RateLimitOffscreenContextCHROMIUM");
gl_->RateLimitOffscreenContextCHROMIUM();
}
-void GLES2TraceImplementation::GetMultipleIntegervCHROMIUM(
- const GLenum* pnames, GLuint count, GLint* results, GLsizeiptr size) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetMultipleIntegervCHROMIUM"); // NOLINT
+void GLES2TraceImplementation::GetMultipleIntegervCHROMIUM(const GLenum* pnames,
+ GLuint count,
+ GLint* results,
+ GLsizeiptr size) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::GetMultipleIntegervCHROMIUM");
gl_->GetMultipleIntegervCHROMIUM(pnames, count, results, size);
}
-void GLES2TraceImplementation::GetProgramInfoCHROMIUM(
- GLuint program, GLsizei bufsize, GLsizei* size, void* info) {
+void GLES2TraceImplementation::GetProgramInfoCHROMIUM(GLuint program,
+ GLsizei bufsize,
+ GLsizei* size,
+ void* info) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetProgramInfoCHROMIUM");
gl_->GetProgramInfoCHROMIUM(program, bufsize, size, info);
}
GLuint GLES2TraceImplementation::CreateStreamTextureCHROMIUM(GLuint texture) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CreateStreamTextureCHROMIUM"); // NOLINT
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::CreateStreamTextureCHROMIUM");
return gl_->CreateStreamTextureCHROMIUM(texture);
}
-void GLES2TraceImplementation::DestroyStreamTextureCHROMIUM(GLuint texture) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DestroyStreamTextureCHROMIUM"); // NOLINT
- gl_->DestroyStreamTextureCHROMIUM(texture);
-}
-
-GLuint GLES2TraceImplementation::CreateImageCHROMIUM(
- GLsizei width, GLsizei height, GLenum internalformat) {
+GLuint GLES2TraceImplementation::CreateImageCHROMIUM(GLsizei width,
+ GLsizei height,
+ GLenum internalformat,
+ GLenum usage) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CreateImageCHROMIUM");
- return gl_->CreateImageCHROMIUM(width, height, internalformat);
+ return gl_->CreateImageCHROMIUM(width, height, internalformat, usage);
}
void GLES2TraceImplementation::DestroyImageCHROMIUM(GLuint image_id) {
@@ -1089,54 +1282,72 @@ void GLES2TraceImplementation::DestroyImageCHROMIUM(GLuint image_id) {
gl_->DestroyImageCHROMIUM(image_id);
}
-void GLES2TraceImplementation::GetImageParameterivCHROMIUM(
- GLuint image_id, GLenum pname, GLint* params) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetImageParameterivCHROMIUM"); // NOLINT
+void GLES2TraceImplementation::GetImageParameterivCHROMIUM(GLuint image_id,
+ GLenum pname,
+ GLint* params) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::GetImageParameterivCHROMIUM");
gl_->GetImageParameterivCHROMIUM(image_id, pname, params);
}
-void GLES2TraceImplementation::GetTranslatedShaderSourceANGLE(
- GLuint shader, GLsizei bufsize, GLsizei* length, char* source) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::GetTranslatedShaderSourceANGLE"); // NOLINT
+void GLES2TraceImplementation::GetTranslatedShaderSourceANGLE(GLuint shader,
+ GLsizei bufsize,
+ GLsizei* length,
+ char* source) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::GetTranslatedShaderSourceANGLE");
gl_->GetTranslatedShaderSourceANGLE(shader, bufsize, length, source);
}
-void GLES2TraceImplementation::PostSubBufferCHROMIUM(
- GLint x, GLint y, GLint width, GLint height) {
+void GLES2TraceImplementation::PostSubBufferCHROMIUM(GLint x,
+ GLint y,
+ GLint width,
+ GLint height) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::PostSubBufferCHROMIUM");
gl_->PostSubBufferCHROMIUM(x, y, width, height);
}
-void GLES2TraceImplementation::TexImageIOSurface2DCHROMIUM(
- GLenum target, GLsizei width, GLsizei height, GLuint ioSurfaceId,
- GLuint plane) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::TexImageIOSurface2DCHROMIUM"); // NOLINT
+void GLES2TraceImplementation::TexImageIOSurface2DCHROMIUM(GLenum target,
+ GLsizei width,
+ GLsizei height,
+ GLuint ioSurfaceId,
+ GLuint plane) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::TexImageIOSurface2DCHROMIUM");
gl_->TexImageIOSurface2DCHROMIUM(target, width, height, ioSurfaceId, plane);
}
-void GLES2TraceImplementation::CopyTextureCHROMIUM(
- GLenum target, GLenum source_id, GLenum dest_id, GLint level,
- GLint internalformat, GLenum dest_type) {
+void GLES2TraceImplementation::CopyTextureCHROMIUM(GLenum target,
+ GLenum source_id,
+ GLenum dest_id,
+ GLint level,
+ GLint internalformat,
+ GLenum dest_type) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::CopyTextureCHROMIUM");
gl_->CopyTextureCHROMIUM(
target, source_id, dest_id, level, internalformat, dest_type);
}
-void GLES2TraceImplementation::DrawArraysInstancedANGLE(
- GLenum mode, GLint first, GLsizei count, GLsizei primcount) {
+void GLES2TraceImplementation::DrawArraysInstancedANGLE(GLenum mode,
+ GLint first,
+ GLsizei count,
+ GLsizei primcount) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DrawArraysInstancedANGLE");
gl_->DrawArraysInstancedANGLE(mode, first, count, primcount);
}
-void GLES2TraceImplementation::DrawElementsInstancedANGLE(
- GLenum mode, GLsizei count, GLenum type, const void* indices,
- GLsizei primcount) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DrawElementsInstancedANGLE"); // NOLINT
+void GLES2TraceImplementation::DrawElementsInstancedANGLE(GLenum mode,
+ GLsizei count,
+ GLenum type,
+ const void* indices,
+ GLsizei primcount) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::DrawElementsInstancedANGLE");
gl_->DrawElementsInstancedANGLE(mode, count, type, indices, primcount);
}
-void GLES2TraceImplementation::VertexAttribDivisorANGLE(
- GLuint index, GLuint divisor) {
+void GLES2TraceImplementation::VertexAttribDivisorANGLE(GLuint index,
+ GLuint divisor) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::VertexAttribDivisorANGLE");
gl_->VertexAttribDivisorANGLE(index, divisor);
}
@@ -1146,32 +1357,51 @@ void GLES2TraceImplementation::GenMailboxCHROMIUM(GLbyte* mailbox) {
gl_->GenMailboxCHROMIUM(mailbox);
}
-void GLES2TraceImplementation::ProduceTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) {
+void GLES2TraceImplementation::ProduceTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ProduceTextureCHROMIUM");
gl_->ProduceTextureCHROMIUM(target, mailbox);
}
-void GLES2TraceImplementation::ConsumeTextureCHROMIUM(
- GLenum target, const GLbyte* mailbox) {
+void GLES2TraceImplementation::ProduceTextureDirectCHROMIUM(
+ GLuint texture,
+ GLenum target,
+ const GLbyte* mailbox) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::ProduceTextureDirectCHROMIUM");
+ gl_->ProduceTextureDirectCHROMIUM(texture, target, mailbox);
+}
+
+void GLES2TraceImplementation::ConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* mailbox) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ConsumeTextureCHROMIUM");
gl_->ConsumeTextureCHROMIUM(target, mailbox);
}
-void GLES2TraceImplementation::BindUniformLocationCHROMIUM(
- GLuint program, GLint location, const char* name) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BindUniformLocationCHROMIUM"); // NOLINT
+GLuint GLES2TraceImplementation::CreateAndConsumeTextureCHROMIUM(
+ GLenum target,
+ const GLbyte* mailbox) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::CreateAndConsumeTextureCHROMIUM");
+ return gl_->CreateAndConsumeTextureCHROMIUM(target, mailbox);
+}
+
+void GLES2TraceImplementation::BindUniformLocationCHROMIUM(GLuint program,
+ GLint location,
+ const char* name) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::BindUniformLocationCHROMIUM");
gl_->BindUniformLocationCHROMIUM(program, location, name);
}
-void GLES2TraceImplementation::BindTexImage2DCHROMIUM(
- GLenum target, GLint imageId) {
+void GLES2TraceImplementation::BindTexImage2DCHROMIUM(GLenum target,
+ GLint imageId) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::BindTexImage2DCHROMIUM");
gl_->BindTexImage2DCHROMIUM(target, imageId);
}
-void GLES2TraceImplementation::ReleaseTexImage2DCHROMIUM(
- GLenum target, GLint imageId) {
+void GLES2TraceImplementation::ReleaseTexImage2DCHROMIUM(GLenum target,
+ GLint imageId) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::ReleaseTexImage2DCHROMIUM");
gl_->ReleaseTexImage2DCHROMIUM(target, imageId);
}
@@ -1186,37 +1416,64 @@ void GLES2TraceImplementation::TraceEndCHROMIUM() {
gl_->TraceEndCHROMIUM();
}
-void GLES2TraceImplementation::AsyncTexSubImage2DCHROMIUM(
- GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
- GLsizei height, GLenum format, GLenum type, const void* data) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::AsyncTexSubImage2DCHROMIUM"); // NOLINT
+void GLES2TraceImplementation::AsyncTexSubImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLint xoffset,
+ GLint yoffset,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ const void* data) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::AsyncTexSubImage2DCHROMIUM");
gl_->AsyncTexSubImage2DCHROMIUM(
target, level, xoffset, yoffset, width, height, format, type, data);
}
-void GLES2TraceImplementation::AsyncTexImage2DCHROMIUM(
- GLenum target, GLint level, GLint internalformat, GLsizei width,
- GLsizei height, GLint border, GLenum format, GLenum type,
- const void* pixels) {
+void GLES2TraceImplementation::AsyncTexImage2DCHROMIUM(GLenum target,
+ GLint level,
+ GLenum internalformat,
+ GLsizei width,
+ GLsizei height,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ const void* pixels) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::AsyncTexImage2DCHROMIUM");
- gl_->AsyncTexImage2DCHROMIUM(
- target, level, internalformat, width, height, border, format, type,
- pixels);
+ gl_->AsyncTexImage2DCHROMIUM(target,
+ level,
+ internalformat,
+ width,
+ height,
+ border,
+ format,
+ type,
+ pixels);
}
void GLES2TraceImplementation::WaitAsyncTexImage2DCHROMIUM(GLenum target) {
- TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::WaitAsyncTexImage2DCHROMIUM"); // NOLINT
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::WaitAsyncTexImage2DCHROMIUM");
gl_->WaitAsyncTexImage2DCHROMIUM(target);
}
+void GLES2TraceImplementation::WaitAllAsyncTexImage2DCHROMIUM() {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::WaitAllAsyncTexImage2DCHROMIUM");
+ gl_->WaitAllAsyncTexImage2DCHROMIUM();
+}
+
void GLES2TraceImplementation::DiscardFramebufferEXT(
- GLenum target, GLsizei count, const GLenum* attachments) {
+ GLenum target,
+ GLsizei count,
+ const GLenum* attachments) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DiscardFramebufferEXT");
gl_->DiscardFramebufferEXT(target, count, attachments);
}
-void GLES2TraceImplementation::LoseContextCHROMIUM(
- GLenum current, GLenum other) {
+void GLES2TraceImplementation::LoseContextCHROMIUM(GLenum current,
+ GLenum other) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::LoseContextCHROMIUM");
gl_->LoseContextCHROMIUM(current, other);
}
@@ -1231,8 +1488,8 @@ void GLES2TraceImplementation::WaitSyncPointCHROMIUM(GLuint sync_point) {
gl_->WaitSyncPointCHROMIUM(sync_point);
}
-void GLES2TraceImplementation::DrawBuffersEXT(
- GLsizei count, const GLenum* bufs) {
+void GLES2TraceImplementation::DrawBuffersEXT(GLsizei count,
+ const GLenum* bufs) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DrawBuffersEXT");
gl_->DrawBuffersEXT(count, bufs);
}
@@ -1242,5 +1499,31 @@ void GLES2TraceImplementation::DiscardBackbufferCHROMIUM() {
gl_->DiscardBackbufferCHROMIUM();
}
-#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_TRACE_IMPLEMENTATION_IMPL_AUTOGEN_H_
+void GLES2TraceImplementation::ScheduleOverlayPlaneCHROMIUM(
+ GLint plane_z_order,
+ GLenum plane_transform,
+ GLuint overlay_texture_id,
+ GLint bounds_x,
+ GLint bounds_y,
+ GLint bounds_width,
+ GLint bounds_height,
+ GLfloat uv_x,
+ GLfloat uv_y,
+ GLfloat uv_width,
+ GLfloat uv_height) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::ScheduleOverlayPlaneCHROMIUM");
+ gl_->ScheduleOverlayPlaneCHROMIUM(plane_z_order,
+ plane_transform,
+ overlay_texture_id,
+ bounds_x,
+ bounds_y,
+ bounds_width,
+ bounds_height,
+ uv_x,
+ uv_y,
+ uv_width,
+ uv_height);
+}
+#endif // GPU_COMMAND_BUFFER_CLIENT_GLES2_TRACE_IMPLEMENTATION_IMPL_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/common/gpu_control.h b/chromium/gpu/command_buffer/client/gpu_control.h
index d9719727111..664152d6663 100644
--- a/chromium/gpu/command_buffer/common/gpu_control.h
+++ b/chromium/gpu/command_buffer/client/gpu_control.h
@@ -1,16 +1,18 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef GPU_COMMAND_BUFFER_COMMON_GPU_CONTROL_H_
-#define GPU_COMMAND_BUFFER_COMMON_GPU_CONTROL_H_
+#ifndef GPU_COMMAND_BUFFER_CLIENT_GPU_CONTROL_H_
+#define GPU_COMMAND_BUFFER_CLIENT_GPU_CONTROL_H_
+
+#include <stdint.h>
#include <vector>
#include "base/callback.h"
+#include "base/macros.h"
#include "gpu/command_buffer/common/capabilities.h"
#include "gpu/command_buffer/common/mailbox.h"
-#include "gpu/command_buffer/common/types.h"
#include "gpu/gpu_export.h"
namespace gfx {
@@ -18,7 +20,6 @@ class GpuMemoryBuffer;
}
namespace gpu {
-struct ManagedMemoryStats;
// Common interface for GpuControl implementations.
class GPU_EXPORT GpuControl {
@@ -34,39 +35,37 @@ class GPU_EXPORT GpuControl {
size_t width,
size_t height,
unsigned internalformat,
- int32* id) = 0;
+ unsigned usage,
+ int32_t* id) = 0;
// Destroy a gpu memory buffer. The ID must be positive.
- virtual void DestroyGpuMemoryBuffer(int32 id) = 0;
-
- // Generates n unique mailbox names that can be used with
- // GL_texture_mailbox_CHROMIUM.
- virtual bool GenerateMailboxNames(unsigned num,
- std::vector<gpu::Mailbox>* names) = 0;
+ virtual void DestroyGpuMemoryBuffer(int32_t id) = 0;
// Inserts a sync point, returning its ID. Sync point IDs are global and can
// be used for cross-context synchronization.
- virtual uint32 InsertSyncPoint() = 0;
+ virtual uint32_t InsertSyncPoint() = 0;
// Runs |callback| when a sync point is reached.
- virtual void SignalSyncPoint(uint32 sync_point,
+ virtual void SignalSyncPoint(uint32_t sync_point,
const base::Closure& callback) = 0;
// Runs |callback| when a query created via glCreateQueryEXT() has cleared
// passed the glEndQueryEXT() point.
- virtual void SignalQuery(uint32 query, const base::Closure& callback) = 0;
+ virtual void SignalQuery(uint32_t query, const base::Closure& callback) = 0;
virtual void SetSurfaceVisible(bool visible) = 0;
- virtual void SendManagedMemoryStats(const ManagedMemoryStats& stats) = 0;
-
// Invokes the callback once the context has been flushed.
virtual void Echo(const base::Closure& callback) = 0;
+ // Attaches an external stream to the texture given by |texture_id| and
+ // returns a stream identifier.
+ virtual uint32_t CreateStreamTexture(uint32_t texture_id) = 0;
+
private:
DISALLOW_COPY_AND_ASSIGN(GpuControl);
};
} // namespace gpu
-#endif // GPU_COMMAND_BUFFER_COMMON_GPU_CONTROL_H_
+#endif // GPU_COMMAND_BUFFER_CLIENT_GPU_CONTROL_H_
diff --git a/chromium/gpu/command_buffer/client/gpu_memory_buffer_factory.h b/chromium/gpu/command_buffer/client/gpu_memory_buffer_factory.h
index 42dde409eaf..c7f0b4ca4e0 100644
--- a/chromium/gpu/command_buffer/client/gpu_memory_buffer_factory.h
+++ b/chromium/gpu/command_buffer/client/gpu_memory_buffer_factory.h
@@ -15,10 +15,10 @@ namespace gpu {
class GPU_EXPORT GpuMemoryBufferFactory {
public:
- virtual gfx::GpuMemoryBuffer* CreateGpuMemoryBuffer(
- size_t width,
- size_t height,
- unsigned internalformat) = 0;
+ virtual gfx::GpuMemoryBuffer* CreateGpuMemoryBuffer(size_t width,
+ size_t height,
+ unsigned internalformat,
+ unsigned usage) = 0;
protected:
virtual ~GpuMemoryBufferFactory() {}
diff --git a/chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.cc b/chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.cc
index 863028ad125..9ffe0e33e2d 100644
--- a/chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.cc
+++ b/chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.cc
@@ -6,7 +6,7 @@
#include "base/memory/scoped_ptr.h"
#include "gpu/command_buffer/client/gles2_implementation.h"
-#include "gpu/command_buffer/common/gpu_control.h"
+#include "gpu/command_buffer/client/gpu_control.h"
namespace gpu {
namespace gles2 {
@@ -21,12 +21,14 @@ GpuMemoryBufferTracker::~GpuMemoryBufferTracker() {
}
}
-int32 GpuMemoryBufferTracker::CreateBuffer(
- size_t width, size_t height, int32 internalformat) {
+int32 GpuMemoryBufferTracker::CreateBuffer(size_t width,
+ size_t height,
+ int32 internalformat,
+ int32 usage) {
int32 image_id = 0;
DCHECK(gpu_control_);
gfx::GpuMemoryBuffer* buffer = gpu_control_->CreateGpuMemoryBuffer(
- width, height, internalformat, &image_id);
+ width, height, internalformat, usage, &image_id);
if (!buffer)
return 0;
diff --git a/chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.h b/chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.h
index 84158818a37..25ec9495897 100644
--- a/chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.h
+++ b/chromium/gpu/command_buffer/client/gpu_memory_buffer_tracker.h
@@ -24,7 +24,10 @@ class GLES2_IMPL_EXPORT GpuMemoryBufferTracker {
explicit GpuMemoryBufferTracker(GpuControl* gpu_control);
virtual ~GpuMemoryBufferTracker();
- int32 CreateBuffer(size_t width, size_t height, int32 internalformat);
+ int32 CreateBuffer(size_t width,
+ size_t height,
+ int32 internalformat,
+ int32 usage);
gfx::GpuMemoryBuffer* GetBuffer(int32 image_id);
void RemoveBuffer(int32 image_id);
diff --git a/chromium/gpu/command_buffer/client/mapped_memory.cc b/chromium/gpu/command_buffer/client/mapped_memory.cc
index 15584aaaf07..7166733c51c 100644
--- a/chromium/gpu/command_buffer/client/mapped_memory.cc
+++ b/chromium/gpu/command_buffer/client/mapped_memory.cc
@@ -13,17 +13,22 @@
namespace gpu {
-MemoryChunk::MemoryChunk(
- int32 shm_id, gpu::Buffer shm, CommandBufferHelper* helper)
+MemoryChunk::MemoryChunk(int32 shm_id,
+ scoped_refptr<gpu::Buffer> shm,
+ CommandBufferHelper* helper,
+ const base::Closure& poll_callback)
: shm_id_(shm_id),
shm_(shm),
- allocator_(shm.size, helper, shm.ptr) {
-}
+ allocator_(shm->size(), helper, poll_callback, shm->memory()) {}
+
+MemoryChunk::~MemoryChunk() {}
MappedMemoryManager::MappedMemoryManager(CommandBufferHelper* helper,
+ const base::Closure& poll_callback,
size_t unused_memory_reclaim_limit)
: chunk_size_multiple_(1),
helper_(helper),
+ poll_callback_(poll_callback),
allocated_memory_(0),
max_free_bytes_(unused_memory_reclaim_limit) {
}
@@ -82,10 +87,12 @@ void* MappedMemoryManager::Alloc(
((size + chunk_size_multiple_ - 1) / chunk_size_multiple_) *
chunk_size_multiple_;
int32 id = -1;
- gpu::Buffer shm = cmd_buf->CreateTransferBuffer(chunk_size, &id);
+ scoped_refptr<gpu::Buffer> shm =
+ cmd_buf->CreateTransferBuffer(chunk_size, &id);
if (id < 0)
return NULL;
- MemoryChunk* mc = new MemoryChunk(id, shm, helper_);
+ DCHECK(shm);
+ MemoryChunk* mc = new MemoryChunk(id, shm, helper_, poll_callback_);
allocated_memory_ += mc->GetSize();
chunks_.push_back(mc);
void* mem = mc->Alloc(size);
diff --git a/chromium/gpu/command_buffer/client/mapped_memory.h b/chromium/gpu/command_buffer/client/mapped_memory.h
index b8f3129eb4a..789e69cf7f8 100644
--- a/chromium/gpu/command_buffer/client/mapped_memory.h
+++ b/chromium/gpu/command_buffer/client/mapped_memory.h
@@ -5,10 +5,13 @@
#ifndef GPU_COMMAND_BUFFER_CLIENT_MAPPED_MEMORY_H_
#define GPU_COMMAND_BUFFER_CLIENT_MAPPED_MEMORY_H_
+#include <stdint.h>
+
+#include "base/bind.h"
+#include "base/macros.h"
#include "base/memory/scoped_vector.h"
#include "gpu/command_buffer/client/fenced_allocator.h"
#include "gpu/command_buffer/common/buffer.h"
-#include "gpu/command_buffer/common/types.h"
#include "gpu/gpu_export.h"
namespace gpu {
@@ -18,7 +21,11 @@ class CommandBufferHelper;
// Manages a shared memory segment.
class GPU_EXPORT MemoryChunk {
public:
- MemoryChunk(int32 shm_id, gpu::Buffer shm, CommandBufferHelper* helper);
+ MemoryChunk(int32_t shm_id,
+ scoped_refptr<gpu::Buffer> shm,
+ CommandBufferHelper* helper,
+ const base::Closure& poll_callback);
+ ~MemoryChunk();
// Gets the size of the largest free block that is available without waiting.
unsigned int GetLargestFreeSizeWithoutWaiting() {
@@ -33,11 +40,11 @@ class GPU_EXPORT MemoryChunk {
// Gets the size of the chunk.
unsigned int GetSize() const {
- return static_cast<unsigned int>(shm_.size);
+ return static_cast<unsigned int>(shm_->size());
}
// The shared memory id for this chunk.
- int32 shm_id() const {
+ int32_t shm_id() const {
return shm_id_;
}
@@ -86,8 +93,9 @@ class GPU_EXPORT MemoryChunk {
// Returns true if pointer is in the range of this block.
bool IsInChunk(void* pointer) const {
- return pointer >= shm_.ptr &&
- pointer < reinterpret_cast<const int8*>(shm_.ptr) + shm_.size;
+ return pointer >= shm_->memory() &&
+ pointer <
+ reinterpret_cast<const int8_t*>(shm_->memory()) + shm_->size();
}
// Returns true of any memory in this chunk is in use.
@@ -100,8 +108,8 @@ class GPU_EXPORT MemoryChunk {
}
private:
- int32 shm_id_;
- gpu::Buffer shm_;
+ int32_t shm_id_;
+ scoped_refptr<gpu::Buffer> shm_;
FencedAllocatorWrapper allocator_;
DISALLOW_COPY_AND_ASSIGN(MemoryChunk);
@@ -117,6 +125,7 @@ class GPU_EXPORT MappedMemoryManager {
// |unused_memory_reclaim_limit|: When exceeded this causes pending memory
// to be reclaimed before allocating more memory.
MappedMemoryManager(CommandBufferHelper* helper,
+ const base::Closure& poll_callback,
size_t unused_memory_reclaim_limit);
~MappedMemoryManager();
@@ -137,7 +146,7 @@ class GPU_EXPORT MappedMemoryManager {
// Returns:
// pointer to allocated block of memory. NULL if failure.
void* Alloc(
- unsigned int size, int32* shm_id, unsigned int* shm_offset);
+ unsigned int size, int32_t* shm_id, unsigned int* shm_offset);
// Frees a block of memory.
//
@@ -151,7 +160,7 @@ class GPU_EXPORT MappedMemoryManager {
// Parameters:
// pointer: the pointer to the memory block to free.
// token: the token value to wait for before re-using the memory.
- void FreePendingToken(void* pointer, int32 token);
+ void FreePendingToken(void* pointer, int32_t token);
// Free Any Shared memory that is not in use.
void FreeUnused();
@@ -161,6 +170,15 @@ class GPU_EXPORT MappedMemoryManager {
return chunks_.size();
}
+ size_t bytes_in_use() const {
+ size_t bytes_in_use = 0;
+ for (size_t ii = 0; ii < chunks_.size(); ++ii) {
+ MemoryChunk* chunk = chunks_[ii];
+ bytes_in_use += chunk->bytes_in_use();
+ }
+ return bytes_in_use;
+ }
+
// Used for testing
size_t allocated_memory() const {
return allocated_memory_;
@@ -172,6 +190,7 @@ class GPU_EXPORT MappedMemoryManager {
// size a chunk is rounded up to.
unsigned int chunk_size_multiple_;
CommandBufferHelper* helper_;
+ base::Closure poll_callback_;
MemoryChunkVector chunks_;
size_t allocated_memory_;
size_t max_free_bytes_;
diff --git a/chromium/gpu/command_buffer/client/mapped_memory_unittest.cc b/chromium/gpu/command_buffer/client/mapped_memory_unittest.cc
index 90d1ce7666b..2f3a9e73c65 100644
--- a/chromium/gpu/command_buffer/client/mapped_memory_unittest.cc
+++ b/chromium/gpu/command_buffer/client/mapped_memory_unittest.cc
@@ -4,6 +4,7 @@
#include "gpu/command_buffer/client/mapped_memory.h"
+#include <list>
#include "base/bind.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_loop.h"
@@ -67,7 +68,7 @@ class MappedMemoryTestBase : public testing::Test {
}
int32 GetToken() {
- return command_buffer_->GetState().token;
+ return command_buffer_->GetLastState().token;
}
#if defined(OS_MACOSX)
@@ -85,6 +86,11 @@ class MappedMemoryTestBase : public testing::Test {
const unsigned int MappedMemoryTestBase::kBufferSize;
#endif
+namespace {
+void EmptyPoll() {
+}
+}
+
// Test fixture for MemoryChunk test - Creates a MemoryChunk, using a
// CommandBufferHelper with a mock AsyncAPIInterface for its interface (calling
// it directly, not through the RPC mechanism), making sure Noops are ignored
@@ -94,11 +100,13 @@ class MemoryChunkTest : public MappedMemoryTestBase {
static const int32 kShmId = 123;
virtual void SetUp() {
MappedMemoryTestBase::SetUp();
- buffer_.reset(new uint8[kBufferSize]);
- gpu::Buffer buf;
- buf.size = kBufferSize;
- buf.ptr = buffer_.get();
- chunk_.reset(new MemoryChunk(kShmId, buf, helper_.get()));
+ scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
+ shared_memory->CreateAndMapAnonymous(kBufferSize);
+ buffer_ = MakeBufferFromSharedMemory(shared_memory.Pass(), kBufferSize);
+ chunk_.reset(new MemoryChunk(kShmId,
+ buffer_,
+ helper_.get(),
+ base::Bind(&EmptyPoll)));
}
virtual void TearDown() {
@@ -108,8 +116,10 @@ class MemoryChunkTest : public MappedMemoryTestBase {
MappedMemoryTestBase::TearDown();
}
+ uint8* buffer_memory() { return static_cast<uint8*>(buffer_->memory()); }
+
scoped_ptr<MemoryChunk> chunk_;
- scoped_ptr<uint8[]> buffer_;
+ scoped_refptr<gpu::Buffer> buffer_;
};
#ifndef _MSC_VER
@@ -124,8 +134,9 @@ TEST_F(MemoryChunkTest, Basic) {
EXPECT_EQ(kBufferSize, chunk_->GetSize());
void *pointer = chunk_->Alloc(kSize);
ASSERT_TRUE(pointer);
- EXPECT_LE(buffer_.get(), static_cast<uint8 *>(pointer));
- EXPECT_GE(kBufferSize, static_cast<uint8 *>(pointer) - buffer_.get() + kSize);
+ EXPECT_LE(buffer_->memory(), static_cast<uint8*>(pointer));
+ EXPECT_GE(kBufferSize,
+ static_cast<uint8*>(pointer) - buffer_memory() + kSize);
EXPECT_EQ(kBufferSize - kSize, chunk_->GetLargestFreeSizeWithoutWaiting());
EXPECT_EQ(kBufferSize - kSize, chunk_->GetLargestFreeSizeWithWaiting());
EXPECT_EQ(kBufferSize, chunk_->GetSize());
@@ -136,8 +147,8 @@ TEST_F(MemoryChunkTest, Basic) {
uint8 *pointer_char = static_cast<uint8*>(chunk_->Alloc(kSize));
ASSERT_TRUE(pointer_char);
- EXPECT_LE(buffer_.get(), pointer_char);
- EXPECT_GE(buffer_.get() + kBufferSize, pointer_char + kSize);
+ EXPECT_LE(buffer_memory(), pointer_char);
+ EXPECT_GE(buffer_memory() + kBufferSize, pointer_char + kSize);
EXPECT_EQ(kBufferSize - kSize, chunk_->GetLargestFreeSizeWithoutWaiting());
EXPECT_EQ(kBufferSize - kSize, chunk_->GetLargestFreeSizeWithWaiting());
chunk_->Free(pointer_char);
@@ -146,11 +157,16 @@ TEST_F(MemoryChunkTest, Basic) {
}
class MappedMemoryManagerTest : public MappedMemoryTestBase {
+ public:
+ MappedMemoryManager* manager() const {
+ return manager_.get();
+ }
+
protected:
virtual void SetUp() {
MappedMemoryTestBase::SetUp();
manager_.reset(new MappedMemoryManager(
- helper_.get(), MappedMemoryManager::kNoLimit));
+ helper_.get(), base::Bind(&EmptyPoll), MappedMemoryManager::kNoLimit));
}
virtual void TearDown() {
@@ -252,16 +268,6 @@ TEST_F(MappedMemoryManagerTest, FreePendingToken) {
}
}
-// Check if we don't free we don't crash.
-TEST_F(MappedMemoryManagerTest, DontFree) {
- const unsigned int kSize = 1024;
- // Check we can alloc.
- int32 id1 = -1;
- unsigned int offset1 = 0xFFFFFFFFU;
- void* mem1 = manager_->Alloc(kSize, &id1, &offset1);
- ASSERT_TRUE(mem1);
-}
-
TEST_F(MappedMemoryManagerTest, FreeUnused) {
int32 id = -1;
unsigned int offset = 0xFFFFFFFFU;
@@ -305,12 +311,17 @@ TEST_F(MappedMemoryManagerTest, ChunkSizeMultiple) {
EXPECT_EQ(0u, offset1);
EXPECT_EQ(kSize, offset2);
EXPECT_EQ(0u, offset3);
+
+ manager_->Free(mem1);
+ manager_->Free(mem2);
+ manager_->Free(mem3);
}
TEST_F(MappedMemoryManagerTest, UnusedMemoryLimit) {
const unsigned int kChunkSize = 2048;
// Reset the manager with a memory limit.
- manager_.reset(new MappedMemoryManager(helper_.get(), kChunkSize));
+ manager_.reset(new MappedMemoryManager(
+ helper_.get(), base::Bind(&EmptyPoll), kChunkSize));
manager_->set_chunk_size_multiple(kChunkSize);
// Allocate one chunk worth of memory.
@@ -333,12 +344,16 @@ TEST_F(MappedMemoryManagerTest, UnusedMemoryLimit) {
// Expect two chunks to be allocated, exceeding the limit,
// since all memory is in use.
EXPECT_EQ(2 * kChunkSize, manager_->allocated_memory());
+
+ manager_->Free(mem1);
+ manager_->Free(mem2);
}
TEST_F(MappedMemoryManagerTest, MemoryLimitWithReuse) {
const unsigned int kSize = 1024;
// Reset the manager with a memory limit.
- manager_.reset(new MappedMemoryManager(helper_.get(), kSize));
+ manager_.reset(new MappedMemoryManager(
+ helper_.get(), base::Bind(&EmptyPoll), kSize));
const unsigned int kChunkSize = 2 * 1024;
manager_->set_chunk_size_multiple(kChunkSize);
@@ -382,6 +397,60 @@ TEST_F(MappedMemoryManagerTest, MemoryLimitWithReuse) {
// Expect one chunk to be allocated
EXPECT_EQ(1 * kChunkSize, manager_->allocated_memory());
+
+ manager_->Free(mem1);
+ manager_->Free(mem3);
+}
+
+namespace {
+void Poll(MappedMemoryManagerTest *test, std::list<void*>* list) {
+ std::list<void*>::iterator it = list->begin();
+ while (it != list->end()) {
+ void* address = *it;
+ test->manager()->Free(address);
+ it = list->erase(it);
+ }
+}
+}
+
+TEST_F(MappedMemoryManagerTest, Poll) {
+ std::list<void*> unmanaged_memory_list;
+
+ const unsigned int kSize = 1024;
+ // Reset the manager with a memory limit.
+ manager_.reset(new MappedMemoryManager(
+ helper_.get(),
+ base::Bind(&Poll, this, &unmanaged_memory_list),
+ kSize));
+
+ // Allocate kSize bytes. Don't add the address to
+ // the unmanaged memory list, so that it won't be free:ed just yet.
+ int32 id1;
+ unsigned int offset1;
+ void* mem1 = manager_->Alloc(kSize, &id1, &offset1);
+ EXPECT_EQ(manager_->bytes_in_use(), kSize);
+
+ // Allocate kSize more bytes, and make sure we grew.
+ int32 id2;
+ unsigned int offset2;
+ void* mem2 = manager_->Alloc(kSize, &id2, &offset2);
+ EXPECT_EQ(manager_->bytes_in_use(), kSize * 2);
+
+ // Make the unmanaged buffer be released next time FreeUnused() is called
+ // in MappedMemoryManager/FencedAllocator. This happens for example when
+ // allocating new memory.
+ unmanaged_memory_list.push_back(mem1);
+
+ // Allocate kSize more bytes. This should poll unmanaged memory, which now
+ // should free the previously allocated unmanaged memory.
+ int32 id3;
+ unsigned int offset3;
+ void* mem3 = manager_->Alloc(kSize, &id3, &offset3);
+ EXPECT_EQ(manager_->bytes_in_use(), kSize * 2);
+
+ manager_->Free(mem2);
+ manager_->Free(mem3);
+ EXPECT_EQ(manager_->bytes_in_use(), static_cast<size_t>(0));
}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/program_info_manager.cc b/chromium/gpu/command_buffer/client/program_info_manager.cc
index 1b5a348d6cc..d854aa01f75 100644
--- a/chromium/gpu/command_buffer/client/program_info_manager.cc
+++ b/chromium/gpu/command_buffer/client/program_info_manager.cc
@@ -383,6 +383,7 @@ CachedProgramInfoManager::~CachedProgramInfoManager() {
CachedProgramInfoManager::Program*
CachedProgramInfoManager::GetProgramInfo(
GLES2Implementation* gl, GLuint program) {
+ lock_.AssertAcquired();
ProgramInfoMap::iterator it = program_infos_.find(program);
if (it == program_infos_.end()) {
return NULL;
@@ -394,7 +395,7 @@ CachedProgramInfoManager::Program*
void CachedProgramInfoManager::CreateInfo(GLuint program) {
base::AutoLock auto_lock(lock_);
- DeleteInfo(program);
+ program_infos_.erase(program);
std::pair<ProgramInfoMap::iterator, bool> result =
program_infos_.insert(std::make_pair(program, Program()));
@@ -402,6 +403,7 @@ void CachedProgramInfoManager::CreateInfo(GLuint program) {
}
void CachedProgramInfoManager::DeleteInfo(GLuint program) {
+ base::AutoLock auto_lock(lock_);
program_infos_.erase(program);
}
diff --git a/chromium/gpu/command_buffer/client/query_tracker.cc b/chromium/gpu/command_buffer/client/query_tracker.cc
index 285560590b3..6395c047781 100644
--- a/chromium/gpu/command_buffer/client/query_tracker.cc
+++ b/chromium/gpu/command_buffer/client/query_tracker.cc
@@ -8,6 +8,7 @@
#include <GLES2/gl2ext.h>
#include <GLES2/gl2extchromium.h>
+#include "base/atomicops.h"
#include "gpu/command_buffer/client/gles2_cmd_helper.h"
#include "gpu/command_buffer/client/gles2_implementation.h"
#include "gpu/command_buffer/client/mapped_memory.h"
@@ -92,7 +93,7 @@ QueryTracker::Query::Query(GLuint id, GLenum target,
state_(kUninitialized),
submit_count_(0),
token_(0),
- flushed_(false),
+ flush_count_(0),
client_begin_time_us_(0),
result_(0) {
}
@@ -139,6 +140,7 @@ void QueryTracker::Query::End(GLES2Implementation* gl) {
}
}
}
+ flush_count_ = gl->helper()->flush_generation();
gl->helper()->EndQueryEXT(target(), submit_count());
MarkAsPending(gl->helper()->InsertToken());
}
@@ -146,11 +148,9 @@ void QueryTracker::Query::End(GLES2Implementation* gl) {
bool QueryTracker::Query::CheckResultsAvailable(
CommandBufferHelper* helper) {
if (Pending()) {
- if (info_.sync->process_count == submit_count_ ||
+ if (base::subtle::Acquire_Load(&info_.sync->process_count) ==
+ submit_count_ ||
helper->IsContextLost()) {
- // Need a MemoryBarrier here so that sync->result read after
- // sync->process_count.
- base::subtle::MemoryBarrier();
switch (target()) {
case GL_COMMANDS_ISSUED_CHROMIUM:
result_ = std::min(info_.sync->result,
@@ -169,12 +169,7 @@ bool QueryTracker::Query::CheckResultsAvailable(
}
state_ = kComplete;
} else {
- if (!flushed_) {
- // TODO(gman): We could reduce the number of flushes by having a
- // flush count, recording that count at the time we insert the
- // EndQuery command and then only flushing here if we've have not
- // passed that count yet.
- flushed_ = true;
+ if ((helper->flush_generation() - flush_count_ - 1) >= 0x80000000) {
helper->Flush();
} else {
// Insert no-ops so that eventually the GPU process will see more work.
@@ -249,7 +244,8 @@ void QueryTracker::FreeCompletedQueries() {
while (it != removed_queries_.end()) {
Query* query = *it;
if (query->Pending() &&
- query->info_.sync->process_count != query->submit_count()) {
+ base::subtle::Acquire_Load(&query->info_.sync->process_count) !=
+ query->submit_count()) {
++it;
continue;
}
diff --git a/chromium/gpu/command_buffer/client/query_tracker.h b/chromium/gpu/command_buffer/client/query_tracker.h
index 9e7f501768b..72e29e71c42 100644
--- a/chromium/gpu/command_buffer/client/query_tracker.h
+++ b/chromium/gpu/command_buffer/client/query_tracker.h
@@ -10,6 +10,7 @@
#include <deque>
#include <list>
+#include "base/atomicops.h"
#include "base/containers/hash_tables.h"
#include "gles2_impl_export.h"
#include "gpu/command_buffer/common/gles2_cmd_format.h"
@@ -105,17 +106,16 @@ class GLES2_IMPL_EXPORT QueryTracker {
void MarkAsActive() {
state_ = kActive;
++submit_count_;
+ if (submit_count_ == INT_MAX)
+ submit_count_ = 1;
}
void MarkAsPending(int32 token) {
token_ = token;
state_ = kPending;
- flushed_ = false;
}
- uint32 submit_count() const {
- return submit_count_;
- }
+ base::subtle::Atomic32 submit_count() const { return submit_count_; }
int32 token() const {
return token_;
@@ -144,9 +144,9 @@ class GLES2_IMPL_EXPORT QueryTracker {
GLenum target_;
QuerySyncManager::QueryInfo info_;
State state_;
- uint32 submit_count_;
+ base::subtle::Atomic32 submit_count_;
int32 token_;
- bool flushed_;
+ uint32 flush_count_;
uint64 client_begin_time_us_; // Only used for latency query target.
uint32 result_;
};
diff --git a/chromium/gpu/command_buffer/client/query_tracker_unittest.cc b/chromium/gpu/command_buffer/client/query_tracker_unittest.cc
index 800c479ec85..cd2ccf63297 100644
--- a/chromium/gpu/command_buffer/client/query_tracker_unittest.cc
+++ b/chromium/gpu/command_buffer/client/query_tracker_unittest.cc
@@ -18,6 +18,11 @@
namespace gpu {
namespace gles2 {
+namespace {
+void EmptyPoll() {
+}
+}
+
class QuerySyncManagerTest : public testing::Test {
protected:
static const int32 kNumCommandEntries = 400;
@@ -29,7 +34,7 @@ class QuerySyncManagerTest : public testing::Test {
helper_.reset(new GLES2CmdHelper(command_buffer_.get()));
helper_->Initialize(kCommandBufferSizeBytes);
mapped_memory_.reset(new MappedMemoryManager(
- helper_.get(), MappedMemoryManager::kNoLimit));
+ helper_.get(), base::Bind(&EmptyPoll), MappedMemoryManager::kNoLimit));
sync_manager_.reset(new QuerySyncManager(mapped_memory_.get()));
}
@@ -54,7 +59,7 @@ TEST_F(QuerySyncManagerTest, Basic) {
EXPECT_TRUE(sync_manager_->Alloc(&infos[ii]));
EXPECT_NE(0, infos[ii].shm_id);
ASSERT_TRUE(infos[ii].sync != NULL);
- EXPECT_EQ(0u, infos[ii].sync->process_count);
+ EXPECT_EQ(0, infos[ii].sync->process_count);
EXPECT_EQ(0u, infos[ii].sync->result);
}
@@ -83,7 +88,7 @@ class QueryTrackerTest : public testing::Test {
helper_.reset(new GLES2CmdHelper(command_buffer_.get()));
helper_->Initialize(kCommandBufferSizeBytes);
mapped_memory_.reset(new MappedMemoryManager(
- helper_.get(), MappedMemoryManager::kNoLimit));
+ helper_.get(), base::Bind(&EmptyPoll), MappedMemoryManager::kNoLimit));
query_tracker_.reset(new QueryTracker(mapped_memory_.get()));
}
@@ -102,6 +107,8 @@ class QueryTrackerTest : public testing::Test {
return query->info_.bucket;
}
+ uint32 GetFlushGeneration() { return helper_->flush_generation(); }
+
scoped_ptr<CommandBuffer> command_buffer_;
scoped_ptr<GLES2CmdHelper> helper_;
scoped_ptr<MappedMemoryManager> mapped_memory_;
@@ -138,27 +145,48 @@ TEST_F(QueryTrackerTest, Query) {
EXPECT_TRUE(query->NeverUsed());
EXPECT_FALSE(query->Pending());
EXPECT_EQ(0, query->token());
- EXPECT_EQ(0u, query->submit_count());
+ EXPECT_EQ(0, query->submit_count());
// Check MarkAsActive.
query->MarkAsActive();
EXPECT_FALSE(query->NeverUsed());
EXPECT_FALSE(query->Pending());
EXPECT_EQ(0, query->token());
- EXPECT_EQ(1u, query->submit_count());
+ EXPECT_EQ(1, query->submit_count());
// Check MarkAsPending.
query->MarkAsPending(kToken);
EXPECT_FALSE(query->NeverUsed());
EXPECT_TRUE(query->Pending());
EXPECT_EQ(kToken, query->token());
- EXPECT_EQ(1u, query->submit_count());
+ EXPECT_EQ(1, query->submit_count());
// Check CheckResultsAvailable.
EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
EXPECT_FALSE(query->NeverUsed());
EXPECT_TRUE(query->Pending());
+ // Flush only once if no more flushes happened between a call to
+ // EndQuery command and CheckResultsAvailable
+ // Advance put_ so flush calls in CheckResultsAvailable go through
+ // and updates flush_generation count
+ helper_->Noop(1);
+ // Set Query in pending state_ to simulate EndQuery command is called
+ query->MarkAsPending(kToken);
+ EXPECT_TRUE(query->Pending());
+ // Store FlushGeneration count after EndQuery is called
+ uint32 gen1 = GetFlushGeneration();
+ EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
+ uint32 gen2 = GetFlushGeneration();
+ EXPECT_NE(gen1, gen2);
+ // Repeated calls to CheckResultsAvailable should not flush unnecessarily
+ EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
+ gen1 = GetFlushGeneration();
+ EXPECT_EQ(gen1, gen2);
+ EXPECT_FALSE(query->CheckResultsAvailable(helper_.get()));
+ gen1 = GetFlushGeneration();
+ EXPECT_EQ(gen1, gen2);
+
// Simulate GPU process marking it as available.
QuerySync* sync = GetSync(query);
sync->process_count = query->submit_count();
diff --git a/chromium/gpu/command_buffer/client/ring_buffer.cc b/chromium/gpu/command_buffer/client/ring_buffer.cc
index 25f63425d85..813bb348863 100644
--- a/chromium/gpu/command_buffer/client/ring_buffer.cc
+++ b/chromium/gpu/command_buffer/client/ring_buffer.cc
@@ -13,13 +13,16 @@
namespace gpu {
-RingBuffer::RingBuffer(
- Offset base_offset, unsigned int size, CommandBufferHelper* helper)
+RingBuffer::RingBuffer(unsigned int alignment, Offset base_offset,
+ unsigned int size, CommandBufferHelper* helper,
+ void* base)
: helper_(helper),
base_offset_(base_offset),
size_(size),
free_offset_(0),
- in_use_offset_(0) {
+ in_use_offset_(0),
+ alignment_(alignment),
+ base_(static_cast<int8*>(base) - base_offset) {
}
RingBuffer::~RingBuffer() {
@@ -49,13 +52,16 @@ void RingBuffer::FreeOldestBlock() {
blocks_.pop_front();
}
-RingBuffer::Offset RingBuffer::Alloc(unsigned int size) {
+void* RingBuffer::Alloc(unsigned int size) {
DCHECK_LE(size, size_) << "attempt to allocate more than maximum memory";
DCHECK(blocks_.empty() || blocks_.back().state != IN_USE)
<< "Attempt to alloc another block before freeing the previous.";
// Similarly to malloc, an allocation of 0 allocates at least 1 byte, to
// return different pointers every time.
if (size == 0) size = 1;
+ // Allocate rounded to alignment size so that the offsets are always
+ // memory-aligned.
+ size = RoundToAlignment(size);
// Wait until there is enough room.
while (size > GetLargestFreeSizeNoWaiting()) {
@@ -74,11 +80,12 @@ RingBuffer::Offset RingBuffer::Alloc(unsigned int size) {
if (free_offset_ == size_) {
free_offset_ = 0;
}
- return offset + base_offset_;
+ return GetPointer(offset + base_offset_);
}
-void RingBuffer::FreePendingToken(RingBuffer::Offset offset,
+void RingBuffer::FreePendingToken(void* pointer,
unsigned int token) {
+ Offset offset = GetOffset(pointer);
offset -= base_offset_;
DCHECK(!blocks_.empty()) << "no allocations to free";
for (Container::reverse_iterator it = blocks_.rbegin();
diff --git a/chromium/gpu/command_buffer/client/ring_buffer.h b/chromium/gpu/command_buffer/client/ring_buffer.h
index 81f1cddafa5..dfe16f7326e 100644
--- a/chromium/gpu/command_buffer/client/ring_buffer.h
+++ b/chromium/gpu/command_buffer/client/ring_buffer.h
@@ -10,7 +10,7 @@
#include <deque>
#include "base/logging.h"
-#include "gpu/command_buffer/common/types.h"
+#include "base/macros.h"
#include "gpu/gpu_export.h"
namespace gpu {
@@ -25,11 +25,13 @@ class GPU_EXPORT RingBuffer {
// Creates a RingBuffer.
// Parameters:
+ // alignment: Alignment for allocations.
// base_offset: The offset of the start of the buffer.
// size: The size of the buffer in bytes.
// helper: A CommandBufferHelper for dealing with tokens.
- RingBuffer(
- Offset base_offset, unsigned int size, CommandBufferHelper* helper);
+ // base: The physical address that corresponds to base_offset.
+ RingBuffer(unsigned int alignment, Offset base_offset,
+ unsigned int size, CommandBufferHelper* helper, void* base);
~RingBuffer();
@@ -41,16 +43,16 @@ class GPU_EXPORT RingBuffer {
// size: the size of the memory block to allocate.
//
// Returns:
- // the offset of the allocated memory block.
- Offset Alloc(unsigned int size);
+ // the pointer to the allocated memory block.
+ void* Alloc(unsigned int size);
// Frees a block of memory, pending the passage of a token. That memory won't
// be re-allocated until the token has passed through the command stream.
//
// Parameters:
- // offset: the offset of the memory block to free.
+ // pointer: the pointer to the memory block to free.
// token: the token value to wait for before re-using the memory.
- void FreePendingToken(Offset offset, unsigned int token);
+ void FreePendingToken(void* pointer, unsigned int token);
// Gets the size of the largest free block that is available without waiting.
unsigned int GetLargestFreeSizeNoWaiting();
@@ -62,6 +64,22 @@ class GPU_EXPORT RingBuffer {
return size_;
}
+ // Gets a pointer to a memory block given the base memory and the offset.
+ void* GetPointer(RingBuffer::Offset offset) const {
+ return static_cast<int8*>(base_) + offset;
+ }
+
+ // Gets the offset to a memory block given the base memory and the address.
+ RingBuffer::Offset GetOffset(void* pointer) const {
+ return static_cast<int8*>(pointer) - static_cast<int8*>(base_);
+ }
+
+ // Rounds the given size to the alignment in use.
+ unsigned int RoundToAlignment(unsigned int size) {
+ return (size + alignment_ - 1) & ~(alignment_ - 1);
+ }
+
+
private:
enum State {
IN_USE,
@@ -105,92 +123,13 @@ class GPU_EXPORT RingBuffer {
// Range between in_use_mark and free_mark is in use.
Offset in_use_offset_;
- DISALLOW_IMPLICIT_CONSTRUCTORS(RingBuffer);
-};
-
-// This class functions just like RingBuffer, but its API uses pointers
-// instead of offsets.
-class RingBufferWrapper {
- public:
- // Parameters:
- // base_offset: The offset to the start of the buffer
- // size: The size of the buffer in bytes.
- // helper: A CommandBufferHelper for dealing with tokens.
- // base: The physical address that corresponds to base_offset.
- RingBufferWrapper(RingBuffer::Offset base_offset,
- unsigned int size,
- CommandBufferHelper* helper,
- void* base)
- : allocator_(base_offset, size, helper),
- base_(static_cast<int8*>(base) - base_offset) {
- }
-
- // Allocates a block of memory. If the buffer is out of directly available
- // memory, this function may wait until memory that was freed "pending a
- // token" can be re-used.
- //
- // Parameters:
- // size: the size of the memory block to allocate.
- //
- // Returns:
- // the pointer to the allocated memory block, or NULL if out of
- // memory.
- void* Alloc(unsigned int size) {
- RingBuffer::Offset offset = allocator_.Alloc(size);
- return GetPointer(offset);
- }
+ // Alignment for allocations.
+ unsigned int alignment_;
- // Allocates a block of memory. If the buffer is out of directly available
- // memory, this function may wait until memory that was freed "pending a
- // token" can be re-used.
- // This is a type-safe version of Alloc, returning a typed pointer.
- //
- // Parameters:
- // count: the number of elements to allocate.
- //
- // Returns:
- // the pointer to the allocated memory block, or NULL if out of
- // memory.
- template <typename T> T* AllocTyped(unsigned int count) {
- return static_cast<T*>(Alloc(count * sizeof(T)));
- }
-
- // Frees a block of memory, pending the passage of a token. That memory won't
- // be re-allocated until the token has passed through the command stream.
- //
- // Parameters:
- // pointer: the pointer to the memory block to free.
- // token: the token value to wait for before re-using the memory.
- void FreePendingToken(void* pointer, unsigned int token) {
- DCHECK(pointer);
- allocator_.FreePendingToken(GetOffset(pointer), token);
- }
-
- // Gets a pointer to a memory block given the base memory and the offset.
- void* GetPointer(RingBuffer::Offset offset) const {
- return static_cast<int8*>(base_) + offset;
- }
-
- // Gets the offset to a memory block given the base memory and the address.
- RingBuffer::Offset GetOffset(void* pointer) const {
- return static_cast<int8*>(pointer) - static_cast<int8*>(base_);
- }
-
- // Gets the size of the largest free block that is available without waiting.
- unsigned int GetLargestFreeSizeNoWaiting() {
- return allocator_.GetLargestFreeSizeNoWaiting();
- }
-
- // Gets the size of the largest free block that can be allocated if the
- // caller can wait.
- unsigned int GetLargestFreeOrPendingSize() {
- return allocator_.GetLargestFreeOrPendingSize();
- }
-
- private:
- RingBuffer allocator_;
+ // The physical address that corresponds to base_offset.
void* base_;
- DISALLOW_IMPLICIT_CONSTRUCTORS(RingBufferWrapper);
+
+ DISALLOW_IMPLICIT_CONSTRUCTORS(RingBuffer);
};
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/ring_buffer_test.cc b/chromium/gpu/command_buffer/client/ring_buffer_test.cc
index 05014289eab..0b58e3abcbd 100644
--- a/chromium/gpu/command_buffer/client/ring_buffer_test.cc
+++ b/chromium/gpu/command_buffer/client/ring_buffer_test.cc
@@ -35,6 +35,7 @@ class BaseRingBufferTest : public testing::Test {
protected:
static const unsigned int kBaseOffset = 128;
static const unsigned int kBufferSize = 1024;
+ static const unsigned int kAlignment = 4;
void RunPendingSetToken() {
for (std::vector<const void*>::iterator it = set_token_arguments_.begin();
@@ -92,7 +93,7 @@ class BaseRingBufferTest : public testing::Test {
}
int32 GetToken() {
- return command_buffer_->GetState().token;
+ return command_buffer_->GetLastState().token;
}
#if defined(OS_MACOSX)
@@ -107,6 +108,8 @@ class BaseRingBufferTest : public testing::Test {
std::vector<const void*> set_token_arguments_;
bool delay_set_token_;
+ scoped_ptr<int8[]> buffer_;
+ int8* buffer_start_;
};
#ifndef _MSC_VER
@@ -122,7 +125,11 @@ class RingBufferTest : public BaseRingBufferTest {
protected:
virtual void SetUp() {
BaseRingBufferTest::SetUp();
- allocator_.reset(new RingBuffer(kBaseOffset, kBufferSize, helper_.get()));
+
+ buffer_.reset(new int8[kBufferSize + kBaseOffset]);
+ buffer_start_ = buffer_.get() + kBaseOffset;
+ allocator_.reset(new RingBuffer(kAlignment, kBaseOffset, kBufferSize,
+ helper_.get(), buffer_start_));
}
virtual void TearDown() {
@@ -140,12 +147,12 @@ TEST_F(RingBufferTest, TestBasic) {
const unsigned int kSize = 16;
EXPECT_EQ(kBufferSize, allocator_->GetLargestFreeOrPendingSize());
EXPECT_EQ(kBufferSize, allocator_->GetLargestFreeSizeNoWaiting());
- RingBuffer::Offset offset = allocator_->Alloc(kSize);
- EXPECT_GE(kBufferSize, offset - kBaseOffset + kSize);
+ void* pointer = allocator_->Alloc(kSize);
+ EXPECT_GE(kBufferSize, allocator_->GetOffset(pointer) - kBaseOffset + kSize);
EXPECT_EQ(kBufferSize, allocator_->GetLargestFreeOrPendingSize());
EXPECT_EQ(kBufferSize - kSize, allocator_->GetLargestFreeSizeNoWaiting());
int32 token = helper_->InsertToken();
- allocator_->FreePendingToken(offset, token);
+ allocator_->FreePendingToken(pointer, token);
}
// Checks the free-pending-token mechanism.
@@ -158,10 +165,11 @@ TEST_F(RingBufferTest, TestFreePendingToken) {
// Allocate several buffers to fill in the memory.
int32 tokens[kAllocCount];
for (unsigned int ii = 0; ii < kAllocCount; ++ii) {
- RingBuffer::Offset offset = allocator_->Alloc(kSize);
- EXPECT_GE(kBufferSize, offset - kBaseOffset + kSize);
+ void* pointer = allocator_->Alloc(kSize);
+ EXPECT_GE(kBufferSize,
+ allocator_->GetOffset(pointer) - kBaseOffset + kSize);
tokens[ii] = helper_->InsertToken();
- allocator_->FreePendingToken(offset, tokens[ii]);
+ allocator_->FreePendingToken(pointer, tokens[ii]);
}
EXPECT_EQ(kBufferSize - (kSize * kAllocCount),
@@ -171,131 +179,38 @@ TEST_F(RingBufferTest, TestFreePendingToken) {
// This allocation will need to reclaim the space freed above, so that should
// process the commands until a token is passed.
- RingBuffer::Offset offset1 = allocator_->Alloc(kSize);
- EXPECT_EQ(kBaseOffset, offset1);
+ void* pointer1 = allocator_->Alloc(kSize);
+ EXPECT_EQ(kBaseOffset, allocator_->GetOffset(pointer1));
// Check that the token has indeed passed.
EXPECT_LE(tokens[0], GetToken());
- allocator_->FreePendingToken(offset1, helper_->InsertToken());
+ allocator_->FreePendingToken(pointer1, helper_->InsertToken());
}
// Tests GetLargestFreeSizeNoWaiting
TEST_F(RingBufferTest, TestGetLargestFreeSizeNoWaiting) {
EXPECT_EQ(kBufferSize, allocator_->GetLargestFreeSizeNoWaiting());
- RingBuffer::Offset offset = allocator_->Alloc(kBufferSize);
+ void* pointer = allocator_->Alloc(kBufferSize);
EXPECT_EQ(0u, allocator_->GetLargestFreeSizeNoWaiting());
- allocator_->FreePendingToken(offset, helper_->InsertToken());
+ allocator_->FreePendingToken(pointer, helper_->InsertToken());
}
TEST_F(RingBufferTest, TestFreeBug) {
// The first and second allocations must not match.
- const unsigned int kAlloc1 = 10;
+ const unsigned int kAlloc1 = 3*kAlignment;
const unsigned int kAlloc2 = 20;
- RingBuffer::Offset offset = allocator_->Alloc(kAlloc1);
+ void* pointer = allocator_->Alloc(kAlloc1);
EXPECT_EQ(kBufferSize - kAlloc1, allocator_->GetLargestFreeSizeNoWaiting());
- allocator_->FreePendingToken(offset, helper_.get()->InsertToken());
- offset = allocator_->Alloc(kAlloc2);
+ allocator_->FreePendingToken(pointer, helper_.get()->InsertToken());
+ pointer = allocator_->Alloc(kAlloc2);
EXPECT_EQ(kBufferSize - kAlloc1 - kAlloc2,
allocator_->GetLargestFreeSizeNoWaiting());
- allocator_->FreePendingToken(offset, helper_.get()->InsertToken());
- offset = allocator_->Alloc(kBufferSize);
+ allocator_->FreePendingToken(pointer, helper_.get()->InsertToken());
+ pointer = allocator_->Alloc(kBufferSize);
EXPECT_EQ(0u, allocator_->GetLargestFreeSizeNoWaiting());
- allocator_->FreePendingToken(offset, helper_.get()->InsertToken());
-}
-
-// Test fixture for RingBufferWrapper test - Creates a
-// RingBufferWrapper, using a CommandBufferHelper with a mock
-// AsyncAPIInterface for its interface (calling it directly, not through the
-// RPC mechanism), making sure Noops are ignored and SetToken are properly
-// forwarded to the engine.
-class RingBufferWrapperTest : public BaseRingBufferTest {
- protected:
- virtual void SetUp() {
- BaseRingBufferTest::SetUp();
-
- // Though allocating this buffer isn't strictly necessary, it makes
- // allocations point to valid addresses, so they could be used for
- // something.
- buffer_.reset(new int8[kBufferSize + kBaseOffset]);
- buffer_start_ = buffer_.get() + kBaseOffset;
- allocator_.reset(new RingBufferWrapper(
- kBaseOffset, kBufferSize, helper_.get(), buffer_start_));
- }
-
- virtual void TearDown() {
- // If the GpuScheduler posts any tasks, this forces them to run.
- base::MessageLoop::current()->RunUntilIdle();
-
- BaseRingBufferTest::TearDown();
- }
-
- scoped_ptr<RingBufferWrapper> allocator_;
- scoped_ptr<int8[]> buffer_;
- int8* buffer_start_;
-};
-
-// Checks basic alloc and free.
-TEST_F(RingBufferWrapperTest, TestBasic) {
- const unsigned int kSize = 16;
- void* pointer = allocator_->Alloc(kSize);
- ASSERT_TRUE(pointer);
- EXPECT_LE(buffer_start_, static_cast<int8*>(pointer));
- EXPECT_GE(kBufferSize, static_cast<int8*>(pointer) - buffer_start_ + kSize);
-
- allocator_->FreePendingToken(pointer, helper_->InsertToken());
-
- int8* pointer_int8 = allocator_->AllocTyped<int8>(kSize);
- ASSERT_TRUE(pointer_int8);
- EXPECT_LE(buffer_start_, pointer_int8);
- EXPECT_GE(buffer_start_ + kBufferSize, pointer_int8 + kSize);
- allocator_->FreePendingToken(pointer_int8, helper_->InsertToken());
-
- unsigned int* pointer_uint = allocator_->AllocTyped<unsigned int>(kSize);
- ASSERT_TRUE(pointer_uint);
- EXPECT_LE(buffer_start_, reinterpret_cast<int8*>(pointer_uint));
- EXPECT_GE(buffer_start_ + kBufferSize,
- reinterpret_cast<int8* >(pointer_uint + kSize));
-
- // Check that it did allocate kSize * sizeof(unsigned int). We can't tell
- // directly, except from the remaining size.
- EXPECT_EQ(kBufferSize - kSize - kSize - kSize * sizeof(*pointer_uint),
- allocator_->GetLargestFreeSizeNoWaiting());
- allocator_->FreePendingToken(pointer_uint, helper_->InsertToken());
-}
-
-// Checks the free-pending-token mechanism.
-TEST_F(RingBufferWrapperTest, TestFreePendingToken) {
- const unsigned int kSize = 16;
- const unsigned int kAllocCount = kBufferSize / kSize;
- CHECK(kAllocCount * kSize == kBufferSize);
-
- delay_set_token_ = true;
- // Allocate several buffers to fill in the memory.
- int32 tokens[kAllocCount];
- for (unsigned int ii = 0; ii < kAllocCount; ++ii) {
- void* pointer = allocator_->Alloc(kSize);
- EXPECT_TRUE(pointer != NULL);
- tokens[ii] = helper_->InsertToken();
- allocator_->FreePendingToken(pointer, helper_->InsertToken());
- }
-
- EXPECT_EQ(kBufferSize - (kSize * kAllocCount),
- allocator_->GetLargestFreeSizeNoWaiting());
-
- RunPendingSetToken();
-
- // This allocation will need to reclaim the space freed above, so that should
- // process the commands until the token is passed.
- void* pointer1 = allocator_->Alloc(kSize);
- EXPECT_EQ(buffer_start_, static_cast<int8*>(pointer1));
-
- // Check that the token has indeed passed.
- EXPECT_LE(tokens[0], GetToken());
-
- allocator_->FreePendingToken(pointer1, helper_->InsertToken());
- EXPECT_LE(command_buffer_->GetState().token, helper_->InsertToken());
+ allocator_->FreePendingToken(pointer, helper_.get()->InsertToken());
}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/share_group.cc b/chromium/gpu/command_buffer/client/share_group.cc
index cb9f9bca5c6..96ab8d181be 100644
--- a/chromium/gpu/command_buffer/client/share_group.cc
+++ b/chromium/gpu/command_buffer/client/share_group.cc
@@ -2,6 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <stack>
+#include <vector>
+
#include "gpu/command_buffer/client/share_group.h"
#include "base/logging.h"
@@ -13,6 +16,9 @@
namespace gpu {
namespace gles2 {
+ShareGroupContextData::IdHandlerData::IdHandlerData() : flush_generation_(0) {}
+ShareGroupContextData::IdHandlerData::~IdHandlerData() {}
+
COMPILE_ASSERT(gpu::kInvalidResource == 0,
INVALID_RESOURCE_NOT_0_AS_GL_EXPECTS);
@@ -26,6 +32,7 @@ class IdHandler : public IdHandlerInterface {
virtual void MakeIds(
GLES2Implementation* /* gl_impl */,
GLuint id_offset, GLsizei n, GLuint* ids) OVERRIDE {
+ base::AutoLock auto_lock(lock_);
if (id_offset == 0) {
for (GLsizei ii = 0; ii < n; ++ii) {
ids[ii] = id_allocator_.AllocateID();
@@ -42,35 +49,144 @@ class IdHandler : public IdHandlerInterface {
virtual bool FreeIds(
GLES2Implementation* gl_impl,
GLsizei n, const GLuint* ids, DeleteFn delete_fn) OVERRIDE {
+ base::AutoLock auto_lock(lock_);
+
for (GLsizei ii = 0; ii < n; ++ii) {
id_allocator_.FreeID(ids[ii]);
}
+
(gl_impl->*delete_fn)(n, ids);
// We need to ensure that the delete call is evaluated on the service side
// before any other contexts issue commands using these client ids.
+ // TODO(vmiura): Can remove this by virtualizing internal ids, however
+ // this code only affects PPAPI for now.
gl_impl->helper()->CommandBufferHelper::Flush();
return true;
}
// Overridden from IdHandlerInterface.
virtual bool MarkAsUsedForBind(GLuint id) OVERRIDE {
- return id == 0 ? true : id_allocator_.MarkAsUsed(id);
+ if (id == 0)
+ return true;
+ base::AutoLock auto_lock(lock_);
+ return id_allocator_.MarkAsUsed(id);
}
- protected:
+
+ virtual void FreeContext(GLES2Implementation* gl_impl) OVERRIDE {}
+
+ private:
+ base::Lock lock_;
IdAllocator id_allocator_;
};
-// An id handler that require Gen before Bind.
-class StrictIdHandler : public IdHandler {
+// An id handler that requires Gen before Bind.
+class StrictIdHandler : public IdHandlerInterface {
public:
- StrictIdHandler() {}
+ explicit StrictIdHandler(int id_namespace) : id_namespace_(id_namespace) {}
virtual ~StrictIdHandler() {}
// Overridden from IdHandler.
+ virtual void MakeIds(GLES2Implementation* gl_impl,
+ GLuint /* id_offset */,
+ GLsizei n,
+ GLuint* ids) OVERRIDE {
+ base::AutoLock auto_lock(lock_);
+
+ // Collect pending FreeIds from other flush_generation.
+ CollectPendingFreeIds(gl_impl);
+
+ for (GLsizei ii = 0; ii < n; ++ii) {
+ if (!free_ids_.empty()) {
+ // Allocate a previously freed Id.
+ ids[ii] = free_ids_.top();
+ free_ids_.pop();
+
+ // Record kIdInUse state.
+ DCHECK(id_states_[ids[ii] - 1] == kIdFree);
+ id_states_[ids[ii] - 1] = kIdInUse;
+ } else {
+ // Allocate a new Id.
+ id_states_.push_back(kIdInUse);
+ ids[ii] = id_states_.size();
+ }
+ }
+ }
+
+ // Overridden from IdHandler.
+ virtual bool FreeIds(GLES2Implementation* gl_impl,
+ GLsizei n,
+ const GLuint* ids,
+ DeleteFn delete_fn) OVERRIDE {
+
+ // Delete stub must run before CollectPendingFreeIds.
+ (gl_impl->*delete_fn)(n, ids);
+
+ {
+ base::AutoLock auto_lock(lock_);
+
+ // Collect pending FreeIds from other flush_generation.
+ CollectPendingFreeIds(gl_impl);
+
+ // Save Ids to free in a later flush_generation.
+ ShareGroupContextData::IdHandlerData* ctxt_data =
+ gl_impl->share_group_context_data()->id_handler_data(id_namespace_);
+
+ for (GLsizei ii = 0; ii < n; ++ii) {
+ GLuint id = ids[ii];
+ if (id != 0) {
+ // Save freed Id for later.
+ DCHECK(id_states_[id - 1] == kIdInUse);
+ id_states_[id - 1] = kIdPendingFree;
+ ctxt_data->freed_ids_.push_back(id);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ // Overridden from IdHandler.
virtual bool MarkAsUsedForBind(GLuint id) OVERRIDE {
- DCHECK(id == 0 || id_allocator_.InUse(id));
- return IdHandler::MarkAsUsedForBind(id);
+#ifndef NDEBUG
+ if (id != 0) {
+ base::AutoLock auto_lock(lock_);
+ DCHECK(id_states_[id - 1] == kIdInUse);
+ }
+#endif
+ return true;
+ }
+
+ // Overridden from IdHandlerInterface.
+ virtual void FreeContext(GLES2Implementation* gl_impl) OVERRIDE {
+ base::AutoLock auto_lock(lock_);
+ CollectPendingFreeIds(gl_impl);
+ }
+
+ private:
+ enum IdState { kIdFree, kIdPendingFree, kIdInUse };
+
+ void CollectPendingFreeIds(GLES2Implementation* gl_impl) {
+ uint32 flush_generation = gl_impl->helper()->flush_generation();
+ ShareGroupContextData::IdHandlerData* ctxt_data =
+ gl_impl->share_group_context_data()->id_handler_data(id_namespace_);
+
+ if (ctxt_data->flush_generation_ != flush_generation) {
+ ctxt_data->flush_generation_ = flush_generation;
+ for (uint32 ii = 0; ii < ctxt_data->freed_ids_.size(); ++ii) {
+ const GLuint id = ctxt_data->freed_ids_[ii];
+ DCHECK(id_states_[id - 1] == kIdPendingFree);
+ id_states_[id - 1] = kIdFree;
+ free_ids_.push(id);
+ }
+ ctxt_data->freed_ids_.clear();
+ }
}
+
+ int id_namespace_;
+
+ base::Lock lock_;
+ std::vector<uint8> id_states_;
+ std::stack<uint32> free_ids_;
};
// An id handler for ids that are never reused.
@@ -83,6 +199,7 @@ class NonReusedIdHandler : public IdHandlerInterface {
virtual void MakeIds(
GLES2Implementation* /* gl_impl */,
GLuint id_offset, GLsizei n, GLuint* ids) OVERRIDE {
+ base::AutoLock auto_lock(lock_);
for (GLsizei ii = 0; ii < n; ++ii) {
ids[ii] = ++last_id_ + id_offset;
}
@@ -103,82 +220,11 @@ class NonReusedIdHandler : public IdHandlerInterface {
return false;
}
- private:
- GLuint last_id_;
-};
-
-// An id handler for shared ids.
-class SharedIdHandler : public IdHandlerInterface {
- public:
- SharedIdHandler(
- id_namespaces::IdNamespaces id_namespace)
- : id_namespace_(id_namespace) {
- }
-
- virtual ~SharedIdHandler() {}
-
- virtual void MakeIds(GLES2Implementation* gl_impl,
- GLuint id_offset,
- GLsizei n,
- GLuint* ids) OVERRIDE {
- gl_impl->GenSharedIdsCHROMIUM(id_namespace_, id_offset, n, ids);
- }
-
- virtual bool FreeIds(GLES2Implementation* gl_impl,
- GLsizei n,
- const GLuint* ids,
- DeleteFn delete_fn) OVERRIDE {
- gl_impl->DeleteSharedIdsCHROMIUM(id_namespace_, n, ids);
- (gl_impl->*delete_fn)(n, ids);
- // We need to ensure that the delete call is evaluated on the service side
- // before any other contexts issue commands using these client ids.
- gl_impl->helper()->CommandBufferHelper::Flush();
- return true;
- }
-
- virtual bool MarkAsUsedForBind(GLuint id) OVERRIDE {
- // This has no meaning for shared resources.
- return true;
- }
-
- private:
- id_namespaces::IdNamespaces id_namespace_;
-};
-
-class ThreadSafeIdHandlerWrapper : public IdHandlerInterface {
- public:
- ThreadSafeIdHandlerWrapper(IdHandlerInterface* id_handler)
- : id_handler_(id_handler) {
- }
- virtual ~ThreadSafeIdHandlerWrapper() { }
-
- // Overridden from IdHandlerInterface.
- virtual void MakeIds(GLES2Implementation* gl_impl,
- GLuint id_offset,
- GLsizei n,
- GLuint* ids) OVERRIDE {
- base::AutoLock auto_lock(lock_);
- id_handler_->MakeIds(gl_impl, id_offset, n, ids);
- }
-
- // Overridden from IdHandlerInterface.
- virtual bool FreeIds(GLES2Implementation* gl_impl,
- GLsizei n,
- const GLuint* ids,
- DeleteFn delete_fn) OVERRIDE {
- base::AutoLock auto_lock(lock_);
- return id_handler_->FreeIds(gl_impl, n, ids, delete_fn);
- }
-
- // Overridden from IdHandlerInterface.
- virtual bool MarkAsUsedForBind(GLuint id) OVERRIDE {
- base::AutoLock auto_lock(lock_);
- return id_handler_->MarkAsUsedForBind(id);
- }
+ virtual void FreeContext(GLES2Implementation* gl_impl) OVERRIDE {}
private:
- scoped_ptr<IdHandlerInterface> id_handler_;
- base::Lock lock_;
+ base::Lock lock_;
+ GLuint last_id_;
};
ShareGroup::ShareGroup(bool bind_generates_resource)
@@ -186,21 +232,17 @@ ShareGroup::ShareGroup(bool bind_generates_resource)
if (bind_generates_resource) {
for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) {
if (i == id_namespaces::kProgramsAndShaders) {
- id_handlers_[i].reset(new ThreadSafeIdHandlerWrapper(
- new NonReusedIdHandler()));
+ id_handlers_[i].reset(new NonReusedIdHandler());
} else {
- id_handlers_[i].reset(new ThreadSafeIdHandlerWrapper(
- new IdHandler()));
+ id_handlers_[i].reset(new IdHandler());
}
}
} else {
for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) {
if (i == id_namespaces::kProgramsAndShaders) {
- id_handlers_[i].reset(new ThreadSafeIdHandlerWrapper(
- new NonReusedIdHandler()));
+ id_handlers_[i].reset(new NonReusedIdHandler());
} else {
- id_handlers_[i].reset(new ThreadSafeIdHandlerWrapper(
- new StrictIdHandler()));
+ id_handlers_[i].reset(new StrictIdHandler(i));
}
}
}
diff --git a/chromium/gpu/command_buffer/client/share_group.h b/chromium/gpu/command_buffer/client/share_group.h
index 68ea6a9895a..341dd586839 100644
--- a/chromium/gpu/command_buffer/client/share_group.h
+++ b/chromium/gpu/command_buffer/client/share_group.h
@@ -20,6 +20,24 @@ class ProgramInfoManager;
typedef void (GLES2Implementation::*DeleteFn)(GLsizei n, const GLuint* ids);
+class ShareGroupContextData {
+ public:
+ struct IdHandlerData {
+ IdHandlerData();
+ ~IdHandlerData();
+
+ std::vector<GLuint> freed_ids_;
+ uint32 flush_generation_;
+ };
+
+ IdHandlerData* id_handler_data(int namespace_id) {
+ return &id_handler_data_[namespace_id];
+ }
+
+ private:
+ IdHandlerData id_handler_data_[id_namespaces::kNumIdNamespaces];
+};
+
// Base class for IdHandlers
class IdHandlerInterface {
public:
@@ -38,6 +56,9 @@ class IdHandlerInterface {
// Marks an id as used for glBind functions. id = 0 does nothing.
virtual bool MarkAsUsedForBind(GLuint id) = 0;
+
+ // Called when a context in the share group is destructed.
+ virtual void FreeContext(GLES2Implementation* gl_impl) = 0;
};
// ShareGroup manages shared resources for contexts that are sharing resources.
@@ -60,6 +81,12 @@ class GLES2_IMPL_EXPORT ShareGroup
return program_info_manager_.get();
}
+ void FreeContext(GLES2Implementation* gl_impl) {
+ for (int i = 0; i < id_namespaces::kNumIdNamespaces; ++i) {
+ id_handlers_[i]->FreeContext(gl_impl);
+ }
+ }
+
private:
friend class gpu::RefCountedThreadSafe<ShareGroup>;
friend class gpu::gles2::GLES2ImplementationTest;
diff --git a/chromium/gpu/command_buffer/client/transfer_buffer.cc b/chromium/gpu/command_buffer/client/transfer_buffer.cc
index c4b84a14f32..c5ce3d549bd 100644
--- a/chromium/gpu/command_buffer/client/transfer_buffer.cc
+++ b/chromium/gpu/command_buffer/client/transfer_buffer.cc
@@ -6,14 +6,13 @@
#include "gpu/command_buffer/client/transfer_buffer.h"
+#include "base/bits.h"
+#include "base/debug/trace_event.h"
#include "base/logging.h"
#include "gpu/command_buffer/client/cmd_buffer_helper.h"
namespace gpu {
-AlignedRingBuffer::~AlignedRingBuffer() {
-}
-
TransferBuffer::TransferBuffer(
CommandBufferHelper* helper)
: helper_(helper),
@@ -53,11 +52,11 @@ bool TransferBuffer::Initialize(
void TransferBuffer::Free() {
if (HaveBuffer()) {
+ TRACE_EVENT0("gpu", "TransferBuffer::Free");
helper_->Finish();
helper_->command_buffer()->DestroyTransferBuffer(buffer_id_);
buffer_id_ = -1;
- buffer_.ptr = NULL;
- buffer_.size = 0;
+ buffer_ = NULL;
result_buffer_ = NULL;
result_shm_offset_ = 0;
ring_buffer_.reset();
@@ -66,6 +65,7 @@ void TransferBuffer::Free() {
}
bool TransferBuffer::HaveBuffer() const {
+ DCHECK(buffer_id_ == -1 || buffer_);
return buffer_id_ != -1;
}
@@ -84,19 +84,19 @@ void TransferBuffer::FreePendingToken(void* p, unsigned int token) {
void TransferBuffer::AllocateRingBuffer(unsigned int size) {
for (;size >= min_buffer_size_; size /= 2) {
int32 id = -1;
- gpu::Buffer buffer =
+ scoped_refptr<gpu::Buffer> buffer =
helper_->command_buffer()->CreateTransferBuffer(size, &id);
if (id != -1) {
+ DCHECK(buffer);
buffer_ = buffer;
- ring_buffer_.reset(new AlignedRingBuffer(
+ ring_buffer_.reset(new RingBuffer(
alignment_,
- id,
result_size_,
- buffer_.size - result_size_,
+ buffer_->size() - result_size_,
helper_,
- static_cast<char*>(buffer_.ptr) + result_size_));
+ static_cast<char*>(buffer_->memory()) + result_size_));
buffer_id_ = id;
- result_buffer_ = buffer_.ptr;
+ result_buffer_ = buffer_->memory();
result_shm_offset_ = 0;
return;
}
@@ -106,36 +106,8 @@ void TransferBuffer::AllocateRingBuffer(unsigned int size) {
usable_ = false;
}
-// Returns the integer i such as 2^i <= n < 2^(i+1)
-static int Log2Floor(uint32 n) {
- if (n == 0)
- return -1;
- int log = 0;
- uint32 value = n;
- for (int i = 4; i >= 0; --i) {
- int shift = (1 << i);
- uint32 x = value >> shift;
- if (x != 0) {
- value = x;
- log += shift;
- }
- }
- DCHECK_EQ(value, 1u);
- return log;
-}
-
-// Returns the integer i such as 2^(i-1) < n <= 2^i
-static int Log2Ceiling(uint32 n) {
- if (n == 0) {
- return -1;
- } else {
- // Log2Floor returns -1 for 0, so the following works correctly for n=1.
- return 1 + Log2Floor(n - 1);
- }
-}
-
static unsigned int ComputePOTSize(unsigned int dimension) {
- return (dimension == 0) ? 0 : 1 << Log2Ceiling(dimension);
+ return (dimension == 0) ? 0 : 1 << base::bits::Log2Ceiling(dimension);
}
void TransferBuffer::ReallocateRingBuffer(unsigned int size) {
@@ -145,7 +117,7 @@ void TransferBuffer::ReallocateRingBuffer(unsigned int size) {
needed_buffer_size = std::max(needed_buffer_size, default_buffer_size_);
needed_buffer_size = std::min(needed_buffer_size, max_buffer_size_);
- if (usable_ && (!HaveBuffer() || needed_buffer_size > buffer_.size)) {
+ if (usable_ && (!HaveBuffer() || needed_buffer_size > buffer_->size())) {
if (HaveBuffer()) {
Free();
}
diff --git a/chromium/gpu/command_buffer/client/transfer_buffer.h b/chromium/gpu/command_buffer/client/transfer_buffer.h
index 11173985819..348ad32b200 100644
--- a/chromium/gpu/command_buffer/client/transfer_buffer.h
+++ b/chromium/gpu/command_buffer/client/transfer_buffer.h
@@ -16,40 +16,6 @@ namespace gpu {
class CommandBufferHelper;
-// Wraps RingBufferWrapper to provide aligned allocations.
-class AlignedRingBuffer : public RingBufferWrapper {
- public:
- AlignedRingBuffer(
- unsigned int alignment,
- int32 shm_id,
- RingBuffer::Offset base_offset,
- unsigned int size,
- CommandBufferHelper* helper,
- void* base)
- : RingBufferWrapper(base_offset, size, helper, base),
- alignment_(alignment),
- shm_id_(shm_id) {
- }
- ~AlignedRingBuffer();
-
- // Hiding Alloc from RingBufferWrapper
- void* Alloc(unsigned int size) {
- return RingBufferWrapper::Alloc(RoundToAlignment(size));
- }
-
- int32 GetShmId() const {
- return shm_id_;
- }
-
- private:
- unsigned int RoundToAlignment(unsigned int size) {
- return (size + alignment_ - 1) & ~(alignment_ - 1);
- }
-
- unsigned int alignment_;
- int32 shm_id_;
-};
-
// Interface for managing the transfer buffer.
class GPU_EXPORT TransferBufferInterface {
public:
@@ -120,7 +86,7 @@ class GPU_EXPORT TransferBuffer : public TransferBufferInterface {
void AllocateRingBuffer(unsigned int size);
CommandBufferHelper* helper_;
- scoped_ptr<AlignedRingBuffer> ring_buffer_;
+ scoped_ptr<RingBuffer> ring_buffer_;
// size reserved for results
unsigned int result_size_;
@@ -144,7 +110,7 @@ class GPU_EXPORT TransferBuffer : public TransferBufferInterface {
unsigned int bytes_since_last_flush_;
// the current buffer.
- gpu::Buffer buffer_;
+ scoped_refptr<gpu::Buffer> buffer_;
// id of buffer. -1 = no buffer
int32 buffer_id_;
diff --git a/chromium/gpu/command_buffer/client/transfer_buffer_unittest.cc b/chromium/gpu/command_buffer/client/transfer_buffer_unittest.cc
index 39ce923f78c..9f3b51e4750 100644
--- a/chromium/gpu/command_buffer/client/transfer_buffer_unittest.cc
+++ b/chromium/gpu/command_buffer/client/transfer_buffer_unittest.cc
@@ -181,6 +181,17 @@ TEST_F(TransferBufferTest, TooLargeAllocation) {
transfer_buffer_->FreePendingToken(ptr, 1);
}
+TEST_F(TransferBufferTest, MemoryAlignmentAfterZeroAllocation) {
+ Initialize(32u);
+ void* ptr = transfer_buffer_->Alloc(0);
+ EXPECT_EQ((reinterpret_cast<uintptr_t>(ptr) & (kAlignment - 1)), 0u);
+ transfer_buffer_->FreePendingToken(ptr, -1);
+ // Check that the pointer is aligned on the following allocation.
+ ptr = transfer_buffer_->Alloc(4);
+ EXPECT_EQ((reinterpret_cast<uintptr_t>(ptr) & (kAlignment - 1)), 0u);
+ transfer_buffer_->FreePendingToken(ptr, 1);
+}
+
TEST_F(TransferBufferTest, Flush) {
Initialize(16u);
unsigned int size_allocated = 0;
@@ -214,9 +225,10 @@ class MockClientCommandBufferCanFail : public MockClientCommandBufferMockFlush {
virtual ~MockClientCommandBufferCanFail() {
}
- MOCK_METHOD2(CreateTransferBuffer, Buffer(size_t size, int32* id));
+ MOCK_METHOD2(CreateTransferBuffer,
+ scoped_refptr<Buffer>(size_t size, int32* id));
- Buffer RealCreateTransferBuffer(size_t size, int32* id) {
+ scoped_refptr<gpu::Buffer> RealCreateTransferBuffer(size_t size, int32* id) {
return MockCommandBufferBase::CreateTransferBuffer(size, id);
}
};
@@ -375,7 +387,8 @@ TEST_F(TransferBufferExpandContractTest, Contract) {
// Try to allocate again, fail first request
EXPECT_CALL(*command_buffer(),
CreateTransferBuffer(kStartTransferBufferSize, _))
- .WillOnce(DoAll(SetArgPointee<1>(-1), Return(Buffer())))
+ .WillOnce(
+ DoAll(SetArgPointee<1>(-1), Return(scoped_refptr<gpu::Buffer>())))
.RetiresOnSaturation();
EXPECT_CALL(*command_buffer(),
CreateTransferBuffer(kMinTransferBufferSize, _))
@@ -427,9 +440,12 @@ TEST_F(TransferBufferExpandContractTest, OutOfMemory) {
// Try to allocate again, fail both requests.
EXPECT_CALL(*command_buffer(), CreateTransferBuffer(_, _))
- .WillOnce(DoAll(SetArgPointee<1>(-1), Return(Buffer())))
- .WillOnce(DoAll(SetArgPointee<1>(-1), Return(Buffer())))
- .WillOnce(DoAll(SetArgPointee<1>(-1), Return(Buffer())))
+ .WillOnce(
+ DoAll(SetArgPointee<1>(-1), Return(scoped_refptr<gpu::Buffer>())))
+ .WillOnce(
+ DoAll(SetArgPointee<1>(-1), Return(scoped_refptr<gpu::Buffer>())))
+ .WillOnce(
+ DoAll(SetArgPointee<1>(-1), Return(scoped_refptr<gpu::Buffer>())))
.RetiresOnSaturation();
const size_t kSize1 = 512 - kStartingOffset;
diff --git a/chromium/gpu/command_buffer/client/vertex_array_object_manager.h b/chromium/gpu/command_buffer/client/vertex_array_object_manager.h
index d5b07ec0e88..34f630d95ae 100644
--- a/chromium/gpu/command_buffer/client/vertex_array_object_manager.h
+++ b/chromium/gpu/command_buffer/client/vertex_array_object_manager.h
@@ -6,10 +6,11 @@
#define GPU_COMMAND_BUFFER_CLIENT_VERTEX_ARRAY_OBJECT_MANAGER_H_
#include <GLES2/gl2.h>
+
#include "base/containers/hash_tables.h"
+#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "gles2_impl_export.h"
-#include "gpu/command_buffer/common/types.h"
namespace gpu {
namespace gles2 {
diff --git a/chromium/gpu/command_buffer/cmd_buffer_functions.txt b/chromium/gpu/command_buffer/cmd_buffer_functions.txt
index eeb47601658..05cbd123ae7 100644
--- a/chromium/gpu/command_buffer/cmd_buffer_functions.txt
+++ b/chromium/gpu/command_buffer/cmd_buffer_functions.txt
@@ -178,7 +178,7 @@ GL_APICALL void GL_APIENTRY glRegisterSharedIdsCHROMIUM (GLuint namespac
GL_APICALL GLboolean GL_APIENTRY glEnableFeatureCHROMIUM (const char* feature);
GL_APICALL void* GL_APIENTRY glMapBufferCHROMIUM (GLuint target, GLenum access);
GL_APICALL GLboolean GL_APIENTRY glUnmapBufferCHROMIUM (GLuint target);
-GL_APICALL void* GL_APIENTRY glMapImageCHROMIUM (GLuint image_id, GLenum access);
+GL_APICALL void* GL_APIENTRY glMapImageCHROMIUM (GLuint image_id);
GL_APICALL void GL_APIENTRY glUnmapImageCHROMIUM (GLuint image_id);
GL_APICALL void* GL_APIENTRY glMapBufferSubDataCHROMIUM (GLuint target, GLintptrNotNegative offset, GLsizeiptr size, GLenum access);
@@ -192,8 +192,7 @@ GL_APICALL void GL_APIENTRY glRateLimitOffscreenContextCHROMIUM (void);
GL_APICALL void GL_APIENTRY glGetMultipleIntegervCHROMIUM (const GLenum* pnames, GLuint count, GLint* results, GLsizeiptr size);
GL_APICALL void GL_APIENTRY glGetProgramInfoCHROMIUM (GLidProgram program, GLsizeiNotNegative bufsize, GLsizei* size, void* info);
GL_APICALL GLuint GL_APIENTRY glCreateStreamTextureCHROMIUM (GLuint texture);
-GL_APICALL void GL_APIENTRY glDestroyStreamTextureCHROMIUM (GLuint texture);
-GL_APICALL GLuint GL_APIENTRY glCreateImageCHROMIUM (GLsizei width, GLsizei height, GLenum internalformat);
+GL_APICALL GLuint GL_APIENTRY glCreateImageCHROMIUM (GLsizei width, GLsizei height, GLenum internalformat, GLenum usage);
GL_APICALL void GL_APIENTRY glDestroyImageCHROMIUM (GLuint image_id);
GL_APICALL void GL_APIENTRY glGetImageParameterivCHROMIUM (GLuint image_id, GLenum pname, GLint* params);
GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLidShader shader, GLsizeiNotNegative bufsize, GLsizeiOptional* length, char* source);
@@ -205,20 +204,24 @@ GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenumDrawMode
GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor);
GL_APICALL void GL_APIENTRY glGenMailboxCHROMIUM (GLbyte* mailbox);
GL_APICALL void GL_APIENTRY glProduceTextureCHROMIUM (GLenumTextureBindTarget target, const GLbyte* mailbox);
+GL_APICALL void GL_APIENTRY glProduceTextureDirectCHROMIUM (GLidBindTexture texture, GLenumTextureBindTarget target, const GLbyte* mailbox);
GL_APICALL void GL_APIENTRY glConsumeTextureCHROMIUM (GLenumTextureBindTarget target, const GLbyte* mailbox);
+GL_APICALL GLuint GL_APIENTRY glCreateAndConsumeTextureCHROMIUM (GLenumTextureBindTarget target, const GLbyte* mailbox);
GL_APICALL void GL_APIENTRY glBindUniformLocationCHROMIUM (GLidProgram program, GLint location, const char* name);
GL_APICALL void GL_APIENTRY glBindTexImage2DCHROMIUM (GLenumTextureBindTarget target, GLint imageId);
GL_APICALL void GL_APIENTRY glReleaseTexImage2DCHROMIUM (GLenumTextureBindTarget target, GLint imageId);
GL_APICALL void GL_APIENTRY glTraceBeginCHROMIUM (const char* name);
GL_APICALL void GL_APIENTRY glTraceEndCHROMIUM (void);
GL_APICALL void GL_APIENTRY glAsyncTexSubImage2DCHROMIUM (GLenumTextureTarget target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenumTextureFormat format, GLenumPixelType type, const void* data);
-GL_APICALL void GL_APIENTRY glAsyncTexImage2DCHROMIUM (GLenumTextureTarget target, GLint level, GLintTextureInternalFormat internalformat, GLsizei width, GLsizei height, GLintTextureBorder border, GLenumTextureFormat format, GLenumPixelType type, const void* pixels);
+GL_APICALL void GL_APIENTRY glAsyncTexImage2DCHROMIUM (GLenumTextureTarget target, GLint level, GLenumTextureInternalFormat internalformat, GLsizei width, GLsizei height, GLintTextureBorder border, GLenumTextureFormat format, GLenumPixelType type, const void* pixels);
GL_APICALL void GL_APIENTRY glWaitAsyncTexImage2DCHROMIUM (GLenumTextureTarget target);
+GL_APICALL void GL_APIENTRY glWaitAllAsyncTexImage2DCHROMIUM (void);
GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei count, const GLenum* attachments);
-GL_APICALL void GL_APIENTRY glLoseContextCHROMIUM (GLenum current, GLenum other);
+GL_APICALL void GL_APIENTRY glLoseContextCHROMIUM (GLenumResetStatus current, GLenumResetStatus other);
GL_APICALL GLuint GL_APIENTRY glInsertSyncPointCHROMIUM (void);
GL_APICALL void GL_APIENTRY glWaitSyncPointCHROMIUM (GLuint sync_point);
GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei count, const GLenum* bufs);
GL_APICALL void GL_APIENTRY glDiscardBackbufferCHROMIUM (void);
+GL_APICALL void GL_APIENTRY glScheduleOverlayPlaneCHROMIUM (GLint plane_z_order, GLenum plane_transform, GLuint overlay_texture_id, GLint bounds_x, GLint bounds_y, GLint bounds_width, GLint bounds_height, GLfloat uv_x, GLfloat uv_y, GLfloat uv_width, GLfloat uv_height);
diff --git a/chromium/gpu/command_buffer/command_buffer_untrusted.gyp b/chromium/gpu/command_buffer/command_buffer_nacl.gyp
index 0667fd859cf..aabd1c84a41 100644
--- a/chromium/gpu/command_buffer/command_buffer_untrusted.gyp
+++ b/chromium/gpu/command_buffer/command_buffer_nacl.gyp
@@ -14,19 +14,19 @@
['disable_nacl==0 and disable_nacl_untrusted==0', {
'targets': [
{
- 'target_name': 'gles2_utils_untrusted',
+ 'target_name': 'gles2_utils_nacl',
'type': 'none',
'variables': {
'gles2_utils_target': 1,
'nacl_untrusted_build': 1,
- 'nlib_target': 'libgles2_utils_untrusted.a',
+ 'nlib_target': 'libgles2_utils_nacl.a',
'build_glibc': 0,
'build_newlib': 0,
'build_irt': 1,
},
'dependencies': [
'../../native_client/tools.gyp:prep_toolchain',
- '../../base/base_untrusted.gyp:base_untrusted',
+ '../../base/base_nacl.gyp:base_nacl',
'../../third_party/khronos/khronos.gyp:khronos_headers',
],
},
diff --git a/chromium/gpu/command_buffer/common/BUILD.gn b/chromium/gpu/command_buffer/common/BUILD.gn
new file mode 100644
index 00000000000..43b19402bca
--- /dev/null
+++ b/chromium/gpu/command_buffer/common/BUILD.gn
@@ -0,0 +1,42 @@
+# Copyright (c) 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("common") {
+ sources = [
+ "bitfield_helpers.h",
+ "buffer.cc",
+ "buffer.h",
+ "capabilities.cc",
+ "capabilities.h",
+ "cmd_buffer_common.cc",
+ "cmd_buffer_common.h",
+ "command_buffer.h",
+ "constants.h",
+ "debug_marker_manager.cc",
+ "debug_marker_manager.h",
+ "gles2_cmd_format.cc",
+ "gles2_cmd_format.h",
+ "gles2_cmd_format.h",
+ "gles2_cmd_format_autogen.h",
+ "gles2_cmd_ids.h",
+ "gles2_cmd_ids_autogen.h",
+ "gles2_cmd_utils.cc",
+ "gles2_cmd_utils.h",
+ "gles2_utils_export.h",
+ "id_allocator.cc",
+ "id_allocator.h",
+ "mailbox.cc",
+ "mailbox.h",
+ "mailbox_holder.cc",
+ "mailbox_holder.h",
+ "thread_local.h",
+ "time.h",
+ ]
+
+ all_dependent_configs = [ "//third_party/khronos:khronos_headers" ]
+
+ deps = [
+ "//base",
+ ]
+}
diff --git a/chromium/gpu/command_buffer/common/buffer.cc b/chromium/gpu/command_buffer/common/buffer.cc
new file mode 100644
index 00000000000..3b3da4345d7
--- /dev/null
+++ b/chromium/gpu/command_buffer/common/buffer.cc
@@ -0,0 +1,42 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/common/buffer.h"
+
+#include "base/logging.h"
+
+#include "base/numerics/safe_math.h"
+
+namespace gpu {
+SharedMemoryBufferBacking::SharedMemoryBufferBacking(
+ scoped_ptr<base::SharedMemory> shared_memory,
+ size_t size)
+ : shared_memory_(shared_memory.Pass()), size_(size) {}
+
+SharedMemoryBufferBacking::~SharedMemoryBufferBacking() {}
+
+void* SharedMemoryBufferBacking::GetMemory() const {
+ return shared_memory_->memory();
+}
+
+size_t SharedMemoryBufferBacking::GetSize() const { return size_; }
+
+Buffer::Buffer(scoped_ptr<BufferBacking> backing)
+ : backing_(backing.Pass()),
+ memory_(backing_->GetMemory()),
+ size_(backing_->GetSize()) {
+ DCHECK(memory_) << "The memory must be mapped to create a Buffer";
+}
+
+Buffer::~Buffer() {}
+
+void* Buffer::GetDataAddress(uint32 data_offset, uint32 data_size) const {
+ base::CheckedNumeric<uint32> end = data_offset;
+ end += data_size;
+ if (!end.IsValid() || end.ValueOrDie() > static_cast<uint32>(size_))
+ return NULL;
+ return static_cast<uint8*>(memory_) + data_offset;
+}
+
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/common/buffer.h b/chromium/gpu/command_buffer/common/buffer.h
index a2721a83590..d8a835618fa 100644
--- a/chromium/gpu/command_buffer/common/buffer.h
+++ b/chromium/gpu/command_buffer/common/buffer.h
@@ -1,11 +1,15 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef GPU_COMMAND_BUFFER_COMMON_BUFFER_H_
#define GPU_COMMAND_BUFFER_COMMON_BUFFER_H_
-#include "gpu/command_buffer/common/types.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/shared_memory.h"
+#include "gpu/gpu_export.h"
namespace base {
class SharedMemory;
@@ -13,19 +17,64 @@ namespace base {
namespace gpu {
-// Address and size of a buffer and optionally a shared memory object. This
-// type has value semantics.
-struct Buffer {
- Buffer() : ptr(NULL), size(0), shared_memory(NULL) {
- }
+class GPU_EXPORT BufferBacking {
+ public:
+ virtual ~BufferBacking() {}
+ virtual void* GetMemory() const = 0;
+ virtual size_t GetSize() const = 0;
+};
+
+class GPU_EXPORT SharedMemoryBufferBacking : public BufferBacking {
+ public:
+ SharedMemoryBufferBacking(scoped_ptr<base::SharedMemory> shared_memory,
+ size_t size);
+ virtual ~SharedMemoryBufferBacking();
+ virtual void* GetMemory() const OVERRIDE;
+ virtual size_t GetSize() const OVERRIDE;
+ base::SharedMemory* shared_memory() { return shared_memory_.get(); }
+
+ private:
+ scoped_ptr<base::SharedMemory> shared_memory_;
+ size_t size_;
+ DISALLOW_COPY_AND_ASSIGN(SharedMemoryBufferBacking);
+};
+
+// Buffer owns a piece of shared-memory of a certain size.
+class GPU_EXPORT Buffer : public base::RefCountedThreadSafe<Buffer> {
+ public:
+ explicit Buffer(scoped_ptr<BufferBacking> backing);
+
+ BufferBacking* backing() const { return backing_.get(); }
+ void* memory() const { return memory_; }
+ size_t size() const { return size_; }
- void* ptr;
- size_t size;
+ // Returns NULL if the address overflows the memory.
+ void* GetDataAddress(uint32 data_offset, uint32 data_size) const;
- // Null if the buffer is not shared memory or if it is not exposed as such.
- base::SharedMemory* shared_memory;
+ private:
+ friend class base::RefCountedThreadSafe<Buffer>;
+ ~Buffer();
+
+ scoped_ptr<BufferBacking> backing_;
+ void* memory_;
+ size_t size_;
+
+ DISALLOW_COPY_AND_ASSIGN(Buffer);
};
+static inline scoped_ptr<BufferBacking> MakeBackingFromSharedMemory(
+ scoped_ptr<base::SharedMemory> shared_memory,
+ size_t size) {
+ return scoped_ptr<BufferBacking>(
+ new SharedMemoryBufferBacking(shared_memory.Pass(), size));
+}
+
+static inline scoped_refptr<Buffer> MakeBufferFromSharedMemory(
+ scoped_ptr<base::SharedMemory> shared_memory,
+ size_t size) {
+ return new Buffer(MakeBackingFromSharedMemory(shared_memory.Pass(), size));
+}
+
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_COMMON_BUFFER_H_
diff --git a/chromium/gpu/command_buffer/common/capabilities.cc b/chromium/gpu/command_buffer/common/capabilities.cc
index 9f35c8258d3..efc63ebef1b 100644
--- a/chromium/gpu/command_buffer/common/capabilities.cc
+++ b/chromium/gpu/command_buffer/common/capabilities.cc
@@ -17,6 +17,7 @@ Capabilities::Capabilities()
texture_usage(false),
texture_storage(false),
discard_framebuffer(false),
+ sync_query(false),
map_image(false) {}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/common/capabilities.h b/chromium/gpu/command_buffer/common/capabilities.h
index b6c34daeefa..ba5cf4b90d7 100644
--- a/chromium/gpu/command_buffer/common/capabilities.h
+++ b/chromium/gpu/command_buffer/common/capabilities.h
@@ -20,8 +20,7 @@ struct GPU_EXPORT Capabilities {
bool texture_usage;
bool texture_storage;
bool discard_framebuffer;
-
- // Capabilities below are not populated by GLES2Decoder.
+ bool sync_query;
bool map_image;
Capabilities();
diff --git a/chromium/gpu/command_buffer/common/cmd_buffer_common.cc b/chromium/gpu/command_buffer/common/cmd_buffer_common.cc
index 80a1e16dc3c..f337e86dbf7 100644
--- a/chromium/gpu/command_buffer/common/cmd_buffer_common.cc
+++ b/chromium/gpu/command_buffer/common/cmd_buffer_common.cc
@@ -31,6 +31,7 @@ const char* GetCommandName(CommandId command_id) {
} // namespace cmd
+#if !defined(NACL_WIN64)
// TODO(apatrick): this is a temporary optimization while skia is calling
// RendererGLContext::MakeCurrent prior to every GL call. It saves returning 6
// ints redundantly when only the error is needed for the CommandBufferProxy
@@ -38,6 +39,7 @@ const char* GetCommandName(CommandId command_id) {
error::Error CommandBuffer::GetLastError() {
return GetLastState().error;
}
+#endif
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/common/cmd_buffer_common.h b/chromium/gpu/command_buffer/common/cmd_buffer_common.h
index cf09378e00c..828731bfee1 100644
--- a/chromium/gpu/command_buffer/common/cmd_buffer_common.h
+++ b/chromium/gpu/command_buffer/common/cmd_buffer_common.h
@@ -8,10 +8,11 @@
#define GPU_COMMAND_BUFFER_COMMON_CMD_BUFFER_COMMON_H_
#include <stddef.h>
+#include <stdint.h>
#include "base/logging.h"
+#include "base/macros.h"
#include "gpu/command_buffer/common/bitfield_helpers.h"
-#include "gpu/command_buffer/common/types.h"
#include "gpu/gpu_export.h"
namespace gpu {
@@ -23,26 +24,30 @@ namespace cmd {
};
} // namespace cmd
+// Pack & unpack Command cmd_flags
+#define CMD_FLAG_SET_TRACE_LEVEL(level) ((level & 3) << 0)
+#define CMD_FLAG_GET_TRACE_LEVEL(cmd_flags) ((cmd_flags >> 0) & 3)
+
// Computes the number of command buffer entries needed for a certain size. In
// other words it rounds up to a multiple of entries.
-inline uint32 ComputeNumEntries(size_t size_in_bytes) {
- return static_cast<uint32>(
- (size_in_bytes + sizeof(uint32) - 1) / sizeof(uint32)); // NOLINT
+inline uint32_t ComputeNumEntries(size_t size_in_bytes) {
+ return static_cast<uint32_t>(
+ (size_in_bytes + sizeof(uint32_t) - 1) / sizeof(uint32_t)); // NOLINT
}
// Rounds up to a multiple of entries in bytes.
inline size_t RoundSizeToMultipleOfEntries(size_t size_in_bytes) {
- return ComputeNumEntries(size_in_bytes) * sizeof(uint32); // NOLINT
+ return ComputeNumEntries(size_in_bytes) * sizeof(uint32_t); // NOLINT
}
// Struct that defines the command header in the command buffer.
struct CommandHeader {
- Uint32 size:21;
- Uint32 command:11;
+ uint32_t size:21;
+ uint32_t command:11;
- GPU_EXPORT static const int32 kMaxSize = (1 << 21) - 1;
+ GPU_EXPORT static const int32_t kMaxSize = (1 << 21) - 1;
- void Init(uint32 _command, int32 _size) {
+ void Init(uint32_t _command, int32_t _size) {
DCHECK_LE(_size, kMaxSize);
command = _command;
size = _size;
@@ -58,7 +63,7 @@ struct CommandHeader {
// Sets the header by a size in bytes of the immediate data after the command.
template <typename T>
- void SetCmdBySize(uint32 size_of_data_in_bytes) {
+ void SetCmdBySize(uint32_t size_of_data_in_bytes) {
COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN);
Init(T::kCmdId,
ComputeNumEntries(sizeof(T) + size_of_data_in_bytes)); // NOLINT
@@ -66,7 +71,7 @@ struct CommandHeader {
// Sets the header by a size in bytes.
template <typename T>
- void SetCmdByTotalSize(uint32 size_in_bytes) {
+ void SetCmdByTotalSize(uint32_t size_in_bytes) {
COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN);
DCHECK_GE(size_in_bytes, sizeof(T)); // NOLINT
Init(T::kCmdId, ComputeNumEntries(size_in_bytes));
@@ -78,19 +83,19 @@ COMPILE_ASSERT(sizeof(CommandHeader) == 4, Sizeof_CommandHeader_is_not_4);
// Union that defines possible command buffer entries.
union CommandBufferEntry {
CommandHeader value_header;
- Uint32 value_uint32;
- Int32 value_int32;
+ uint32_t value_uint32;
+ int32_t value_int32;
float value_float;
};
-const size_t kCommandBufferEntrySize = 4;
+#define GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT 4
+const size_t kCommandBufferEntrySize = GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT;
COMPILE_ASSERT(sizeof(CommandBufferEntry) == kCommandBufferEntrySize,
Sizeof_CommandBufferEntry_is_not_4);
-// Make sure the compiler does not add extra padding to any of the command
-// structures.
-#pragma pack(push, 1)
+// Command buffer is GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT byte aligned.
+#pragma pack(push, GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT)
// Gets the address of memory just after a structure in a typesafe way. This is
// used for IMMEDIATE commands to get the address of the place to put the data.
@@ -119,7 +124,7 @@ void* NextCmdAddress(void* cmd) {
// cmd: Address of command.
// size_of_data_in_bytes: Size of the data for the command.
template <typename T>
-void* NextImmediateCmdAddress(void* cmd, uint32 size_of_data_in_bytes) {
+void* NextImmediateCmdAddress(void* cmd, uint32_t size_of_data_in_bytes) {
COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN);
return reinterpret_cast<char*>(cmd) + sizeof(T) + // NOLINT
RoundSizeToMultipleOfEntries(size_of_data_in_bytes);
@@ -131,7 +136,8 @@ void* NextImmediateCmdAddress(void* cmd, uint32 size_of_data_in_bytes) {
// cmd: Address of command.
// size_of_cmd_in_bytes: Size of the cmd and data.
template <typename T>
-void* NextImmediateCmdAddressTotalSize(void* cmd, uint32 total_size_in_bytes) {
+void* NextImmediateCmdAddressTotalSize(void* cmd,
+ uint32_t total_size_in_bytes) {
COMPILE_ASSERT(T::kArgFlags == cmd::kAtLeastN, Cmd_kArgFlags_not_kAtLeastN);
DCHECK_GE(total_size_in_bytes, sizeof(T)); // NOLINT
return reinterpret_cast<char*>(cmd) +
@@ -177,17 +183,18 @@ struct Noop {
typedef Noop ValueType;
static const CommandId kCmdId = kNoop;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- void SetHeader(uint32 skip_count) {
+ void SetHeader(uint32_t skip_count) {
DCHECK_GT(skip_count, 0u);
header.Init(kCmdId, skip_count);
}
- void Init(uint32 skip_count) {
+ void Init(uint32_t skip_count) {
SetHeader(skip_count);
}
- static void* Set(void* cmd, uint32 skip_count) {
+ static void* Set(void* cmd, uint32_t skip_count) {
static_cast<ValueType*>(cmd)->Init(skip_count);
return NextImmediateCmdAddress<ValueType>(
cmd, skip_count * sizeof(CommandBufferEntry)); // NOLINT
@@ -205,22 +212,23 @@ struct SetToken {
typedef SetToken ValueType;
static const CommandId kCmdId = kSetToken;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
void SetHeader() {
header.SetCmd<ValueType>();
}
- void Init(uint32 _token) {
+ void Init(uint32_t _token) {
SetHeader();
token = _token;
}
- static void* Set(void* cmd, uint32 token) {
+ static void* Set(void* cmd, uint32_t token) {
static_cast<ValueType*>(cmd)->Init(token);
return NextCmdAddress<ValueType>(cmd);
}
CommandHeader header;
- uint32 token;
+ uint32_t token;
};
COMPILE_ASSERT(sizeof(SetToken) == 8, Sizeof_SetToken_is_not_8);
@@ -245,24 +253,25 @@ struct SetBucketSize {
typedef SetBucketSize ValueType;
static const CommandId kCmdId = kSetBucketSize;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
void SetHeader() {
header.SetCmd<ValueType>();
}
- void Init(uint32 _bucket_id, uint32 _size) {
+ void Init(uint32_t _bucket_id, uint32_t _size) {
SetHeader();
bucket_id = _bucket_id;
size = _size;
}
- static void* Set(void* cmd, uint32 _bucket_id, uint32 _size) {
+ static void* Set(void* cmd, uint32_t _bucket_id, uint32_t _size) {
static_cast<ValueType*>(cmd)->Init(_bucket_id, _size);
return NextCmdAddress<ValueType>(cmd);
}
CommandHeader header;
- uint32 bucket_id;
- uint32 size;
+ uint32_t bucket_id;
+ uint32_t size;
};
COMPILE_ASSERT(sizeof(SetBucketSize) == 12, Sizeof_SetBucketSize_is_not_8);
@@ -280,16 +289,17 @@ struct SetBucketData {
typedef SetBucketData ValueType;
static const CommandId kCmdId = kSetBucketData;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
void SetHeader() {
header.SetCmd<ValueType>();
}
- void Init(uint32 _bucket_id,
- uint32 _offset,
- uint32 _size,
- uint32 _shared_memory_id,
- uint32 _shared_memory_offset) {
+ void Init(uint32_t _bucket_id,
+ uint32_t _offset,
+ uint32_t _size,
+ uint32_t _shared_memory_id,
+ uint32_t _shared_memory_offset) {
SetHeader();
bucket_id = _bucket_id;
offset = _offset;
@@ -298,11 +308,11 @@ struct SetBucketData {
shared_memory_offset = _shared_memory_offset;
}
static void* Set(void* cmd,
- uint32 _bucket_id,
- uint32 _offset,
- uint32 _size,
- uint32 _shared_memory_id,
- uint32 _shared_memory_offset) {
+ uint32_t _bucket_id,
+ uint32_t _offset,
+ uint32_t _size,
+ uint32_t _shared_memory_id,
+ uint32_t _shared_memory_offset) {
static_cast<ValueType*>(cmd)->Init(
_bucket_id,
_offset,
@@ -313,11 +323,11 @@ struct SetBucketData {
}
CommandHeader header;
- uint32 bucket_id;
- uint32 offset;
- uint32 size;
- uint32 shared_memory_id;
- uint32 shared_memory_offset;
+ uint32_t bucket_id;
+ uint32_t offset;
+ uint32_t size;
+ uint32_t shared_memory_id;
+ uint32_t shared_memory_offset;
};
COMPILE_ASSERT(sizeof(SetBucketData) == 24, Sizeof_SetBucketData_is_not_24);
@@ -341,23 +351,24 @@ struct SetBucketDataImmediate {
typedef SetBucketDataImmediate ValueType;
static const CommandId kCmdId = kSetBucketDataImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- void SetHeader(uint32 size) {
+ void SetHeader(uint32_t size) {
header.SetCmdBySize<ValueType>(size);
}
- void Init(uint32 _bucket_id,
- uint32 _offset,
- uint32 _size) {
+ void Init(uint32_t _bucket_id,
+ uint32_t _offset,
+ uint32_t _size) {
SetHeader(_size);
bucket_id = _bucket_id;
offset = _offset;
size = _size;
}
static void* Set(void* cmd,
- uint32 _bucket_id,
- uint32 _offset,
- uint32 _size) {
+ uint32_t _bucket_id,
+ uint32_t _offset,
+ uint32_t _size) {
static_cast<ValueType*>(cmd)->Init(
_bucket_id,
_offset,
@@ -366,9 +377,9 @@ struct SetBucketDataImmediate {
}
CommandHeader header;
- uint32 bucket_id;
- uint32 offset;
- uint32 size;
+ uint32_t bucket_id;
+ uint32_t offset;
+ uint32_t size;
};
COMPILE_ASSERT(sizeof(SetBucketDataImmediate) == 16,
@@ -396,19 +407,20 @@ struct GetBucketStart {
typedef GetBucketStart ValueType;
static const CommandId kCmdId = kGetBucketStart;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
void SetHeader() {
header.SetCmd<ValueType>();
}
- void Init(uint32 _bucket_id,
- uint32 _result_memory_id,
- uint32 _result_memory_offset,
- uint32 _data_memory_size,
- uint32 _data_memory_id,
- uint32 _data_memory_offset) {
+ void Init(uint32_t _bucket_id,
+ uint32_t _result_memory_id,
+ uint32_t _result_memory_offset,
+ uint32_t _data_memory_size,
+ uint32_t _data_memory_id,
+ uint32_t _data_memory_offset) {
SetHeader();
bucket_id = _bucket_id;
result_memory_id = _result_memory_id;
@@ -418,12 +430,12 @@ struct GetBucketStart {
data_memory_offset = _data_memory_offset;
}
static void* Set(void* cmd,
- uint32 _bucket_id,
- uint32 _result_memory_id,
- uint32 _result_memory_offset,
- uint32 _data_memory_size,
- uint32 _data_memory_id,
- uint32 _data_memory_offset) {
+ uint32_t _bucket_id,
+ uint32_t _result_memory_id,
+ uint32_t _result_memory_offset,
+ uint32_t _data_memory_size,
+ uint32_t _data_memory_id,
+ uint32_t _data_memory_offset) {
static_cast<ValueType*>(cmd)->Init(
_bucket_id,
_result_memory_id,
@@ -435,12 +447,12 @@ struct GetBucketStart {
}
CommandHeader header;
- uint32 bucket_id;
- uint32 result_memory_id;
- uint32 result_memory_offset;
- uint32 data_memory_size;
- uint32 data_memory_id;
- uint32 data_memory_offset;
+ uint32_t bucket_id;
+ uint32_t result_memory_id;
+ uint32_t result_memory_offset;
+ uint32_t data_memory_size;
+ uint32_t data_memory_id;
+ uint32_t data_memory_offset;
};
COMPILE_ASSERT(sizeof(GetBucketStart) == 28, Sizeof_GetBucketStart_is_not_28);
@@ -465,16 +477,17 @@ struct GetBucketData {
typedef GetBucketData ValueType;
static const CommandId kCmdId = kGetBucketData;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
void SetHeader() {
header.SetCmd<ValueType>();
}
- void Init(uint32 _bucket_id,
- uint32 _offset,
- uint32 _size,
- uint32 _shared_memory_id,
- uint32 _shared_memory_offset) {
+ void Init(uint32_t _bucket_id,
+ uint32_t _offset,
+ uint32_t _size,
+ uint32_t _shared_memory_id,
+ uint32_t _shared_memory_offset) {
SetHeader();
bucket_id = _bucket_id;
offset = _offset;
@@ -483,11 +496,11 @@ struct GetBucketData {
shared_memory_offset = _shared_memory_offset;
}
static void* Set(void* cmd,
- uint32 _bucket_id,
- uint32 _offset,
- uint32 _size,
- uint32 _shared_memory_id,
- uint32 _shared_memory_offset) {
+ uint32_t _bucket_id,
+ uint32_t _offset,
+ uint32_t _size,
+ uint32_t _shared_memory_id,
+ uint32_t _shared_memory_offset) {
static_cast<ValueType*>(cmd)->Init(
_bucket_id,
_offset,
@@ -498,11 +511,11 @@ struct GetBucketData {
}
CommandHeader header;
- uint32 bucket_id;
- uint32 offset;
- uint32 size;
- uint32 shared_memory_id;
- uint32 shared_memory_offset;
+ uint32_t bucket_id;
+ uint32_t offset;
+ uint32_t size;
+ uint32_t shared_memory_id;
+ uint32_t shared_memory_offset;
};
COMPILE_ASSERT(sizeof(GetBucketData) == 24, Sizeof_GetBucketData_is_not_20);
diff --git a/chromium/gpu/command_buffer/common/command_buffer.h b/chromium/gpu/command_buffer/common/command_buffer.h
index 394ccf3c4f7..61b91428f68 100644
--- a/chromium/gpu/command_buffer/common/command_buffer.h
+++ b/chromium/gpu/command_buffer/common/command_buffer.h
@@ -70,12 +70,18 @@ class GPU_EXPORT CommandBuffer {
virtual ~CommandBuffer() {
}
+ // Check if a value is between a start and end value, inclusive, allowing
+ // for wrapping if start > end.
+ static bool InRange(int32 start, int32 end, int32 value) {
+ if (start <= end)
+ return start <= value && value <= end;
+ else
+ return start <= value || value <= end;
+ }
+
// Initialize the command buffer with the given size.
virtual bool Initialize() = 0;
- // Returns the current status.
- virtual State GetState() = 0;
-
// Returns the last state without synchronizing with the service.
virtual State GetLastState() = 0;
@@ -92,40 +98,26 @@ class GPU_EXPORT CommandBuffer {
// subsequent Flushes on the same GpuChannel.
virtual void Flush(int32 put_offset) = 0;
- // The writer calls this to update its put offset. This function returns the
- // reader's most recent get offset. Does not return until all pending commands
- // have been executed.
- virtual State FlushSync(int32 put_offset, int32 last_known_get) = 0;
+ // The writer calls this to wait until the current token is within a
+ // specific range, inclusive. Can return early if an error is generated.
+ virtual void WaitForTokenInRange(int32 start, int32 end) = 0;
+
+ // The writer calls this to wait until the current get offset is within a
+ // specific range, inclusive. Can return early if an error is generated.
+ virtual void WaitForGetOffsetInRange(int32 start, int32 end) = 0;
// Sets the buffer commands are read from.
// Also resets the get and put offsets to 0.
virtual void SetGetBuffer(int32 transfer_buffer_id) = 0;
- // Sets the current get offset. This can be called from any thread.
- virtual void SetGetOffset(int32 get_offset) = 0;
-
// Create a transfer buffer of the given size. Returns its ID or -1 on
// error.
- virtual Buffer CreateTransferBuffer(size_t size, int32* id) = 0;
+ virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
+ int32* id) = 0;
// Destroy a transfer buffer. The ID must be positive.
virtual void DestroyTransferBuffer(int32 id) = 0;
- // Get the transfer buffer associated with an ID. Returns a null buffer for
- // ID 0.
- virtual Buffer GetTransferBuffer(int32 id) = 0;
-
- // Allows the reader to update the current token value.
- virtual void SetToken(int32 token) = 0;
-
- // Allows the reader to set the current parse error.
- virtual void SetParseError(error::Error) = 0;
-
- // Allows the reader to set the current context lost reason.
- // NOTE: if calling this in conjunction with SetParseError,
- // call this first.
- virtual void SetContextLostReason(error::ContextLostReason) = 0;
-
// The NaCl Win64 build only really needs the struct definitions above; having
// GetLastError declared would mean we'd have to also define it, and pull more
// of gpu in to the NaCl Win64 build.
diff --git a/chromium/gpu/command_buffer/common/command_buffer_mock.cc b/chromium/gpu/command_buffer/common/command_buffer_mock.cc
index 6ed2eee61b5..a64dc452c32 100644
--- a/chromium/gpu/command_buffer/common/command_buffer_mock.cc
+++ b/chromium/gpu/command_buffer/common/command_buffer_mock.cc
@@ -8,7 +8,7 @@ namespace gpu {
MockCommandBuffer::MockCommandBuffer() {
ON_CALL(*this, GetTransferBuffer(testing::_))
- .WillByDefault(testing::Return(Buffer()));
+ .WillByDefault(testing::Return(scoped_refptr<gpu::Buffer>()));
}
MockCommandBuffer::~MockCommandBuffer() {}
diff --git a/chromium/gpu/command_buffer/common/command_buffer_mock.h b/chromium/gpu/command_buffer/common/command_buffer_mock.h
index 0e78b7b8c32..1877470a091 100644
--- a/chromium/gpu/command_buffer/common/command_buffer_mock.h
+++ b/chromium/gpu/command_buffer/common/command_buffer_mock.h
@@ -5,7 +5,7 @@
#ifndef GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_MOCK_H_
#define GPU_COMMAND_BUFFER_COMMON_COMMAND_BUFFER_MOCK_H_
-#include "gpu/command_buffer/common/command_buffer.h"
+#include "gpu/command_buffer/service/command_buffer_service.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace base {
@@ -16,22 +16,23 @@ namespace gpu {
// An NPObject that implements a shared memory command buffer and a synchronous
// API to manage the put and get pointers.
-class MockCommandBuffer : public CommandBuffer {
+class MockCommandBuffer : public CommandBufferServiceBase {
public:
MockCommandBuffer();
virtual ~MockCommandBuffer();
MOCK_METHOD0(Initialize, bool());
- MOCK_METHOD0(GetState, State());
MOCK_METHOD0(GetLastState, State());
MOCK_METHOD0(GetLastToken, int32());
MOCK_METHOD1(Flush, void(int32 put_offset));
- MOCK_METHOD2(FlushSync, State(int32 put_offset, int32 last_known_get));
+ MOCK_METHOD2(WaitForTokenInRange, void(int32 start, int32 end));
+ MOCK_METHOD2(WaitForGetOffsetInRange, void(int32 start, int32 end));
MOCK_METHOD1(SetGetBuffer, void(int32 transfer_buffer_id));
MOCK_METHOD1(SetGetOffset, void(int32 get_offset));
- MOCK_METHOD2(CreateTransferBuffer, Buffer(size_t size, int32* id));
+ MOCK_METHOD2(CreateTransferBuffer,
+ scoped_refptr<gpu::Buffer>(size_t size, int32* id));
MOCK_METHOD1(DestroyTransferBuffer, void(int32 id));
- MOCK_METHOD1(GetTransferBuffer, Buffer(int32 id));
+ MOCK_METHOD1(GetTransferBuffer, scoped_refptr<gpu::Buffer>(int32 id));
MOCK_METHOD1(SetToken, void(int32 token));
MOCK_METHOD1(SetParseError, void(error::Error error));
MOCK_METHOD1(SetContextLostReason,
diff --git a/chromium/gpu/command_buffer/common/constants.h b/chromium/gpu/command_buffer/common/constants.h
index ab25987af9d..054708f4a60 100644
--- a/chromium/gpu/command_buffer/common/constants.h
+++ b/chromium/gpu/command_buffer/common/constants.h
@@ -5,11 +5,12 @@
#ifndef GPU_COMMAND_BUFFER_COMMON_CONSTANTS_H_
#define GPU_COMMAND_BUFFER_COMMON_CONSTANTS_H_
-#include "gpu/command_buffer/common/types.h"
+#include <stddef.h>
+#include <stdint.h>
namespace gpu {
-typedef int32 CommandBufferOffset;
+typedef int32_t CommandBufferOffset;
const CommandBufferOffset kInvalidCommandBufferOffset = -1;
// This enum must stay in sync with NPDeviceContext3DError.
@@ -39,16 +40,17 @@ namespace error {
kInnocent,
// It is unknown whether this context provoked the loss of context.
- kUnknown
+ kUnknown,
+ kContextLostReasonLast = kUnknown
};
}
// Invalid shared memory Id, returned by RegisterSharedMemory in case of
// failure.
-const int32 kInvalidSharedMemoryId = -1;
+const int32_t kInvalidSharedMemoryId = -1;
// Common Command Buffer shared memory transfer buffer ID.
-const int32 kCommandBufferSharedMemoryId = 4;
+const int32_t kCommandBufferSharedMemoryId = 4;
// The size to set for the program cache.
const size_t kDefaultMaxProgramCacheMemoryBytes = 6 * 1024 * 1024;
diff --git a/chromium/gpu/command_buffer/common/debug_marker_manager.cc b/chromium/gpu/command_buffer/common/debug_marker_manager.cc
index c6336f98f62..5ac37d08260 100644
--- a/chromium/gpu/command_buffer/common/debug_marker_manager.cc
+++ b/chromium/gpu/command_buffer/common/debug_marker_manager.cc
@@ -21,7 +21,7 @@ void DebugMarkerManager::Group::SetMarker(const std::string& marker) {
DebugMarkerManager::DebugMarkerManager() {
// Push root group.
- group_stack_.push(Group(std::string("")));
+ group_stack_.push(Group(std::string()));
}
DebugMarkerManager::~DebugMarkerManager() {
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_format.h b/chromium/gpu/command_buffer/common/gles2_cmd_format.h
index b2ab12e7063..e8051b46899 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_format.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_format.h
@@ -10,13 +10,15 @@
#include <KHR/khrplatform.h>
+#include <stdint.h>
#include <string.h>
-#include "base/safe_numerics.h"
+#include "base/atomicops.h"
+#include "base/logging.h"
+#include "base/macros.h"
#include "gpu/command_buffer/common/bitfield_helpers.h"
#include "gpu/command_buffer/common/cmd_buffer_common.h"
#include "gpu/command_buffer/common/gles2_cmd_ids.h"
-#include "gpu/command_buffer/common/types.h"
// GL types are forward declared to avoid including the GL headers. The problem
// is determining which GL headers to include from code that is common to the
@@ -43,7 +45,8 @@ typedef khronos_ssize_t GLsizeiptr;
namespace gpu {
namespace gles2 {
-#pragma pack(push, 1)
+// Command buffer is GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT byte aligned.
+#pragma pack(push, GPU_COMMAND_BUFFER_ENTRY_ALIGNMENT)
namespace id_namespaces {
@@ -82,19 +85,19 @@ struct SizedResult {
// Returns the total size in bytes of the SizedResult for a given number of
// results including the size field.
static size_t ComputeSize(size_t num_results) {
- return sizeof(T) * num_results + sizeof(uint32); // NOLINT
+ return sizeof(T) * num_results + sizeof(uint32_t); // NOLINT
}
// Returns the total size in bytes of the SizedResult for a given size of
// results.
static size_t ComputeSizeFromBytes(size_t size_of_result_in_bytes) {
- return size_of_result_in_bytes + sizeof(uint32); // NOLINT
+ return size_of_result_in_bytes + sizeof(uint32_t); // NOLINT
}
// Returns the maximum number of results for a given buffer size.
- static uint32 ComputeMaxResults(size_t size_of_buffer) {
- return (size_of_buffer >= sizeof(uint32)) ?
- ((size_of_buffer - sizeof(uint32)) / sizeof(T)) : 0; // NOLINT
+ static uint32_t ComputeMaxResults(size_t size_of_buffer) {
+ return (size_of_buffer >= sizeof(uint32_t)) ?
+ ((size_of_buffer - sizeof(uint32_t)) / sizeof(T)) : 0; // NOLINT
}
// Set the size for a given number of results.
@@ -103,7 +106,7 @@ struct SizedResult {
}
// Get the number of elements in the result
- int32 GetNumResults() const {
+ int32_t GetNumResults() const {
return size / sizeof(T); // NOLINT
}
@@ -112,31 +115,31 @@ struct SizedResult {
memcpy(dst, &data, size);
}
- uint32 size; // in bytes.
- int32 data; // this is just here to get an offset.
+ uint32_t size; // in bytes.
+ int32_t data; // this is just here to get an offset.
};
-COMPILE_ASSERT(sizeof(SizedResult<int8>) == 8, SizedResult_size_not_8);
-COMPILE_ASSERT(offsetof(SizedResult<int8>, size) == 0,
+COMPILE_ASSERT(sizeof(SizedResult<int8_t>) == 8, SizedResult_size_not_8);
+COMPILE_ASSERT(offsetof(SizedResult<int8_t>, size) == 0,
OffsetOf_SizedResult_size_not_0);
-COMPILE_ASSERT(offsetof(SizedResult<int8>, data) == 4,
+COMPILE_ASSERT(offsetof(SizedResult<int8_t>, data) == 4,
OffsetOf_SizedResult_data_not_4);
// The data for one attrib or uniform from GetProgramInfoCHROMIUM.
struct ProgramInput {
- uint32 type; // The type (GL_VEC3, GL_MAT3, GL_SAMPLER_2D, etc.
- int32 size; // The size (how big the array is for uniforms)
- uint32 location_offset; // offset from ProgramInfoHeader to 'size' locations
- // for uniforms, 1 for attribs.
- uint32 name_offset; // offset from ProgrmaInfoHeader to start of name.
- uint32 name_length; // length of the name.
+ uint32_t type; // The type (GL_VEC3, GL_MAT3, GL_SAMPLER_2D, etc.
+ int32_t size; // The size (how big the array is for uniforms)
+ uint32_t location_offset; // offset from ProgramInfoHeader to 'size'
+ // locations for uniforms, 1 for attribs.
+ uint32_t name_offset; // offset from ProgrmaInfoHeader to start of name.
+ uint32_t name_length; // length of the name.
};
// The format of the bucket filled out by GetProgramInfoCHROMIUM
struct ProgramInfoHeader {
- uint32 link_status;
- uint32 num_attribs;
- uint32 num_uniforms;
+ uint32_t link_status;
+ uint32_t num_attribs;
+ uint32_t num_uniforms;
// ProgramInput inputs[num_attribs + num_uniforms];
};
@@ -147,8 +150,27 @@ struct QuerySync {
result = 0;
}
- uint32 process_count;
- uint64 result;
+ base::subtle::Atomic32 process_count;
+ uint64_t result;
+};
+
+struct AsyncUploadSync {
+ void Reset() {
+ base::subtle::Release_Store(&async_upload_token, 0);
+ }
+
+ void SetAsyncUploadToken(uint32_t token) {
+ DCHECK_NE(token, 0u);
+ base::subtle::Release_Store(&async_upload_token, token);
+ }
+
+ bool HasAsyncUploadTokenPassed(uint32_t token) {
+ DCHECK_NE(token, 0u);
+ uint32_t current_token = base::subtle::Acquire_Load(&async_upload_token);
+ return (current_token - token < 0x80000000);
+ }
+
+ base::subtle::Atomic32 async_upload_token;
};
COMPILE_ASSERT(sizeof(ProgramInput) == 20, ProgramInput_size_not_20);
@@ -177,77 +199,11 @@ namespace cmds {
// These are hand written commands.
// TODO(gman): Attempt to make these auto-generated.
-
struct GetAttribLocation {
typedef GetAttribLocation ValueType;
static const CommandId kCmdId = kGetAttribLocation;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- typedef GLint Result;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLuint _program, uint32 _name_shm_id, uint32 _name_shm_offset,
- uint32 _location_shm_id, uint32 _location_shm_offset,
- uint32 _data_size) {
- SetHeader();
- program = _program;
- name_shm_id = _name_shm_id;
- name_shm_offset = _name_shm_offset;
- location_shm_id = _location_shm_id;
- location_shm_offset = _location_shm_offset;
- data_size = _data_size;
- }
-
- void* Set(
- void* cmd, GLuint _program, uint32 _name_shm_id, uint32 _name_shm_offset,
- uint32 _location_shm_id, uint32 _location_shm_offset,
- uint32 _data_size) {
- static_cast<ValueType*>(
- cmd)->Init(
- _program, _name_shm_id, _name_shm_offset, _location_shm_id,
- _location_shm_offset, _data_size);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- CommandHeader header;
- uint32 program;
- uint32 name_shm_id;
- uint32 name_shm_offset;
- uint32 location_shm_id;
- uint32 location_shm_offset;
- uint32 data_size;
-};
-
-COMPILE_ASSERT(sizeof(GetAttribLocation) == 28,
- Sizeof_GetAttribLocation_is_not_28);
-COMPILE_ASSERT(offsetof(GetAttribLocation, header) == 0,
- OffsetOf_GetAttribLocation_header_not_0);
-COMPILE_ASSERT(offsetof(GetAttribLocation, program) == 4,
- OffsetOf_GetAttribLocation_program_not_4);
-COMPILE_ASSERT(offsetof(GetAttribLocation, name_shm_id) == 8,
- OffsetOf_GetAttribLocation_name_shm_id_not_8);
-COMPILE_ASSERT(offsetof(GetAttribLocation, name_shm_offset) == 12,
- OffsetOf_GetAttribLocation_name_shm_offset_not_12);
-COMPILE_ASSERT(offsetof(GetAttribLocation, location_shm_id) == 16,
- OffsetOf_GetAttribLocation_location_shm_id_not_16);
-COMPILE_ASSERT(offsetof(GetAttribLocation, location_shm_offset) == 20,
- OffsetOf_GetAttribLocation_location_shm_offset_not_20);
-COMPILE_ASSERT(offsetof(GetAttribLocation, data_size) == 24,
- OffsetOf_GetAttribLocation_data_size_not_24);
-
-
-struct GetAttribLocationBucket {
- typedef GetAttribLocationBucket ValueType;
- static const CommandId kCmdId = kGetAttribLocationBucket;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef GLint Result;
@@ -286,88 +242,24 @@ struct GetAttribLocationBucket {
uint32 location_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetAttribLocationBucket) == 20,
- Sizeof_GetAttribLocationBucket_is_not_24);
-COMPILE_ASSERT(offsetof(GetAttribLocationBucket, header) == 0,
- OffsetOf_GetAttribLocationBucket_header_not_0);
-COMPILE_ASSERT(offsetof(GetAttribLocationBucket, program) == 4,
- OffsetOf_GetAttribLocationBucket_program_not_4);
-COMPILE_ASSERT(offsetof(GetAttribLocationBucket, name_bucket_id) == 8,
- OffsetOf_GetAttribLocationBucket_name_bucket_id_not_8);
-COMPILE_ASSERT(offsetof(GetAttribLocationBucket, location_shm_id) == 12,
- OffsetOf_GetAttribLocationBucket_location_shm_id_not_12);
-COMPILE_ASSERT(offsetof(GetAttribLocationBucket, location_shm_offset) == 16,
- OffsetOf_GetAttribLocationBucket_location_shm_offset_not_16);
+COMPILE_ASSERT(sizeof(GetAttribLocation) == 20,
+ Sizeof_GetAttribLocation_is_not_24);
+COMPILE_ASSERT(offsetof(GetAttribLocation, header) == 0,
+ OffsetOf_GetAttribLocation_header_not_0);
+COMPILE_ASSERT(offsetof(GetAttribLocation, program) == 4,
+ OffsetOf_GetAttribLocation_program_not_4);
+COMPILE_ASSERT(offsetof(GetAttribLocation, name_bucket_id) == 8,
+ OffsetOf_GetAttribLocation_name_bucket_id_not_8);
+COMPILE_ASSERT(offsetof(GetAttribLocation, location_shm_id) == 12,
+ OffsetOf_GetAttribLocation_location_shm_id_not_12);
+COMPILE_ASSERT(offsetof(GetAttribLocation, location_shm_offset) == 16,
+ OffsetOf_GetAttribLocation_location_shm_offset_not_16);
struct GetUniformLocation {
typedef GetUniformLocation ValueType;
static const CommandId kCmdId = kGetUniformLocation;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- typedef GLint Result;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLuint _program, uint32 _name_shm_id, uint32 _name_shm_offset,
- uint32 _location_shm_id, uint32 _location_shm_offset,
- uint32 _data_size) {
- SetHeader();
- program = _program;
- name_shm_id = _name_shm_id;
- name_shm_offset = _name_shm_offset;
- location_shm_id = _location_shm_id;
- location_shm_offset = _location_shm_offset;
- data_size = _data_size;
- }
-
- void* Set(
- void* cmd, GLuint _program, uint32 _name_shm_id, uint32 _name_shm_offset,
- uint32 _location_shm_id, uint32 _location_shm_offset,
- uint32 _data_size) {
- static_cast<ValueType*>(
- cmd)->Init(
- _program, _name_shm_id, _name_shm_offset, _location_shm_id,
- _location_shm_offset, _data_size);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- CommandHeader header;
- uint32 program;
- uint32 name_shm_id;
- uint32 name_shm_offset;
- uint32 location_shm_id;
- uint32 location_shm_offset;
- uint32 data_size;
-};
-
-COMPILE_ASSERT(sizeof(GetUniformLocation) == 28,
- Sizeof_GetUniformLocation_is_not_28);
-COMPILE_ASSERT(offsetof(GetUniformLocation, header) == 0,
- OffsetOf_GetUniformLocation_header_not_0);
-COMPILE_ASSERT(offsetof(GetUniformLocation, program) == 4,
- OffsetOf_GetUniformLocation_program_not_4);
-COMPILE_ASSERT(offsetof(GetUniformLocation, name_shm_id) == 8,
- OffsetOf_GetUniformLocation_name_shm_id_not_8);
-COMPILE_ASSERT(offsetof(GetUniformLocation, name_shm_offset) == 12,
- OffsetOf_GetUniformLocation_name_shm_offset_not_12);
-COMPILE_ASSERT(offsetof(GetUniformLocation, location_shm_id) == 16,
- OffsetOf_GetUniformLocation_location_shm_id_not_16);
-COMPILE_ASSERT(offsetof(GetUniformLocation, location_shm_offset) == 20,
- OffsetOf_GetUniformLocation_location_shm_offset_not_20);
-COMPILE_ASSERT(offsetof(GetUniformLocation, data_size) == 24,
- OffsetOf_GetUniformLocation_data_size_not_24);
-
-struct GetUniformLocationBucket {
- typedef GetUniformLocationBucket ValueType;
- static const CommandId kCmdId = kGetUniformLocationBucket;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef GLint Result;
@@ -406,23 +298,24 @@ struct GetUniformLocationBucket {
uint32 location_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetUniformLocationBucket) == 20,
- Sizeof_GetUniformLocationBucket_is_not_24);
-COMPILE_ASSERT(offsetof(GetUniformLocationBucket, header) == 0,
- OffsetOf_GetUniformLocationBucket_header_not_0);
-COMPILE_ASSERT(offsetof(GetUniformLocationBucket, program) == 4,
- OffsetOf_GetUniformLocationBucket_program_not_4);
-COMPILE_ASSERT(offsetof(GetUniformLocationBucket, name_bucket_id) == 8,
- OffsetOf_GetUniformLocationBucket_name_bucket_id_not_8);
-COMPILE_ASSERT(offsetof(GetUniformLocationBucket, location_shm_id) == 12,
- OffsetOf_GetUniformLocationBucket_location_shm_id_not_12);
-COMPILE_ASSERT(offsetof(GetUniformLocationBucket, location_shm_offset) == 16,
- OffsetOf_GetUniformLocationBucket_location_shm_offset_not_16);
+COMPILE_ASSERT(sizeof(GetUniformLocation) == 20,
+ Sizeof_GetUniformLocation_is_not_24);
+COMPILE_ASSERT(offsetof(GetUniformLocation, header) == 0,
+ OffsetOf_GetUniformLocation_header_not_0);
+COMPILE_ASSERT(offsetof(GetUniformLocation, program) == 4,
+ OffsetOf_GetUniformLocation_program_not_4);
+COMPILE_ASSERT(offsetof(GetUniformLocation, name_bucket_id) == 8,
+ OffsetOf_GetUniformLocation_name_bucket_id_not_8);
+COMPILE_ASSERT(offsetof(GetUniformLocation, location_shm_id) == 12,
+ OffsetOf_GetUniformLocation_location_shm_id_not_12);
+COMPILE_ASSERT(offsetof(GetUniformLocation, location_shm_offset) == 16,
+ OffsetOf_GetUniformLocation_location_shm_offset_not_16);
struct GenMailboxCHROMIUM {
typedef GenMailboxCHROMIUM ValueType;
static const CommandId kCmdId = kGenMailboxCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
CommandHeader header;
};
@@ -430,9 +323,61 @@ struct InsertSyncPointCHROMIUM {
typedef InsertSyncPointCHROMIUM ValueType;
static const CommandId kCmdId = kInsertSyncPointCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
CommandHeader header;
};
+struct CreateAndConsumeTextureCHROMIUMImmediate {
+ typedef CreateAndConsumeTextureCHROMIUMImmediate ValueType;
+ static const CommandId kCmdId = kCreateAndConsumeTextureCHROMIUMImmediate;
+ static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
+
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLbyte) * 64); // NOLINT
+ }
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
+ }
+
+ void SetHeader(uint32_t size_in_bytes) {
+ header.SetCmdByTotalSize<ValueType>(size_in_bytes);
+ }
+
+ void Init(GLenum _target, uint32_t _client_id, const GLbyte* _mailbox) {
+ SetHeader(ComputeSize());
+ target = _target;
+ client_id = _client_id;
+ memcpy(ImmediateDataAddress(this), _mailbox, ComputeDataSize());
+ }
+
+ void* Set(void* cmd,
+ GLenum _target,
+ uint32_t _client_id,
+ const GLbyte* _mailbox) {
+ static_cast<ValueType*>(cmd)->Init(_target, _client_id, _mailbox);
+ const uint32_t size = ComputeSize();
+ return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t target;
+ uint32_t client_id;
+};
+
+COMPILE_ASSERT(sizeof(CreateAndConsumeTextureCHROMIUMImmediate) == 12,
+ Sizeof_CreateAndConsumeTextureCHROMIUMImmediate_is_not_12);
+COMPILE_ASSERT(offsetof(CreateAndConsumeTextureCHROMIUMImmediate, header) == 0,
+ OffsetOf_CreateAndConsumeTextureCHROMIUMImmediate_header_not_0);
+COMPILE_ASSERT(offsetof(CreateAndConsumeTextureCHROMIUMImmediate, target) == 4,
+ OffsetOf_CreateAndConsumeTextureCHROMIUMImmediate_target_not_4);
+COMPILE_ASSERT(
+ offsetof(CreateAndConsumeTextureCHROMIUMImmediate, client_id) == 8,
+ OffsetOf_CreateAndConsumeTextureCHROMIUMImmediate_client_id_not_8);
+
+
#pragma pack(pop)
} // namespace cmd
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/chromium/gpu/command_buffer/common/gles2_cmd_format_autogen.h
index 248ad460001..35b7c8b58f8 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_format_autogen.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_AUTOGEN_H_
@@ -13,14 +15,13 @@ struct ActiveTexture {
typedef ActiveTexture ValueType;
static const CommandId kCmdId = kActiveTexture;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _texture) {
SetHeader();
@@ -33,11 +34,10 @@ struct ActiveTexture {
}
gpu::CommandHeader header;
- uint32 texture;
+ uint32_t texture;
};
-COMPILE_ASSERT(sizeof(ActiveTexture) == 8,
- Sizeof_ActiveTexture_is_not_8);
+COMPILE_ASSERT(sizeof(ActiveTexture) == 8, Sizeof_ActiveTexture_is_not_8);
COMPILE_ASSERT(offsetof(ActiveTexture, header) == 0,
OffsetOf_ActiveTexture_header_not_0);
COMPILE_ASSERT(offsetof(ActiveTexture, texture) == 4,
@@ -47,14 +47,13 @@ struct AttachShader {
typedef AttachShader ValueType;
static const CommandId kCmdId = kAttachShader;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _program, GLuint _shader) {
SetHeader();
@@ -68,12 +67,11 @@ struct AttachShader {
}
gpu::CommandHeader header;
- uint32 program;
- uint32 shader;
+ uint32_t program;
+ uint32_t shader;
};
-COMPILE_ASSERT(sizeof(AttachShader) == 12,
- Sizeof_AttachShader_is_not_12);
+COMPILE_ASSERT(sizeof(AttachShader) == 12, Sizeof_AttachShader_is_not_12);
COMPILE_ASSERT(offsetof(AttachShader, header) == 0,
OffsetOf_AttachShader_header_not_0);
COMPILE_ASSERT(offsetof(AttachShader, program) == 4,
@@ -81,92 +79,37 @@ COMPILE_ASSERT(offsetof(AttachShader, program) == 4,
COMPILE_ASSERT(offsetof(AttachShader, shader) == 8,
OffsetOf_AttachShader_shader_not_8);
-struct BindAttribLocation {
- typedef BindAttribLocation ValueType;
- static const CommandId kCmdId = kBindAttribLocation;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLuint _program, GLuint _index, uint32 _name_shm_id,
- uint32 _name_shm_offset, uint32 _data_size) {
- SetHeader();
- program = _program;
- index = _index;
- name_shm_id = _name_shm_id;
- name_shm_offset = _name_shm_offset;
- data_size = _data_size;
- }
-
- void* Set(
- void* cmd, GLuint _program, GLuint _index, uint32 _name_shm_id,
- uint32 _name_shm_offset, uint32 _data_size) {
- static_cast<ValueType*>(
- cmd)->Init(
- _program, _index, _name_shm_id, _name_shm_offset, _data_size);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 program;
- uint32 index;
- uint32 name_shm_id;
- uint32 name_shm_offset;
- uint32 data_size;
-};
-
-COMPILE_ASSERT(sizeof(BindAttribLocation) == 24,
- Sizeof_BindAttribLocation_is_not_24);
-COMPILE_ASSERT(offsetof(BindAttribLocation, header) == 0,
- OffsetOf_BindAttribLocation_header_not_0);
-COMPILE_ASSERT(offsetof(BindAttribLocation, program) == 4,
- OffsetOf_BindAttribLocation_program_not_4);
-COMPILE_ASSERT(offsetof(BindAttribLocation, index) == 8,
- OffsetOf_BindAttribLocation_index_not_8);
-COMPILE_ASSERT(offsetof(BindAttribLocation, name_shm_id) == 12,
- OffsetOf_BindAttribLocation_name_shm_id_not_12);
-COMPILE_ASSERT(offsetof(BindAttribLocation, name_shm_offset) == 16,
- OffsetOf_BindAttribLocation_name_shm_offset_not_16);
-COMPILE_ASSERT(offsetof(BindAttribLocation, data_size) == 20,
- OffsetOf_BindAttribLocation_data_size_not_20);
-
struct BindAttribLocationBucket {
typedef BindAttribLocationBucket ValueType;
static const CommandId kCmdId = kBindAttribLocationBucket;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _program, GLuint _index, uint32 _name_bucket_id) {
+ void Init(GLuint _program, GLuint _index, uint32_t _name_bucket_id) {
SetHeader();
program = _program;
index = _index;
name_bucket_id = _name_bucket_id;
}
- void* Set(
- void* cmd, GLuint _program, GLuint _index, uint32 _name_bucket_id) {
+ void* Set(void* cmd,
+ GLuint _program,
+ GLuint _index,
+ uint32_t _name_bucket_id) {
static_cast<ValueType*>(cmd)->Init(_program, _index, _name_bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- uint32 index;
- uint32 name_bucket_id;
+ uint32_t program;
+ uint32_t index;
+ uint32_t name_bucket_id;
};
COMPILE_ASSERT(sizeof(BindAttribLocationBucket) == 16,
@@ -184,14 +127,13 @@ struct BindBuffer {
typedef BindBuffer ValueType;
static const CommandId kCmdId = kBindBuffer;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLuint _buffer) {
SetHeader();
@@ -205,12 +147,11 @@ struct BindBuffer {
}
gpu::CommandHeader header;
- uint32 target;
- uint32 buffer;
+ uint32_t target;
+ uint32_t buffer;
};
-COMPILE_ASSERT(sizeof(BindBuffer) == 12,
- Sizeof_BindBuffer_is_not_12);
+COMPILE_ASSERT(sizeof(BindBuffer) == 12, Sizeof_BindBuffer_is_not_12);
COMPILE_ASSERT(offsetof(BindBuffer, header) == 0,
OffsetOf_BindBuffer_header_not_0);
COMPILE_ASSERT(offsetof(BindBuffer, target) == 4,
@@ -222,14 +163,13 @@ struct BindFramebuffer {
typedef BindFramebuffer ValueType;
static const CommandId kCmdId = kBindFramebuffer;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLuint _framebuffer) {
SetHeader();
@@ -243,12 +183,11 @@ struct BindFramebuffer {
}
gpu::CommandHeader header;
- uint32 target;
- uint32 framebuffer;
+ uint32_t target;
+ uint32_t framebuffer;
};
-COMPILE_ASSERT(sizeof(BindFramebuffer) == 12,
- Sizeof_BindFramebuffer_is_not_12);
+COMPILE_ASSERT(sizeof(BindFramebuffer) == 12, Sizeof_BindFramebuffer_is_not_12);
COMPILE_ASSERT(offsetof(BindFramebuffer, header) == 0,
OffsetOf_BindFramebuffer_header_not_0);
COMPILE_ASSERT(offsetof(BindFramebuffer, target) == 4,
@@ -260,14 +199,13 @@ struct BindRenderbuffer {
typedef BindRenderbuffer ValueType;
static const CommandId kCmdId = kBindRenderbuffer;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLuint _renderbuffer) {
SetHeader();
@@ -281,8 +219,8 @@ struct BindRenderbuffer {
}
gpu::CommandHeader header;
- uint32 target;
- uint32 renderbuffer;
+ uint32_t target;
+ uint32_t renderbuffer;
};
COMPILE_ASSERT(sizeof(BindRenderbuffer) == 12,
@@ -298,14 +236,13 @@ struct BindTexture {
typedef BindTexture ValueType;
static const CommandId kCmdId = kBindTexture;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLuint _texture) {
SetHeader();
@@ -319,12 +256,11 @@ struct BindTexture {
}
gpu::CommandHeader header;
- uint32 target;
- uint32 texture;
+ uint32_t target;
+ uint32_t texture;
};
-COMPILE_ASSERT(sizeof(BindTexture) == 12,
- Sizeof_BindTexture_is_not_12);
+COMPILE_ASSERT(sizeof(BindTexture) == 12, Sizeof_BindTexture_is_not_12);
COMPILE_ASSERT(offsetof(BindTexture, header) == 0,
OffsetOf_BindTexture_header_not_0);
COMPILE_ASSERT(offsetof(BindTexture, target) == 4,
@@ -336,14 +272,13 @@ struct BlendColor {
typedef BlendColor ValueType;
static const CommandId kCmdId = kBlendColor;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLclampf _red, GLclampf _green, GLclampf _blue, GLclampf _alpha) {
SetHeader();
@@ -353,9 +288,11 @@ struct BlendColor {
alpha = _alpha;
}
- void* Set(
- void* cmd, GLclampf _red, GLclampf _green, GLclampf _blue,
- GLclampf _alpha) {
+ void* Set(void* cmd,
+ GLclampf _red,
+ GLclampf _green,
+ GLclampf _blue,
+ GLclampf _alpha) {
static_cast<ValueType*>(cmd)->Init(_red, _green, _blue, _alpha);
return NextCmdAddress<ValueType>(cmd);
}
@@ -367,12 +304,10 @@ struct BlendColor {
float alpha;
};
-COMPILE_ASSERT(sizeof(BlendColor) == 20,
- Sizeof_BlendColor_is_not_20);
+COMPILE_ASSERT(sizeof(BlendColor) == 20, Sizeof_BlendColor_is_not_20);
COMPILE_ASSERT(offsetof(BlendColor, header) == 0,
OffsetOf_BlendColor_header_not_0);
-COMPILE_ASSERT(offsetof(BlendColor, red) == 4,
- OffsetOf_BlendColor_red_not_4);
+COMPILE_ASSERT(offsetof(BlendColor, red) == 4, OffsetOf_BlendColor_red_not_4);
COMPILE_ASSERT(offsetof(BlendColor, green) == 8,
OffsetOf_BlendColor_green_not_8);
COMPILE_ASSERT(offsetof(BlendColor, blue) == 12,
@@ -384,14 +319,13 @@ struct BlendEquation {
typedef BlendEquation ValueType;
static const CommandId kCmdId = kBlendEquation;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _mode) {
SetHeader();
@@ -404,11 +338,10 @@ struct BlendEquation {
}
gpu::CommandHeader header;
- uint32 mode;
+ uint32_t mode;
};
-COMPILE_ASSERT(sizeof(BlendEquation) == 8,
- Sizeof_BlendEquation_is_not_8);
+COMPILE_ASSERT(sizeof(BlendEquation) == 8, Sizeof_BlendEquation_is_not_8);
COMPILE_ASSERT(offsetof(BlendEquation, header) == 0,
OffsetOf_BlendEquation_header_not_0);
COMPILE_ASSERT(offsetof(BlendEquation, mode) == 4,
@@ -418,14 +351,13 @@ struct BlendEquationSeparate {
typedef BlendEquationSeparate ValueType;
static const CommandId kCmdId = kBlendEquationSeparate;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _modeRGB, GLenum _modeAlpha) {
SetHeader();
@@ -439,8 +371,8 @@ struct BlendEquationSeparate {
}
gpu::CommandHeader header;
- uint32 modeRGB;
- uint32 modeAlpha;
+ uint32_t modeRGB;
+ uint32_t modeAlpha;
};
COMPILE_ASSERT(sizeof(BlendEquationSeparate) == 12,
@@ -456,14 +388,13 @@ struct BlendFunc {
typedef BlendFunc ValueType;
static const CommandId kCmdId = kBlendFunc;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _sfactor, GLenum _dfactor) {
SetHeader();
@@ -477,12 +408,11 @@ struct BlendFunc {
}
gpu::CommandHeader header;
- uint32 sfactor;
- uint32 dfactor;
+ uint32_t sfactor;
+ uint32_t dfactor;
};
-COMPILE_ASSERT(sizeof(BlendFunc) == 12,
- Sizeof_BlendFunc_is_not_12);
+COMPILE_ASSERT(sizeof(BlendFunc) == 12, Sizeof_BlendFunc_is_not_12);
COMPILE_ASSERT(offsetof(BlendFunc, header) == 0,
OffsetOf_BlendFunc_header_not_0);
COMPILE_ASSERT(offsetof(BlendFunc, sfactor) == 4,
@@ -494,17 +424,18 @@ struct BlendFuncSeparate {
typedef BlendFuncSeparate ValueType;
static const CommandId kCmdId = kBlendFuncSeparate;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _srcRGB, GLenum _dstRGB, GLenum _srcAlpha, GLenum _dstAlpha) {
+ void Init(GLenum _srcRGB,
+ GLenum _dstRGB,
+ GLenum _srcAlpha,
+ GLenum _dstAlpha) {
SetHeader();
srcRGB = _srcRGB;
dstRGB = _dstRGB;
@@ -512,18 +443,20 @@ struct BlendFuncSeparate {
dstAlpha = _dstAlpha;
}
- void* Set(
- void* cmd, GLenum _srcRGB, GLenum _dstRGB, GLenum _srcAlpha,
- GLenum _dstAlpha) {
+ void* Set(void* cmd,
+ GLenum _srcRGB,
+ GLenum _dstRGB,
+ GLenum _srcAlpha,
+ GLenum _dstAlpha) {
static_cast<ValueType*>(cmd)->Init(_srcRGB, _dstRGB, _srcAlpha, _dstAlpha);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 srcRGB;
- uint32 dstRGB;
- uint32 srcAlpha;
- uint32 dstAlpha;
+ uint32_t srcRGB;
+ uint32_t dstRGB;
+ uint32_t srcAlpha;
+ uint32_t dstAlpha;
};
COMPILE_ASSERT(sizeof(BlendFuncSeparate) == 20,
@@ -543,18 +476,19 @@ struct BufferData {
typedef BufferData ValueType;
static const CommandId kCmdId = kBufferData;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLsizeiptr _size, uint32 _data_shm_id,
- uint32 _data_shm_offset, GLenum _usage) {
+ void Init(GLenum _target,
+ GLsizeiptr _size,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset,
+ GLenum _usage) {
SetHeader();
target = _target;
size = _size;
@@ -563,30 +497,31 @@ struct BufferData {
usage = _usage;
}
- void* Set(
- void* cmd, GLenum _target, GLsizeiptr _size, uint32 _data_shm_id,
- uint32 _data_shm_offset, GLenum _usage) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _size, _data_shm_id, _data_shm_offset, _usage);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLsizeiptr _size,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset,
+ GLenum _usage) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _size, _data_shm_id, _data_shm_offset, _usage);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 size;
- uint32 data_shm_id;
- uint32 data_shm_offset;
- uint32 usage;
+ uint32_t target;
+ int32_t size;
+ uint32_t data_shm_id;
+ uint32_t data_shm_offset;
+ uint32_t usage;
};
-COMPILE_ASSERT(sizeof(BufferData) == 24,
- Sizeof_BufferData_is_not_24);
+COMPILE_ASSERT(sizeof(BufferData) == 24, Sizeof_BufferData_is_not_24);
COMPILE_ASSERT(offsetof(BufferData, header) == 0,
OffsetOf_BufferData_header_not_0);
COMPILE_ASSERT(offsetof(BufferData, target) == 4,
OffsetOf_BufferData_target_not_4);
-COMPILE_ASSERT(offsetof(BufferData, size) == 8,
- OffsetOf_BufferData_size_not_8);
+COMPILE_ASSERT(offsetof(BufferData, size) == 8, OffsetOf_BufferData_size_not_8);
COMPILE_ASSERT(offsetof(BufferData, data_shm_id) == 12,
OffsetOf_BufferData_data_shm_id_not_12);
COMPILE_ASSERT(offsetof(BufferData, data_shm_offset) == 16,
@@ -598,18 +533,19 @@ struct BufferSubData {
typedef BufferSubData ValueType;
static const CommandId kCmdId = kBufferSubData;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLintptr _offset, GLsizeiptr _size, uint32 _data_shm_id,
- uint32 _data_shm_offset) {
+ void Init(GLenum _target,
+ GLintptr _offset,
+ GLsizeiptr _size,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset) {
SetHeader();
target = _target;
offset = _offset;
@@ -618,24 +554,26 @@ struct BufferSubData {
data_shm_offset = _data_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLintptr _offset, GLsizeiptr _size,
- uint32 _data_shm_id, uint32 _data_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _offset, _size, _data_shm_id, _data_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLintptr _offset,
+ GLsizeiptr _size,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _offset, _size, _data_shm_id, _data_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 offset;
- int32 size;
- uint32 data_shm_id;
- uint32 data_shm_offset;
+ uint32_t target;
+ int32_t offset;
+ int32_t size;
+ uint32_t data_shm_id;
+ uint32_t data_shm_offset;
};
-COMPILE_ASSERT(sizeof(BufferSubData) == 24,
- Sizeof_BufferSubData_is_not_24);
+COMPILE_ASSERT(sizeof(BufferSubData) == 24, Sizeof_BufferSubData_is_not_24);
COMPILE_ASSERT(offsetof(BufferSubData, header) == 0,
OffsetOf_BufferSubData_header_not_0);
COMPILE_ASSERT(offsetof(BufferSubData, target) == 4,
@@ -653,36 +591,38 @@ struct CheckFramebufferStatus {
typedef CheckFramebufferStatus ValueType;
static const CommandId kCmdId = kCheckFramebufferStatus;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef GLenum Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLenum _target, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLenum _target,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
target = _target;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t target;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
COMPILE_ASSERT(sizeof(CheckFramebufferStatus) == 16,
@@ -700,14 +640,13 @@ struct Clear {
typedef Clear ValueType;
static const CommandId kCmdId = kClear;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLbitfield _mask) {
SetHeader();
@@ -720,28 +659,24 @@ struct Clear {
}
gpu::CommandHeader header;
- uint32 mask;
+ uint32_t mask;
};
-COMPILE_ASSERT(sizeof(Clear) == 8,
- Sizeof_Clear_is_not_8);
-COMPILE_ASSERT(offsetof(Clear, header) == 0,
- OffsetOf_Clear_header_not_0);
-COMPILE_ASSERT(offsetof(Clear, mask) == 4,
- OffsetOf_Clear_mask_not_4);
+COMPILE_ASSERT(sizeof(Clear) == 8, Sizeof_Clear_is_not_8);
+COMPILE_ASSERT(offsetof(Clear, header) == 0, OffsetOf_Clear_header_not_0);
+COMPILE_ASSERT(offsetof(Clear, mask) == 4, OffsetOf_Clear_mask_not_4);
struct ClearColor {
typedef ClearColor ValueType;
static const CommandId kCmdId = kClearColor;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLclampf _red, GLclampf _green, GLclampf _blue, GLclampf _alpha) {
SetHeader();
@@ -751,9 +686,11 @@ struct ClearColor {
alpha = _alpha;
}
- void* Set(
- void* cmd, GLclampf _red, GLclampf _green, GLclampf _blue,
- GLclampf _alpha) {
+ void* Set(void* cmd,
+ GLclampf _red,
+ GLclampf _green,
+ GLclampf _blue,
+ GLclampf _alpha) {
static_cast<ValueType*>(cmd)->Init(_red, _green, _blue, _alpha);
return NextCmdAddress<ValueType>(cmd);
}
@@ -765,12 +702,10 @@ struct ClearColor {
float alpha;
};
-COMPILE_ASSERT(sizeof(ClearColor) == 20,
- Sizeof_ClearColor_is_not_20);
+COMPILE_ASSERT(sizeof(ClearColor) == 20, Sizeof_ClearColor_is_not_20);
COMPILE_ASSERT(offsetof(ClearColor, header) == 0,
OffsetOf_ClearColor_header_not_0);
-COMPILE_ASSERT(offsetof(ClearColor, red) == 4,
- OffsetOf_ClearColor_red_not_4);
+COMPILE_ASSERT(offsetof(ClearColor, red) == 4, OffsetOf_ClearColor_red_not_4);
COMPILE_ASSERT(offsetof(ClearColor, green) == 8,
OffsetOf_ClearColor_green_not_8);
COMPILE_ASSERT(offsetof(ClearColor, blue) == 12,
@@ -782,14 +717,13 @@ struct ClearDepthf {
typedef ClearDepthf ValueType;
static const CommandId kCmdId = kClearDepthf;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLclampf _depth) {
SetHeader();
@@ -805,8 +739,7 @@ struct ClearDepthf {
float depth;
};
-COMPILE_ASSERT(sizeof(ClearDepthf) == 8,
- Sizeof_ClearDepthf_is_not_8);
+COMPILE_ASSERT(sizeof(ClearDepthf) == 8, Sizeof_ClearDepthf_is_not_8);
COMPILE_ASSERT(offsetof(ClearDepthf, header) == 0,
OffsetOf_ClearDepthf_header_not_0);
COMPILE_ASSERT(offsetof(ClearDepthf, depth) == 4,
@@ -816,14 +749,13 @@ struct ClearStencil {
typedef ClearStencil ValueType;
static const CommandId kCmdId = kClearStencil;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _s) {
SetHeader();
@@ -836,31 +768,30 @@ struct ClearStencil {
}
gpu::CommandHeader header;
- int32 s;
+ int32_t s;
};
-COMPILE_ASSERT(sizeof(ClearStencil) == 8,
- Sizeof_ClearStencil_is_not_8);
+COMPILE_ASSERT(sizeof(ClearStencil) == 8, Sizeof_ClearStencil_is_not_8);
COMPILE_ASSERT(offsetof(ClearStencil, header) == 0,
OffsetOf_ClearStencil_header_not_0);
-COMPILE_ASSERT(offsetof(ClearStencil, s) == 4,
- OffsetOf_ClearStencil_s_not_4);
+COMPILE_ASSERT(offsetof(ClearStencil, s) == 4, OffsetOf_ClearStencil_s_not_4);
struct ColorMask {
typedef ColorMask ValueType;
static const CommandId kCmdId = kColorMask;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLboolean _red, GLboolean _green, GLboolean _blue, GLboolean _alpha) {
+ void Init(GLboolean _red,
+ GLboolean _green,
+ GLboolean _blue,
+ GLboolean _alpha) {
SetHeader();
red = _red;
green = _green;
@@ -868,30 +799,28 @@ struct ColorMask {
alpha = _alpha;
}
- void* Set(
- void* cmd, GLboolean _red, GLboolean _green, GLboolean _blue,
- GLboolean _alpha) {
+ void* Set(void* cmd,
+ GLboolean _red,
+ GLboolean _green,
+ GLboolean _blue,
+ GLboolean _alpha) {
static_cast<ValueType*>(cmd)->Init(_red, _green, _blue, _alpha);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 red;
- uint32 green;
- uint32 blue;
- uint32 alpha;
+ uint32_t red;
+ uint32_t green;
+ uint32_t blue;
+ uint32_t alpha;
};
-COMPILE_ASSERT(sizeof(ColorMask) == 20,
- Sizeof_ColorMask_is_not_20);
+COMPILE_ASSERT(sizeof(ColorMask) == 20, Sizeof_ColorMask_is_not_20);
COMPILE_ASSERT(offsetof(ColorMask, header) == 0,
OffsetOf_ColorMask_header_not_0);
-COMPILE_ASSERT(offsetof(ColorMask, red) == 4,
- OffsetOf_ColorMask_red_not_4);
-COMPILE_ASSERT(offsetof(ColorMask, green) == 8,
- OffsetOf_ColorMask_green_not_8);
-COMPILE_ASSERT(offsetof(ColorMask, blue) == 12,
- OffsetOf_ColorMask_blue_not_12);
+COMPILE_ASSERT(offsetof(ColorMask, red) == 4, OffsetOf_ColorMask_red_not_4);
+COMPILE_ASSERT(offsetof(ColorMask, green) == 8, OffsetOf_ColorMask_green_not_8);
+COMPILE_ASSERT(offsetof(ColorMask, blue) == 12, OffsetOf_ColorMask_blue_not_12);
COMPILE_ASSERT(offsetof(ColorMask, alpha) == 16,
OffsetOf_ColorMask_alpha_not_16);
@@ -899,14 +828,13 @@ struct CompileShader {
typedef CompileShader ValueType;
static const CommandId kCmdId = kCompileShader;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _shader) {
SetHeader();
@@ -919,70 +847,146 @@ struct CompileShader {
}
gpu::CommandHeader header;
- uint32 shader;
+ uint32_t shader;
};
-COMPILE_ASSERT(sizeof(CompileShader) == 8,
- Sizeof_CompileShader_is_not_8);
+COMPILE_ASSERT(sizeof(CompileShader) == 8, Sizeof_CompileShader_is_not_8);
COMPILE_ASSERT(offsetof(CompileShader, header) == 0,
OffsetOf_CompileShader_header_not_0);
COMPILE_ASSERT(offsetof(CompileShader, shader) == 4,
OffsetOf_CompileShader_shader_not_4);
-struct CompressedTexImage2D {
- typedef CompressedTexImage2D ValueType;
- static const CommandId kCmdId = kCompressedTexImage2D;
+struct CompressedTexImage2DBucket {
+ typedef CompressedTexImage2DBucket ValueType;
+ static const CommandId kCmdId = kCompressedTexImage2DBucket;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLenum _internalformat, GLsizei _width,
- GLsizei _height, GLint _border, GLsizei _imageSize, uint32 _data_shm_id,
- uint32 _data_shm_offset) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height,
+ GLuint _bucket_id) {
SetHeader();
target = _target;
level = _level;
internalformat = _internalformat;
width = _width;
height = _height;
- border = _border;
- imageSize = _imageSize;
- data_shm_id = _data_shm_id;
- data_shm_offset = _data_shm_offset;
+ bucket_id = _bucket_id;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLenum _internalformat,
- GLsizei _width, GLsizei _height, GLint _border, GLsizei _imageSize,
- uint32 _data_shm_id, uint32 _data_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _internalformat, _width, _height, _border,
- _imageSize, _data_shm_id, _data_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height,
+ GLuint _bucket_id) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _level, _internalformat, _width, _height, _bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 level;
- uint32 internalformat;
- int32 width;
- int32 height;
- int32 border;
- int32 imageSize;
- uint32 data_shm_id;
- uint32 data_shm_offset;
+ uint32_t target;
+ int32_t level;
+ uint32_t internalformat;
+ int32_t width;
+ int32_t height;
+ uint32_t bucket_id;
+ static const int32_t border = 0;
};
-COMPILE_ASSERT(sizeof(CompressedTexImage2D) == 40,
- Sizeof_CompressedTexImage2D_is_not_40);
+COMPILE_ASSERT(sizeof(CompressedTexImage2DBucket) == 28,
+ Sizeof_CompressedTexImage2DBucket_is_not_28);
+COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, header) == 0,
+ OffsetOf_CompressedTexImage2DBucket_header_not_0);
+COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, target) == 4,
+ OffsetOf_CompressedTexImage2DBucket_target_not_4);
+COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, level) == 8,
+ OffsetOf_CompressedTexImage2DBucket_level_not_8);
+COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, internalformat) == 12,
+ OffsetOf_CompressedTexImage2DBucket_internalformat_not_12);
+COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, width) == 16,
+ OffsetOf_CompressedTexImage2DBucket_width_not_16);
+COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, height) == 20,
+ OffsetOf_CompressedTexImage2DBucket_height_not_20);
+COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, bucket_id) == 24,
+ OffsetOf_CompressedTexImage2DBucket_bucket_id_not_24);
+
+struct CompressedTexImage2D {
+ typedef CompressedTexImage2D ValueType;
+ static const CommandId kCmdId = kCompressedTexImage2D;
+ static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
+ }
+
+ void SetHeader() { header.SetCmd<ValueType>(); }
+
+ void Init(GLenum _target,
+ GLint _level,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height,
+ GLsizei _imageSize,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset) {
+ SetHeader();
+ target = _target;
+ level = _level;
+ internalformat = _internalformat;
+ width = _width;
+ height = _height;
+ imageSize = _imageSize;
+ data_shm_id = _data_shm_id;
+ data_shm_offset = _data_shm_offset;
+ }
+
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height,
+ GLsizei _imageSize,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(_target,
+ _level,
+ _internalformat,
+ _width,
+ _height,
+ _imageSize,
+ _data_shm_id,
+ _data_shm_offset);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t target;
+ int32_t level;
+ uint32_t internalformat;
+ int32_t width;
+ int32_t height;
+ int32_t imageSize;
+ uint32_t data_shm_id;
+ uint32_t data_shm_offset;
+ static const int32_t border = 0;
+};
+
+COMPILE_ASSERT(sizeof(CompressedTexImage2D) == 36,
+ Sizeof_CompressedTexImage2D_is_not_36);
COMPILE_ASSERT(offsetof(CompressedTexImage2D, header) == 0,
OffsetOf_CompressedTexImage2D_header_not_0);
COMPILE_ASSERT(offsetof(CompressedTexImage2D, target) == 4,
@@ -995,97 +999,118 @@ COMPILE_ASSERT(offsetof(CompressedTexImage2D, width) == 16,
OffsetOf_CompressedTexImage2D_width_not_16);
COMPILE_ASSERT(offsetof(CompressedTexImage2D, height) == 20,
OffsetOf_CompressedTexImage2D_height_not_20);
-COMPILE_ASSERT(offsetof(CompressedTexImage2D, border) == 24,
- OffsetOf_CompressedTexImage2D_border_not_24);
-COMPILE_ASSERT(offsetof(CompressedTexImage2D, imageSize) == 28,
- OffsetOf_CompressedTexImage2D_imageSize_not_28);
-COMPILE_ASSERT(offsetof(CompressedTexImage2D, data_shm_id) == 32,
- OffsetOf_CompressedTexImage2D_data_shm_id_not_32);
-COMPILE_ASSERT(offsetof(CompressedTexImage2D, data_shm_offset) == 36,
- OffsetOf_CompressedTexImage2D_data_shm_offset_not_36);
+COMPILE_ASSERT(offsetof(CompressedTexImage2D, imageSize) == 24,
+ OffsetOf_CompressedTexImage2D_imageSize_not_24);
+COMPILE_ASSERT(offsetof(CompressedTexImage2D, data_shm_id) == 28,
+ OffsetOf_CompressedTexImage2D_data_shm_id_not_28);
+COMPILE_ASSERT(offsetof(CompressedTexImage2D, data_shm_offset) == 32,
+ OffsetOf_CompressedTexImage2D_data_shm_offset_not_32);
-struct CompressedTexImage2DBucket {
- typedef CompressedTexImage2DBucket ValueType;
- static const CommandId kCmdId = kCompressedTexImage2DBucket;
+struct CompressedTexSubImage2DBucket {
+ typedef CompressedTexSubImage2DBucket ValueType;
+ static const CommandId kCmdId = kCompressedTexSubImage2DBucket;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLenum _internalformat, GLsizei _width,
- GLsizei _height, GLint _border, GLuint _bucket_id) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLuint _bucket_id) {
SetHeader();
target = _target;
level = _level;
- internalformat = _internalformat;
+ xoffset = _xoffset;
+ yoffset = _yoffset;
width = _width;
height = _height;
- border = _border;
+ format = _format;
bucket_id = _bucket_id;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLenum _internalformat,
- GLsizei _width, GLsizei _height, GLint _border, GLuint _bucket_id) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _internalformat, _width, _height, _border,
- _bucket_id);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLuint _bucket_id) {
+ static_cast<ValueType*>(cmd)->Init(_target,
+ _level,
+ _xoffset,
+ _yoffset,
+ _width,
+ _height,
+ _format,
+ _bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 level;
- uint32 internalformat;
- int32 width;
- int32 height;
- int32 border;
- uint32 bucket_id;
+ uint32_t target;
+ int32_t level;
+ int32_t xoffset;
+ int32_t yoffset;
+ int32_t width;
+ int32_t height;
+ uint32_t format;
+ uint32_t bucket_id;
};
-COMPILE_ASSERT(sizeof(CompressedTexImage2DBucket) == 32,
- Sizeof_CompressedTexImage2DBucket_is_not_32);
-COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, header) == 0,
- OffsetOf_CompressedTexImage2DBucket_header_not_0);
-COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, target) == 4,
- OffsetOf_CompressedTexImage2DBucket_target_not_4);
-COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, level) == 8,
- OffsetOf_CompressedTexImage2DBucket_level_not_8);
-COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, internalformat) == 12,
- OffsetOf_CompressedTexImage2DBucket_internalformat_not_12);
-COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, width) == 16,
- OffsetOf_CompressedTexImage2DBucket_width_not_16);
-COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, height) == 20,
- OffsetOf_CompressedTexImage2DBucket_height_not_20);
-COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, border) == 24,
- OffsetOf_CompressedTexImage2DBucket_border_not_24);
-COMPILE_ASSERT(offsetof(CompressedTexImage2DBucket, bucket_id) == 28,
- OffsetOf_CompressedTexImage2DBucket_bucket_id_not_28);
+COMPILE_ASSERT(sizeof(CompressedTexSubImage2DBucket) == 36,
+ Sizeof_CompressedTexSubImage2DBucket_is_not_36);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, header) == 0,
+ OffsetOf_CompressedTexSubImage2DBucket_header_not_0);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, target) == 4,
+ OffsetOf_CompressedTexSubImage2DBucket_target_not_4);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, level) == 8,
+ OffsetOf_CompressedTexSubImage2DBucket_level_not_8);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, xoffset) == 12,
+ OffsetOf_CompressedTexSubImage2DBucket_xoffset_not_12);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, yoffset) == 16,
+ OffsetOf_CompressedTexSubImage2DBucket_yoffset_not_16);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, width) == 20,
+ OffsetOf_CompressedTexSubImage2DBucket_width_not_20);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, height) == 24,
+ OffsetOf_CompressedTexSubImage2DBucket_height_not_24);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, format) == 28,
+ OffsetOf_CompressedTexSubImage2DBucket_format_not_28);
+COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, bucket_id) == 32,
+ OffsetOf_CompressedTexSubImage2DBucket_bucket_id_not_32);
struct CompressedTexSubImage2D {
typedef CompressedTexSubImage2D ValueType;
static const CommandId kCmdId = kCompressedTexSubImage2D;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLsizei _width, GLsizei _height, GLenum _format, GLsizei _imageSize,
- uint32 _data_shm_id, uint32 _data_shm_offset) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLsizei _imageSize,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset) {
SetHeader();
target = _target;
level = _level;
@@ -1099,28 +1124,41 @@ struct CompressedTexSubImage2D {
data_shm_offset = _data_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLsizei _width, GLsizei _height, GLenum _format, GLsizei _imageSize,
- uint32 _data_shm_id, uint32 _data_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _xoffset, _yoffset, _width, _height, _format,
- _imageSize, _data_shm_id, _data_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- int32 level;
- int32 xoffset;
- int32 yoffset;
- int32 width;
- int32 height;
- uint32 format;
- int32 imageSize;
- uint32 data_shm_id;
- uint32 data_shm_offset;
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLsizei _imageSize,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(_target,
+ _level,
+ _xoffset,
+ _yoffset,
+ _width,
+ _height,
+ _format,
+ _imageSize,
+ _data_shm_id,
+ _data_shm_offset);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t target;
+ int32_t level;
+ int32_t xoffset;
+ int32_t yoffset;
+ int32_t width;
+ int32_t height;
+ uint32_t format;
+ int32_t imageSize;
+ uint32_t data_shm_id;
+ uint32_t data_shm_offset;
};
COMPILE_ASSERT(sizeof(CompressedTexSubImage2D) == 44,
@@ -1148,91 +1186,25 @@ COMPILE_ASSERT(offsetof(CompressedTexSubImage2D, data_shm_id) == 36,
COMPILE_ASSERT(offsetof(CompressedTexSubImage2D, data_shm_offset) == 40,
OffsetOf_CompressedTexSubImage2D_data_shm_offset_not_40);
-struct CompressedTexSubImage2DBucket {
- typedef CompressedTexSubImage2DBucket ValueType;
- static const CommandId kCmdId = kCompressedTexSubImage2DBucket;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLsizei _width, GLsizei _height, GLenum _format, GLuint _bucket_id) {
- SetHeader();
- target = _target;
- level = _level;
- xoffset = _xoffset;
- yoffset = _yoffset;
- width = _width;
- height = _height;
- format = _format;
- bucket_id = _bucket_id;
- }
-
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLsizei _width, GLsizei _height, GLenum _format, GLuint _bucket_id) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _xoffset, _yoffset, _width, _height, _format,
- _bucket_id);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- int32 level;
- int32 xoffset;
- int32 yoffset;
- int32 width;
- int32 height;
- uint32 format;
- uint32 bucket_id;
-};
-
-COMPILE_ASSERT(sizeof(CompressedTexSubImage2DBucket) == 36,
- Sizeof_CompressedTexSubImage2DBucket_is_not_36);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, header) == 0,
- OffsetOf_CompressedTexSubImage2DBucket_header_not_0);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, target) == 4,
- OffsetOf_CompressedTexSubImage2DBucket_target_not_4);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, level) == 8,
- OffsetOf_CompressedTexSubImage2DBucket_level_not_8);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, xoffset) == 12,
- OffsetOf_CompressedTexSubImage2DBucket_xoffset_not_12);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, yoffset) == 16,
- OffsetOf_CompressedTexSubImage2DBucket_yoffset_not_16);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, width) == 20,
- OffsetOf_CompressedTexSubImage2DBucket_width_not_20);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, height) == 24,
- OffsetOf_CompressedTexSubImage2DBucket_height_not_24);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, format) == 28,
- OffsetOf_CompressedTexSubImage2DBucket_format_not_28);
-COMPILE_ASSERT(offsetof(CompressedTexSubImage2DBucket, bucket_id) == 32,
- OffsetOf_CompressedTexSubImage2DBucket_bucket_id_not_32);
-
struct CopyTexImage2D {
typedef CopyTexImage2D ValueType;
static const CommandId kCmdId = kCopyTexImage2D;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLenum _internalformat, GLint _x, GLint _y,
- GLsizei _width, GLsizei _height, GLint _border) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLenum _internalformat,
+ GLint _x,
+ GLint _y,
+ GLsizei _width,
+ GLsizei _height) {
SetHeader();
target = _target;
level = _level;
@@ -1241,32 +1213,33 @@ struct CopyTexImage2D {
y = _y;
width = _width;
height = _height;
- border = _border;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLenum _internalformat, GLint _x,
- GLint _y, GLsizei _width, GLsizei _height, GLint _border) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _internalformat, _x, _y, _width, _height,
- _border);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLenum _internalformat,
+ GLint _x,
+ GLint _y,
+ GLsizei _width,
+ GLsizei _height) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _level, _internalformat, _x, _y, _width, _height);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 level;
- uint32 internalformat;
- int32 x;
- int32 y;
- int32 width;
- int32 height;
- int32 border;
+ uint32_t target;
+ int32_t level;
+ uint32_t internalformat;
+ int32_t x;
+ int32_t y;
+ int32_t width;
+ int32_t height;
+ static const int32_t border = 0;
};
-COMPILE_ASSERT(sizeof(CopyTexImage2D) == 36,
- Sizeof_CopyTexImage2D_is_not_36);
+COMPILE_ASSERT(sizeof(CopyTexImage2D) == 32, Sizeof_CopyTexImage2D_is_not_32);
COMPILE_ASSERT(offsetof(CopyTexImage2D, header) == 0,
OffsetOf_CopyTexImage2D_header_not_0);
COMPILE_ASSERT(offsetof(CopyTexImage2D, target) == 4,
@@ -1283,25 +1256,27 @@ COMPILE_ASSERT(offsetof(CopyTexImage2D, width) == 24,
OffsetOf_CopyTexImage2D_width_not_24);
COMPILE_ASSERT(offsetof(CopyTexImage2D, height) == 28,
OffsetOf_CopyTexImage2D_height_not_28);
-COMPILE_ASSERT(offsetof(CopyTexImage2D, border) == 32,
- OffsetOf_CopyTexImage2D_border_not_32);
struct CopyTexSubImage2D {
typedef CopyTexSubImage2D ValueType;
static const CommandId kCmdId = kCopyTexSubImage2D;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset, GLint _x,
- GLint _y, GLsizei _width, GLsizei _height) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLint _x,
+ GLint _y,
+ GLsizei _width,
+ GLsizei _height) {
SetHeader();
target = _target;
level = _level;
@@ -1313,24 +1288,29 @@ struct CopyTexSubImage2D {
height = _height;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLint _x, GLint _y, GLsizei _width, GLsizei _height) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _xoffset, _yoffset, _x, _y, _width, _height);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLint _x,
+ GLint _y,
+ GLsizei _width,
+ GLsizei _height) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _level, _xoffset, _yoffset, _x, _y, _width, _height);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 level;
- int32 xoffset;
- int32 yoffset;
- int32 x;
- int32 y;
- int32 width;
- int32 height;
+ uint32_t target;
+ int32_t level;
+ int32_t xoffset;
+ int32_t yoffset;
+ int32_t x;
+ int32_t y;
+ int32_t width;
+ int32_t height;
};
COMPILE_ASSERT(sizeof(CopyTexSubImage2D) == 36,
@@ -1358,31 +1338,29 @@ struct CreateProgram {
typedef CreateProgram ValueType;
static const CommandId kCmdId = kCreateProgram;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(uint32 _client_id) {
+ void Init(uint32_t _client_id) {
SetHeader();
client_id = _client_id;
}
- void* Set(void* cmd, uint32 _client_id) {
+ void* Set(void* cmd, uint32_t _client_id) {
static_cast<ValueType*>(cmd)->Init(_client_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 client_id;
+ uint32_t client_id;
};
-COMPILE_ASSERT(sizeof(CreateProgram) == 8,
- Sizeof_CreateProgram_is_not_8);
+COMPILE_ASSERT(sizeof(CreateProgram) == 8, Sizeof_CreateProgram_is_not_8);
COMPILE_ASSERT(offsetof(CreateProgram, header) == 0,
OffsetOf_CreateProgram_header_not_0);
COMPILE_ASSERT(offsetof(CreateProgram, client_id) == 4,
@@ -1392,33 +1370,31 @@ struct CreateShader {
typedef CreateShader ValueType;
static const CommandId kCmdId = kCreateShader;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLenum _type, uint32 _client_id) {
+ void Init(GLenum _type, uint32_t _client_id) {
SetHeader();
type = _type;
client_id = _client_id;
}
- void* Set(void* cmd, GLenum _type, uint32 _client_id) {
+ void* Set(void* cmd, GLenum _type, uint32_t _client_id) {
static_cast<ValueType*>(cmd)->Init(_type, _client_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 type;
- uint32 client_id;
+ uint32_t type;
+ uint32_t client_id;
};
-COMPILE_ASSERT(sizeof(CreateShader) == 12,
- Sizeof_CreateShader_is_not_12);
+COMPILE_ASSERT(sizeof(CreateShader) == 12, Sizeof_CreateShader_is_not_12);
COMPILE_ASSERT(offsetof(CreateShader, header) == 0,
OffsetOf_CreateShader_header_not_0);
COMPILE_ASSERT(offsetof(CreateShader, type) == 4,
@@ -1430,14 +1406,13 @@ struct CullFace {
typedef CullFace ValueType;
static const CommandId kCmdId = kCullFace;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _mode) {
SetHeader();
@@ -1450,73 +1425,26 @@ struct CullFace {
}
gpu::CommandHeader header;
- uint32 mode;
-};
-
-COMPILE_ASSERT(sizeof(CullFace) == 8,
- Sizeof_CullFace_is_not_8);
-COMPILE_ASSERT(offsetof(CullFace, header) == 0,
- OffsetOf_CullFace_header_not_0);
-COMPILE_ASSERT(offsetof(CullFace, mode) == 4,
- OffsetOf_CullFace_mode_not_4);
-
-struct DeleteBuffers {
- typedef DeleteBuffers ValueType;
- static const CommandId kCmdId = kDeleteBuffers;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _n, uint32 _buffers_shm_id, uint32 _buffers_shm_offset) {
- SetHeader();
- n = _n;
- buffers_shm_id = _buffers_shm_id;
- buffers_shm_offset = _buffers_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _buffers_shm_id,
- uint32 _buffers_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _buffers_shm_id, _buffers_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 buffers_shm_id;
- uint32 buffers_shm_offset;
+ uint32_t mode;
};
-COMPILE_ASSERT(sizeof(DeleteBuffers) == 16,
- Sizeof_DeleteBuffers_is_not_16);
-COMPILE_ASSERT(offsetof(DeleteBuffers, header) == 0,
- OffsetOf_DeleteBuffers_header_not_0);
-COMPILE_ASSERT(offsetof(DeleteBuffers, n) == 4,
- OffsetOf_DeleteBuffers_n_not_4);
-COMPILE_ASSERT(offsetof(DeleteBuffers, buffers_shm_id) == 8,
- OffsetOf_DeleteBuffers_buffers_shm_id_not_8);
-COMPILE_ASSERT(offsetof(DeleteBuffers, buffers_shm_offset) == 12,
- OffsetOf_DeleteBuffers_buffers_shm_offset_not_12);
+COMPILE_ASSERT(sizeof(CullFace) == 8, Sizeof_CullFace_is_not_8);
+COMPILE_ASSERT(offsetof(CullFace, header) == 0, OffsetOf_CullFace_header_not_0);
+COMPILE_ASSERT(offsetof(CullFace, mode) == 4, OffsetOf_CullFace_mode_not_4);
struct DeleteBuffersImmediate {
typedef DeleteBuffersImmediate ValueType;
static const CommandId kCmdId = kDeleteBuffersImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -1526,18 +1454,17 @@ struct DeleteBuffersImmediate {
void Init(GLsizei _n, const GLuint* _buffers) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _buffers, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _buffers, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, const GLuint* _buffers) {
static_cast<ValueType*>(cmd)->Init(_n, _buffers);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(DeleteBuffersImmediate) == 8,
@@ -1547,65 +1474,19 @@ COMPILE_ASSERT(offsetof(DeleteBuffersImmediate, header) == 0,
COMPILE_ASSERT(offsetof(DeleteBuffersImmediate, n) == 4,
OffsetOf_DeleteBuffersImmediate_n_not_4);
-struct DeleteFramebuffers {
- typedef DeleteFramebuffers ValueType;
- static const CommandId kCmdId = kDeleteFramebuffers;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLsizei _n, uint32 _framebuffers_shm_id,
- uint32 _framebuffers_shm_offset) {
- SetHeader();
- n = _n;
- framebuffers_shm_id = _framebuffers_shm_id;
- framebuffers_shm_offset = _framebuffers_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _framebuffers_shm_id,
- uint32 _framebuffers_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _framebuffers_shm_id, _framebuffers_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 framebuffers_shm_id;
- uint32 framebuffers_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(DeleteFramebuffers) == 16,
- Sizeof_DeleteFramebuffers_is_not_16);
-COMPILE_ASSERT(offsetof(DeleteFramebuffers, header) == 0,
- OffsetOf_DeleteFramebuffers_header_not_0);
-COMPILE_ASSERT(offsetof(DeleteFramebuffers, n) == 4,
- OffsetOf_DeleteFramebuffers_n_not_4);
-COMPILE_ASSERT(offsetof(DeleteFramebuffers, framebuffers_shm_id) == 8,
- OffsetOf_DeleteFramebuffers_framebuffers_shm_id_not_8);
-COMPILE_ASSERT(offsetof(DeleteFramebuffers, framebuffers_shm_offset) == 12,
- OffsetOf_DeleteFramebuffers_framebuffers_shm_offset_not_12);
-
struct DeleteFramebuffersImmediate {
typedef DeleteFramebuffersImmediate ValueType;
static const CommandId kCmdId = kDeleteFramebuffersImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -1615,18 +1496,17 @@ struct DeleteFramebuffersImmediate {
void Init(GLsizei _n, const GLuint* _framebuffers) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _framebuffers, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _framebuffers, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, const GLuint* _framebuffers) {
static_cast<ValueType*>(cmd)->Init(_n, _framebuffers);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(DeleteFramebuffersImmediate) == 8,
@@ -1640,14 +1520,13 @@ struct DeleteProgram {
typedef DeleteProgram ValueType;
static const CommandId kCmdId = kDeleteProgram;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _program) {
SetHeader();
@@ -1660,75 +1539,28 @@ struct DeleteProgram {
}
gpu::CommandHeader header;
- uint32 program;
+ uint32_t program;
};
-COMPILE_ASSERT(sizeof(DeleteProgram) == 8,
- Sizeof_DeleteProgram_is_not_8);
+COMPILE_ASSERT(sizeof(DeleteProgram) == 8, Sizeof_DeleteProgram_is_not_8);
COMPILE_ASSERT(offsetof(DeleteProgram, header) == 0,
OffsetOf_DeleteProgram_header_not_0);
COMPILE_ASSERT(offsetof(DeleteProgram, program) == 4,
OffsetOf_DeleteProgram_program_not_4);
-struct DeleteRenderbuffers {
- typedef DeleteRenderbuffers ValueType;
- static const CommandId kCmdId = kDeleteRenderbuffers;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLsizei _n, uint32 _renderbuffers_shm_id,
- uint32 _renderbuffers_shm_offset) {
- SetHeader();
- n = _n;
- renderbuffers_shm_id = _renderbuffers_shm_id;
- renderbuffers_shm_offset = _renderbuffers_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _renderbuffers_shm_id,
- uint32 _renderbuffers_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _renderbuffers_shm_id, _renderbuffers_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 renderbuffers_shm_id;
- uint32 renderbuffers_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(DeleteRenderbuffers) == 16,
- Sizeof_DeleteRenderbuffers_is_not_16);
-COMPILE_ASSERT(offsetof(DeleteRenderbuffers, header) == 0,
- OffsetOf_DeleteRenderbuffers_header_not_0);
-COMPILE_ASSERT(offsetof(DeleteRenderbuffers, n) == 4,
- OffsetOf_DeleteRenderbuffers_n_not_4);
-COMPILE_ASSERT(offsetof(DeleteRenderbuffers, renderbuffers_shm_id) == 8,
- OffsetOf_DeleteRenderbuffers_renderbuffers_shm_id_not_8);
-COMPILE_ASSERT(offsetof(DeleteRenderbuffers, renderbuffers_shm_offset) == 12,
- OffsetOf_DeleteRenderbuffers_renderbuffers_shm_offset_not_12);
-
struct DeleteRenderbuffersImmediate {
typedef DeleteRenderbuffersImmediate ValueType;
static const CommandId kCmdId = kDeleteRenderbuffersImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -1738,18 +1570,17 @@ struct DeleteRenderbuffersImmediate {
void Init(GLsizei _n, const GLuint* _renderbuffers) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _renderbuffers, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _renderbuffers, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, const GLuint* _renderbuffers) {
static_cast<ValueType*>(cmd)->Init(_n, _renderbuffers);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(DeleteRenderbuffersImmediate) == 8,
@@ -1763,14 +1594,13 @@ struct DeleteShader {
typedef DeleteShader ValueType;
static const CommandId kCmdId = kDeleteShader;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _shader) {
SetHeader();
@@ -1783,73 +1613,28 @@ struct DeleteShader {
}
gpu::CommandHeader header;
- uint32 shader;
+ uint32_t shader;
};
-COMPILE_ASSERT(sizeof(DeleteShader) == 8,
- Sizeof_DeleteShader_is_not_8);
+COMPILE_ASSERT(sizeof(DeleteShader) == 8, Sizeof_DeleteShader_is_not_8);
COMPILE_ASSERT(offsetof(DeleteShader, header) == 0,
OffsetOf_DeleteShader_header_not_0);
COMPILE_ASSERT(offsetof(DeleteShader, shader) == 4,
OffsetOf_DeleteShader_shader_not_4);
-struct DeleteTextures {
- typedef DeleteTextures ValueType;
- static const CommandId kCmdId = kDeleteTextures;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _n, uint32 _textures_shm_id, uint32 _textures_shm_offset) {
- SetHeader();
- n = _n;
- textures_shm_id = _textures_shm_id;
- textures_shm_offset = _textures_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _textures_shm_id,
- uint32 _textures_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _textures_shm_id, _textures_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 textures_shm_id;
- uint32 textures_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(DeleteTextures) == 16,
- Sizeof_DeleteTextures_is_not_16);
-COMPILE_ASSERT(offsetof(DeleteTextures, header) == 0,
- OffsetOf_DeleteTextures_header_not_0);
-COMPILE_ASSERT(offsetof(DeleteTextures, n) == 4,
- OffsetOf_DeleteTextures_n_not_4);
-COMPILE_ASSERT(offsetof(DeleteTextures, textures_shm_id) == 8,
- OffsetOf_DeleteTextures_textures_shm_id_not_8);
-COMPILE_ASSERT(offsetof(DeleteTextures, textures_shm_offset) == 12,
- OffsetOf_DeleteTextures_textures_shm_offset_not_12);
-
struct DeleteTexturesImmediate {
typedef DeleteTexturesImmediate ValueType;
static const CommandId kCmdId = kDeleteTexturesImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -1859,18 +1644,17 @@ struct DeleteTexturesImmediate {
void Init(GLsizei _n, const GLuint* _textures) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _textures, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _textures, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, const GLuint* _textures) {
static_cast<ValueType*>(cmd)->Init(_n, _textures);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(DeleteTexturesImmediate) == 8,
@@ -1884,14 +1668,13 @@ struct DepthFunc {
typedef DepthFunc ValueType;
static const CommandId kCmdId = kDepthFunc;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _func) {
SetHeader();
@@ -1904,28 +1687,25 @@ struct DepthFunc {
}
gpu::CommandHeader header;
- uint32 func;
+ uint32_t func;
};
-COMPILE_ASSERT(sizeof(DepthFunc) == 8,
- Sizeof_DepthFunc_is_not_8);
+COMPILE_ASSERT(sizeof(DepthFunc) == 8, Sizeof_DepthFunc_is_not_8);
COMPILE_ASSERT(offsetof(DepthFunc, header) == 0,
OffsetOf_DepthFunc_header_not_0);
-COMPILE_ASSERT(offsetof(DepthFunc, func) == 4,
- OffsetOf_DepthFunc_func_not_4);
+COMPILE_ASSERT(offsetof(DepthFunc, func) == 4, OffsetOf_DepthFunc_func_not_4);
struct DepthMask {
typedef DepthMask ValueType;
static const CommandId kCmdId = kDepthMask;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLboolean _flag) {
SetHeader();
@@ -1938,28 +1718,25 @@ struct DepthMask {
}
gpu::CommandHeader header;
- uint32 flag;
+ uint32_t flag;
};
-COMPILE_ASSERT(sizeof(DepthMask) == 8,
- Sizeof_DepthMask_is_not_8);
+COMPILE_ASSERT(sizeof(DepthMask) == 8, Sizeof_DepthMask_is_not_8);
COMPILE_ASSERT(offsetof(DepthMask, header) == 0,
OffsetOf_DepthMask_header_not_0);
-COMPILE_ASSERT(offsetof(DepthMask, flag) == 4,
- OffsetOf_DepthMask_flag_not_4);
+COMPILE_ASSERT(offsetof(DepthMask, flag) == 4, OffsetOf_DepthMask_flag_not_4);
struct DepthRangef {
typedef DepthRangef ValueType;
static const CommandId kCmdId = kDepthRangef;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLclampf _zNear, GLclampf _zFar) {
SetHeader();
@@ -1977,8 +1754,7 @@ struct DepthRangef {
float zFar;
};
-COMPILE_ASSERT(sizeof(DepthRangef) == 12,
- Sizeof_DepthRangef_is_not_12);
+COMPILE_ASSERT(sizeof(DepthRangef) == 12, Sizeof_DepthRangef_is_not_12);
COMPILE_ASSERT(offsetof(DepthRangef, header) == 0,
OffsetOf_DepthRangef_header_not_0);
COMPILE_ASSERT(offsetof(DepthRangef, zNear) == 4,
@@ -1990,14 +1766,13 @@ struct DetachShader {
typedef DetachShader ValueType;
static const CommandId kCmdId = kDetachShader;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _program, GLuint _shader) {
SetHeader();
@@ -2011,12 +1786,11 @@ struct DetachShader {
}
gpu::CommandHeader header;
- uint32 program;
- uint32 shader;
+ uint32_t program;
+ uint32_t shader;
};
-COMPILE_ASSERT(sizeof(DetachShader) == 12,
- Sizeof_DetachShader_is_not_12);
+COMPILE_ASSERT(sizeof(DetachShader) == 12, Sizeof_DetachShader_is_not_12);
COMPILE_ASSERT(offsetof(DetachShader, header) == 0,
OffsetOf_DetachShader_header_not_0);
COMPILE_ASSERT(offsetof(DetachShader, program) == 4,
@@ -2028,14 +1802,13 @@ struct Disable {
typedef Disable ValueType;
static const CommandId kCmdId = kDisable;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _cap) {
SetHeader();
@@ -2048,28 +1821,24 @@ struct Disable {
}
gpu::CommandHeader header;
- uint32 cap;
+ uint32_t cap;
};
-COMPILE_ASSERT(sizeof(Disable) == 8,
- Sizeof_Disable_is_not_8);
-COMPILE_ASSERT(offsetof(Disable, header) == 0,
- OffsetOf_Disable_header_not_0);
-COMPILE_ASSERT(offsetof(Disable, cap) == 4,
- OffsetOf_Disable_cap_not_4);
+COMPILE_ASSERT(sizeof(Disable) == 8, Sizeof_Disable_is_not_8);
+COMPILE_ASSERT(offsetof(Disable, header) == 0, OffsetOf_Disable_header_not_0);
+COMPILE_ASSERT(offsetof(Disable, cap) == 4, OffsetOf_Disable_cap_not_4);
struct DisableVertexAttribArray {
typedef DisableVertexAttribArray ValueType;
static const CommandId kCmdId = kDisableVertexAttribArray;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _index) {
SetHeader();
@@ -2082,7 +1851,7 @@ struct DisableVertexAttribArray {
}
gpu::CommandHeader header;
- uint32 index;
+ uint32_t index;
};
COMPILE_ASSERT(sizeof(DisableVertexAttribArray) == 8,
@@ -2096,14 +1865,13 @@ struct DrawArrays {
typedef DrawArrays ValueType;
static const CommandId kCmdId = kDrawArrays;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(2);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _mode, GLint _first, GLsizei _count) {
SetHeader();
@@ -2118,17 +1886,15 @@ struct DrawArrays {
}
gpu::CommandHeader header;
- uint32 mode;
- int32 first;
- int32 count;
+ uint32_t mode;
+ int32_t first;
+ int32_t count;
};
-COMPILE_ASSERT(sizeof(DrawArrays) == 16,
- Sizeof_DrawArrays_is_not_16);
+COMPILE_ASSERT(sizeof(DrawArrays) == 16, Sizeof_DrawArrays_is_not_16);
COMPILE_ASSERT(offsetof(DrawArrays, header) == 0,
OffsetOf_DrawArrays_header_not_0);
-COMPILE_ASSERT(offsetof(DrawArrays, mode) == 4,
- OffsetOf_DrawArrays_mode_not_4);
+COMPILE_ASSERT(offsetof(DrawArrays, mode) == 4, OffsetOf_DrawArrays_mode_not_4);
COMPILE_ASSERT(offsetof(DrawArrays, first) == 8,
OffsetOf_DrawArrays_first_not_8);
COMPILE_ASSERT(offsetof(DrawArrays, count) == 12,
@@ -2138,14 +1904,13 @@ struct DrawElements {
typedef DrawElements ValueType;
static const CommandId kCmdId = kDrawElements;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(2);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _mode, GLsizei _count, GLenum _type, GLuint _index_offset) {
SetHeader();
@@ -2155,22 +1920,23 @@ struct DrawElements {
index_offset = _index_offset;
}
- void* Set(
- void* cmd, GLenum _mode, GLsizei _count, GLenum _type,
- GLuint _index_offset) {
+ void* Set(void* cmd,
+ GLenum _mode,
+ GLsizei _count,
+ GLenum _type,
+ GLuint _index_offset) {
static_cast<ValueType*>(cmd)->Init(_mode, _count, _type, _index_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 mode;
- int32 count;
- uint32 type;
- uint32 index_offset;
+ uint32_t mode;
+ int32_t count;
+ uint32_t type;
+ uint32_t index_offset;
};
-COMPILE_ASSERT(sizeof(DrawElements) == 20,
- Sizeof_DrawElements_is_not_20);
+COMPILE_ASSERT(sizeof(DrawElements) == 20, Sizeof_DrawElements_is_not_20);
COMPILE_ASSERT(offsetof(DrawElements, header) == 0,
OffsetOf_DrawElements_header_not_0);
COMPILE_ASSERT(offsetof(DrawElements, mode) == 4,
@@ -2186,14 +1952,13 @@ struct Enable {
typedef Enable ValueType;
static const CommandId kCmdId = kEnable;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _cap) {
SetHeader();
@@ -2206,28 +1971,24 @@ struct Enable {
}
gpu::CommandHeader header;
- uint32 cap;
+ uint32_t cap;
};
-COMPILE_ASSERT(sizeof(Enable) == 8,
- Sizeof_Enable_is_not_8);
-COMPILE_ASSERT(offsetof(Enable, header) == 0,
- OffsetOf_Enable_header_not_0);
-COMPILE_ASSERT(offsetof(Enable, cap) == 4,
- OffsetOf_Enable_cap_not_4);
+COMPILE_ASSERT(sizeof(Enable) == 8, Sizeof_Enable_is_not_8);
+COMPILE_ASSERT(offsetof(Enable, header) == 0, OffsetOf_Enable_header_not_0);
+COMPILE_ASSERT(offsetof(Enable, cap) == 4, OffsetOf_Enable_cap_not_4);
struct EnableVertexAttribArray {
typedef EnableVertexAttribArray ValueType;
static const CommandId kCmdId = kEnableVertexAttribArray;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _index) {
SetHeader();
@@ -2240,7 +2001,7 @@ struct EnableVertexAttribArray {
}
gpu::CommandHeader header;
- uint32 index;
+ uint32_t index;
};
COMPILE_ASSERT(sizeof(EnableVertexAttribArray) == 8,
@@ -2254,18 +2015,15 @@ struct Finish {
typedef Finish ValueType;
static const CommandId kCmdId = kFinish;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init() {
- SetHeader();
- }
+ void Init() { SetHeader(); }
void* Set(void* cmd) {
static_cast<ValueType*>(cmd)->Init();
@@ -2275,27 +2033,22 @@ struct Finish {
gpu::CommandHeader header;
};
-COMPILE_ASSERT(sizeof(Finish) == 4,
- Sizeof_Finish_is_not_4);
-COMPILE_ASSERT(offsetof(Finish, header) == 0,
- OffsetOf_Finish_header_not_0);
+COMPILE_ASSERT(sizeof(Finish) == 4, Sizeof_Finish_is_not_4);
+COMPILE_ASSERT(offsetof(Finish, header) == 0, OffsetOf_Finish_header_not_0);
struct Flush {
typedef Flush ValueType;
static const CommandId kCmdId = kFlush;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init() {
- SetHeader();
- }
+ void Init() { SetHeader(); }
void* Set(void* cmd) {
static_cast<ValueType*>(cmd)->Init();
@@ -2305,27 +2058,25 @@ struct Flush {
gpu::CommandHeader header;
};
-COMPILE_ASSERT(sizeof(Flush) == 4,
- Sizeof_Flush_is_not_4);
-COMPILE_ASSERT(offsetof(Flush, header) == 0,
- OffsetOf_Flush_header_not_0);
+COMPILE_ASSERT(sizeof(Flush) == 4, Sizeof_Flush_is_not_4);
+COMPILE_ASSERT(offsetof(Flush, header) == 0, OffsetOf_Flush_header_not_0);
struct FramebufferRenderbuffer {
typedef FramebufferRenderbuffer ValueType;
static const CommandId kCmdId = kFramebufferRenderbuffer;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _attachment, GLenum _renderbuffertarget,
- GLuint _renderbuffer) {
+ void Init(GLenum _target,
+ GLenum _attachment,
+ GLenum _renderbuffertarget,
+ GLuint _renderbuffer) {
SetHeader();
target = _target;
attachment = _attachment;
@@ -2333,19 +2084,21 @@ struct FramebufferRenderbuffer {
renderbuffer = _renderbuffer;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _attachment, GLenum _renderbuffertarget,
- GLuint _renderbuffer) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _attachment, _renderbuffertarget, _renderbuffer);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _attachment,
+ GLenum _renderbuffertarget,
+ GLuint _renderbuffer) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _attachment, _renderbuffertarget, _renderbuffer);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 attachment;
- uint32 renderbuffertarget;
- uint32 renderbuffer;
+ uint32_t target;
+ uint32_t attachment;
+ uint32_t renderbuffertarget;
+ uint32_t renderbuffer;
};
COMPILE_ASSERT(sizeof(FramebufferRenderbuffer) == 20,
@@ -2365,44 +2118,45 @@ struct FramebufferTexture2D {
typedef FramebufferTexture2D ValueType;
static const CommandId kCmdId = kFramebufferTexture2D;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _attachment, GLenum _textarget, GLuint _texture,
- GLint _level) {
+ void Init(GLenum _target,
+ GLenum _attachment,
+ GLenum _textarget,
+ GLuint _texture) {
SetHeader();
target = _target;
attachment = _attachment;
textarget = _textarget;
texture = _texture;
- level = _level;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _attachment, GLenum _textarget,
- GLuint _texture, GLint _level) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _attachment, _textarget, _texture, _level);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _attachment,
+ GLenum _textarget,
+ GLuint _texture) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _attachment, _textarget, _texture);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 attachment;
- uint32 textarget;
- uint32 texture;
- int32 level;
+ uint32_t target;
+ uint32_t attachment;
+ uint32_t textarget;
+ uint32_t texture;
+ static const int32_t level = 0;
};
-COMPILE_ASSERT(sizeof(FramebufferTexture2D) == 24,
- Sizeof_FramebufferTexture2D_is_not_24);
+COMPILE_ASSERT(sizeof(FramebufferTexture2D) == 20,
+ Sizeof_FramebufferTexture2D_is_not_20);
COMPILE_ASSERT(offsetof(FramebufferTexture2D, header) == 0,
OffsetOf_FramebufferTexture2D_header_not_0);
COMPILE_ASSERT(offsetof(FramebufferTexture2D, target) == 4,
@@ -2413,21 +2167,18 @@ COMPILE_ASSERT(offsetof(FramebufferTexture2D, textarget) == 12,
OffsetOf_FramebufferTexture2D_textarget_not_12);
COMPILE_ASSERT(offsetof(FramebufferTexture2D, texture) == 16,
OffsetOf_FramebufferTexture2D_texture_not_16);
-COMPILE_ASSERT(offsetof(FramebufferTexture2D, level) == 20,
- OffsetOf_FramebufferTexture2D_level_not_20);
struct FrontFace {
typedef FrontFace ValueType;
static const CommandId kCmdId = kFrontFace;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _mode) {
SetHeader();
@@ -2440,73 +2191,27 @@ struct FrontFace {
}
gpu::CommandHeader header;
- uint32 mode;
+ uint32_t mode;
};
-COMPILE_ASSERT(sizeof(FrontFace) == 8,
- Sizeof_FrontFace_is_not_8);
+COMPILE_ASSERT(sizeof(FrontFace) == 8, Sizeof_FrontFace_is_not_8);
COMPILE_ASSERT(offsetof(FrontFace, header) == 0,
OffsetOf_FrontFace_header_not_0);
-COMPILE_ASSERT(offsetof(FrontFace, mode) == 4,
- OffsetOf_FrontFace_mode_not_4);
-
-struct GenBuffers {
- typedef GenBuffers ValueType;
- static const CommandId kCmdId = kGenBuffers;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _n, uint32 _buffers_shm_id, uint32 _buffers_shm_offset) {
- SetHeader();
- n = _n;
- buffers_shm_id = _buffers_shm_id;
- buffers_shm_offset = _buffers_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _buffers_shm_id,
- uint32 _buffers_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _buffers_shm_id, _buffers_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 buffers_shm_id;
- uint32 buffers_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(GenBuffers) == 16,
- Sizeof_GenBuffers_is_not_16);
-COMPILE_ASSERT(offsetof(GenBuffers, header) == 0,
- OffsetOf_GenBuffers_header_not_0);
-COMPILE_ASSERT(offsetof(GenBuffers, n) == 4,
- OffsetOf_GenBuffers_n_not_4);
-COMPILE_ASSERT(offsetof(GenBuffers, buffers_shm_id) == 8,
- OffsetOf_GenBuffers_buffers_shm_id_not_8);
-COMPILE_ASSERT(offsetof(GenBuffers, buffers_shm_offset) == 12,
- OffsetOf_GenBuffers_buffers_shm_offset_not_12);
+COMPILE_ASSERT(offsetof(FrontFace, mode) == 4, OffsetOf_FrontFace_mode_not_4);
struct GenBuffersImmediate {
typedef GenBuffersImmediate ValueType;
static const CommandId kCmdId = kGenBuffersImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -2516,18 +2221,17 @@ struct GenBuffersImmediate {
void Init(GLsizei _n, GLuint* _buffers) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _buffers, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _buffers, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, GLuint* _buffers) {
static_cast<ValueType*>(cmd)->Init(_n, _buffers);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(GenBuffersImmediate) == 8,
@@ -2541,14 +2245,13 @@ struct GenerateMipmap {
typedef GenerateMipmap ValueType;
static const CommandId kCmdId = kGenerateMipmap;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target) {
SetHeader();
@@ -2561,75 +2264,28 @@ struct GenerateMipmap {
}
gpu::CommandHeader header;
- uint32 target;
+ uint32_t target;
};
-COMPILE_ASSERT(sizeof(GenerateMipmap) == 8,
- Sizeof_GenerateMipmap_is_not_8);
+COMPILE_ASSERT(sizeof(GenerateMipmap) == 8, Sizeof_GenerateMipmap_is_not_8);
COMPILE_ASSERT(offsetof(GenerateMipmap, header) == 0,
OffsetOf_GenerateMipmap_header_not_0);
COMPILE_ASSERT(offsetof(GenerateMipmap, target) == 4,
OffsetOf_GenerateMipmap_target_not_4);
-struct GenFramebuffers {
- typedef GenFramebuffers ValueType;
- static const CommandId kCmdId = kGenFramebuffers;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLsizei _n, uint32 _framebuffers_shm_id,
- uint32 _framebuffers_shm_offset) {
- SetHeader();
- n = _n;
- framebuffers_shm_id = _framebuffers_shm_id;
- framebuffers_shm_offset = _framebuffers_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _framebuffers_shm_id,
- uint32 _framebuffers_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _framebuffers_shm_id, _framebuffers_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 framebuffers_shm_id;
- uint32 framebuffers_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(GenFramebuffers) == 16,
- Sizeof_GenFramebuffers_is_not_16);
-COMPILE_ASSERT(offsetof(GenFramebuffers, header) == 0,
- OffsetOf_GenFramebuffers_header_not_0);
-COMPILE_ASSERT(offsetof(GenFramebuffers, n) == 4,
- OffsetOf_GenFramebuffers_n_not_4);
-COMPILE_ASSERT(offsetof(GenFramebuffers, framebuffers_shm_id) == 8,
- OffsetOf_GenFramebuffers_framebuffers_shm_id_not_8);
-COMPILE_ASSERT(offsetof(GenFramebuffers, framebuffers_shm_offset) == 12,
- OffsetOf_GenFramebuffers_framebuffers_shm_offset_not_12);
-
struct GenFramebuffersImmediate {
typedef GenFramebuffersImmediate ValueType;
static const CommandId kCmdId = kGenFramebuffersImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -2639,18 +2295,17 @@ struct GenFramebuffersImmediate {
void Init(GLsizei _n, GLuint* _framebuffers) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _framebuffers, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _framebuffers, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, GLuint* _framebuffers) {
static_cast<ValueType*>(cmd)->Init(_n, _framebuffers);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(GenFramebuffersImmediate) == 8,
@@ -2660,65 +2315,19 @@ COMPILE_ASSERT(offsetof(GenFramebuffersImmediate, header) == 0,
COMPILE_ASSERT(offsetof(GenFramebuffersImmediate, n) == 4,
OffsetOf_GenFramebuffersImmediate_n_not_4);
-struct GenRenderbuffers {
- typedef GenRenderbuffers ValueType;
- static const CommandId kCmdId = kGenRenderbuffers;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLsizei _n, uint32 _renderbuffers_shm_id,
- uint32 _renderbuffers_shm_offset) {
- SetHeader();
- n = _n;
- renderbuffers_shm_id = _renderbuffers_shm_id;
- renderbuffers_shm_offset = _renderbuffers_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _renderbuffers_shm_id,
- uint32 _renderbuffers_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _renderbuffers_shm_id, _renderbuffers_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 renderbuffers_shm_id;
- uint32 renderbuffers_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(GenRenderbuffers) == 16,
- Sizeof_GenRenderbuffers_is_not_16);
-COMPILE_ASSERT(offsetof(GenRenderbuffers, header) == 0,
- OffsetOf_GenRenderbuffers_header_not_0);
-COMPILE_ASSERT(offsetof(GenRenderbuffers, n) == 4,
- OffsetOf_GenRenderbuffers_n_not_4);
-COMPILE_ASSERT(offsetof(GenRenderbuffers, renderbuffers_shm_id) == 8,
- OffsetOf_GenRenderbuffers_renderbuffers_shm_id_not_8);
-COMPILE_ASSERT(offsetof(GenRenderbuffers, renderbuffers_shm_offset) == 12,
- OffsetOf_GenRenderbuffers_renderbuffers_shm_offset_not_12);
-
struct GenRenderbuffersImmediate {
typedef GenRenderbuffersImmediate ValueType;
static const CommandId kCmdId = kGenRenderbuffersImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -2728,18 +2337,17 @@ struct GenRenderbuffersImmediate {
void Init(GLsizei _n, GLuint* _renderbuffers) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _renderbuffers, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _renderbuffers, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, GLuint* _renderbuffers) {
static_cast<ValueType*>(cmd)->Init(_n, _renderbuffers);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(GenRenderbuffersImmediate) == 8,
@@ -2749,63 +2357,19 @@ COMPILE_ASSERT(offsetof(GenRenderbuffersImmediate, header) == 0,
COMPILE_ASSERT(offsetof(GenRenderbuffersImmediate, n) == 4,
OffsetOf_GenRenderbuffersImmediate_n_not_4);
-struct GenTextures {
- typedef GenTextures ValueType;
- static const CommandId kCmdId = kGenTextures;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _n, uint32 _textures_shm_id, uint32 _textures_shm_offset) {
- SetHeader();
- n = _n;
- textures_shm_id = _textures_shm_id;
- textures_shm_offset = _textures_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _textures_shm_id,
- uint32 _textures_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _textures_shm_id, _textures_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 textures_shm_id;
- uint32 textures_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(GenTextures) == 16,
- Sizeof_GenTextures_is_not_16);
-COMPILE_ASSERT(offsetof(GenTextures, header) == 0,
- OffsetOf_GenTextures_header_not_0);
-COMPILE_ASSERT(offsetof(GenTextures, n) == 4,
- OffsetOf_GenTextures_n_not_4);
-COMPILE_ASSERT(offsetof(GenTextures, textures_shm_id) == 8,
- OffsetOf_GenTextures_textures_shm_id_not_8);
-COMPILE_ASSERT(offsetof(GenTextures, textures_shm_offset) == 12,
- OffsetOf_GenTextures_textures_shm_offset_not_12);
-
struct GenTexturesImmediate {
typedef GenTexturesImmediate ValueType;
static const CommandId kCmdId = kGenTexturesImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -2815,18 +2379,17 @@ struct GenTexturesImmediate {
void Init(GLsizei _n, GLuint* _textures) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _textures, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _textures, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, GLuint* _textures) {
static_cast<ValueType*>(cmd)->Init(_n, _textures);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(GenTexturesImmediate) == 8,
@@ -2840,24 +2403,25 @@ struct GetActiveAttrib {
typedef GetActiveAttrib ValueType;
static const CommandId kCmdId = kGetActiveAttrib;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
struct Result {
- int32 success;
- int32 size;
- uint32 type;
+ int32_t success;
+ int32_t size;
+ uint32_t type;
};
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _program, GLuint _index, uint32 _name_bucket_id,
- uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _program,
+ GLuint _index,
+ uint32_t _name_bucket_id,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
program = _program;
index = _index;
@@ -2866,26 +2430,26 @@ struct GetActiveAttrib {
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _program, GLuint _index, uint32 _name_bucket_id,
- uint32 _result_shm_id, uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _program, _index, _name_bucket_id, _result_shm_id,
- _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _program,
+ GLuint _index,
+ uint32_t _name_bucket_id,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(
+ _program, _index, _name_bucket_id, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- uint32 index;
- uint32 name_bucket_id;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t program;
+ uint32_t index;
+ uint32_t name_bucket_id;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetActiveAttrib) == 24,
- Sizeof_GetActiveAttrib_is_not_24);
+COMPILE_ASSERT(sizeof(GetActiveAttrib) == 24, Sizeof_GetActiveAttrib_is_not_24);
COMPILE_ASSERT(offsetof(GetActiveAttrib, header) == 0,
OffsetOf_GetActiveAttrib_header_not_0);
COMPILE_ASSERT(offsetof(GetActiveAttrib, program) == 4,
@@ -2909,24 +2473,25 @@ struct GetActiveUniform {
typedef GetActiveUniform ValueType;
static const CommandId kCmdId = kGetActiveUniform;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
struct Result {
- int32 success;
- int32 size;
- uint32 type;
+ int32_t success;
+ int32_t size;
+ uint32_t type;
};
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _program, GLuint _index, uint32 _name_bucket_id,
- uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _program,
+ GLuint _index,
+ uint32_t _name_bucket_id,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
program = _program;
index = _index;
@@ -2935,22 +2500,23 @@ struct GetActiveUniform {
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _program, GLuint _index, uint32 _name_bucket_id,
- uint32 _result_shm_id, uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _program, _index, _name_bucket_id, _result_shm_id,
- _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _program,
+ GLuint _index,
+ uint32_t _name_bucket_id,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(
+ _program, _index, _name_bucket_id, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- uint32 index;
- uint32 name_bucket_id;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t program;
+ uint32_t index;
+ uint32_t name_bucket_id;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
COMPILE_ASSERT(sizeof(GetActiveUniform) == 24,
@@ -2978,20 +2544,20 @@ struct GetAttachedShaders {
typedef GetAttachedShaders ValueType;
static const CommandId kCmdId = kGetAttachedShaders;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLuint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _program, uint32 _result_shm_id, uint32 _result_shm_offset,
- uint32 _result_size) {
+ void Init(GLuint _program,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset,
+ uint32_t _result_size) {
SetHeader();
program = _program;
result_shm_id = _result_shm_id;
@@ -2999,19 +2565,21 @@ struct GetAttachedShaders {
result_size = _result_size;
}
- void* Set(
- void* cmd, GLuint _program, uint32 _result_shm_id,
- uint32 _result_shm_offset, uint32 _result_size) {
- static_cast<ValueType*>(
- cmd)->Init(_program, _result_shm_id, _result_shm_offset, _result_size);
+ void* Set(void* cmd,
+ GLuint _program,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset,
+ uint32_t _result_size) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_program, _result_shm_id, _result_shm_offset, _result_size);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- uint32 result_shm_id;
- uint32 result_shm_offset;
- uint32 result_size;
+ uint32_t program;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
+ uint32_t result_size;
};
COMPILE_ASSERT(sizeof(GetAttachedShaders) == 20,
@@ -3031,40 +2599,41 @@ struct GetBooleanv {
typedef GetBooleanv ValueType;
static const CommandId kCmdId = kGetBooleanv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLboolean> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLenum _pname, uint32 _params_shm_id, uint32 _params_shm_offset) {
+ void Init(GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
pname = _pname;
params_shm_id = _params_shm_id;
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetBooleanv) == 16,
- Sizeof_GetBooleanv_is_not_16);
+COMPILE_ASSERT(sizeof(GetBooleanv) == 16, Sizeof_GetBooleanv_is_not_16);
COMPILE_ASSERT(offsetof(GetBooleanv, header) == 0,
OffsetOf_GetBooleanv_header_not_0);
COMPILE_ASSERT(offsetof(GetBooleanv, pname) == 4,
@@ -3078,20 +2647,20 @@ struct GetBufferParameteriv {
typedef GetBufferParameteriv ValueType;
static const CommandId kCmdId = kGetBufferParameteriv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLenum _target,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
target = _target;
pname = _pname;
@@ -3099,19 +2668,21 @@ struct GetBufferParameteriv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t target;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
COMPILE_ASSERT(sizeof(GetBufferParameteriv) == 20,
@@ -3131,37 +2702,34 @@ struct GetError {
typedef GetError ValueType;
static const CommandId kCmdId = kGetError;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef GLenum Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(uint32_t _result_shm_id, uint32_t _result_shm_offset) {
SetHeader();
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(void* cmd, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void* Set(void* cmd, uint32_t _result_shm_id, uint32_t _result_shm_offset) {
static_cast<ValueType*>(cmd)->Init(_result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetError) == 12,
- Sizeof_GetError_is_not_12);
-COMPILE_ASSERT(offsetof(GetError, header) == 0,
- OffsetOf_GetError_header_not_0);
+COMPILE_ASSERT(sizeof(GetError) == 12, Sizeof_GetError_is_not_12);
+COMPILE_ASSERT(offsetof(GetError, header) == 0, OffsetOf_GetError_header_not_0);
COMPILE_ASSERT(offsetof(GetError, result_shm_id) == 4,
OffsetOf_GetError_result_shm_id_not_4);
COMPILE_ASSERT(offsetof(GetError, result_shm_offset) == 8,
@@ -3171,44 +2739,44 @@ struct GetFloatv {
typedef GetFloatv ValueType;
static const CommandId kCmdId = kGetFloatv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLfloat> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLenum _pname, uint32 _params_shm_id, uint32 _params_shm_offset) {
+ void Init(GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
pname = _pname;
params_shm_id = _params_shm_id;
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetFloatv) == 16,
- Sizeof_GetFloatv_is_not_16);
+COMPILE_ASSERT(sizeof(GetFloatv) == 16, Sizeof_GetFloatv_is_not_16);
COMPILE_ASSERT(offsetof(GetFloatv, header) == 0,
OffsetOf_GetFloatv_header_not_0);
-COMPILE_ASSERT(offsetof(GetFloatv, pname) == 4,
- OffsetOf_GetFloatv_pname_not_4);
+COMPILE_ASSERT(offsetof(GetFloatv, pname) == 4, OffsetOf_GetFloatv_pname_not_4);
COMPILE_ASSERT(offsetof(GetFloatv, params_shm_id) == 8,
OffsetOf_GetFloatv_params_shm_id_not_8);
COMPILE_ASSERT(offsetof(GetFloatv, params_shm_offset) == 12,
@@ -3218,20 +2786,21 @@ struct GetFramebufferAttachmentParameteriv {
typedef GetFramebufferAttachmentParameteriv ValueType;
static const CommandId kCmdId = kGetFramebufferAttachmentParameteriv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _attachment, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLenum _target,
+ GLenum _attachment,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
target = _target;
attachment = _attachment;
@@ -3240,21 +2809,23 @@ struct GetFramebufferAttachmentParameteriv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _attachment, GLenum _pname,
- uint32 _params_shm_id, uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _attachment, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _attachment,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(
+ _target, _attachment, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 attachment;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t target;
+ uint32_t attachment;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
COMPILE_ASSERT(sizeof(GetFramebufferAttachmentParameteriv) == 24,
@@ -3269,49 +2840,50 @@ COMPILE_ASSERT(offsetof(GetFramebufferAttachmentParameteriv, pname) == 12,
OffsetOf_GetFramebufferAttachmentParameteriv_pname_not_12);
COMPILE_ASSERT(
offsetof(GetFramebufferAttachmentParameteriv, params_shm_id) == 16,
- OffsetOf_GetFramebufferAttachmentParameteriv_params_shm_id_not_16); // NOLINT
+ OffsetOf_GetFramebufferAttachmentParameteriv_params_shm_id_not_16);
COMPILE_ASSERT(
offsetof(GetFramebufferAttachmentParameteriv, params_shm_offset) == 20,
- OffsetOf_GetFramebufferAttachmentParameteriv_params_shm_offset_not_20); // NOLINT
+ OffsetOf_GetFramebufferAttachmentParameteriv_params_shm_offset_not_20);
struct GetIntegerv {
typedef GetIntegerv ValueType;
static const CommandId kCmdId = kGetIntegerv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLenum _pname, uint32 _params_shm_id, uint32 _params_shm_offset) {
+ void Init(GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
pname = _pname;
params_shm_id = _params_shm_id;
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetIntegerv) == 16,
- Sizeof_GetIntegerv_is_not_16);
+COMPILE_ASSERT(sizeof(GetIntegerv) == 16, Sizeof_GetIntegerv_is_not_16);
COMPILE_ASSERT(offsetof(GetIntegerv, header) == 0,
OffsetOf_GetIntegerv_header_not_0);
COMPILE_ASSERT(offsetof(GetIntegerv, pname) == 4,
@@ -3325,20 +2897,20 @@ struct GetProgramiv {
typedef GetProgramiv ValueType;
static const CommandId kCmdId = kGetProgramiv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _program, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLuint _program,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
program = _program;
pname = _pname;
@@ -3346,23 +2918,24 @@ struct GetProgramiv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLuint _program, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_program, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLuint _program,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_program, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t program;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetProgramiv) == 20,
- Sizeof_GetProgramiv_is_not_20);
+COMPILE_ASSERT(sizeof(GetProgramiv) == 20, Sizeof_GetProgramiv_is_not_20);
COMPILE_ASSERT(offsetof(GetProgramiv, header) == 0,
OffsetOf_GetProgramiv_header_not_0);
COMPILE_ASSERT(offsetof(GetProgramiv, program) == 4,
@@ -3378,29 +2951,28 @@ struct GetProgramInfoLog {
typedef GetProgramInfoLog ValueType;
static const CommandId kCmdId = kGetProgramInfoLog;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _program, uint32 _bucket_id) {
+ void Init(GLuint _program, uint32_t _bucket_id) {
SetHeader();
program = _program;
bucket_id = _bucket_id;
}
- void* Set(void* cmd, GLuint _program, uint32 _bucket_id) {
+ void* Set(void* cmd, GLuint _program, uint32_t _bucket_id) {
static_cast<ValueType*>(cmd)->Init(_program, _bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- uint32 bucket_id;
+ uint32_t program;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(GetProgramInfoLog) == 12,
@@ -3416,20 +2988,20 @@ struct GetRenderbufferParameteriv {
typedef GetRenderbufferParameteriv ValueType;
static const CommandId kCmdId = kGetRenderbufferParameteriv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLenum _target,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
target = _target;
pname = _pname;
@@ -3437,19 +3009,21 @@ struct GetRenderbufferParameteriv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t target;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
COMPILE_ASSERT(sizeof(GetRenderbufferParameteriv) == 20,
@@ -3469,20 +3043,20 @@ struct GetShaderiv {
typedef GetShaderiv ValueType;
static const CommandId kCmdId = kGetShaderiv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _shader, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLuint _shader,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
shader = _shader;
pname = _pname;
@@ -3490,23 +3064,24 @@ struct GetShaderiv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLuint _shader, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_shader, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLuint _shader,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_shader, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 shader;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t shader;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetShaderiv) == 20,
- Sizeof_GetShaderiv_is_not_20);
+COMPILE_ASSERT(sizeof(GetShaderiv) == 20, Sizeof_GetShaderiv_is_not_20);
COMPILE_ASSERT(offsetof(GetShaderiv, header) == 0,
OffsetOf_GetShaderiv_header_not_0);
COMPILE_ASSERT(offsetof(GetShaderiv, shader) == 4,
@@ -3522,29 +3097,28 @@ struct GetShaderInfoLog {
typedef GetShaderInfoLog ValueType;
static const CommandId kCmdId = kGetShaderInfoLog;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _shader, uint32 _bucket_id) {
+ void Init(GLuint _shader, uint32_t _bucket_id) {
SetHeader();
shader = _shader;
bucket_id = _bucket_id;
}
- void* Set(void* cmd, GLuint _shader, uint32 _bucket_id) {
+ void* Set(void* cmd, GLuint _shader, uint32_t _bucket_id) {
static_cast<ValueType*>(cmd)->Init(_shader, _bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 shader;
- uint32 bucket_id;
+ uint32_t shader;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(GetShaderInfoLog) == 12,
@@ -3560,25 +3134,25 @@ struct GetShaderPrecisionFormat {
typedef GetShaderPrecisionFormat ValueType;
static const CommandId kCmdId = kGetShaderPrecisionFormat;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
struct Result {
- int32 success;
- int32 min_range;
- int32 max_range;
- int32 precision;
+ int32_t success;
+ int32_t min_range;
+ int32_t max_range;
+ int32_t precision;
};
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _shadertype, GLenum _precisiontype, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
+ void Init(GLenum _shadertype,
+ GLenum _precisiontype,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
shadertype = _shadertype;
precisiontype = _precisiontype;
@@ -3586,20 +3160,21 @@ struct GetShaderPrecisionFormat {
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLenum _shadertype, GLenum _precisiontype,
- uint32 _result_shm_id, uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _shadertype, _precisiontype, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLenum _shadertype,
+ GLenum _precisiontype,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_shadertype, _precisiontype, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 shadertype;
- uint32 precisiontype;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t shadertype;
+ uint32_t precisiontype;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
COMPILE_ASSERT(sizeof(GetShaderPrecisionFormat) == 20,
@@ -3627,33 +3202,31 @@ struct GetShaderSource {
typedef GetShaderSource ValueType;
static const CommandId kCmdId = kGetShaderSource;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _shader, uint32 _bucket_id) {
+ void Init(GLuint _shader, uint32_t _bucket_id) {
SetHeader();
shader = _shader;
bucket_id = _bucket_id;
}
- void* Set(void* cmd, GLuint _shader, uint32 _bucket_id) {
+ void* Set(void* cmd, GLuint _shader, uint32_t _bucket_id) {
static_cast<ValueType*>(cmd)->Init(_shader, _bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 shader;
- uint32 bucket_id;
+ uint32_t shader;
+ uint32_t bucket_id;
};
-COMPILE_ASSERT(sizeof(GetShaderSource) == 12,
- Sizeof_GetShaderSource_is_not_12);
+COMPILE_ASSERT(sizeof(GetShaderSource) == 12, Sizeof_GetShaderSource_is_not_12);
COMPILE_ASSERT(offsetof(GetShaderSource, header) == 0,
OffsetOf_GetShaderSource_header_not_0);
COMPILE_ASSERT(offsetof(GetShaderSource, shader) == 4,
@@ -3665,37 +3238,34 @@ struct GetString {
typedef GetString ValueType;
static const CommandId kCmdId = kGetString;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLenum _name, uint32 _bucket_id) {
+ void Init(GLenum _name, uint32_t _bucket_id) {
SetHeader();
name = _name;
bucket_id = _bucket_id;
}
- void* Set(void* cmd, GLenum _name, uint32 _bucket_id) {
+ void* Set(void* cmd, GLenum _name, uint32_t _bucket_id) {
static_cast<ValueType*>(cmd)->Init(_name, _bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 name;
- uint32 bucket_id;
+ uint32_t name;
+ uint32_t bucket_id;
};
-COMPILE_ASSERT(sizeof(GetString) == 12,
- Sizeof_GetString_is_not_12);
+COMPILE_ASSERT(sizeof(GetString) == 12, Sizeof_GetString_is_not_12);
COMPILE_ASSERT(offsetof(GetString, header) == 0,
OffsetOf_GetString_header_not_0);
-COMPILE_ASSERT(offsetof(GetString, name) == 4,
- OffsetOf_GetString_name_not_4);
+COMPILE_ASSERT(offsetof(GetString, name) == 4, OffsetOf_GetString_name_not_4);
COMPILE_ASSERT(offsetof(GetString, bucket_id) == 8,
OffsetOf_GetString_bucket_id_not_8);
@@ -3703,20 +3273,20 @@ struct GetTexParameterfv {
typedef GetTexParameterfv ValueType;
static const CommandId kCmdId = kGetTexParameterfv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLfloat> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLenum _target,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
target = _target;
pname = _pname;
@@ -3724,19 +3294,21 @@ struct GetTexParameterfv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t target;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
COMPILE_ASSERT(sizeof(GetTexParameterfv) == 20,
@@ -3756,20 +3328,20 @@ struct GetTexParameteriv {
typedef GetTexParameteriv ValueType;
static const CommandId kCmdId = kGetTexParameteriv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLenum _target,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
target = _target;
pname = _pname;
@@ -3777,19 +3349,21 @@ struct GetTexParameteriv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t target;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
COMPILE_ASSERT(sizeof(GetTexParameteriv) == 20,
@@ -3809,20 +3383,20 @@ struct GetUniformfv {
typedef GetUniformfv ValueType;
static const CommandId kCmdId = kGetUniformfv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLfloat> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _program, GLint _location, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLuint _program,
+ GLint _location,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
program = _program;
location = _location;
@@ -3830,23 +3404,24 @@ struct GetUniformfv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLuint _program, GLint _location, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_program, _location, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLuint _program,
+ GLint _location,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_program, _location, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- int32 location;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t program;
+ int32_t location;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetUniformfv) == 20,
- Sizeof_GetUniformfv_is_not_20);
+COMPILE_ASSERT(sizeof(GetUniformfv) == 20, Sizeof_GetUniformfv_is_not_20);
COMPILE_ASSERT(offsetof(GetUniformfv, header) == 0,
OffsetOf_GetUniformfv_header_not_0);
COMPILE_ASSERT(offsetof(GetUniformfv, program) == 4,
@@ -3862,20 +3437,20 @@ struct GetUniformiv {
typedef GetUniformiv ValueType;
static const CommandId kCmdId = kGetUniformiv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _program, GLint _location, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLuint _program,
+ GLint _location,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
program = _program;
location = _location;
@@ -3883,23 +3458,24 @@ struct GetUniformiv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLuint _program, GLint _location, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_program, _location, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLuint _program,
+ GLint _location,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_program, _location, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- int32 location;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t program;
+ int32_t location;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
-COMPILE_ASSERT(sizeof(GetUniformiv) == 20,
- Sizeof_GetUniformiv_is_not_20);
+COMPILE_ASSERT(sizeof(GetUniformiv) == 20, Sizeof_GetUniformiv_is_not_20);
COMPILE_ASSERT(offsetof(GetUniformiv, header) == 0,
OffsetOf_GetUniformiv_header_not_0);
COMPILE_ASSERT(offsetof(GetUniformiv, program) == 4,
@@ -3915,20 +3491,20 @@ struct GetVertexAttribfv {
typedef GetVertexAttribfv ValueType;
static const CommandId kCmdId = kGetVertexAttribfv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLfloat> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _index, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLuint _index,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
index = _index;
pname = _pname;
@@ -3936,19 +3512,21 @@ struct GetVertexAttribfv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLuint _index, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_index, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLuint _index,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_index, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 index;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t index;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
COMPILE_ASSERT(sizeof(GetVertexAttribfv) == 20,
@@ -3968,20 +3546,20 @@ struct GetVertexAttribiv {
typedef GetVertexAttribiv ValueType;
static const CommandId kCmdId = kGetVertexAttribiv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _index, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
+ void Init(GLuint _index,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
SetHeader();
index = _index;
pname = _pname;
@@ -3989,19 +3567,21 @@ struct GetVertexAttribiv {
params_shm_offset = _params_shm_offset;
}
- void* Set(
- void* cmd, GLuint _index, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_index, _pname, _params_shm_id, _params_shm_offset);
+ void* Set(void* cmd,
+ GLuint _index,
+ GLenum _pname,
+ uint32_t _params_shm_id,
+ uint32_t _params_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_index, _pname, _params_shm_id, _params_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 index;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
+ uint32_t index;
+ uint32_t pname;
+ uint32_t params_shm_id;
+ uint32_t params_shm_offset;
};
COMPILE_ASSERT(sizeof(GetVertexAttribiv) == 20,
@@ -4021,20 +3601,20 @@ struct GetVertexAttribPointerv {
typedef GetVertexAttribPointerv ValueType;
static const CommandId kCmdId = kGetVertexAttribPointerv;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef SizedResult<GLuint> Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _index, GLenum _pname, uint32 _pointer_shm_id,
- uint32 _pointer_shm_offset) {
+ void Init(GLuint _index,
+ GLenum _pname,
+ uint32_t _pointer_shm_id,
+ uint32_t _pointer_shm_offset) {
SetHeader();
index = _index;
pname = _pname;
@@ -4042,19 +3622,21 @@ struct GetVertexAttribPointerv {
pointer_shm_offset = _pointer_shm_offset;
}
- void* Set(
- void* cmd, GLuint _index, GLenum _pname, uint32 _pointer_shm_id,
- uint32 _pointer_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_index, _pname, _pointer_shm_id, _pointer_shm_offset);
+ void* Set(void* cmd,
+ GLuint _index,
+ GLenum _pname,
+ uint32_t _pointer_shm_id,
+ uint32_t _pointer_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_index, _pname, _pointer_shm_id, _pointer_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 index;
- uint32 pname;
- uint32 pointer_shm_id;
- uint32 pointer_shm_offset;
+ uint32_t index;
+ uint32_t pname;
+ uint32_t pointer_shm_id;
+ uint32_t pointer_shm_offset;
};
COMPILE_ASSERT(sizeof(GetVertexAttribPointerv) == 20,
@@ -4074,14 +3656,13 @@ struct Hint {
typedef Hint ValueType;
static const CommandId kCmdId = kHint;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLenum _mode) {
SetHeader();
@@ -4095,61 +3676,56 @@ struct Hint {
}
gpu::CommandHeader header;
- uint32 target;
- uint32 mode;
+ uint32_t target;
+ uint32_t mode;
};
-COMPILE_ASSERT(sizeof(Hint) == 12,
- Sizeof_Hint_is_not_12);
-COMPILE_ASSERT(offsetof(Hint, header) == 0,
- OffsetOf_Hint_header_not_0);
-COMPILE_ASSERT(offsetof(Hint, target) == 4,
- OffsetOf_Hint_target_not_4);
-COMPILE_ASSERT(offsetof(Hint, mode) == 8,
- OffsetOf_Hint_mode_not_8);
+COMPILE_ASSERT(sizeof(Hint) == 12, Sizeof_Hint_is_not_12);
+COMPILE_ASSERT(offsetof(Hint, header) == 0, OffsetOf_Hint_header_not_0);
+COMPILE_ASSERT(offsetof(Hint, target) == 4, OffsetOf_Hint_target_not_4);
+COMPILE_ASSERT(offsetof(Hint, mode) == 8, OffsetOf_Hint_mode_not_8);
struct IsBuffer {
typedef IsBuffer ValueType;
static const CommandId kCmdId = kIsBuffer;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _buffer, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _buffer,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
buffer = _buffer;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _buffer, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_buffer, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _buffer,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_buffer, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 buffer;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t buffer;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(IsBuffer) == 16,
- Sizeof_IsBuffer_is_not_16);
-COMPILE_ASSERT(offsetof(IsBuffer, header) == 0,
- OffsetOf_IsBuffer_header_not_0);
-COMPILE_ASSERT(offsetof(IsBuffer, buffer) == 4,
- OffsetOf_IsBuffer_buffer_not_4);
+COMPILE_ASSERT(sizeof(IsBuffer) == 16, Sizeof_IsBuffer_is_not_16);
+COMPILE_ASSERT(offsetof(IsBuffer, header) == 0, OffsetOf_IsBuffer_header_not_0);
+COMPILE_ASSERT(offsetof(IsBuffer, buffer) == 4, OffsetOf_IsBuffer_buffer_not_4);
COMPILE_ASSERT(offsetof(IsBuffer, result_shm_id) == 8,
OffsetOf_IsBuffer_result_shm_id_not_8);
COMPILE_ASSERT(offsetof(IsBuffer, result_shm_offset) == 12,
@@ -4159,44 +3735,42 @@ struct IsEnabled {
typedef IsEnabled ValueType;
static const CommandId kCmdId = kIsEnabled;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLenum _cap, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLenum _cap, uint32_t _result_shm_id, uint32_t _result_shm_offset) {
SetHeader();
cap = _cap;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLenum _cap, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_cap, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLenum _cap,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_cap, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 cap;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t cap;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(IsEnabled) == 16,
- Sizeof_IsEnabled_is_not_16);
+COMPILE_ASSERT(sizeof(IsEnabled) == 16, Sizeof_IsEnabled_is_not_16);
COMPILE_ASSERT(offsetof(IsEnabled, header) == 0,
OffsetOf_IsEnabled_header_not_0);
-COMPILE_ASSERT(offsetof(IsEnabled, cap) == 4,
- OffsetOf_IsEnabled_cap_not_4);
+COMPILE_ASSERT(offsetof(IsEnabled, cap) == 4, OffsetOf_IsEnabled_cap_not_4);
COMPILE_ASSERT(offsetof(IsEnabled, result_shm_id) == 8,
OffsetOf_IsEnabled_result_shm_id_not_8);
COMPILE_ASSERT(offsetof(IsEnabled, result_shm_offset) == 12,
@@ -4206,41 +3780,41 @@ struct IsFramebuffer {
typedef IsFramebuffer ValueType;
static const CommandId kCmdId = kIsFramebuffer;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _framebuffer, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _framebuffer,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
framebuffer = _framebuffer;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _framebuffer, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_framebuffer, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _framebuffer,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_framebuffer, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 framebuffer;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t framebuffer;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(IsFramebuffer) == 16,
- Sizeof_IsFramebuffer_is_not_16);
+COMPILE_ASSERT(sizeof(IsFramebuffer) == 16, Sizeof_IsFramebuffer_is_not_16);
COMPILE_ASSERT(offsetof(IsFramebuffer, header) == 0,
OffsetOf_IsFramebuffer_header_not_0);
COMPILE_ASSERT(offsetof(IsFramebuffer, framebuffer) == 4,
@@ -4254,41 +3828,41 @@ struct IsProgram {
typedef IsProgram ValueType;
static const CommandId kCmdId = kIsProgram;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _program, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _program,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
program = _program;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _program, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_program, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _program,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_program, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t program;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(IsProgram) == 16,
- Sizeof_IsProgram_is_not_16);
+COMPILE_ASSERT(sizeof(IsProgram) == 16, Sizeof_IsProgram_is_not_16);
COMPILE_ASSERT(offsetof(IsProgram, header) == 0,
OffsetOf_IsProgram_header_not_0);
COMPILE_ASSERT(offsetof(IsProgram, program) == 4,
@@ -4302,41 +3876,41 @@ struct IsRenderbuffer {
typedef IsRenderbuffer ValueType;
static const CommandId kCmdId = kIsRenderbuffer;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _renderbuffer, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _renderbuffer,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
renderbuffer = _renderbuffer;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _renderbuffer, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_renderbuffer, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _renderbuffer,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_renderbuffer, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 renderbuffer;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t renderbuffer;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(IsRenderbuffer) == 16,
- Sizeof_IsRenderbuffer_is_not_16);
+COMPILE_ASSERT(sizeof(IsRenderbuffer) == 16, Sizeof_IsRenderbuffer_is_not_16);
COMPILE_ASSERT(offsetof(IsRenderbuffer, header) == 0,
OffsetOf_IsRenderbuffer_header_not_0);
COMPILE_ASSERT(offsetof(IsRenderbuffer, renderbuffer) == 4,
@@ -4350,44 +3924,43 @@ struct IsShader {
typedef IsShader ValueType;
static const CommandId kCmdId = kIsShader;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _shader, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _shader,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
shader = _shader;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _shader, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_shader, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _shader,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_shader, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 shader;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t shader;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(IsShader) == 16,
- Sizeof_IsShader_is_not_16);
-COMPILE_ASSERT(offsetof(IsShader, header) == 0,
- OffsetOf_IsShader_header_not_0);
-COMPILE_ASSERT(offsetof(IsShader, shader) == 4,
- OffsetOf_IsShader_shader_not_4);
+COMPILE_ASSERT(sizeof(IsShader) == 16, Sizeof_IsShader_is_not_16);
+COMPILE_ASSERT(offsetof(IsShader, header) == 0, OffsetOf_IsShader_header_not_0);
+COMPILE_ASSERT(offsetof(IsShader, shader) == 4, OffsetOf_IsShader_shader_not_4);
COMPILE_ASSERT(offsetof(IsShader, result_shm_id) == 8,
OffsetOf_IsShader_result_shm_id_not_8);
COMPILE_ASSERT(offsetof(IsShader, result_shm_offset) == 12,
@@ -4397,41 +3970,41 @@ struct IsTexture {
typedef IsTexture ValueType;
static const CommandId kCmdId = kIsTexture;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _texture, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _texture,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
texture = _texture;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _texture, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_texture, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _texture,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_texture, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 texture;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t texture;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
-COMPILE_ASSERT(sizeof(IsTexture) == 16,
- Sizeof_IsTexture_is_not_16);
+COMPILE_ASSERT(sizeof(IsTexture) == 16, Sizeof_IsTexture_is_not_16);
COMPILE_ASSERT(offsetof(IsTexture, header) == 0,
OffsetOf_IsTexture_header_not_0);
COMPILE_ASSERT(offsetof(IsTexture, texture) == 4,
@@ -4445,14 +4018,13 @@ struct LineWidth {
typedef LineWidth ValueType;
static const CommandId kCmdId = kLineWidth;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLfloat _width) {
SetHeader();
@@ -4468,25 +4040,22 @@ struct LineWidth {
float width;
};
-COMPILE_ASSERT(sizeof(LineWidth) == 8,
- Sizeof_LineWidth_is_not_8);
+COMPILE_ASSERT(sizeof(LineWidth) == 8, Sizeof_LineWidth_is_not_8);
COMPILE_ASSERT(offsetof(LineWidth, header) == 0,
OffsetOf_LineWidth_header_not_0);
-COMPILE_ASSERT(offsetof(LineWidth, width) == 4,
- OffsetOf_LineWidth_width_not_4);
+COMPILE_ASSERT(offsetof(LineWidth, width) == 4, OffsetOf_LineWidth_width_not_4);
struct LinkProgram {
typedef LinkProgram ValueType;
static const CommandId kCmdId = kLinkProgram;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _program) {
SetHeader();
@@ -4499,11 +4068,10 @@ struct LinkProgram {
}
gpu::CommandHeader header;
- uint32 program;
+ uint32_t program;
};
-COMPILE_ASSERT(sizeof(LinkProgram) == 8,
- Sizeof_LinkProgram_is_not_8);
+COMPILE_ASSERT(sizeof(LinkProgram) == 8, Sizeof_LinkProgram_is_not_8);
COMPILE_ASSERT(offsetof(LinkProgram, header) == 0,
OffsetOf_LinkProgram_header_not_0);
COMPILE_ASSERT(offsetof(LinkProgram, program) == 4,
@@ -4513,14 +4081,13 @@ struct PixelStorei {
typedef PixelStorei ValueType;
static const CommandId kCmdId = kPixelStorei;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _pname, GLint _param) {
SetHeader();
@@ -4534,12 +4101,11 @@ struct PixelStorei {
}
gpu::CommandHeader header;
- uint32 pname;
- int32 param;
+ uint32_t pname;
+ int32_t param;
};
-COMPILE_ASSERT(sizeof(PixelStorei) == 12,
- Sizeof_PixelStorei_is_not_12);
+COMPILE_ASSERT(sizeof(PixelStorei) == 12, Sizeof_PixelStorei_is_not_12);
COMPILE_ASSERT(offsetof(PixelStorei, header) == 0,
OffsetOf_PixelStorei_header_not_0);
COMPILE_ASSERT(offsetof(PixelStorei, pname) == 4,
@@ -4551,14 +4117,13 @@ struct PolygonOffset {
typedef PolygonOffset ValueType;
static const CommandId kCmdId = kPolygonOffset;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLfloat _factor, GLfloat _units) {
SetHeader();
@@ -4576,8 +4141,7 @@ struct PolygonOffset {
float units;
};
-COMPILE_ASSERT(sizeof(PolygonOffset) == 12,
- Sizeof_PolygonOffset_is_not_12);
+COMPILE_ASSERT(sizeof(PolygonOffset) == 12, Sizeof_PolygonOffset_is_not_12);
COMPILE_ASSERT(offsetof(PolygonOffset, header) == 0,
OffsetOf_PolygonOffset_header_not_0);
COMPILE_ASSERT(offsetof(PolygonOffset, factor) == 4,
@@ -4592,21 +4156,27 @@ struct ReadPixels {
typedef ReadPixels ValueType;
static const CommandId kCmdId = kReadPixels;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLint _x, GLint _y, GLsizei _width, GLsizei _height, GLenum _format,
- GLenum _type, uint32 _pixels_shm_id, uint32 _pixels_shm_offset,
- uint32 _result_shm_id, uint32 _result_shm_offset, GLboolean _async) {
+ void Init(GLint _x,
+ GLint _y,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _pixels_shm_id,
+ uint32_t _pixels_shm_offset,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset,
+ GLboolean _async) {
SetHeader();
x = _x;
y = _y;
@@ -4621,40 +4191,51 @@ struct ReadPixels {
async = _async;
}
- void* Set(
- void* cmd, GLint _x, GLint _y, GLsizei _width, GLsizei _height,
- GLenum _format, GLenum _type, uint32 _pixels_shm_id,
- uint32 _pixels_shm_offset, uint32 _result_shm_id,
- uint32 _result_shm_offset, GLboolean _async) {
- static_cast<ValueType*>(
- cmd)->Init(
- _x, _y, _width, _height, _format, _type, _pixels_shm_id,
- _pixels_shm_offset, _result_shm_id, _result_shm_offset, _async);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 x;
- int32 y;
- int32 width;
- int32 height;
- uint32 format;
- uint32 type;
- uint32 pixels_shm_id;
- uint32 pixels_shm_offset;
- uint32 result_shm_id;
- uint32 result_shm_offset;
- uint32 async;
-};
-
-COMPILE_ASSERT(sizeof(ReadPixels) == 48,
- Sizeof_ReadPixels_is_not_48);
+ void* Set(void* cmd,
+ GLint _x,
+ GLint _y,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _pixels_shm_id,
+ uint32_t _pixels_shm_offset,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset,
+ GLboolean _async) {
+ static_cast<ValueType*>(cmd)->Init(_x,
+ _y,
+ _width,
+ _height,
+ _format,
+ _type,
+ _pixels_shm_id,
+ _pixels_shm_offset,
+ _result_shm_id,
+ _result_shm_offset,
+ _async);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ int32_t x;
+ int32_t y;
+ int32_t width;
+ int32_t height;
+ uint32_t format;
+ uint32_t type;
+ uint32_t pixels_shm_id;
+ uint32_t pixels_shm_offset;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
+ uint32_t async;
+};
+
+COMPILE_ASSERT(sizeof(ReadPixels) == 48, Sizeof_ReadPixels_is_not_48);
COMPILE_ASSERT(offsetof(ReadPixels, header) == 0,
OffsetOf_ReadPixels_header_not_0);
-COMPILE_ASSERT(offsetof(ReadPixels, x) == 4,
- OffsetOf_ReadPixels_x_not_4);
-COMPILE_ASSERT(offsetof(ReadPixels, y) == 8,
- OffsetOf_ReadPixels_y_not_8);
+COMPILE_ASSERT(offsetof(ReadPixels, x) == 4, OffsetOf_ReadPixels_x_not_4);
+COMPILE_ASSERT(offsetof(ReadPixels, y) == 8, OffsetOf_ReadPixels_y_not_8);
COMPILE_ASSERT(offsetof(ReadPixels, width) == 12,
OffsetOf_ReadPixels_width_not_12);
COMPILE_ASSERT(offsetof(ReadPixels, height) == 16,
@@ -4678,18 +4259,15 @@ struct ReleaseShaderCompiler {
typedef ReleaseShaderCompiler ValueType;
static const CommandId kCmdId = kReleaseShaderCompiler;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init() {
- SetHeader();
- }
+ void Init() { SetHeader(); }
void* Set(void* cmd) {
static_cast<ValueType*>(cmd)->Init();
@@ -4708,18 +4286,18 @@ struct RenderbufferStorage {
typedef RenderbufferStorage ValueType;
static const CommandId kCmdId = kRenderbufferStorage;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _internalformat, GLsizei _width,
- GLsizei _height) {
+ void Init(GLenum _target,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height) {
SetHeader();
target = _target;
internalformat = _internalformat;
@@ -4727,19 +4305,21 @@ struct RenderbufferStorage {
height = _height;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _internalformat, GLsizei _width,
- GLsizei _height) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _internalformat, _width, _height);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _internalformat, _width, _height);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 internalformat;
- int32 width;
- int32 height;
+ uint32_t target;
+ uint32_t internalformat;
+ int32_t width;
+ int32_t height;
};
COMPILE_ASSERT(sizeof(RenderbufferStorage) == 20,
@@ -4759,14 +4339,13 @@ struct SampleCoverage {
typedef SampleCoverage ValueType;
static const CommandId kCmdId = kSampleCoverage;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLclampf _value, GLboolean _invert) {
SetHeader();
@@ -4781,11 +4360,10 @@ struct SampleCoverage {
gpu::CommandHeader header;
float value;
- uint32 invert;
+ uint32_t invert;
};
-COMPILE_ASSERT(sizeof(SampleCoverage) == 12,
- Sizeof_SampleCoverage_is_not_12);
+COMPILE_ASSERT(sizeof(SampleCoverage) == 12, Sizeof_SampleCoverage_is_not_12);
COMPILE_ASSERT(offsetof(SampleCoverage, header) == 0,
OffsetOf_SampleCoverage_header_not_0);
COMPILE_ASSERT(offsetof(SampleCoverage, value) == 4,
@@ -4797,14 +4375,13 @@ struct Scissor {
typedef Scissor ValueType;
static const CommandId kCmdId = kScissor;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _x, GLint _y, GLsizei _width, GLsizei _height) {
SetHeader();
@@ -4820,42 +4397,38 @@ struct Scissor {
}
gpu::CommandHeader header;
- int32 x;
- int32 y;
- int32 width;
- int32 height;
+ int32_t x;
+ int32_t y;
+ int32_t width;
+ int32_t height;
};
-COMPILE_ASSERT(sizeof(Scissor) == 20,
- Sizeof_Scissor_is_not_20);
-COMPILE_ASSERT(offsetof(Scissor, header) == 0,
- OffsetOf_Scissor_header_not_0);
-COMPILE_ASSERT(offsetof(Scissor, x) == 4,
- OffsetOf_Scissor_x_not_4);
-COMPILE_ASSERT(offsetof(Scissor, y) == 8,
- OffsetOf_Scissor_y_not_8);
-COMPILE_ASSERT(offsetof(Scissor, width) == 12,
- OffsetOf_Scissor_width_not_12);
-COMPILE_ASSERT(offsetof(Scissor, height) == 16,
- OffsetOf_Scissor_height_not_16);
+COMPILE_ASSERT(sizeof(Scissor) == 20, Sizeof_Scissor_is_not_20);
+COMPILE_ASSERT(offsetof(Scissor, header) == 0, OffsetOf_Scissor_header_not_0);
+COMPILE_ASSERT(offsetof(Scissor, x) == 4, OffsetOf_Scissor_x_not_4);
+COMPILE_ASSERT(offsetof(Scissor, y) == 8, OffsetOf_Scissor_y_not_8);
+COMPILE_ASSERT(offsetof(Scissor, width) == 12, OffsetOf_Scissor_width_not_12);
+COMPILE_ASSERT(offsetof(Scissor, height) == 16, OffsetOf_Scissor_height_not_16);
struct ShaderBinary {
typedef ShaderBinary ValueType;
static const CommandId kCmdId = kShaderBinary;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLsizei _n, uint32 _shaders_shm_id, uint32 _shaders_shm_offset,
- GLenum _binaryformat, uint32 _binary_shm_id, uint32 _binary_shm_offset,
- GLsizei _length) {
+ void Init(GLsizei _n,
+ uint32_t _shaders_shm_id,
+ uint32_t _shaders_shm_offset,
+ GLenum _binaryformat,
+ uint32_t _binary_shm_id,
+ uint32_t _binary_shm_offset,
+ GLsizei _length) {
SetHeader();
n = _n;
shaders_shm_id = _shaders_shm_id;
@@ -4866,33 +4439,38 @@ struct ShaderBinary {
length = _length;
}
- void* Set(
- void* cmd, GLsizei _n, uint32 _shaders_shm_id, uint32 _shaders_shm_offset,
- GLenum _binaryformat, uint32 _binary_shm_id, uint32 _binary_shm_offset,
- GLsizei _length) {
- static_cast<ValueType*>(
- cmd)->Init(
- _n, _shaders_shm_id, _shaders_shm_offset, _binaryformat,
- _binary_shm_id, _binary_shm_offset, _length);
+ void* Set(void* cmd,
+ GLsizei _n,
+ uint32_t _shaders_shm_id,
+ uint32_t _shaders_shm_offset,
+ GLenum _binaryformat,
+ uint32_t _binary_shm_id,
+ uint32_t _binary_shm_offset,
+ GLsizei _length) {
+ static_cast<ValueType*>(cmd)->Init(_n,
+ _shaders_shm_id,
+ _shaders_shm_offset,
+ _binaryformat,
+ _binary_shm_id,
+ _binary_shm_offset,
+ _length);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- int32 n;
- uint32 shaders_shm_id;
- uint32 shaders_shm_offset;
- uint32 binaryformat;
- uint32 binary_shm_id;
- uint32 binary_shm_offset;
- int32 length;
+ int32_t n;
+ uint32_t shaders_shm_id;
+ uint32_t shaders_shm_offset;
+ uint32_t binaryformat;
+ uint32_t binary_shm_id;
+ uint32_t binary_shm_offset;
+ int32_t length;
};
-COMPILE_ASSERT(sizeof(ShaderBinary) == 32,
- Sizeof_ShaderBinary_is_not_32);
+COMPILE_ASSERT(sizeof(ShaderBinary) == 32, Sizeof_ShaderBinary_is_not_32);
COMPILE_ASSERT(offsetof(ShaderBinary, header) == 0,
OffsetOf_ShaderBinary_header_not_0);
-COMPILE_ASSERT(offsetof(ShaderBinary, n) == 4,
- OffsetOf_ShaderBinary_n_not_4);
+COMPILE_ASSERT(offsetof(ShaderBinary, n) == 4, OffsetOf_ShaderBinary_n_not_4);
COMPILE_ASSERT(offsetof(ShaderBinary, shaders_shm_id) == 8,
OffsetOf_ShaderBinary_shaders_shm_id_not_8);
COMPILE_ASSERT(offsetof(ShaderBinary, shaders_shm_offset) == 12,
@@ -4906,84 +4484,32 @@ COMPILE_ASSERT(offsetof(ShaderBinary, binary_shm_offset) == 24,
COMPILE_ASSERT(offsetof(ShaderBinary, length) == 28,
OffsetOf_ShaderBinary_length_not_28);
-struct ShaderSource {
- typedef ShaderSource ValueType;
- static const CommandId kCmdId = kShaderSource;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLuint _shader, uint32 _data_shm_id, uint32 _data_shm_offset,
- uint32 _data_size) {
- SetHeader();
- shader = _shader;
- data_shm_id = _data_shm_id;
- data_shm_offset = _data_shm_offset;
- data_size = _data_size;
- }
-
- void* Set(
- void* cmd, GLuint _shader, uint32 _data_shm_id, uint32 _data_shm_offset,
- uint32 _data_size) {
- static_cast<ValueType*>(
- cmd)->Init(_shader, _data_shm_id, _data_shm_offset, _data_size);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 shader;
- uint32 data_shm_id;
- uint32 data_shm_offset;
- uint32 data_size;
-};
-
-COMPILE_ASSERT(sizeof(ShaderSource) == 20,
- Sizeof_ShaderSource_is_not_20);
-COMPILE_ASSERT(offsetof(ShaderSource, header) == 0,
- OffsetOf_ShaderSource_header_not_0);
-COMPILE_ASSERT(offsetof(ShaderSource, shader) == 4,
- OffsetOf_ShaderSource_shader_not_4);
-COMPILE_ASSERT(offsetof(ShaderSource, data_shm_id) == 8,
- OffsetOf_ShaderSource_data_shm_id_not_8);
-COMPILE_ASSERT(offsetof(ShaderSource, data_shm_offset) == 12,
- OffsetOf_ShaderSource_data_shm_offset_not_12);
-COMPILE_ASSERT(offsetof(ShaderSource, data_size) == 16,
- OffsetOf_ShaderSource_data_size_not_16);
-
struct ShaderSourceBucket {
typedef ShaderSourceBucket ValueType;
static const CommandId kCmdId = kShaderSourceBucket;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _shader, uint32 _data_bucket_id) {
+ void Init(GLuint _shader, uint32_t _data_bucket_id) {
SetHeader();
shader = _shader;
data_bucket_id = _data_bucket_id;
}
- void* Set(void* cmd, GLuint _shader, uint32 _data_bucket_id) {
+ void* Set(void* cmd, GLuint _shader, uint32_t _data_bucket_id) {
static_cast<ValueType*>(cmd)->Init(_shader, _data_bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 shader;
- uint32 data_bucket_id;
+ uint32_t shader;
+ uint32_t data_bucket_id;
};
COMPILE_ASSERT(sizeof(ShaderSourceBucket) == 12,
@@ -4999,14 +4525,13 @@ struct StencilFunc {
typedef StencilFunc ValueType;
static const CommandId kCmdId = kStencilFunc;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _func, GLint _ref, GLuint _mask) {
SetHeader();
@@ -5021,19 +4546,17 @@ struct StencilFunc {
}
gpu::CommandHeader header;
- uint32 func;
- int32 ref;
- uint32 mask;
+ uint32_t func;
+ int32_t ref;
+ uint32_t mask;
};
-COMPILE_ASSERT(sizeof(StencilFunc) == 16,
- Sizeof_StencilFunc_is_not_16);
+COMPILE_ASSERT(sizeof(StencilFunc) == 16, Sizeof_StencilFunc_is_not_16);
COMPILE_ASSERT(offsetof(StencilFunc, header) == 0,
OffsetOf_StencilFunc_header_not_0);
COMPILE_ASSERT(offsetof(StencilFunc, func) == 4,
OffsetOf_StencilFunc_func_not_4);
-COMPILE_ASSERT(offsetof(StencilFunc, ref) == 8,
- OffsetOf_StencilFunc_ref_not_8);
+COMPILE_ASSERT(offsetof(StencilFunc, ref) == 8, OffsetOf_StencilFunc_ref_not_8);
COMPILE_ASSERT(offsetof(StencilFunc, mask) == 12,
OffsetOf_StencilFunc_mask_not_12);
@@ -5041,14 +4564,13 @@ struct StencilFuncSeparate {
typedef StencilFuncSeparate ValueType;
static const CommandId kCmdId = kStencilFuncSeparate;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _face, GLenum _func, GLint _ref, GLuint _mask) {
SetHeader();
@@ -5064,10 +4586,10 @@ struct StencilFuncSeparate {
}
gpu::CommandHeader header;
- uint32 face;
- uint32 func;
- int32 ref;
- uint32 mask;
+ uint32_t face;
+ uint32_t func;
+ int32_t ref;
+ uint32_t mask;
};
COMPILE_ASSERT(sizeof(StencilFuncSeparate) == 20,
@@ -5087,14 +4609,13 @@ struct StencilMask {
typedef StencilMask ValueType;
static const CommandId kCmdId = kStencilMask;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _mask) {
SetHeader();
@@ -5107,11 +4628,10 @@ struct StencilMask {
}
gpu::CommandHeader header;
- uint32 mask;
+ uint32_t mask;
};
-COMPILE_ASSERT(sizeof(StencilMask) == 8,
- Sizeof_StencilMask_is_not_8);
+COMPILE_ASSERT(sizeof(StencilMask) == 8, Sizeof_StencilMask_is_not_8);
COMPILE_ASSERT(offsetof(StencilMask, header) == 0,
OffsetOf_StencilMask_header_not_0);
COMPILE_ASSERT(offsetof(StencilMask, mask) == 4,
@@ -5121,14 +4641,13 @@ struct StencilMaskSeparate {
typedef StencilMaskSeparate ValueType;
static const CommandId kCmdId = kStencilMaskSeparate;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _face, GLuint _mask) {
SetHeader();
@@ -5142,8 +4661,8 @@ struct StencilMaskSeparate {
}
gpu::CommandHeader header;
- uint32 face;
- uint32 mask;
+ uint32_t face;
+ uint32_t mask;
};
COMPILE_ASSERT(sizeof(StencilMaskSeparate) == 12,
@@ -5159,14 +4678,13 @@ struct StencilOp {
typedef StencilOp ValueType;
static const CommandId kCmdId = kStencilOp;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _fail, GLenum _zfail, GLenum _zpass) {
SetHeader();
@@ -5181,19 +4699,16 @@ struct StencilOp {
}
gpu::CommandHeader header;
- uint32 fail;
- uint32 zfail;
- uint32 zpass;
+ uint32_t fail;
+ uint32_t zfail;
+ uint32_t zpass;
};
-COMPILE_ASSERT(sizeof(StencilOp) == 16,
- Sizeof_StencilOp_is_not_16);
+COMPILE_ASSERT(sizeof(StencilOp) == 16, Sizeof_StencilOp_is_not_16);
COMPILE_ASSERT(offsetof(StencilOp, header) == 0,
OffsetOf_StencilOp_header_not_0);
-COMPILE_ASSERT(offsetof(StencilOp, fail) == 4,
- OffsetOf_StencilOp_fail_not_4);
-COMPILE_ASSERT(offsetof(StencilOp, zfail) == 8,
- OffsetOf_StencilOp_zfail_not_8);
+COMPILE_ASSERT(offsetof(StencilOp, fail) == 4, OffsetOf_StencilOp_fail_not_4);
+COMPILE_ASSERT(offsetof(StencilOp, zfail) == 8, OffsetOf_StencilOp_zfail_not_8);
COMPILE_ASSERT(offsetof(StencilOp, zpass) == 12,
OffsetOf_StencilOp_zpass_not_12);
@@ -5201,14 +4716,13 @@ struct StencilOpSeparate {
typedef StencilOpSeparate ValueType;
static const CommandId kCmdId = kStencilOpSeparate;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _face, GLenum _fail, GLenum _zfail, GLenum _zpass) {
SetHeader();
@@ -5218,17 +4732,20 @@ struct StencilOpSeparate {
zpass = _zpass;
}
- void* Set(
- void* cmd, GLenum _face, GLenum _fail, GLenum _zfail, GLenum _zpass) {
+ void* Set(void* cmd,
+ GLenum _face,
+ GLenum _fail,
+ GLenum _zfail,
+ GLenum _zpass) {
static_cast<ValueType*>(cmd)->Init(_face, _fail, _zfail, _zpass);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 face;
- uint32 fail;
- uint32 zfail;
- uint32 zpass;
+ uint32_t face;
+ uint32_t fail;
+ uint32_t zfail;
+ uint32_t zpass;
};
COMPILE_ASSERT(sizeof(StencilOpSeparate) == 20,
@@ -5248,58 +4765,71 @@ struct TexImage2D {
typedef TexImage2D ValueType;
static const CommandId kCmdId = kTexImage2D;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLint _internalformat, GLsizei _width,
- GLsizei _height, GLint _border, GLenum _format, GLenum _type,
- uint32 _pixels_shm_id, uint32 _pixels_shm_offset) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLint _internalformat,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _pixels_shm_id,
+ uint32_t _pixels_shm_offset) {
SetHeader();
target = _target;
level = _level;
internalformat = _internalformat;
width = _width;
height = _height;
- border = _border;
format = _format;
type = _type;
pixels_shm_id = _pixels_shm_id;
pixels_shm_offset = _pixels_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLint _internalformat,
- GLsizei _width, GLsizei _height, GLint _border, GLenum _format,
- GLenum _type, uint32 _pixels_shm_id, uint32 _pixels_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _internalformat, _width, _height, _border, _format,
- _type, _pixels_shm_id, _pixels_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- int32 level;
- int32 internalformat;
- int32 width;
- int32 height;
- int32 border;
- uint32 format;
- uint32 type;
- uint32 pixels_shm_id;
- uint32 pixels_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(TexImage2D) == 44,
- Sizeof_TexImage2D_is_not_44);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLint _internalformat,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _pixels_shm_id,
+ uint32_t _pixels_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(_target,
+ _level,
+ _internalformat,
+ _width,
+ _height,
+ _format,
+ _type,
+ _pixels_shm_id,
+ _pixels_shm_offset);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t target;
+ int32_t level;
+ int32_t internalformat;
+ int32_t width;
+ int32_t height;
+ uint32_t format;
+ uint32_t type;
+ uint32_t pixels_shm_id;
+ uint32_t pixels_shm_offset;
+ static const int32_t border = 0;
+};
+
+COMPILE_ASSERT(sizeof(TexImage2D) == 40, Sizeof_TexImage2D_is_not_40);
COMPILE_ASSERT(offsetof(TexImage2D, header) == 0,
OffsetOf_TexImage2D_header_not_0);
COMPILE_ASSERT(offsetof(TexImage2D, target) == 4,
@@ -5312,29 +4842,26 @@ COMPILE_ASSERT(offsetof(TexImage2D, width) == 16,
OffsetOf_TexImage2D_width_not_16);
COMPILE_ASSERT(offsetof(TexImage2D, height) == 20,
OffsetOf_TexImage2D_height_not_20);
-COMPILE_ASSERT(offsetof(TexImage2D, border) == 24,
- OffsetOf_TexImage2D_border_not_24);
-COMPILE_ASSERT(offsetof(TexImage2D, format) == 28,
- OffsetOf_TexImage2D_format_not_28);
-COMPILE_ASSERT(offsetof(TexImage2D, type) == 32,
- OffsetOf_TexImage2D_type_not_32);
-COMPILE_ASSERT(offsetof(TexImage2D, pixels_shm_id) == 36,
- OffsetOf_TexImage2D_pixels_shm_id_not_36);
-COMPILE_ASSERT(offsetof(TexImage2D, pixels_shm_offset) == 40,
- OffsetOf_TexImage2D_pixels_shm_offset_not_40);
+COMPILE_ASSERT(offsetof(TexImage2D, format) == 24,
+ OffsetOf_TexImage2D_format_not_24);
+COMPILE_ASSERT(offsetof(TexImage2D, type) == 28,
+ OffsetOf_TexImage2D_type_not_28);
+COMPILE_ASSERT(offsetof(TexImage2D, pixels_shm_id) == 32,
+ OffsetOf_TexImage2D_pixels_shm_id_not_32);
+COMPILE_ASSERT(offsetof(TexImage2D, pixels_shm_offset) == 36,
+ OffsetOf_TexImage2D_pixels_shm_offset_not_36);
struct TexParameterf {
typedef TexParameterf ValueType;
static const CommandId kCmdId = kTexParameterf;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLenum _pname, GLfloat _param) {
SetHeader();
@@ -5349,13 +4876,12 @@ struct TexParameterf {
}
gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
+ uint32_t target;
+ uint32_t pname;
float param;
};
-COMPILE_ASSERT(sizeof(TexParameterf) == 16,
- Sizeof_TexParameterf_is_not_16);
+COMPILE_ASSERT(sizeof(TexParameterf) == 16, Sizeof_TexParameterf_is_not_16);
COMPILE_ASSERT(offsetof(TexParameterf, header) == 0,
OffsetOf_TexParameterf_header_not_0);
COMPILE_ASSERT(offsetof(TexParameterf, target) == 4,
@@ -5365,93 +4891,39 @@ COMPILE_ASSERT(offsetof(TexParameterf, pname) == 8,
COMPILE_ASSERT(offsetof(TexParameterf, param) == 12,
OffsetOf_TexParameterf_param_not_12);
-struct TexParameterfv {
- typedef TexParameterfv ValueType;
- static const CommandId kCmdId = kTexParameterfv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- SetHeader();
- target = _target;
- pname = _pname;
- params_shm_id = _params_shm_id;
- params_shm_offset = _params_shm_offset;
- }
-
- void* Set(
- void* cmd, GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _pname, _params_shm_id, _params_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(TexParameterfv) == 20,
- Sizeof_TexParameterfv_is_not_20);
-COMPILE_ASSERT(offsetof(TexParameterfv, header) == 0,
- OffsetOf_TexParameterfv_header_not_0);
-COMPILE_ASSERT(offsetof(TexParameterfv, target) == 4,
- OffsetOf_TexParameterfv_target_not_4);
-COMPILE_ASSERT(offsetof(TexParameterfv, pname) == 8,
- OffsetOf_TexParameterfv_pname_not_8);
-COMPILE_ASSERT(offsetof(TexParameterfv, params_shm_id) == 12,
- OffsetOf_TexParameterfv_params_shm_id_not_12);
-COMPILE_ASSERT(offsetof(TexParameterfv, params_shm_offset) == 16,
- OffsetOf_TexParameterfv_params_shm_offset_not_16);
-
struct TexParameterfvImmediate {
typedef TexParameterfvImmediate ValueType;
static const CommandId kCmdId = kTexParameterfvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize() {
- return static_cast<uint32>(
- sizeof(GLfloat) * 1); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 1); // NOLINT
}
- static uint32 ComputeSize() {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize()); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void SetHeader() {
- header.SetCmdByTotalSize<ValueType>(ComputeSize());
- }
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
void Init(GLenum _target, GLenum _pname, const GLfloat* _params) {
SetHeader();
target = _target;
pname = _pname;
- memcpy(ImmediateDataAddress(this),
- _params, ComputeDataSize());
+ memcpy(ImmediateDataAddress(this), _params, ComputeDataSize());
}
void* Set(void* cmd, GLenum _target, GLenum _pname, const GLfloat* _params) {
static_cast<ValueType*>(cmd)->Init(_target, _pname, _params);
- const uint32 size = ComputeSize();
+ const uint32_t size = ComputeSize();
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
+ uint32_t target;
+ uint32_t pname;
};
COMPILE_ASSERT(sizeof(TexParameterfvImmediate) == 12,
@@ -5467,14 +4939,13 @@ struct TexParameteri {
typedef TexParameteri ValueType;
static const CommandId kCmdId = kTexParameteri;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLenum _pname, GLint _param) {
SetHeader();
@@ -5489,13 +4960,12 @@ struct TexParameteri {
}
gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
- int32 param;
+ uint32_t target;
+ uint32_t pname;
+ int32_t param;
};
-COMPILE_ASSERT(sizeof(TexParameteri) == 16,
- Sizeof_TexParameteri_is_not_16);
+COMPILE_ASSERT(sizeof(TexParameteri) == 16, Sizeof_TexParameteri_is_not_16);
COMPILE_ASSERT(offsetof(TexParameteri, header) == 0,
OffsetOf_TexParameteri_header_not_0);
COMPILE_ASSERT(offsetof(TexParameteri, target) == 4,
@@ -5505,93 +4975,39 @@ COMPILE_ASSERT(offsetof(TexParameteri, pname) == 8,
COMPILE_ASSERT(offsetof(TexParameteri, param) == 12,
OffsetOf_TexParameteri_param_not_12);
-struct TexParameteriv {
- typedef TexParameteriv ValueType;
- static const CommandId kCmdId = kTexParameteriv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- SetHeader();
- target = _target;
- pname = _pname;
- params_shm_id = _params_shm_id;
- params_shm_offset = _params_shm_offset;
- }
-
- void* Set(
- void* cmd, GLenum _target, GLenum _pname, uint32 _params_shm_id,
- uint32 _params_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _pname, _params_shm_id, _params_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
- uint32 params_shm_id;
- uint32 params_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(TexParameteriv) == 20,
- Sizeof_TexParameteriv_is_not_20);
-COMPILE_ASSERT(offsetof(TexParameteriv, header) == 0,
- OffsetOf_TexParameteriv_header_not_0);
-COMPILE_ASSERT(offsetof(TexParameteriv, target) == 4,
- OffsetOf_TexParameteriv_target_not_4);
-COMPILE_ASSERT(offsetof(TexParameteriv, pname) == 8,
- OffsetOf_TexParameteriv_pname_not_8);
-COMPILE_ASSERT(offsetof(TexParameteriv, params_shm_id) == 12,
- OffsetOf_TexParameteriv_params_shm_id_not_12);
-COMPILE_ASSERT(offsetof(TexParameteriv, params_shm_offset) == 16,
- OffsetOf_TexParameteriv_params_shm_offset_not_16);
-
struct TexParameterivImmediate {
typedef TexParameterivImmediate ValueType;
static const CommandId kCmdId = kTexParameterivImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize() {
- return static_cast<uint32>(
- sizeof(GLint) * 1); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLint) * 1); // NOLINT
}
- static uint32 ComputeSize() {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize()); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void SetHeader() {
- header.SetCmdByTotalSize<ValueType>(ComputeSize());
- }
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
void Init(GLenum _target, GLenum _pname, const GLint* _params) {
SetHeader();
target = _target;
pname = _pname;
- memcpy(ImmediateDataAddress(this),
- _params, ComputeDataSize());
+ memcpy(ImmediateDataAddress(this), _params, ComputeDataSize());
}
void* Set(void* cmd, GLenum _target, GLenum _pname, const GLint* _params) {
static_cast<ValueType*>(cmd)->Init(_target, _pname, _params);
- const uint32 size = ComputeSize();
+ const uint32_t size = ComputeSize();
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 pname;
+ uint32_t target;
+ uint32_t pname;
};
COMPILE_ASSERT(sizeof(TexParameterivImmediate) == 12,
@@ -5607,19 +5023,25 @@ struct TexSubImage2D {
typedef TexSubImage2D ValueType;
static const CommandId kCmdId = kTexSubImage2D;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLsizei _width, GLsizei _height, GLenum _format, GLenum _type,
- uint32 _pixels_shm_id, uint32 _pixels_shm_offset, GLboolean _internal) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _pixels_shm_id,
+ uint32_t _pixels_shm_offset,
+ GLboolean _internal) {
SetHeader();
target = _target;
level = _level;
@@ -5634,33 +5056,47 @@ struct TexSubImage2D {
internal = _internal;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLsizei _width, GLsizei _height, GLenum _format, GLenum _type,
- uint32 _pixels_shm_id, uint32 _pixels_shm_offset, GLboolean _internal) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _xoffset, _yoffset, _width, _height, _format,
- _type, _pixels_shm_id, _pixels_shm_offset, _internal);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- int32 level;
- int32 xoffset;
- int32 yoffset;
- int32 width;
- int32 height;
- uint32 format;
- uint32 type;
- uint32 pixels_shm_id;
- uint32 pixels_shm_offset;
- uint32 internal;
-};
-
-COMPILE_ASSERT(sizeof(TexSubImage2D) == 48,
- Sizeof_TexSubImage2D_is_not_48);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _pixels_shm_id,
+ uint32_t _pixels_shm_offset,
+ GLboolean _internal) {
+ static_cast<ValueType*>(cmd)->Init(_target,
+ _level,
+ _xoffset,
+ _yoffset,
+ _width,
+ _height,
+ _format,
+ _type,
+ _pixels_shm_id,
+ _pixels_shm_offset,
+ _internal);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t target;
+ int32_t level;
+ int32_t xoffset;
+ int32_t yoffset;
+ int32_t width;
+ int32_t height;
+ uint32_t format;
+ uint32_t type;
+ uint32_t pixels_shm_id;
+ uint32_t pixels_shm_offset;
+ uint32_t internal;
+};
+
+COMPILE_ASSERT(sizeof(TexSubImage2D) == 48, Sizeof_TexSubImage2D_is_not_48);
COMPILE_ASSERT(offsetof(TexSubImage2D, header) == 0,
OffsetOf_TexSubImage2D_header_not_0);
COMPILE_ASSERT(offsetof(TexSubImage2D, target) == 4,
@@ -5690,14 +5126,13 @@ struct Uniform1f {
typedef Uniform1f ValueType;
static const CommandId kCmdId = kUniform1f;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _location, GLfloat _x) {
SetHeader();
@@ -5711,83 +5146,30 @@ struct Uniform1f {
}
gpu::CommandHeader header;
- int32 location;
+ int32_t location;
float x;
};
-COMPILE_ASSERT(sizeof(Uniform1f) == 12,
- Sizeof_Uniform1f_is_not_12);
+COMPILE_ASSERT(sizeof(Uniform1f) == 12, Sizeof_Uniform1f_is_not_12);
COMPILE_ASSERT(offsetof(Uniform1f, header) == 0,
OffsetOf_Uniform1f_header_not_0);
COMPILE_ASSERT(offsetof(Uniform1f, location) == 4,
OffsetOf_Uniform1f_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform1f, x) == 8,
- OffsetOf_Uniform1f_x_not_8);
-
-struct Uniform1fv {
- typedef Uniform1fv ValueType;
- static const CommandId kCmdId = kUniform1fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- v_shm_id = _v_shm_id;
- v_shm_offset = _v_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_location, _count, _v_shm_id, _v_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 v_shm_id;
- uint32 v_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(Uniform1fv) == 20,
- Sizeof_Uniform1fv_is_not_20);
-COMPILE_ASSERT(offsetof(Uniform1fv, header) == 0,
- OffsetOf_Uniform1fv_header_not_0);
-COMPILE_ASSERT(offsetof(Uniform1fv, location) == 4,
- OffsetOf_Uniform1fv_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform1fv, count) == 8,
- OffsetOf_Uniform1fv_count_not_8);
-COMPILE_ASSERT(offsetof(Uniform1fv, v_shm_id) == 12,
- OffsetOf_Uniform1fv_v_shm_id_not_12);
-COMPILE_ASSERT(offsetof(Uniform1fv, v_shm_offset) == 16,
- OffsetOf_Uniform1fv_v_shm_offset_not_16);
+COMPILE_ASSERT(offsetof(Uniform1f, x) == 8, OffsetOf_Uniform1f_x_not_8);
struct Uniform1fvImmediate {
typedef Uniform1fvImmediate ValueType;
static const CommandId kCmdId = kUniform1fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLfloat) * 1 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 1 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -5798,19 +5180,18 @@ struct Uniform1fvImmediate {
SetHeader(_count);
location = _location;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _v, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _v, ComputeDataSize(_count));
}
void* Set(void* cmd, GLint _location, GLsizei _count, const GLfloat* _v) {
static_cast<ValueType*>(cmd)->Init(_location, _count, _v);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
+ int32_t location;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(Uniform1fvImmediate) == 12,
@@ -5826,14 +5207,13 @@ struct Uniform1i {
typedef Uniform1i ValueType;
static const CommandId kCmdId = kUniform1i;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _location, GLint _x) {
SetHeader();
@@ -5847,83 +5227,30 @@ struct Uniform1i {
}
gpu::CommandHeader header;
- int32 location;
- int32 x;
+ int32_t location;
+ int32_t x;
};
-COMPILE_ASSERT(sizeof(Uniform1i) == 12,
- Sizeof_Uniform1i_is_not_12);
+COMPILE_ASSERT(sizeof(Uniform1i) == 12, Sizeof_Uniform1i_is_not_12);
COMPILE_ASSERT(offsetof(Uniform1i, header) == 0,
OffsetOf_Uniform1i_header_not_0);
COMPILE_ASSERT(offsetof(Uniform1i, location) == 4,
OffsetOf_Uniform1i_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform1i, x) == 8,
- OffsetOf_Uniform1i_x_not_8);
-
-struct Uniform1iv {
- typedef Uniform1iv ValueType;
- static const CommandId kCmdId = kUniform1iv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- v_shm_id = _v_shm_id;
- v_shm_offset = _v_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_location, _count, _v_shm_id, _v_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 v_shm_id;
- uint32 v_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(Uniform1iv) == 20,
- Sizeof_Uniform1iv_is_not_20);
-COMPILE_ASSERT(offsetof(Uniform1iv, header) == 0,
- OffsetOf_Uniform1iv_header_not_0);
-COMPILE_ASSERT(offsetof(Uniform1iv, location) == 4,
- OffsetOf_Uniform1iv_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform1iv, count) == 8,
- OffsetOf_Uniform1iv_count_not_8);
-COMPILE_ASSERT(offsetof(Uniform1iv, v_shm_id) == 12,
- OffsetOf_Uniform1iv_v_shm_id_not_12);
-COMPILE_ASSERT(offsetof(Uniform1iv, v_shm_offset) == 16,
- OffsetOf_Uniform1iv_v_shm_offset_not_16);
+COMPILE_ASSERT(offsetof(Uniform1i, x) == 8, OffsetOf_Uniform1i_x_not_8);
struct Uniform1ivImmediate {
typedef Uniform1ivImmediate ValueType;
static const CommandId kCmdId = kUniform1ivImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLint) * 1 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLint) * 1 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -5934,19 +5261,18 @@ struct Uniform1ivImmediate {
SetHeader(_count);
location = _location;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _v, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _v, ComputeDataSize(_count));
}
void* Set(void* cmd, GLint _location, GLsizei _count, const GLint* _v) {
static_cast<ValueType*>(cmd)->Init(_location, _count, _v);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
+ int32_t location;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(Uniform1ivImmediate) == 12,
@@ -5962,14 +5288,13 @@ struct Uniform2f {
typedef Uniform2f ValueType;
static const CommandId kCmdId = kUniform2f;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _location, GLfloat _x, GLfloat _y) {
SetHeader();
@@ -5984,86 +5309,32 @@ struct Uniform2f {
}
gpu::CommandHeader header;
- int32 location;
+ int32_t location;
float x;
float y;
};
-COMPILE_ASSERT(sizeof(Uniform2f) == 16,
- Sizeof_Uniform2f_is_not_16);
+COMPILE_ASSERT(sizeof(Uniform2f) == 16, Sizeof_Uniform2f_is_not_16);
COMPILE_ASSERT(offsetof(Uniform2f, header) == 0,
OffsetOf_Uniform2f_header_not_0);
COMPILE_ASSERT(offsetof(Uniform2f, location) == 4,
OffsetOf_Uniform2f_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform2f, x) == 8,
- OffsetOf_Uniform2f_x_not_8);
-COMPILE_ASSERT(offsetof(Uniform2f, y) == 12,
- OffsetOf_Uniform2f_y_not_12);
-
-struct Uniform2fv {
- typedef Uniform2fv ValueType;
- static const CommandId kCmdId = kUniform2fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- v_shm_id = _v_shm_id;
- v_shm_offset = _v_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_location, _count, _v_shm_id, _v_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 v_shm_id;
- uint32 v_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(Uniform2fv) == 20,
- Sizeof_Uniform2fv_is_not_20);
-COMPILE_ASSERT(offsetof(Uniform2fv, header) == 0,
- OffsetOf_Uniform2fv_header_not_0);
-COMPILE_ASSERT(offsetof(Uniform2fv, location) == 4,
- OffsetOf_Uniform2fv_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform2fv, count) == 8,
- OffsetOf_Uniform2fv_count_not_8);
-COMPILE_ASSERT(offsetof(Uniform2fv, v_shm_id) == 12,
- OffsetOf_Uniform2fv_v_shm_id_not_12);
-COMPILE_ASSERT(offsetof(Uniform2fv, v_shm_offset) == 16,
- OffsetOf_Uniform2fv_v_shm_offset_not_16);
+COMPILE_ASSERT(offsetof(Uniform2f, x) == 8, OffsetOf_Uniform2f_x_not_8);
+COMPILE_ASSERT(offsetof(Uniform2f, y) == 12, OffsetOf_Uniform2f_y_not_12);
struct Uniform2fvImmediate {
typedef Uniform2fvImmediate ValueType;
static const CommandId kCmdId = kUniform2fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLfloat) * 2 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 2 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -6074,19 +5345,18 @@ struct Uniform2fvImmediate {
SetHeader(_count);
location = _location;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _v, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _v, ComputeDataSize(_count));
}
void* Set(void* cmd, GLint _location, GLsizei _count, const GLfloat* _v) {
static_cast<ValueType*>(cmd)->Init(_location, _count, _v);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
+ int32_t location;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(Uniform2fvImmediate) == 12,
@@ -6102,14 +5372,13 @@ struct Uniform2i {
typedef Uniform2i ValueType;
static const CommandId kCmdId = kUniform2i;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _location, GLint _x, GLint _y) {
SetHeader();
@@ -6124,86 +5393,32 @@ struct Uniform2i {
}
gpu::CommandHeader header;
- int32 location;
- int32 x;
- int32 y;
+ int32_t location;
+ int32_t x;
+ int32_t y;
};
-COMPILE_ASSERT(sizeof(Uniform2i) == 16,
- Sizeof_Uniform2i_is_not_16);
+COMPILE_ASSERT(sizeof(Uniform2i) == 16, Sizeof_Uniform2i_is_not_16);
COMPILE_ASSERT(offsetof(Uniform2i, header) == 0,
OffsetOf_Uniform2i_header_not_0);
COMPILE_ASSERT(offsetof(Uniform2i, location) == 4,
OffsetOf_Uniform2i_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform2i, x) == 8,
- OffsetOf_Uniform2i_x_not_8);
-COMPILE_ASSERT(offsetof(Uniform2i, y) == 12,
- OffsetOf_Uniform2i_y_not_12);
-
-struct Uniform2iv {
- typedef Uniform2iv ValueType;
- static const CommandId kCmdId = kUniform2iv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- v_shm_id = _v_shm_id;
- v_shm_offset = _v_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_location, _count, _v_shm_id, _v_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 v_shm_id;
- uint32 v_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(Uniform2iv) == 20,
- Sizeof_Uniform2iv_is_not_20);
-COMPILE_ASSERT(offsetof(Uniform2iv, header) == 0,
- OffsetOf_Uniform2iv_header_not_0);
-COMPILE_ASSERT(offsetof(Uniform2iv, location) == 4,
- OffsetOf_Uniform2iv_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform2iv, count) == 8,
- OffsetOf_Uniform2iv_count_not_8);
-COMPILE_ASSERT(offsetof(Uniform2iv, v_shm_id) == 12,
- OffsetOf_Uniform2iv_v_shm_id_not_12);
-COMPILE_ASSERT(offsetof(Uniform2iv, v_shm_offset) == 16,
- OffsetOf_Uniform2iv_v_shm_offset_not_16);
+COMPILE_ASSERT(offsetof(Uniform2i, x) == 8, OffsetOf_Uniform2i_x_not_8);
+COMPILE_ASSERT(offsetof(Uniform2i, y) == 12, OffsetOf_Uniform2i_y_not_12);
struct Uniform2ivImmediate {
typedef Uniform2ivImmediate ValueType;
static const CommandId kCmdId = kUniform2ivImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLint) * 2 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLint) * 2 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -6214,19 +5429,18 @@ struct Uniform2ivImmediate {
SetHeader(_count);
location = _location;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _v, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _v, ComputeDataSize(_count));
}
void* Set(void* cmd, GLint _location, GLsizei _count, const GLint* _v) {
static_cast<ValueType*>(cmd)->Init(_location, _count, _v);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
+ int32_t location;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(Uniform2ivImmediate) == 12,
@@ -6242,14 +5456,13 @@ struct Uniform3f {
typedef Uniform3f ValueType;
static const CommandId kCmdId = kUniform3f;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _location, GLfloat _x, GLfloat _y, GLfloat _z) {
SetHeader();
@@ -6265,89 +5478,34 @@ struct Uniform3f {
}
gpu::CommandHeader header;
- int32 location;
+ int32_t location;
float x;
float y;
float z;
};
-COMPILE_ASSERT(sizeof(Uniform3f) == 20,
- Sizeof_Uniform3f_is_not_20);
+COMPILE_ASSERT(sizeof(Uniform3f) == 20, Sizeof_Uniform3f_is_not_20);
COMPILE_ASSERT(offsetof(Uniform3f, header) == 0,
OffsetOf_Uniform3f_header_not_0);
COMPILE_ASSERT(offsetof(Uniform3f, location) == 4,
OffsetOf_Uniform3f_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform3f, x) == 8,
- OffsetOf_Uniform3f_x_not_8);
-COMPILE_ASSERT(offsetof(Uniform3f, y) == 12,
- OffsetOf_Uniform3f_y_not_12);
-COMPILE_ASSERT(offsetof(Uniform3f, z) == 16,
- OffsetOf_Uniform3f_z_not_16);
-
-struct Uniform3fv {
- typedef Uniform3fv ValueType;
- static const CommandId kCmdId = kUniform3fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- v_shm_id = _v_shm_id;
- v_shm_offset = _v_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_location, _count, _v_shm_id, _v_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 v_shm_id;
- uint32 v_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(Uniform3fv) == 20,
- Sizeof_Uniform3fv_is_not_20);
-COMPILE_ASSERT(offsetof(Uniform3fv, header) == 0,
- OffsetOf_Uniform3fv_header_not_0);
-COMPILE_ASSERT(offsetof(Uniform3fv, location) == 4,
- OffsetOf_Uniform3fv_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform3fv, count) == 8,
- OffsetOf_Uniform3fv_count_not_8);
-COMPILE_ASSERT(offsetof(Uniform3fv, v_shm_id) == 12,
- OffsetOf_Uniform3fv_v_shm_id_not_12);
-COMPILE_ASSERT(offsetof(Uniform3fv, v_shm_offset) == 16,
- OffsetOf_Uniform3fv_v_shm_offset_not_16);
+COMPILE_ASSERT(offsetof(Uniform3f, x) == 8, OffsetOf_Uniform3f_x_not_8);
+COMPILE_ASSERT(offsetof(Uniform3f, y) == 12, OffsetOf_Uniform3f_y_not_12);
+COMPILE_ASSERT(offsetof(Uniform3f, z) == 16, OffsetOf_Uniform3f_z_not_16);
struct Uniform3fvImmediate {
typedef Uniform3fvImmediate ValueType;
static const CommandId kCmdId = kUniform3fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLfloat) * 3 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 3 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -6358,19 +5516,18 @@ struct Uniform3fvImmediate {
SetHeader(_count);
location = _location;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _v, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _v, ComputeDataSize(_count));
}
void* Set(void* cmd, GLint _location, GLsizei _count, const GLfloat* _v) {
static_cast<ValueType*>(cmd)->Init(_location, _count, _v);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
+ int32_t location;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(Uniform3fvImmediate) == 12,
@@ -6386,14 +5543,13 @@ struct Uniform3i {
typedef Uniform3i ValueType;
static const CommandId kCmdId = kUniform3i;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _location, GLint _x, GLint _y, GLint _z) {
SetHeader();
@@ -6409,89 +5565,34 @@ struct Uniform3i {
}
gpu::CommandHeader header;
- int32 location;
- int32 x;
- int32 y;
- int32 z;
+ int32_t location;
+ int32_t x;
+ int32_t y;
+ int32_t z;
};
-COMPILE_ASSERT(sizeof(Uniform3i) == 20,
- Sizeof_Uniform3i_is_not_20);
+COMPILE_ASSERT(sizeof(Uniform3i) == 20, Sizeof_Uniform3i_is_not_20);
COMPILE_ASSERT(offsetof(Uniform3i, header) == 0,
OffsetOf_Uniform3i_header_not_0);
COMPILE_ASSERT(offsetof(Uniform3i, location) == 4,
OffsetOf_Uniform3i_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform3i, x) == 8,
- OffsetOf_Uniform3i_x_not_8);
-COMPILE_ASSERT(offsetof(Uniform3i, y) == 12,
- OffsetOf_Uniform3i_y_not_12);
-COMPILE_ASSERT(offsetof(Uniform3i, z) == 16,
- OffsetOf_Uniform3i_z_not_16);
-
-struct Uniform3iv {
- typedef Uniform3iv ValueType;
- static const CommandId kCmdId = kUniform3iv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- v_shm_id = _v_shm_id;
- v_shm_offset = _v_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_location, _count, _v_shm_id, _v_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 v_shm_id;
- uint32 v_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(Uniform3iv) == 20,
- Sizeof_Uniform3iv_is_not_20);
-COMPILE_ASSERT(offsetof(Uniform3iv, header) == 0,
- OffsetOf_Uniform3iv_header_not_0);
-COMPILE_ASSERT(offsetof(Uniform3iv, location) == 4,
- OffsetOf_Uniform3iv_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform3iv, count) == 8,
- OffsetOf_Uniform3iv_count_not_8);
-COMPILE_ASSERT(offsetof(Uniform3iv, v_shm_id) == 12,
- OffsetOf_Uniform3iv_v_shm_id_not_12);
-COMPILE_ASSERT(offsetof(Uniform3iv, v_shm_offset) == 16,
- OffsetOf_Uniform3iv_v_shm_offset_not_16);
+COMPILE_ASSERT(offsetof(Uniform3i, x) == 8, OffsetOf_Uniform3i_x_not_8);
+COMPILE_ASSERT(offsetof(Uniform3i, y) == 12, OffsetOf_Uniform3i_y_not_12);
+COMPILE_ASSERT(offsetof(Uniform3i, z) == 16, OffsetOf_Uniform3i_z_not_16);
struct Uniform3ivImmediate {
typedef Uniform3ivImmediate ValueType;
static const CommandId kCmdId = kUniform3ivImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLint) * 3 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLint) * 3 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -6502,19 +5603,18 @@ struct Uniform3ivImmediate {
SetHeader(_count);
location = _location;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _v, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _v, ComputeDataSize(_count));
}
void* Set(void* cmd, GLint _location, GLsizei _count, const GLint* _v) {
static_cast<ValueType*>(cmd)->Init(_location, _count, _v);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
+ int32_t location;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(Uniform3ivImmediate) == 12,
@@ -6530,14 +5630,13 @@ struct Uniform4f {
typedef Uniform4f ValueType;
static const CommandId kCmdId = kUniform4f;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _location, GLfloat _x, GLfloat _y, GLfloat _z, GLfloat _w) {
SetHeader();
@@ -6548,100 +5647,47 @@ struct Uniform4f {
w = _w;
}
- void* Set(
- void* cmd, GLint _location, GLfloat _x, GLfloat _y, GLfloat _z,
- GLfloat _w) {
+ void* Set(void* cmd,
+ GLint _location,
+ GLfloat _x,
+ GLfloat _y,
+ GLfloat _z,
+ GLfloat _w) {
static_cast<ValueType*>(cmd)->Init(_location, _x, _y, _z, _w);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- int32 location;
+ int32_t location;
float x;
float y;
float z;
float w;
};
-COMPILE_ASSERT(sizeof(Uniform4f) == 24,
- Sizeof_Uniform4f_is_not_24);
+COMPILE_ASSERT(sizeof(Uniform4f) == 24, Sizeof_Uniform4f_is_not_24);
COMPILE_ASSERT(offsetof(Uniform4f, header) == 0,
OffsetOf_Uniform4f_header_not_0);
COMPILE_ASSERT(offsetof(Uniform4f, location) == 4,
OffsetOf_Uniform4f_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform4f, x) == 8,
- OffsetOf_Uniform4f_x_not_8);
-COMPILE_ASSERT(offsetof(Uniform4f, y) == 12,
- OffsetOf_Uniform4f_y_not_12);
-COMPILE_ASSERT(offsetof(Uniform4f, z) == 16,
- OffsetOf_Uniform4f_z_not_16);
-COMPILE_ASSERT(offsetof(Uniform4f, w) == 20,
- OffsetOf_Uniform4f_w_not_20);
-
-struct Uniform4fv {
- typedef Uniform4fv ValueType;
- static const CommandId kCmdId = kUniform4fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- v_shm_id = _v_shm_id;
- v_shm_offset = _v_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_location, _count, _v_shm_id, _v_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 v_shm_id;
- uint32 v_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(Uniform4fv) == 20,
- Sizeof_Uniform4fv_is_not_20);
-COMPILE_ASSERT(offsetof(Uniform4fv, header) == 0,
- OffsetOf_Uniform4fv_header_not_0);
-COMPILE_ASSERT(offsetof(Uniform4fv, location) == 4,
- OffsetOf_Uniform4fv_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform4fv, count) == 8,
- OffsetOf_Uniform4fv_count_not_8);
-COMPILE_ASSERT(offsetof(Uniform4fv, v_shm_id) == 12,
- OffsetOf_Uniform4fv_v_shm_id_not_12);
-COMPILE_ASSERT(offsetof(Uniform4fv, v_shm_offset) == 16,
- OffsetOf_Uniform4fv_v_shm_offset_not_16);
+COMPILE_ASSERT(offsetof(Uniform4f, x) == 8, OffsetOf_Uniform4f_x_not_8);
+COMPILE_ASSERT(offsetof(Uniform4f, y) == 12, OffsetOf_Uniform4f_y_not_12);
+COMPILE_ASSERT(offsetof(Uniform4f, z) == 16, OffsetOf_Uniform4f_z_not_16);
+COMPILE_ASSERT(offsetof(Uniform4f, w) == 20, OffsetOf_Uniform4f_w_not_20);
struct Uniform4fvImmediate {
typedef Uniform4fvImmediate ValueType;
static const CommandId kCmdId = kUniform4fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLfloat) * 4 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 4 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -6652,19 +5698,18 @@ struct Uniform4fvImmediate {
SetHeader(_count);
location = _location;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _v, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _v, ComputeDataSize(_count));
}
void* Set(void* cmd, GLint _location, GLsizei _count, const GLfloat* _v) {
static_cast<ValueType*>(cmd)->Init(_location, _count, _v);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
+ int32_t location;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(Uniform4fvImmediate) == 12,
@@ -6680,14 +5725,13 @@ struct Uniform4i {
typedef Uniform4i ValueType;
static const CommandId kCmdId = kUniform4i;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _location, GLint _x, GLint _y, GLint _z, GLint _w) {
SetHeader();
@@ -6698,99 +5742,47 @@ struct Uniform4i {
w = _w;
}
- void* Set(
- void* cmd, GLint _location, GLint _x, GLint _y, GLint _z, GLint _w) {
+ void* Set(void* cmd,
+ GLint _location,
+ GLint _x,
+ GLint _y,
+ GLint _z,
+ GLint _w) {
static_cast<ValueType*>(cmd)->Init(_location, _x, _y, _z, _w);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- int32 location;
- int32 x;
- int32 y;
- int32 z;
- int32 w;
+ int32_t location;
+ int32_t x;
+ int32_t y;
+ int32_t z;
+ int32_t w;
};
-COMPILE_ASSERT(sizeof(Uniform4i) == 24,
- Sizeof_Uniform4i_is_not_24);
+COMPILE_ASSERT(sizeof(Uniform4i) == 24, Sizeof_Uniform4i_is_not_24);
COMPILE_ASSERT(offsetof(Uniform4i, header) == 0,
OffsetOf_Uniform4i_header_not_0);
COMPILE_ASSERT(offsetof(Uniform4i, location) == 4,
OffsetOf_Uniform4i_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform4i, x) == 8,
- OffsetOf_Uniform4i_x_not_8);
-COMPILE_ASSERT(offsetof(Uniform4i, y) == 12,
- OffsetOf_Uniform4i_y_not_12);
-COMPILE_ASSERT(offsetof(Uniform4i, z) == 16,
- OffsetOf_Uniform4i_z_not_16);
-COMPILE_ASSERT(offsetof(Uniform4i, w) == 20,
- OffsetOf_Uniform4i_w_not_20);
-
-struct Uniform4iv {
- typedef Uniform4iv ValueType;
- static const CommandId kCmdId = kUniform4iv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- v_shm_id = _v_shm_id;
- v_shm_offset = _v_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, uint32 _v_shm_id,
- uint32 _v_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_location, _count, _v_shm_id, _v_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 v_shm_id;
- uint32 v_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(Uniform4iv) == 20,
- Sizeof_Uniform4iv_is_not_20);
-COMPILE_ASSERT(offsetof(Uniform4iv, header) == 0,
- OffsetOf_Uniform4iv_header_not_0);
-COMPILE_ASSERT(offsetof(Uniform4iv, location) == 4,
- OffsetOf_Uniform4iv_location_not_4);
-COMPILE_ASSERT(offsetof(Uniform4iv, count) == 8,
- OffsetOf_Uniform4iv_count_not_8);
-COMPILE_ASSERT(offsetof(Uniform4iv, v_shm_id) == 12,
- OffsetOf_Uniform4iv_v_shm_id_not_12);
-COMPILE_ASSERT(offsetof(Uniform4iv, v_shm_offset) == 16,
- OffsetOf_Uniform4iv_v_shm_offset_not_16);
+COMPILE_ASSERT(offsetof(Uniform4i, x) == 8, OffsetOf_Uniform4i_x_not_8);
+COMPILE_ASSERT(offsetof(Uniform4i, y) == 12, OffsetOf_Uniform4i_y_not_12);
+COMPILE_ASSERT(offsetof(Uniform4i, z) == 16, OffsetOf_Uniform4i_z_not_16);
+COMPILE_ASSERT(offsetof(Uniform4i, w) == 20, OffsetOf_Uniform4i_w_not_20);
struct Uniform4ivImmediate {
typedef Uniform4ivImmediate ValueType;
static const CommandId kCmdId = kUniform4ivImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLint) * 4 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLint) * 4 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -6801,19 +5793,18 @@ struct Uniform4ivImmediate {
SetHeader(_count);
location = _location;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _v, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _v, ComputeDataSize(_count));
}
void* Set(void* cmd, GLint _location, GLsizei _count, const GLint* _v) {
static_cast<ValueType*>(cmd)->Init(_location, _count, _v);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
+ int32_t location;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(Uniform4ivImmediate) == 12,
@@ -6825,351 +5816,158 @@ COMPILE_ASSERT(offsetof(Uniform4ivImmediate, location) == 4,
COMPILE_ASSERT(offsetof(Uniform4ivImmediate, count) == 8,
OffsetOf_Uniform4ivImmediate_count_not_8);
-struct UniformMatrix2fv {
- typedef UniformMatrix2fv ValueType;
- static const CommandId kCmdId = kUniformMatrix2fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, GLboolean _transpose,
- uint32 _value_shm_id, uint32 _value_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- transpose = _transpose;
- value_shm_id = _value_shm_id;
- value_shm_offset = _value_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, GLboolean _transpose,
- uint32 _value_shm_id, uint32 _value_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _location, _count, _transpose, _value_shm_id, _value_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 transpose;
- uint32 value_shm_id;
- uint32 value_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(UniformMatrix2fv) == 24,
- Sizeof_UniformMatrix2fv_is_not_24);
-COMPILE_ASSERT(offsetof(UniformMatrix2fv, header) == 0,
- OffsetOf_UniformMatrix2fv_header_not_0);
-COMPILE_ASSERT(offsetof(UniformMatrix2fv, location) == 4,
- OffsetOf_UniformMatrix2fv_location_not_4);
-COMPILE_ASSERT(offsetof(UniformMatrix2fv, count) == 8,
- OffsetOf_UniformMatrix2fv_count_not_8);
-COMPILE_ASSERT(offsetof(UniformMatrix2fv, transpose) == 12,
- OffsetOf_UniformMatrix2fv_transpose_not_12);
-COMPILE_ASSERT(offsetof(UniformMatrix2fv, value_shm_id) == 16,
- OffsetOf_UniformMatrix2fv_value_shm_id_not_16);
-COMPILE_ASSERT(offsetof(UniformMatrix2fv, value_shm_offset) == 20,
- OffsetOf_UniformMatrix2fv_value_shm_offset_not_20);
-
struct UniformMatrix2fvImmediate {
typedef UniformMatrix2fvImmediate ValueType;
static const CommandId kCmdId = kUniformMatrix2fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLfloat) * 4 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 4 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
header.SetCmdByTotalSize<ValueType>(ComputeSize(count));
}
- void Init(
- GLint _location, GLsizei _count, GLboolean _transpose,
- const GLfloat* _value) {
+ void Init(GLint _location, GLsizei _count, const GLfloat* _value) {
SetHeader(_count);
location = _location;
count = _count;
- transpose = _transpose;
- memcpy(ImmediateDataAddress(this),
- _value, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _value, ComputeDataSize(_count));
}
- void* Set(
- void* cmd, GLint _location, GLsizei _count, GLboolean _transpose,
- const GLfloat* _value) {
- static_cast<ValueType*>(cmd)->Init(_location, _count, _transpose, _value);
- const uint32 size = ComputeSize(_count);
+ void* Set(void* cmd, GLint _location, GLsizei _count, const GLfloat* _value) {
+ static_cast<ValueType*>(cmd)->Init(_location, _count, _value);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 transpose;
+ int32_t location;
+ int32_t count;
+ static const uint32_t transpose = false;
};
-COMPILE_ASSERT(sizeof(UniformMatrix2fvImmediate) == 16,
- Sizeof_UniformMatrix2fvImmediate_is_not_16);
+COMPILE_ASSERT(sizeof(UniformMatrix2fvImmediate) == 12,
+ Sizeof_UniformMatrix2fvImmediate_is_not_12);
COMPILE_ASSERT(offsetof(UniformMatrix2fvImmediate, header) == 0,
OffsetOf_UniformMatrix2fvImmediate_header_not_0);
COMPILE_ASSERT(offsetof(UniformMatrix2fvImmediate, location) == 4,
OffsetOf_UniformMatrix2fvImmediate_location_not_4);
COMPILE_ASSERT(offsetof(UniformMatrix2fvImmediate, count) == 8,
OffsetOf_UniformMatrix2fvImmediate_count_not_8);
-COMPILE_ASSERT(offsetof(UniformMatrix2fvImmediate, transpose) == 12,
- OffsetOf_UniformMatrix2fvImmediate_transpose_not_12);
-
-struct UniformMatrix3fv {
- typedef UniformMatrix3fv ValueType;
- static const CommandId kCmdId = kUniformMatrix3fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, GLboolean _transpose,
- uint32 _value_shm_id, uint32 _value_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- transpose = _transpose;
- value_shm_id = _value_shm_id;
- value_shm_offset = _value_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, GLboolean _transpose,
- uint32 _value_shm_id, uint32 _value_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _location, _count, _transpose, _value_shm_id, _value_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 transpose;
- uint32 value_shm_id;
- uint32 value_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(UniformMatrix3fv) == 24,
- Sizeof_UniformMatrix3fv_is_not_24);
-COMPILE_ASSERT(offsetof(UniformMatrix3fv, header) == 0,
- OffsetOf_UniformMatrix3fv_header_not_0);
-COMPILE_ASSERT(offsetof(UniformMatrix3fv, location) == 4,
- OffsetOf_UniformMatrix3fv_location_not_4);
-COMPILE_ASSERT(offsetof(UniformMatrix3fv, count) == 8,
- OffsetOf_UniformMatrix3fv_count_not_8);
-COMPILE_ASSERT(offsetof(UniformMatrix3fv, transpose) == 12,
- OffsetOf_UniformMatrix3fv_transpose_not_12);
-COMPILE_ASSERT(offsetof(UniformMatrix3fv, value_shm_id) == 16,
- OffsetOf_UniformMatrix3fv_value_shm_id_not_16);
-COMPILE_ASSERT(offsetof(UniformMatrix3fv, value_shm_offset) == 20,
- OffsetOf_UniformMatrix3fv_value_shm_offset_not_20);
struct UniformMatrix3fvImmediate {
typedef UniformMatrix3fvImmediate ValueType;
static const CommandId kCmdId = kUniformMatrix3fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLfloat) * 9 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 9 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
header.SetCmdByTotalSize<ValueType>(ComputeSize(count));
}
- void Init(
- GLint _location, GLsizei _count, GLboolean _transpose,
- const GLfloat* _value) {
+ void Init(GLint _location, GLsizei _count, const GLfloat* _value) {
SetHeader(_count);
location = _location;
count = _count;
- transpose = _transpose;
- memcpy(ImmediateDataAddress(this),
- _value, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _value, ComputeDataSize(_count));
}
- void* Set(
- void* cmd, GLint _location, GLsizei _count, GLboolean _transpose,
- const GLfloat* _value) {
- static_cast<ValueType*>(cmd)->Init(_location, _count, _transpose, _value);
- const uint32 size = ComputeSize(_count);
+ void* Set(void* cmd, GLint _location, GLsizei _count, const GLfloat* _value) {
+ static_cast<ValueType*>(cmd)->Init(_location, _count, _value);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 transpose;
+ int32_t location;
+ int32_t count;
+ static const uint32_t transpose = false;
};
-COMPILE_ASSERT(sizeof(UniformMatrix3fvImmediate) == 16,
- Sizeof_UniformMatrix3fvImmediate_is_not_16);
+COMPILE_ASSERT(sizeof(UniformMatrix3fvImmediate) == 12,
+ Sizeof_UniformMatrix3fvImmediate_is_not_12);
COMPILE_ASSERT(offsetof(UniformMatrix3fvImmediate, header) == 0,
OffsetOf_UniformMatrix3fvImmediate_header_not_0);
COMPILE_ASSERT(offsetof(UniformMatrix3fvImmediate, location) == 4,
OffsetOf_UniformMatrix3fvImmediate_location_not_4);
COMPILE_ASSERT(offsetof(UniformMatrix3fvImmediate, count) == 8,
OffsetOf_UniformMatrix3fvImmediate_count_not_8);
-COMPILE_ASSERT(offsetof(UniformMatrix3fvImmediate, transpose) == 12,
- OffsetOf_UniformMatrix3fvImmediate_transpose_not_12);
-
-struct UniformMatrix4fv {
- typedef UniformMatrix4fv ValueType;
- static const CommandId kCmdId = kUniformMatrix4fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLint _location, GLsizei _count, GLboolean _transpose,
- uint32 _value_shm_id, uint32 _value_shm_offset) {
- SetHeader();
- location = _location;
- count = _count;
- transpose = _transpose;
- value_shm_id = _value_shm_id;
- value_shm_offset = _value_shm_offset;
- }
-
- void* Set(
- void* cmd, GLint _location, GLsizei _count, GLboolean _transpose,
- uint32 _value_shm_id, uint32 _value_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _location, _count, _transpose, _value_shm_id, _value_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 transpose;
- uint32 value_shm_id;
- uint32 value_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(UniformMatrix4fv) == 24,
- Sizeof_UniformMatrix4fv_is_not_24);
-COMPILE_ASSERT(offsetof(UniformMatrix4fv, header) == 0,
- OffsetOf_UniformMatrix4fv_header_not_0);
-COMPILE_ASSERT(offsetof(UniformMatrix4fv, location) == 4,
- OffsetOf_UniformMatrix4fv_location_not_4);
-COMPILE_ASSERT(offsetof(UniformMatrix4fv, count) == 8,
- OffsetOf_UniformMatrix4fv_count_not_8);
-COMPILE_ASSERT(offsetof(UniformMatrix4fv, transpose) == 12,
- OffsetOf_UniformMatrix4fv_transpose_not_12);
-COMPILE_ASSERT(offsetof(UniformMatrix4fv, value_shm_id) == 16,
- OffsetOf_UniformMatrix4fv_value_shm_id_not_16);
-COMPILE_ASSERT(offsetof(UniformMatrix4fv, value_shm_offset) == 20,
- OffsetOf_UniformMatrix4fv_value_shm_offset_not_20);
struct UniformMatrix4fvImmediate {
typedef UniformMatrix4fvImmediate ValueType;
static const CommandId kCmdId = kUniformMatrix4fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLfloat) * 16 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 16 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
header.SetCmdByTotalSize<ValueType>(ComputeSize(count));
}
- void Init(
- GLint _location, GLsizei _count, GLboolean _transpose,
- const GLfloat* _value) {
+ void Init(GLint _location, GLsizei _count, const GLfloat* _value) {
SetHeader(_count);
location = _location;
count = _count;
- transpose = _transpose;
- memcpy(ImmediateDataAddress(this),
- _value, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _value, ComputeDataSize(_count));
}
- void* Set(
- void* cmd, GLint _location, GLsizei _count, GLboolean _transpose,
- const GLfloat* _value) {
- static_cast<ValueType*>(cmd)->Init(_location, _count, _transpose, _value);
- const uint32 size = ComputeSize(_count);
+ void* Set(void* cmd, GLint _location, GLsizei _count, const GLfloat* _value) {
+ static_cast<ValueType*>(cmd)->Init(_location, _count, _value);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 location;
- int32 count;
- uint32 transpose;
+ int32_t location;
+ int32_t count;
+ static const uint32_t transpose = false;
};
-COMPILE_ASSERT(sizeof(UniformMatrix4fvImmediate) == 16,
- Sizeof_UniformMatrix4fvImmediate_is_not_16);
+COMPILE_ASSERT(sizeof(UniformMatrix4fvImmediate) == 12,
+ Sizeof_UniformMatrix4fvImmediate_is_not_12);
COMPILE_ASSERT(offsetof(UniformMatrix4fvImmediate, header) == 0,
OffsetOf_UniformMatrix4fvImmediate_header_not_0);
COMPILE_ASSERT(offsetof(UniformMatrix4fvImmediate, location) == 4,
OffsetOf_UniformMatrix4fvImmediate_location_not_4);
COMPILE_ASSERT(offsetof(UniformMatrix4fvImmediate, count) == 8,
OffsetOf_UniformMatrix4fvImmediate_count_not_8);
-COMPILE_ASSERT(offsetof(UniformMatrix4fvImmediate, transpose) == 12,
- OffsetOf_UniformMatrix4fvImmediate_transpose_not_12);
struct UseProgram {
typedef UseProgram ValueType;
static const CommandId kCmdId = kUseProgram;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _program) {
SetHeader();
@@ -7182,11 +5980,10 @@ struct UseProgram {
}
gpu::CommandHeader header;
- uint32 program;
+ uint32_t program;
};
-COMPILE_ASSERT(sizeof(UseProgram) == 8,
- Sizeof_UseProgram_is_not_8);
+COMPILE_ASSERT(sizeof(UseProgram) == 8, Sizeof_UseProgram_is_not_8);
COMPILE_ASSERT(offsetof(UseProgram, header) == 0,
OffsetOf_UseProgram_header_not_0);
COMPILE_ASSERT(offsetof(UseProgram, program) == 4,
@@ -7196,14 +5993,13 @@ struct ValidateProgram {
typedef ValidateProgram ValueType;
static const CommandId kCmdId = kValidateProgram;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _program) {
SetHeader();
@@ -7216,11 +6012,10 @@ struct ValidateProgram {
}
gpu::CommandHeader header;
- uint32 program;
+ uint32_t program;
};
-COMPILE_ASSERT(sizeof(ValidateProgram) == 8,
- Sizeof_ValidateProgram_is_not_8);
+COMPILE_ASSERT(sizeof(ValidateProgram) == 8, Sizeof_ValidateProgram_is_not_8);
COMPILE_ASSERT(offsetof(ValidateProgram, header) == 0,
OffsetOf_ValidateProgram_header_not_0);
COMPILE_ASSERT(offsetof(ValidateProgram, program) == 4,
@@ -7230,14 +6025,13 @@ struct VertexAttrib1f {
typedef VertexAttrib1f ValueType;
static const CommandId kCmdId = kVertexAttrib1f;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _indx, GLfloat _x) {
SetHeader();
@@ -7251,12 +6045,11 @@ struct VertexAttrib1f {
}
gpu::CommandHeader header;
- uint32 indx;
+ uint32_t indx;
float x;
};
-COMPILE_ASSERT(sizeof(VertexAttrib1f) == 12,
- Sizeof_VertexAttrib1f_is_not_12);
+COMPILE_ASSERT(sizeof(VertexAttrib1f) == 12, Sizeof_VertexAttrib1f_is_not_12);
COMPILE_ASSERT(offsetof(VertexAttrib1f, header) == 0,
OffsetOf_VertexAttrib1f_header_not_0);
COMPILE_ASSERT(offsetof(VertexAttrib1f, indx) == 4,
@@ -7264,85 +6057,37 @@ COMPILE_ASSERT(offsetof(VertexAttrib1f, indx) == 4,
COMPILE_ASSERT(offsetof(VertexAttrib1f, x) == 8,
OffsetOf_VertexAttrib1f_x_not_8);
-struct VertexAttrib1fv {
- typedef VertexAttrib1fv ValueType;
- static const CommandId kCmdId = kVertexAttrib1fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLuint _indx, uint32 _values_shm_id, uint32 _values_shm_offset) {
- SetHeader();
- indx = _indx;
- values_shm_id = _values_shm_id;
- values_shm_offset = _values_shm_offset;
- }
-
- void* Set(
- void* cmd, GLuint _indx, uint32 _values_shm_id,
- uint32 _values_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_indx, _values_shm_id, _values_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 indx;
- uint32 values_shm_id;
- uint32 values_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(VertexAttrib1fv) == 16,
- Sizeof_VertexAttrib1fv_is_not_16);
-COMPILE_ASSERT(offsetof(VertexAttrib1fv, header) == 0,
- OffsetOf_VertexAttrib1fv_header_not_0);
-COMPILE_ASSERT(offsetof(VertexAttrib1fv, indx) == 4,
- OffsetOf_VertexAttrib1fv_indx_not_4);
-COMPILE_ASSERT(offsetof(VertexAttrib1fv, values_shm_id) == 8,
- OffsetOf_VertexAttrib1fv_values_shm_id_not_8);
-COMPILE_ASSERT(offsetof(VertexAttrib1fv, values_shm_offset) == 12,
- OffsetOf_VertexAttrib1fv_values_shm_offset_not_12);
-
struct VertexAttrib1fvImmediate {
typedef VertexAttrib1fvImmediate ValueType;
static const CommandId kCmdId = kVertexAttrib1fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize() {
- return static_cast<uint32>(
- sizeof(GLfloat) * 1); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 1); // NOLINT
}
- static uint32 ComputeSize() {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize()); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void SetHeader() {
- header.SetCmdByTotalSize<ValueType>(ComputeSize());
- }
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
void Init(GLuint _indx, const GLfloat* _values) {
SetHeader();
indx = _indx;
- memcpy(ImmediateDataAddress(this),
- _values, ComputeDataSize());
+ memcpy(ImmediateDataAddress(this), _values, ComputeDataSize());
}
void* Set(void* cmd, GLuint _indx, const GLfloat* _values) {
static_cast<ValueType*>(cmd)->Init(_indx, _values);
- const uint32 size = ComputeSize();
+ const uint32_t size = ComputeSize();
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 indx;
+ uint32_t indx;
};
COMPILE_ASSERT(sizeof(VertexAttrib1fvImmediate) == 8,
@@ -7356,14 +6101,13 @@ struct VertexAttrib2f {
typedef VertexAttrib2f ValueType;
static const CommandId kCmdId = kVertexAttrib2f;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _indx, GLfloat _x, GLfloat _y) {
SetHeader();
@@ -7378,13 +6122,12 @@ struct VertexAttrib2f {
}
gpu::CommandHeader header;
- uint32 indx;
+ uint32_t indx;
float x;
float y;
};
-COMPILE_ASSERT(sizeof(VertexAttrib2f) == 16,
- Sizeof_VertexAttrib2f_is_not_16);
+COMPILE_ASSERT(sizeof(VertexAttrib2f) == 16, Sizeof_VertexAttrib2f_is_not_16);
COMPILE_ASSERT(offsetof(VertexAttrib2f, header) == 0,
OffsetOf_VertexAttrib2f_header_not_0);
COMPILE_ASSERT(offsetof(VertexAttrib2f, indx) == 4,
@@ -7394,85 +6137,37 @@ COMPILE_ASSERT(offsetof(VertexAttrib2f, x) == 8,
COMPILE_ASSERT(offsetof(VertexAttrib2f, y) == 12,
OffsetOf_VertexAttrib2f_y_not_12);
-struct VertexAttrib2fv {
- typedef VertexAttrib2fv ValueType;
- static const CommandId kCmdId = kVertexAttrib2fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLuint _indx, uint32 _values_shm_id, uint32 _values_shm_offset) {
- SetHeader();
- indx = _indx;
- values_shm_id = _values_shm_id;
- values_shm_offset = _values_shm_offset;
- }
-
- void* Set(
- void* cmd, GLuint _indx, uint32 _values_shm_id,
- uint32 _values_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_indx, _values_shm_id, _values_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 indx;
- uint32 values_shm_id;
- uint32 values_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(VertexAttrib2fv) == 16,
- Sizeof_VertexAttrib2fv_is_not_16);
-COMPILE_ASSERT(offsetof(VertexAttrib2fv, header) == 0,
- OffsetOf_VertexAttrib2fv_header_not_0);
-COMPILE_ASSERT(offsetof(VertexAttrib2fv, indx) == 4,
- OffsetOf_VertexAttrib2fv_indx_not_4);
-COMPILE_ASSERT(offsetof(VertexAttrib2fv, values_shm_id) == 8,
- OffsetOf_VertexAttrib2fv_values_shm_id_not_8);
-COMPILE_ASSERT(offsetof(VertexAttrib2fv, values_shm_offset) == 12,
- OffsetOf_VertexAttrib2fv_values_shm_offset_not_12);
-
struct VertexAttrib2fvImmediate {
typedef VertexAttrib2fvImmediate ValueType;
static const CommandId kCmdId = kVertexAttrib2fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize() {
- return static_cast<uint32>(
- sizeof(GLfloat) * 2); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 2); // NOLINT
}
- static uint32 ComputeSize() {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize()); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void SetHeader() {
- header.SetCmdByTotalSize<ValueType>(ComputeSize());
- }
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
void Init(GLuint _indx, const GLfloat* _values) {
SetHeader();
indx = _indx;
- memcpy(ImmediateDataAddress(this),
- _values, ComputeDataSize());
+ memcpy(ImmediateDataAddress(this), _values, ComputeDataSize());
}
void* Set(void* cmd, GLuint _indx, const GLfloat* _values) {
static_cast<ValueType*>(cmd)->Init(_indx, _values);
- const uint32 size = ComputeSize();
+ const uint32_t size = ComputeSize();
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 indx;
+ uint32_t indx;
};
COMPILE_ASSERT(sizeof(VertexAttrib2fvImmediate) == 8,
@@ -7486,14 +6181,13 @@ struct VertexAttrib3f {
typedef VertexAttrib3f ValueType;
static const CommandId kCmdId = kVertexAttrib3f;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _indx, GLfloat _x, GLfloat _y, GLfloat _z) {
SetHeader();
@@ -7509,14 +6203,13 @@ struct VertexAttrib3f {
}
gpu::CommandHeader header;
- uint32 indx;
+ uint32_t indx;
float x;
float y;
float z;
};
-COMPILE_ASSERT(sizeof(VertexAttrib3f) == 20,
- Sizeof_VertexAttrib3f_is_not_20);
+COMPILE_ASSERT(sizeof(VertexAttrib3f) == 20, Sizeof_VertexAttrib3f_is_not_20);
COMPILE_ASSERT(offsetof(VertexAttrib3f, header) == 0,
OffsetOf_VertexAttrib3f_header_not_0);
COMPILE_ASSERT(offsetof(VertexAttrib3f, indx) == 4,
@@ -7528,85 +6221,37 @@ COMPILE_ASSERT(offsetof(VertexAttrib3f, y) == 12,
COMPILE_ASSERT(offsetof(VertexAttrib3f, z) == 16,
OffsetOf_VertexAttrib3f_z_not_16);
-struct VertexAttrib3fv {
- typedef VertexAttrib3fv ValueType;
- static const CommandId kCmdId = kVertexAttrib3fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLuint _indx, uint32 _values_shm_id, uint32 _values_shm_offset) {
- SetHeader();
- indx = _indx;
- values_shm_id = _values_shm_id;
- values_shm_offset = _values_shm_offset;
- }
-
- void* Set(
- void* cmd, GLuint _indx, uint32 _values_shm_id,
- uint32 _values_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_indx, _values_shm_id, _values_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 indx;
- uint32 values_shm_id;
- uint32 values_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(VertexAttrib3fv) == 16,
- Sizeof_VertexAttrib3fv_is_not_16);
-COMPILE_ASSERT(offsetof(VertexAttrib3fv, header) == 0,
- OffsetOf_VertexAttrib3fv_header_not_0);
-COMPILE_ASSERT(offsetof(VertexAttrib3fv, indx) == 4,
- OffsetOf_VertexAttrib3fv_indx_not_4);
-COMPILE_ASSERT(offsetof(VertexAttrib3fv, values_shm_id) == 8,
- OffsetOf_VertexAttrib3fv_values_shm_id_not_8);
-COMPILE_ASSERT(offsetof(VertexAttrib3fv, values_shm_offset) == 12,
- OffsetOf_VertexAttrib3fv_values_shm_offset_not_12);
-
struct VertexAttrib3fvImmediate {
typedef VertexAttrib3fvImmediate ValueType;
static const CommandId kCmdId = kVertexAttrib3fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize() {
- return static_cast<uint32>(
- sizeof(GLfloat) * 3); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 3); // NOLINT
}
- static uint32 ComputeSize() {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize()); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void SetHeader() {
- header.SetCmdByTotalSize<ValueType>(ComputeSize());
- }
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
void Init(GLuint _indx, const GLfloat* _values) {
SetHeader();
indx = _indx;
- memcpy(ImmediateDataAddress(this),
- _values, ComputeDataSize());
+ memcpy(ImmediateDataAddress(this), _values, ComputeDataSize());
}
void* Set(void* cmd, GLuint _indx, const GLfloat* _values) {
static_cast<ValueType*>(cmd)->Init(_indx, _values);
- const uint32 size = ComputeSize();
+ const uint32_t size = ComputeSize();
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 indx;
+ uint32_t indx;
};
COMPILE_ASSERT(sizeof(VertexAttrib3fvImmediate) == 8,
@@ -7620,14 +6265,13 @@ struct VertexAttrib4f {
typedef VertexAttrib4f ValueType;
static const CommandId kCmdId = kVertexAttrib4f;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _indx, GLfloat _x, GLfloat _y, GLfloat _z, GLfloat _w) {
SetHeader();
@@ -7638,23 +6282,25 @@ struct VertexAttrib4f {
w = _w;
}
- void* Set(
- void* cmd, GLuint _indx, GLfloat _x, GLfloat _y, GLfloat _z,
- GLfloat _w) {
+ void* Set(void* cmd,
+ GLuint _indx,
+ GLfloat _x,
+ GLfloat _y,
+ GLfloat _z,
+ GLfloat _w) {
static_cast<ValueType*>(cmd)->Init(_indx, _x, _y, _z, _w);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 indx;
+ uint32_t indx;
float x;
float y;
float z;
float w;
};
-COMPILE_ASSERT(sizeof(VertexAttrib4f) == 24,
- Sizeof_VertexAttrib4f_is_not_24);
+COMPILE_ASSERT(sizeof(VertexAttrib4f) == 24, Sizeof_VertexAttrib4f_is_not_24);
COMPILE_ASSERT(offsetof(VertexAttrib4f, header) == 0,
OffsetOf_VertexAttrib4f_header_not_0);
COMPILE_ASSERT(offsetof(VertexAttrib4f, indx) == 4,
@@ -7668,85 +6314,37 @@ COMPILE_ASSERT(offsetof(VertexAttrib4f, z) == 16,
COMPILE_ASSERT(offsetof(VertexAttrib4f, w) == 20,
OffsetOf_VertexAttrib4f_w_not_20);
-struct VertexAttrib4fv {
- typedef VertexAttrib4fv ValueType;
- static const CommandId kCmdId = kVertexAttrib4fv;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLuint _indx, uint32 _values_shm_id, uint32 _values_shm_offset) {
- SetHeader();
- indx = _indx;
- values_shm_id = _values_shm_id;
- values_shm_offset = _values_shm_offset;
- }
-
- void* Set(
- void* cmd, GLuint _indx, uint32 _values_shm_id,
- uint32 _values_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_indx, _values_shm_id, _values_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 indx;
- uint32 values_shm_id;
- uint32 values_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(VertexAttrib4fv) == 16,
- Sizeof_VertexAttrib4fv_is_not_16);
-COMPILE_ASSERT(offsetof(VertexAttrib4fv, header) == 0,
- OffsetOf_VertexAttrib4fv_header_not_0);
-COMPILE_ASSERT(offsetof(VertexAttrib4fv, indx) == 4,
- OffsetOf_VertexAttrib4fv_indx_not_4);
-COMPILE_ASSERT(offsetof(VertexAttrib4fv, values_shm_id) == 8,
- OffsetOf_VertexAttrib4fv_values_shm_id_not_8);
-COMPILE_ASSERT(offsetof(VertexAttrib4fv, values_shm_offset) == 12,
- OffsetOf_VertexAttrib4fv_values_shm_offset_not_12);
-
struct VertexAttrib4fvImmediate {
typedef VertexAttrib4fvImmediate ValueType;
static const CommandId kCmdId = kVertexAttrib4fvImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize() {
- return static_cast<uint32>(
- sizeof(GLfloat) * 4); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLfloat) * 4); // NOLINT
}
- static uint32 ComputeSize() {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize()); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void SetHeader() {
- header.SetCmdByTotalSize<ValueType>(ComputeSize());
- }
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
void Init(GLuint _indx, const GLfloat* _values) {
SetHeader();
indx = _indx;
- memcpy(ImmediateDataAddress(this),
- _values, ComputeDataSize());
+ memcpy(ImmediateDataAddress(this), _values, ComputeDataSize());
}
void* Set(void* cmd, GLuint _indx, const GLfloat* _values) {
static_cast<ValueType*>(cmd)->Init(_indx, _values);
- const uint32 size = ComputeSize();
+ const uint32_t size = ComputeSize();
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 indx;
+ uint32_t indx;
};
COMPILE_ASSERT(sizeof(VertexAttrib4fvImmediate) == 8,
@@ -7760,18 +6358,20 @@ struct VertexAttribPointer {
typedef VertexAttribPointer ValueType;
static const CommandId kCmdId = kVertexAttribPointer;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _indx, GLint _size, GLenum _type, GLboolean _normalized,
- GLsizei _stride, GLuint _offset) {
+ void Init(GLuint _indx,
+ GLint _size,
+ GLenum _type,
+ GLboolean _normalized,
+ GLsizei _stride,
+ GLuint _offset) {
SetHeader();
indx = _indx;
size = _size;
@@ -7781,21 +6381,25 @@ struct VertexAttribPointer {
offset = _offset;
}
- void* Set(
- void* cmd, GLuint _indx, GLint _size, GLenum _type, GLboolean _normalized,
- GLsizei _stride, GLuint _offset) {
- static_cast<ValueType*>(
- cmd)->Init(_indx, _size, _type, _normalized, _stride, _offset);
+ void* Set(void* cmd,
+ GLuint _indx,
+ GLint _size,
+ GLenum _type,
+ GLboolean _normalized,
+ GLsizei _stride,
+ GLuint _offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_indx, _size, _type, _normalized, _stride, _offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 indx;
- int32 size;
- uint32 type;
- uint32 normalized;
- int32 stride;
- uint32 offset;
+ uint32_t indx;
+ int32_t size;
+ uint32_t type;
+ uint32_t normalized;
+ int32_t stride;
+ uint32_t offset;
};
COMPILE_ASSERT(sizeof(VertexAttribPointer) == 28,
@@ -7819,14 +6423,13 @@ struct Viewport {
typedef Viewport ValueType;
static const CommandId kCmdId = kViewport;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _x, GLint _y, GLsizei _width, GLsizei _height) {
SetHeader();
@@ -7842,22 +6445,17 @@ struct Viewport {
}
gpu::CommandHeader header;
- int32 x;
- int32 y;
- int32 width;
- int32 height;
+ int32_t x;
+ int32_t y;
+ int32_t width;
+ int32_t height;
};
-COMPILE_ASSERT(sizeof(Viewport) == 20,
- Sizeof_Viewport_is_not_20);
-COMPILE_ASSERT(offsetof(Viewport, header) == 0,
- OffsetOf_Viewport_header_not_0);
-COMPILE_ASSERT(offsetof(Viewport, x) == 4,
- OffsetOf_Viewport_x_not_4);
-COMPILE_ASSERT(offsetof(Viewport, y) == 8,
- OffsetOf_Viewport_y_not_8);
-COMPILE_ASSERT(offsetof(Viewport, width) == 12,
- OffsetOf_Viewport_width_not_12);
+COMPILE_ASSERT(sizeof(Viewport) == 20, Sizeof_Viewport_is_not_20);
+COMPILE_ASSERT(offsetof(Viewport, header) == 0, OffsetOf_Viewport_header_not_0);
+COMPILE_ASSERT(offsetof(Viewport, x) == 4, OffsetOf_Viewport_x_not_4);
+COMPILE_ASSERT(offsetof(Viewport, y) == 8, OffsetOf_Viewport_y_not_8);
+COMPILE_ASSERT(offsetof(Viewport, width) == 12, OffsetOf_Viewport_width_not_12);
COMPILE_ASSERT(offsetof(Viewport, height) == 16,
OffsetOf_Viewport_height_not_16);
@@ -7865,19 +6463,24 @@ struct BlitFramebufferCHROMIUM {
typedef BlitFramebufferCHROMIUM ValueType;
static const CommandId kCmdId = kBlitFramebufferCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLint _srcX0, GLint _srcY0, GLint _srcX1, GLint _srcY1, GLint _dstX0,
- GLint _dstY0, GLint _dstX1, GLint _dstY1, GLbitfield _mask,
- GLenum _filter) {
+ void Init(GLint _srcX0,
+ GLint _srcY0,
+ GLint _srcX1,
+ GLint _srcY1,
+ GLint _dstX0,
+ GLint _dstY0,
+ GLint _dstX1,
+ GLint _dstY1,
+ GLbitfield _mask,
+ GLenum _filter) {
SetHeader();
srcX0 = _srcX0;
srcY0 = _srcY0;
@@ -7891,28 +6494,41 @@ struct BlitFramebufferCHROMIUM {
filter = _filter;
}
- void* Set(
- void* cmd, GLint _srcX0, GLint _srcY0, GLint _srcX1, GLint _srcY1,
- GLint _dstX0, GLint _dstY0, GLint _dstX1, GLint _dstY1, GLbitfield _mask,
- GLenum _filter) {
- static_cast<ValueType*>(
- cmd)->Init(
- _srcX0, _srcY0, _srcX1, _srcY1, _dstX0, _dstY0, _dstX1, _dstY1,
- _mask, _filter);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 srcX0;
- int32 srcY0;
- int32 srcX1;
- int32 srcY1;
- int32 dstX0;
- int32 dstY0;
- int32 dstX1;
- int32 dstY1;
- uint32 mask;
- uint32 filter;
+ void* Set(void* cmd,
+ GLint _srcX0,
+ GLint _srcY0,
+ GLint _srcX1,
+ GLint _srcY1,
+ GLint _dstX0,
+ GLint _dstY0,
+ GLint _dstX1,
+ GLint _dstY1,
+ GLbitfield _mask,
+ GLenum _filter) {
+ static_cast<ValueType*>(cmd)->Init(_srcX0,
+ _srcY0,
+ _srcX1,
+ _srcY1,
+ _dstX0,
+ _dstY0,
+ _dstX1,
+ _dstY1,
+ _mask,
+ _filter);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ int32_t srcX0;
+ int32_t srcY0;
+ int32_t srcX1;
+ int32_t srcY1;
+ int32_t dstX0;
+ int32_t dstY0;
+ int32_t dstX1;
+ int32_t dstY1;
+ uint32_t mask;
+ uint32_t filter;
};
COMPILE_ASSERT(sizeof(BlitFramebufferCHROMIUM) == 44,
@@ -7945,18 +6561,19 @@ struct RenderbufferStorageMultisampleCHROMIUM {
typedef RenderbufferStorageMultisampleCHROMIUM ValueType;
static const CommandId kCmdId = kRenderbufferStorageMultisampleCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLsizei _samples, GLenum _internalformat, GLsizei _width,
- GLsizei _height) {
+ void Init(GLenum _target,
+ GLsizei _samples,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height) {
SetHeader();
target = _target;
samples = _samples;
@@ -7965,20 +6582,23 @@ struct RenderbufferStorageMultisampleCHROMIUM {
height = _height;
}
- void* Set(
- void* cmd, GLenum _target, GLsizei _samples, GLenum _internalformat,
- GLsizei _width, GLsizei _height) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _samples, _internalformat, _width, _height);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLsizei _samples,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _samples, _internalformat, _width, _height);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 samples;
- uint32 internalformat;
- int32 width;
- int32 height;
+ uint32_t target;
+ int32_t samples;
+ uint32_t internalformat;
+ int32_t width;
+ int32_t height;
};
COMPILE_ASSERT(sizeof(RenderbufferStorageMultisampleCHROMIUM) == 24,
@@ -7991,7 +6611,7 @@ COMPILE_ASSERT(offsetof(RenderbufferStorageMultisampleCHROMIUM, samples) == 8,
OffsetOf_RenderbufferStorageMultisampleCHROMIUM_samples_not_8);
COMPILE_ASSERT(
offsetof(RenderbufferStorageMultisampleCHROMIUM, internalformat) == 12,
- OffsetOf_RenderbufferStorageMultisampleCHROMIUM_internalformat_not_12); // NOLINT
+ OffsetOf_RenderbufferStorageMultisampleCHROMIUM_internalformat_not_12);
COMPILE_ASSERT(offsetof(RenderbufferStorageMultisampleCHROMIUM, width) == 16,
OffsetOf_RenderbufferStorageMultisampleCHROMIUM_width_not_16);
COMPILE_ASSERT(offsetof(RenderbufferStorageMultisampleCHROMIUM, height) == 20,
@@ -8002,18 +6622,19 @@ struct RenderbufferStorageMultisampleEXT {
typedef RenderbufferStorageMultisampleEXT ValueType;
static const CommandId kCmdId = kRenderbufferStorageMultisampleEXT;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLsizei _samples, GLenum _internalformat, GLsizei _width,
- GLsizei _height) {
+ void Init(GLenum _target,
+ GLsizei _samples,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height) {
SetHeader();
target = _target;
samples = _samples;
@@ -8022,20 +6643,23 @@ struct RenderbufferStorageMultisampleEXT {
height = _height;
}
- void* Set(
- void* cmd, GLenum _target, GLsizei _samples, GLenum _internalformat,
- GLsizei _width, GLsizei _height) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _samples, _internalformat, _width, _height);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLsizei _samples,
+ GLenum _internalformat,
+ GLsizei _width,
+ GLsizei _height) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _samples, _internalformat, _width, _height);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 samples;
- uint32 internalformat;
- int32 width;
- int32 height;
+ uint32_t target;
+ int32_t samples;
+ uint32_t internalformat;
+ int32_t width;
+ int32_t height;
};
COMPILE_ASSERT(sizeof(RenderbufferStorageMultisampleEXT) == 24,
@@ -8048,7 +6672,7 @@ COMPILE_ASSERT(offsetof(RenderbufferStorageMultisampleEXT, samples) == 8,
OffsetOf_RenderbufferStorageMultisampleEXT_samples_not_8);
COMPILE_ASSERT(
offsetof(RenderbufferStorageMultisampleEXT, internalformat) == 12,
- OffsetOf_RenderbufferStorageMultisampleEXT_internalformat_not_12); // NOLINT
+ OffsetOf_RenderbufferStorageMultisampleEXT_internalformat_not_12);
COMPILE_ASSERT(offsetof(RenderbufferStorageMultisampleEXT, width) == 16,
OffsetOf_RenderbufferStorageMultisampleEXT_width_not_16);
COMPILE_ASSERT(offsetof(RenderbufferStorageMultisampleEXT, height) == 20,
@@ -8058,47 +6682,49 @@ struct FramebufferTexture2DMultisampleEXT {
typedef FramebufferTexture2DMultisampleEXT ValueType;
static const CommandId kCmdId = kFramebufferTexture2DMultisampleEXT;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _attachment, GLenum _textarget, GLuint _texture,
- GLint _level, GLsizei _samples) {
+ void Init(GLenum _target,
+ GLenum _attachment,
+ GLenum _textarget,
+ GLuint _texture,
+ GLsizei _samples) {
SetHeader();
target = _target;
attachment = _attachment;
textarget = _textarget;
texture = _texture;
- level = _level;
samples = _samples;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _attachment, GLenum _textarget,
- GLuint _texture, GLint _level, GLsizei _samples) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _attachment, _textarget, _texture, _level, _samples);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _attachment,
+ GLenum _textarget,
+ GLuint _texture,
+ GLsizei _samples) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _attachment, _textarget, _texture, _samples);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 attachment;
- uint32 textarget;
- uint32 texture;
- int32 level;
- int32 samples;
+ uint32_t target;
+ uint32_t attachment;
+ uint32_t textarget;
+ uint32_t texture;
+ int32_t samples;
+ static const int32_t level = 0;
};
-COMPILE_ASSERT(sizeof(FramebufferTexture2DMultisampleEXT) == 28,
- Sizeof_FramebufferTexture2DMultisampleEXT_is_not_28);
+COMPILE_ASSERT(sizeof(FramebufferTexture2DMultisampleEXT) == 24,
+ Sizeof_FramebufferTexture2DMultisampleEXT_is_not_24);
COMPILE_ASSERT(offsetof(FramebufferTexture2DMultisampleEXT, header) == 0,
OffsetOf_FramebufferTexture2DMultisampleEXT_header_not_0);
COMPILE_ASSERT(offsetof(FramebufferTexture2DMultisampleEXT, target) == 4,
@@ -8109,27 +6735,26 @@ COMPILE_ASSERT(offsetof(FramebufferTexture2DMultisampleEXT, textarget) == 12,
OffsetOf_FramebufferTexture2DMultisampleEXT_textarget_not_12);
COMPILE_ASSERT(offsetof(FramebufferTexture2DMultisampleEXT, texture) == 16,
OffsetOf_FramebufferTexture2DMultisampleEXT_texture_not_16);
-COMPILE_ASSERT(offsetof(FramebufferTexture2DMultisampleEXT, level) == 20,
- OffsetOf_FramebufferTexture2DMultisampleEXT_level_not_20);
-COMPILE_ASSERT(offsetof(FramebufferTexture2DMultisampleEXT, samples) == 24,
- OffsetOf_FramebufferTexture2DMultisampleEXT_samples_not_24);
+COMPILE_ASSERT(offsetof(FramebufferTexture2DMultisampleEXT, samples) == 20,
+ OffsetOf_FramebufferTexture2DMultisampleEXT_samples_not_20);
struct TexStorage2DEXT {
typedef TexStorage2DEXT ValueType;
static const CommandId kCmdId = kTexStorage2DEXT;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLsizei _levels, GLenum _internalFormat, GLsizei _width,
- GLsizei _height) {
+ void Init(GLenum _target,
+ GLsizei _levels,
+ GLenum _internalFormat,
+ GLsizei _width,
+ GLsizei _height) {
SetHeader();
target = _target;
levels = _levels;
@@ -8138,24 +6763,26 @@ struct TexStorage2DEXT {
height = _height;
}
- void* Set(
- void* cmd, GLenum _target, GLsizei _levels, GLenum _internalFormat,
- GLsizei _width, GLsizei _height) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _levels, _internalFormat, _width, _height);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLsizei _levels,
+ GLenum _internalFormat,
+ GLsizei _width,
+ GLsizei _height) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _levels, _internalFormat, _width, _height);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 levels;
- uint32 internalFormat;
- int32 width;
- int32 height;
+ uint32_t target;
+ int32_t levels;
+ uint32_t internalFormat;
+ int32_t width;
+ int32_t height;
};
-COMPILE_ASSERT(sizeof(TexStorage2DEXT) == 24,
- Sizeof_TexStorage2DEXT_is_not_24);
+COMPILE_ASSERT(sizeof(TexStorage2DEXT) == 24, Sizeof_TexStorage2DEXT_is_not_24);
COMPILE_ASSERT(offsetof(TexStorage2DEXT, header) == 0,
OffsetOf_TexStorage2DEXT_header_not_0);
COMPILE_ASSERT(offsetof(TexStorage2DEXT, target) == 4,
@@ -8169,63 +6796,19 @@ COMPILE_ASSERT(offsetof(TexStorage2DEXT, width) == 16,
COMPILE_ASSERT(offsetof(TexStorage2DEXT, height) == 20,
OffsetOf_TexStorage2DEXT_height_not_20);
-struct GenQueriesEXT {
- typedef GenQueriesEXT ValueType;
- static const CommandId kCmdId = kGenQueriesEXT;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _n, uint32 _queries_shm_id, uint32 _queries_shm_offset) {
- SetHeader();
- n = _n;
- queries_shm_id = _queries_shm_id;
- queries_shm_offset = _queries_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _queries_shm_id,
- uint32 _queries_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _queries_shm_id, _queries_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 queries_shm_id;
- uint32 queries_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(GenQueriesEXT) == 16,
- Sizeof_GenQueriesEXT_is_not_16);
-COMPILE_ASSERT(offsetof(GenQueriesEXT, header) == 0,
- OffsetOf_GenQueriesEXT_header_not_0);
-COMPILE_ASSERT(offsetof(GenQueriesEXT, n) == 4,
- OffsetOf_GenQueriesEXT_n_not_4);
-COMPILE_ASSERT(offsetof(GenQueriesEXT, queries_shm_id) == 8,
- OffsetOf_GenQueriesEXT_queries_shm_id_not_8);
-COMPILE_ASSERT(offsetof(GenQueriesEXT, queries_shm_offset) == 12,
- OffsetOf_GenQueriesEXT_queries_shm_offset_not_12);
-
struct GenQueriesEXTImmediate {
typedef GenQueriesEXTImmediate ValueType;
static const CommandId kCmdId = kGenQueriesEXTImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -8235,18 +6818,17 @@ struct GenQueriesEXTImmediate {
void Init(GLsizei _n, GLuint* _queries) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _queries, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _queries, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, GLuint* _queries) {
static_cast<ValueType*>(cmd)->Init(_n, _queries);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(GenQueriesEXTImmediate) == 8,
@@ -8256,63 +6838,19 @@ COMPILE_ASSERT(offsetof(GenQueriesEXTImmediate, header) == 0,
COMPILE_ASSERT(offsetof(GenQueriesEXTImmediate, n) == 4,
OffsetOf_GenQueriesEXTImmediate_n_not_4);
-struct DeleteQueriesEXT {
- typedef DeleteQueriesEXT ValueType;
- static const CommandId kCmdId = kDeleteQueriesEXT;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _n, uint32 _queries_shm_id, uint32 _queries_shm_offset) {
- SetHeader();
- n = _n;
- queries_shm_id = _queries_shm_id;
- queries_shm_offset = _queries_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _queries_shm_id,
- uint32 _queries_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_n, _queries_shm_id, _queries_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 queries_shm_id;
- uint32 queries_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(DeleteQueriesEXT) == 16,
- Sizeof_DeleteQueriesEXT_is_not_16);
-COMPILE_ASSERT(offsetof(DeleteQueriesEXT, header) == 0,
- OffsetOf_DeleteQueriesEXT_header_not_0);
-COMPILE_ASSERT(offsetof(DeleteQueriesEXT, n) == 4,
- OffsetOf_DeleteQueriesEXT_n_not_4);
-COMPILE_ASSERT(offsetof(DeleteQueriesEXT, queries_shm_id) == 8,
- OffsetOf_DeleteQueriesEXT_queries_shm_id_not_8);
-COMPILE_ASSERT(offsetof(DeleteQueriesEXT, queries_shm_offset) == 12,
- OffsetOf_DeleteQueriesEXT_queries_shm_offset_not_12);
-
struct DeleteQueriesEXTImmediate {
typedef DeleteQueriesEXTImmediate ValueType;
static const CommandId kCmdId = kDeleteQueriesEXTImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -8322,18 +6860,17 @@ struct DeleteQueriesEXTImmediate {
void Init(GLsizei _n, const GLuint* _queries) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _queries, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _queries, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, const GLuint* _queries) {
static_cast<ValueType*>(cmd)->Init(_n, _queries);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(DeleteQueriesEXTImmediate) == 8,
@@ -8347,18 +6884,18 @@ struct BeginQueryEXT {
typedef BeginQueryEXT ValueType;
static const CommandId kCmdId = kBeginQueryEXT;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLuint _id, uint32 _sync_data_shm_id,
- uint32 _sync_data_shm_offset) {
+ void Init(GLenum _target,
+ GLuint _id,
+ uint32_t _sync_data_shm_id,
+ uint32_t _sync_data_shm_offset) {
SetHeader();
target = _target;
id = _id;
@@ -8366,23 +6903,24 @@ struct BeginQueryEXT {
sync_data_shm_offset = _sync_data_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLuint _id, uint32 _sync_data_shm_id,
- uint32 _sync_data_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _id, _sync_data_shm_id, _sync_data_shm_offset);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLuint _id,
+ uint32_t _sync_data_shm_id,
+ uint32_t _sync_data_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _id, _sync_data_shm_id, _sync_data_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 id;
- uint32 sync_data_shm_id;
- uint32 sync_data_shm_offset;
+ uint32_t target;
+ uint32_t id;
+ uint32_t sync_data_shm_id;
+ uint32_t sync_data_shm_offset;
};
-COMPILE_ASSERT(sizeof(BeginQueryEXT) == 20,
- Sizeof_BeginQueryEXT_is_not_20);
+COMPILE_ASSERT(sizeof(BeginQueryEXT) == 20, Sizeof_BeginQueryEXT_is_not_20);
COMPILE_ASSERT(offsetof(BeginQueryEXT, header) == 0,
OffsetOf_BeginQueryEXT_header_not_0);
COMPILE_ASSERT(offsetof(BeginQueryEXT, target) == 4,
@@ -8398,14 +6936,13 @@ struct EndQueryEXT {
typedef EndQueryEXT ValueType;
static const CommandId kCmdId = kEndQueryEXT;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLuint _submit_count) {
SetHeader();
@@ -8419,12 +6956,11 @@ struct EndQueryEXT {
}
gpu::CommandHeader header;
- uint32 target;
- uint32 submit_count;
+ uint32_t target;
+ uint32_t submit_count;
};
-COMPILE_ASSERT(sizeof(EndQueryEXT) == 12,
- Sizeof_EndQueryEXT_is_not_12);
+COMPILE_ASSERT(sizeof(EndQueryEXT) == 12, Sizeof_EndQueryEXT_is_not_12);
COMPILE_ASSERT(offsetof(EndQueryEXT, header) == 0,
OffsetOf_EndQueryEXT_header_not_0);
COMPILE_ASSERT(offsetof(EndQueryEXT, target) == 4,
@@ -8436,14 +6972,13 @@ struct InsertEventMarkerEXT {
typedef InsertEventMarkerEXT ValueType;
static const CommandId kCmdId = kInsertEventMarkerEXT;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _bucket_id) {
SetHeader();
@@ -8456,7 +6991,7 @@ struct InsertEventMarkerEXT {
}
gpu::CommandHeader header;
- uint32 bucket_id;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(InsertEventMarkerEXT) == 8,
@@ -8470,14 +7005,13 @@ struct PushGroupMarkerEXT {
typedef PushGroupMarkerEXT ValueType;
static const CommandId kCmdId = kPushGroupMarkerEXT;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _bucket_id) {
SetHeader();
@@ -8490,7 +7024,7 @@ struct PushGroupMarkerEXT {
}
gpu::CommandHeader header;
- uint32 bucket_id;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(PushGroupMarkerEXT) == 8,
@@ -8504,18 +7038,15 @@ struct PopGroupMarkerEXT {
typedef PopGroupMarkerEXT ValueType;
static const CommandId kCmdId = kPopGroupMarkerEXT;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init() {
- SetHeader();
- }
+ void Init() { SetHeader(); }
void* Set(void* cmd) {
static_cast<ValueType*>(cmd)->Init();
@@ -8530,62 +7061,19 @@ COMPILE_ASSERT(sizeof(PopGroupMarkerEXT) == 4,
COMPILE_ASSERT(offsetof(PopGroupMarkerEXT, header) == 0,
OffsetOf_PopGroupMarkerEXT_header_not_0);
-struct GenVertexArraysOES {
- typedef GenVertexArraysOES ValueType;
- static const CommandId kCmdId = kGenVertexArraysOES;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _n, uint32 _arrays_shm_id, uint32 _arrays_shm_offset) {
- SetHeader();
- n = _n;
- arrays_shm_id = _arrays_shm_id;
- arrays_shm_offset = _arrays_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _arrays_shm_id,
- uint32 _arrays_shm_offset) {
- static_cast<ValueType*>(cmd)->Init(_n, _arrays_shm_id, _arrays_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 arrays_shm_id;
- uint32 arrays_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(GenVertexArraysOES) == 16,
- Sizeof_GenVertexArraysOES_is_not_16);
-COMPILE_ASSERT(offsetof(GenVertexArraysOES, header) == 0,
- OffsetOf_GenVertexArraysOES_header_not_0);
-COMPILE_ASSERT(offsetof(GenVertexArraysOES, n) == 4,
- OffsetOf_GenVertexArraysOES_n_not_4);
-COMPILE_ASSERT(offsetof(GenVertexArraysOES, arrays_shm_id) == 8,
- OffsetOf_GenVertexArraysOES_arrays_shm_id_not_8);
-COMPILE_ASSERT(offsetof(GenVertexArraysOES, arrays_shm_offset) == 12,
- OffsetOf_GenVertexArraysOES_arrays_shm_offset_not_12);
-
struct GenVertexArraysOESImmediate {
typedef GenVertexArraysOESImmediate ValueType;
static const CommandId kCmdId = kGenVertexArraysOESImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -8595,18 +7083,17 @@ struct GenVertexArraysOESImmediate {
void Init(GLsizei _n, GLuint* _arrays) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _arrays, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _arrays, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, GLuint* _arrays) {
static_cast<ValueType*>(cmd)->Init(_n, _arrays);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(GenVertexArraysOESImmediate) == 8,
@@ -8616,62 +7103,19 @@ COMPILE_ASSERT(offsetof(GenVertexArraysOESImmediate, header) == 0,
COMPILE_ASSERT(offsetof(GenVertexArraysOESImmediate, n) == 4,
OffsetOf_GenVertexArraysOESImmediate_n_not_4);
-struct DeleteVertexArraysOES {
- typedef DeleteVertexArraysOES ValueType;
- static const CommandId kCmdId = kDeleteVertexArraysOES;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _n, uint32 _arrays_shm_id, uint32 _arrays_shm_offset) {
- SetHeader();
- n = _n;
- arrays_shm_id = _arrays_shm_id;
- arrays_shm_offset = _arrays_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _n, uint32 _arrays_shm_id,
- uint32 _arrays_shm_offset) {
- static_cast<ValueType*>(cmd)->Init(_n, _arrays_shm_id, _arrays_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 n;
- uint32 arrays_shm_id;
- uint32 arrays_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(DeleteVertexArraysOES) == 16,
- Sizeof_DeleteVertexArraysOES_is_not_16);
-COMPILE_ASSERT(offsetof(DeleteVertexArraysOES, header) == 0,
- OffsetOf_DeleteVertexArraysOES_header_not_0);
-COMPILE_ASSERT(offsetof(DeleteVertexArraysOES, n) == 4,
- OffsetOf_DeleteVertexArraysOES_n_not_4);
-COMPILE_ASSERT(offsetof(DeleteVertexArraysOES, arrays_shm_id) == 8,
- OffsetOf_DeleteVertexArraysOES_arrays_shm_id_not_8);
-COMPILE_ASSERT(offsetof(DeleteVertexArraysOES, arrays_shm_offset) == 12,
- OffsetOf_DeleteVertexArraysOES_arrays_shm_offset_not_12);
-
struct DeleteVertexArraysOESImmediate {
typedef DeleteVertexArraysOESImmediate ValueType;
static const CommandId kCmdId = kDeleteVertexArraysOESImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei n) {
- return static_cast<uint32>(sizeof(GLuint) * n); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(GLuint) * n); // NOLINT
}
- static uint32 ComputeSize(GLsizei n) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(n)); // NOLINT
+ static uint32_t ComputeSize(GLsizei n) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(n)); // NOLINT
}
void SetHeader(GLsizei n) {
@@ -8681,18 +7125,17 @@ struct DeleteVertexArraysOESImmediate {
void Init(GLsizei _n, const GLuint* _arrays) {
SetHeader(_n);
n = _n;
- memcpy(ImmediateDataAddress(this),
- _arrays, ComputeDataSize(_n));
+ memcpy(ImmediateDataAddress(this), _arrays, ComputeDataSize(_n));
}
void* Set(void* cmd, GLsizei _n, const GLuint* _arrays) {
static_cast<ValueType*>(cmd)->Init(_n, _arrays);
- const uint32 size = ComputeSize(_n);
+ const uint32_t size = ComputeSize(_n);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 n;
+ int32_t n;
};
COMPILE_ASSERT(sizeof(DeleteVertexArraysOESImmediate) == 8,
@@ -8706,36 +7149,38 @@ struct IsVertexArrayOES {
typedef IsVertexArrayOES ValueType;
static const CommandId kCmdId = kIsVertexArrayOES;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- typedef uint32 Result;
+ typedef uint32_t Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _array, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _array,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
array = _array;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _array, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_array, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _array,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_array, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 array;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t array;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
COMPILE_ASSERT(sizeof(IsVertexArrayOES) == 16,
@@ -8753,14 +7198,13 @@ struct BindVertexArrayOES {
typedef BindVertexArrayOES ValueType;
static const CommandId kCmdId = kBindVertexArrayOES;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _array) {
SetHeader();
@@ -8773,7 +7217,7 @@ struct BindVertexArrayOES {
}
gpu::CommandHeader header;
- uint32 array;
+ uint32_t array;
};
COMPILE_ASSERT(sizeof(BindVertexArrayOES) == 8,
@@ -8787,18 +7231,15 @@ struct SwapBuffers {
typedef SwapBuffers ValueType;
static const CommandId kCmdId = kSwapBuffers;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init() {
- SetHeader();
- }
+ void Init() { SetHeader(); }
void* Set(void* cmd) {
static_cast<ValueType*>(cmd)->Init();
@@ -8808,8 +7249,7 @@ struct SwapBuffers {
gpu::CommandHeader header;
};
-COMPILE_ASSERT(sizeof(SwapBuffers) == 4,
- Sizeof_SwapBuffers_is_not_4);
+COMPILE_ASSERT(sizeof(SwapBuffers) == 4, Sizeof_SwapBuffers_is_not_4);
COMPILE_ASSERT(offsetof(SwapBuffers, header) == 0,
OffsetOf_SwapBuffers_header_not_0);
@@ -8817,20 +7257,22 @@ struct GetMaxValueInBufferCHROMIUM {
typedef GetMaxValueInBufferCHROMIUM ValueType;
static const CommandId kCmdId = kGetMaxValueInBufferCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef GLuint Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _buffer_id, GLsizei _count, GLenum _type, GLuint _offset,
- uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _buffer_id,
+ GLsizei _count,
+ GLenum _type,
+ GLuint _offset,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
buffer_id = _buffer_id;
count = _count;
@@ -8840,23 +7282,25 @@ struct GetMaxValueInBufferCHROMIUM {
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _buffer_id, GLsizei _count, GLenum _type,
- GLuint _offset, uint32 _result_shm_id, uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _buffer_id, _count, _type, _offset, _result_shm_id,
- _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _buffer_id,
+ GLsizei _count,
+ GLenum _type,
+ GLuint _offset,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(
+ _buffer_id, _count, _type, _offset, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 buffer_id;
- int32 count;
- uint32 type;
- uint32 offset;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t buffer_id;
+ int32_t count;
+ uint32_t type;
+ uint32_t offset;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
COMPILE_ASSERT(sizeof(GetMaxValueInBufferCHROMIUM) == 28,
@@ -8880,18 +7324,19 @@ struct GenSharedIdsCHROMIUM {
typedef GenSharedIdsCHROMIUM ValueType;
static const CommandId kCmdId = kGenSharedIdsCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _namespace_id, GLuint _id_offset, GLsizei _n, uint32 _ids_shm_id,
- uint32 _ids_shm_offset) {
+ void Init(GLuint _namespace_id,
+ GLuint _id_offset,
+ GLsizei _n,
+ uint32_t _ids_shm_id,
+ uint32_t _ids_shm_offset) {
SetHeader();
namespace_id = _namespace_id;
id_offset = _id_offset;
@@ -8900,21 +7345,23 @@ struct GenSharedIdsCHROMIUM {
ids_shm_offset = _ids_shm_offset;
}
- void* Set(
- void* cmd, GLuint _namespace_id, GLuint _id_offset, GLsizei _n,
- uint32 _ids_shm_id, uint32 _ids_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _namespace_id, _id_offset, _n, _ids_shm_id, _ids_shm_offset);
+ void* Set(void* cmd,
+ GLuint _namespace_id,
+ GLuint _id_offset,
+ GLsizei _n,
+ uint32_t _ids_shm_id,
+ uint32_t _ids_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_namespace_id, _id_offset, _n, _ids_shm_id, _ids_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 namespace_id;
- uint32 id_offset;
- int32 n;
- uint32 ids_shm_id;
- uint32 ids_shm_offset;
+ uint32_t namespace_id;
+ uint32_t id_offset;
+ int32_t n;
+ uint32_t ids_shm_id;
+ uint32_t ids_shm_offset;
};
COMPILE_ASSERT(sizeof(GenSharedIdsCHROMIUM) == 24,
@@ -8936,18 +7383,18 @@ struct DeleteSharedIdsCHROMIUM {
typedef DeleteSharedIdsCHROMIUM ValueType;
static const CommandId kCmdId = kDeleteSharedIdsCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _namespace_id, GLsizei _n, uint32 _ids_shm_id,
- uint32 _ids_shm_offset) {
+ void Init(GLuint _namespace_id,
+ GLsizei _n,
+ uint32_t _ids_shm_id,
+ uint32_t _ids_shm_offset) {
SetHeader();
namespace_id = _namespace_id;
n = _n;
@@ -8955,19 +7402,21 @@ struct DeleteSharedIdsCHROMIUM {
ids_shm_offset = _ids_shm_offset;
}
- void* Set(
- void* cmd, GLuint _namespace_id, GLsizei _n, uint32 _ids_shm_id,
- uint32 _ids_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_namespace_id, _n, _ids_shm_id, _ids_shm_offset);
+ void* Set(void* cmd,
+ GLuint _namespace_id,
+ GLsizei _n,
+ uint32_t _ids_shm_id,
+ uint32_t _ids_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_namespace_id, _n, _ids_shm_id, _ids_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 namespace_id;
- int32 n;
- uint32 ids_shm_id;
- uint32 ids_shm_offset;
+ uint32_t namespace_id;
+ int32_t n;
+ uint32_t ids_shm_id;
+ uint32_t ids_shm_offset;
};
COMPILE_ASSERT(sizeof(DeleteSharedIdsCHROMIUM) == 20,
@@ -8987,18 +7436,18 @@ struct RegisterSharedIdsCHROMIUM {
typedef RegisterSharedIdsCHROMIUM ValueType;
static const CommandId kCmdId = kRegisterSharedIdsCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _namespace_id, GLsizei _n, uint32 _ids_shm_id,
- uint32 _ids_shm_offset) {
+ void Init(GLuint _namespace_id,
+ GLsizei _n,
+ uint32_t _ids_shm_id,
+ uint32_t _ids_shm_offset) {
SetHeader();
namespace_id = _namespace_id;
n = _n;
@@ -9006,19 +7455,21 @@ struct RegisterSharedIdsCHROMIUM {
ids_shm_offset = _ids_shm_offset;
}
- void* Set(
- void* cmd, GLuint _namespace_id, GLsizei _n, uint32 _ids_shm_id,
- uint32 _ids_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_namespace_id, _n, _ids_shm_id, _ids_shm_offset);
+ void* Set(void* cmd,
+ GLuint _namespace_id,
+ GLsizei _n,
+ uint32_t _ids_shm_id,
+ uint32_t _ids_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_namespace_id, _n, _ids_shm_id, _ids_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 namespace_id;
- int32 n;
- uint32 ids_shm_id;
- uint32 ids_shm_offset;
+ uint32_t namespace_id;
+ int32_t n;
+ uint32_t ids_shm_id;
+ uint32_t ids_shm_offset;
};
COMPILE_ASSERT(sizeof(RegisterSharedIdsCHROMIUM) == 20,
@@ -9038,37 +7489,38 @@ struct EnableFeatureCHROMIUM {
typedef EnableFeatureCHROMIUM ValueType;
static const CommandId kCmdId = kEnableFeatureCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
typedef GLint Result;
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLuint _bucket_id, uint32 _result_shm_id, uint32 _result_shm_offset) {
+ void Init(GLuint _bucket_id,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
SetHeader();
bucket_id = _bucket_id;
result_shm_id = _result_shm_id;
result_shm_offset = _result_shm_offset;
}
- void* Set(
- void* cmd, GLuint _bucket_id, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_bucket_id, _result_shm_id, _result_shm_offset);
+ void* Set(void* cmd,
+ GLuint _bucket_id,
+ uint32_t _result_shm_id,
+ uint32_t _result_shm_offset) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_bucket_id, _result_shm_id, _result_shm_offset);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 bucket_id;
- uint32 result_shm_id;
- uint32 result_shm_offset;
+ uint32_t bucket_id;
+ uint32_t result_shm_id;
+ uint32_t result_shm_offset;
};
COMPILE_ASSERT(sizeof(EnableFeatureCHROMIUM) == 16,
@@ -9086,14 +7538,13 @@ struct ResizeCHROMIUM {
typedef ResizeCHROMIUM ValueType;
static const CommandId kCmdId = kResizeCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _width, GLuint _height, GLfloat _scale_factor) {
SetHeader();
@@ -9108,13 +7559,12 @@ struct ResizeCHROMIUM {
}
gpu::CommandHeader header;
- uint32 width;
- uint32 height;
+ uint32_t width;
+ uint32_t height;
float scale_factor;
};
-COMPILE_ASSERT(sizeof(ResizeCHROMIUM) == 16,
- Sizeof_ResizeCHROMIUM_is_not_16);
+COMPILE_ASSERT(sizeof(ResizeCHROMIUM) == 16, Sizeof_ResizeCHROMIUM_is_not_16);
COMPILE_ASSERT(offsetof(ResizeCHROMIUM, header) == 0,
OffsetOf_ResizeCHROMIUM_header_not_0);
COMPILE_ASSERT(offsetof(ResizeCHROMIUM, width) == 4,
@@ -9128,27 +7578,26 @@ struct GetRequestableExtensionsCHROMIUM {
typedef GetRequestableExtensionsCHROMIUM ValueType;
static const CommandId kCmdId = kGetRequestableExtensionsCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(uint32 _bucket_id) {
+ void Init(uint32_t _bucket_id) {
SetHeader();
bucket_id = _bucket_id;
}
- void* Set(void* cmd, uint32 _bucket_id) {
+ void* Set(void* cmd, uint32_t _bucket_id) {
static_cast<ValueType*>(cmd)->Init(_bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 bucket_id;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(GetRequestableExtensionsCHROMIUM) == 8,
@@ -9162,27 +7611,26 @@ struct RequestExtensionCHROMIUM {
typedef RequestExtensionCHROMIUM ValueType;
static const CommandId kCmdId = kRequestExtensionCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(uint32 _bucket_id) {
+ void Init(uint32_t _bucket_id) {
SetHeader();
bucket_id = _bucket_id;
}
- void* Set(void* cmd, uint32 _bucket_id) {
+ void* Set(void* cmd, uint32_t _bucket_id) {
static_cast<ValueType*>(cmd)->Init(_bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 bucket_id;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(RequestExtensionCHROMIUM) == 8,
@@ -9196,18 +7644,20 @@ struct GetMultipleIntegervCHROMIUM {
typedef GetMultipleIntegervCHROMIUM ValueType;
static const CommandId kCmdId = kGetMultipleIntegervCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- uint32 _pnames_shm_id, uint32 _pnames_shm_offset, GLuint _count,
- uint32 _results_shm_id, uint32 _results_shm_offset, GLsizeiptr _size) {
+ void Init(uint32_t _pnames_shm_id,
+ uint32_t _pnames_shm_offset,
+ GLuint _count,
+ uint32_t _results_shm_id,
+ uint32_t _results_shm_offset,
+ GLsizeiptr _size) {
SetHeader();
pnames_shm_id = _pnames_shm_id;
pnames_shm_offset = _pnames_shm_offset;
@@ -9217,24 +7667,29 @@ struct GetMultipleIntegervCHROMIUM {
size = _size;
}
- void* Set(
- void* cmd, uint32 _pnames_shm_id, uint32 _pnames_shm_offset,
- GLuint _count, uint32 _results_shm_id, uint32 _results_shm_offset,
- GLsizeiptr _size) {
- static_cast<ValueType*>(
- cmd)->Init(
- _pnames_shm_id, _pnames_shm_offset, _count, _results_shm_id,
- _results_shm_offset, _size);
+ void* Set(void* cmd,
+ uint32_t _pnames_shm_id,
+ uint32_t _pnames_shm_offset,
+ GLuint _count,
+ uint32_t _results_shm_id,
+ uint32_t _results_shm_offset,
+ GLsizeiptr _size) {
+ static_cast<ValueType*>(cmd)->Init(_pnames_shm_id,
+ _pnames_shm_offset,
+ _count,
+ _results_shm_id,
+ _results_shm_offset,
+ _size);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 pnames_shm_id;
- uint32 pnames_shm_offset;
- uint32 count;
- uint32 results_shm_id;
- uint32 results_shm_offset;
- int32 size;
+ uint32_t pnames_shm_id;
+ uint32_t pnames_shm_offset;
+ uint32_t count;
+ uint32_t results_shm_id;
+ uint32_t results_shm_offset;
+ int32_t size;
};
COMPILE_ASSERT(sizeof(GetMultipleIntegervCHROMIUM) == 28,
@@ -9258,35 +7713,34 @@ struct GetProgramInfoCHROMIUM {
typedef GetProgramInfoCHROMIUM ValueType;
static const CommandId kCmdId = kGetProgramInfoCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
struct Result {
- uint32 link_status;
- uint32 num_attribs;
- uint32 num_uniforms;
+ uint32_t link_status;
+ uint32_t num_attribs;
+ uint32_t num_uniforms;
};
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _program, uint32 _bucket_id) {
+ void Init(GLuint _program, uint32_t _bucket_id) {
SetHeader();
program = _program;
bucket_id = _bucket_id;
}
- void* Set(void* cmd, GLuint _program, uint32 _bucket_id) {
+ void* Set(void* cmd, GLuint _program, uint32_t _bucket_id) {
static_cast<ValueType*>(cmd)->Init(_program, _bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- uint32 bucket_id;
+ uint32_t program;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(GetProgramInfoCHROMIUM) == 12,
@@ -9304,115 +7758,32 @@ COMPILE_ASSERT(offsetof(GetProgramInfoCHROMIUM::Result, num_attribs) == 4,
COMPILE_ASSERT(offsetof(GetProgramInfoCHROMIUM::Result, num_uniforms) == 8,
OffsetOf_GetProgramInfoCHROMIUM_Result_num_uniforms_not_8);
-struct CreateStreamTextureCHROMIUM {
- typedef CreateStreamTextureCHROMIUM ValueType;
- static const CommandId kCmdId = kCreateStreamTextureCHROMIUM;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- typedef GLuint Result;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLuint _client_id, uint32 _result_shm_id, uint32 _result_shm_offset) {
- SetHeader();
- client_id = _client_id;
- result_shm_id = _result_shm_id;
- result_shm_offset = _result_shm_offset;
- }
-
- void* Set(
- void* cmd, GLuint _client_id, uint32 _result_shm_id,
- uint32 _result_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_client_id, _result_shm_id, _result_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 client_id;
- uint32 result_shm_id;
- uint32 result_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(CreateStreamTextureCHROMIUM) == 16,
- Sizeof_CreateStreamTextureCHROMIUM_is_not_16);
-COMPILE_ASSERT(offsetof(CreateStreamTextureCHROMIUM, header) == 0,
- OffsetOf_CreateStreamTextureCHROMIUM_header_not_0);
-COMPILE_ASSERT(offsetof(CreateStreamTextureCHROMIUM, client_id) == 4,
- OffsetOf_CreateStreamTextureCHROMIUM_client_id_not_4);
-COMPILE_ASSERT(offsetof(CreateStreamTextureCHROMIUM, result_shm_id) == 8,
- OffsetOf_CreateStreamTextureCHROMIUM_result_shm_id_not_8);
-COMPILE_ASSERT(offsetof(CreateStreamTextureCHROMIUM, result_shm_offset) == 12,
- OffsetOf_CreateStreamTextureCHROMIUM_result_shm_offset_not_12);
-
-struct DestroyStreamTextureCHROMIUM {
- typedef DestroyStreamTextureCHROMIUM ValueType;
- static const CommandId kCmdId = kDestroyStreamTextureCHROMIUM;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLuint _texture) {
- SetHeader();
- texture = _texture;
- }
-
- void* Set(void* cmd, GLuint _texture) {
- static_cast<ValueType*>(cmd)->Init(_texture);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 texture;
-};
-
-COMPILE_ASSERT(sizeof(DestroyStreamTextureCHROMIUM) == 8,
- Sizeof_DestroyStreamTextureCHROMIUM_is_not_8);
-COMPILE_ASSERT(offsetof(DestroyStreamTextureCHROMIUM, header) == 0,
- OffsetOf_DestroyStreamTextureCHROMIUM_header_not_0);
-COMPILE_ASSERT(offsetof(DestroyStreamTextureCHROMIUM, texture) == 4,
- OffsetOf_DestroyStreamTextureCHROMIUM_texture_not_4);
-
struct GetTranslatedShaderSourceANGLE {
typedef GetTranslatedShaderSourceANGLE ValueType;
static const CommandId kCmdId = kGetTranslatedShaderSourceANGLE;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _shader, uint32 _bucket_id) {
+ void Init(GLuint _shader, uint32_t _bucket_id) {
SetHeader();
shader = _shader;
bucket_id = _bucket_id;
}
- void* Set(void* cmd, GLuint _shader, uint32 _bucket_id) {
+ void* Set(void* cmd, GLuint _shader, uint32_t _bucket_id) {
static_cast<ValueType*>(cmd)->Init(_shader, _bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 shader;
- uint32 bucket_id;
+ uint32_t shader;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(GetTranslatedShaderSourceANGLE) == 12,
@@ -9428,14 +7799,13 @@ struct PostSubBufferCHROMIUM {
typedef PostSubBufferCHROMIUM ValueType;
static const CommandId kCmdId = kPostSubBufferCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLint _x, GLint _y, GLint _width, GLint _height) {
SetHeader();
@@ -9451,10 +7821,10 @@ struct PostSubBufferCHROMIUM {
}
gpu::CommandHeader header;
- int32 x;
- int32 y;
- int32 width;
- int32 height;
+ int32_t x;
+ int32_t y;
+ int32_t width;
+ int32_t height;
};
COMPILE_ASSERT(sizeof(PostSubBufferCHROMIUM) == 20,
@@ -9474,18 +7844,19 @@ struct TexImageIOSurface2DCHROMIUM {
typedef TexImageIOSurface2DCHROMIUM ValueType;
static const CommandId kCmdId = kTexImageIOSurface2DCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLsizei _width, GLsizei _height, GLuint _ioSurfaceId,
- GLuint _plane) {
+ void Init(GLenum _target,
+ GLsizei _width,
+ GLsizei _height,
+ GLuint _ioSurfaceId,
+ GLuint _plane) {
SetHeader();
target = _target;
width = _width;
@@ -9494,20 +7865,23 @@ struct TexImageIOSurface2DCHROMIUM {
plane = _plane;
}
- void* Set(
- void* cmd, GLenum _target, GLsizei _width, GLsizei _height,
- GLuint _ioSurfaceId, GLuint _plane) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _width, _height, _ioSurfaceId, _plane);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLsizei _width,
+ GLsizei _height,
+ GLuint _ioSurfaceId,
+ GLuint _plane) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_target, _width, _height, _ioSurfaceId, _plane);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 width;
- int32 height;
- uint32 ioSurfaceId;
- uint32 plane;
+ uint32_t target;
+ int32_t width;
+ int32_t height;
+ uint32_t ioSurfaceId;
+ uint32_t plane;
};
COMPILE_ASSERT(sizeof(TexImageIOSurface2DCHROMIUM) == 24,
@@ -9529,18 +7903,20 @@ struct CopyTextureCHROMIUM {
typedef CopyTextureCHROMIUM ValueType;
static const CommandId kCmdId = kCopyTextureCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLenum _source_id, GLenum _dest_id, GLint _level,
- GLint _internalformat, GLenum _dest_type) {
+ void Init(GLenum _target,
+ GLenum _source_id,
+ GLenum _dest_id,
+ GLint _level,
+ GLint _internalformat,
+ GLenum _dest_type) {
SetHeader();
target = _target;
source_id = _source_id;
@@ -9550,23 +7926,25 @@ struct CopyTextureCHROMIUM {
dest_type = _dest_type;
}
- void* Set(
- void* cmd, GLenum _target, GLenum _source_id, GLenum _dest_id,
- GLint _level, GLint _internalformat, GLenum _dest_type) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _source_id, _dest_id, _level, _internalformat,
- _dest_type);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLenum _source_id,
+ GLenum _dest_id,
+ GLint _level,
+ GLint _internalformat,
+ GLenum _dest_type) {
+ static_cast<ValueType*>(cmd)->Init(
+ _target, _source_id, _dest_id, _level, _internalformat, _dest_type);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 source_id;
- uint32 dest_id;
- int32 level;
- int32 internalformat;
- uint32 dest_type;
+ uint32_t target;
+ uint32_t source_id;
+ uint32_t dest_id;
+ int32_t level;
+ int32_t internalformat;
+ uint32_t dest_type;
};
COMPILE_ASSERT(sizeof(CopyTextureCHROMIUM) == 28,
@@ -9590,14 +7968,13 @@ struct DrawArraysInstancedANGLE {
typedef DrawArraysInstancedANGLE ValueType;
static const CommandId kCmdId = kDrawArraysInstancedANGLE;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _mode, GLint _first, GLsizei _count, GLsizei _primcount) {
SetHeader();
@@ -9607,18 +7984,20 @@ struct DrawArraysInstancedANGLE {
primcount = _primcount;
}
- void* Set(
- void* cmd, GLenum _mode, GLint _first, GLsizei _count,
- GLsizei _primcount) {
+ void* Set(void* cmd,
+ GLenum _mode,
+ GLint _first,
+ GLsizei _count,
+ GLsizei _primcount) {
static_cast<ValueType*>(cmd)->Init(_mode, _first, _count, _primcount);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 mode;
- int32 first;
- int32 count;
- int32 primcount;
+ uint32_t mode;
+ int32_t first;
+ int32_t count;
+ int32_t primcount;
};
COMPILE_ASSERT(sizeof(DrawArraysInstancedANGLE) == 20,
@@ -9638,18 +8017,19 @@ struct DrawElementsInstancedANGLE {
typedef DrawElementsInstancedANGLE ValueType;
static const CommandId kCmdId = kDrawElementsInstancedANGLE;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _mode, GLsizei _count, GLenum _type, GLuint _index_offset,
- GLsizei _primcount) {
+ void Init(GLenum _mode,
+ GLsizei _count,
+ GLenum _type,
+ GLuint _index_offset,
+ GLsizei _primcount) {
SetHeader();
mode = _mode;
count = _count;
@@ -9658,20 +8038,23 @@ struct DrawElementsInstancedANGLE {
primcount = _primcount;
}
- void* Set(
- void* cmd, GLenum _mode, GLsizei _count, GLenum _type,
- GLuint _index_offset, GLsizei _primcount) {
- static_cast<ValueType*>(
- cmd)->Init(_mode, _count, _type, _index_offset, _primcount);
+ void* Set(void* cmd,
+ GLenum _mode,
+ GLsizei _count,
+ GLenum _type,
+ GLuint _index_offset,
+ GLsizei _primcount) {
+ static_cast<ValueType*>(cmd)
+ ->Init(_mode, _count, _type, _index_offset, _primcount);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 mode;
- int32 count;
- uint32 type;
- uint32 index_offset;
- int32 primcount;
+ uint32_t mode;
+ int32_t count;
+ uint32_t type;
+ uint32_t index_offset;
+ int32_t primcount;
};
COMPILE_ASSERT(sizeof(DrawElementsInstancedANGLE) == 24,
@@ -9693,14 +8076,13 @@ struct VertexAttribDivisorANGLE {
typedef VertexAttribDivisorANGLE ValueType;
static const CommandId kCmdId = kVertexAttribDivisorANGLE;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _index, GLuint _divisor) {
SetHeader();
@@ -9714,8 +8096,8 @@ struct VertexAttribDivisorANGLE {
}
gpu::CommandHeader header;
- uint32 index;
- uint32 divisor;
+ uint32_t index;
+ uint32_t divisor;
};
COMPILE_ASSERT(sizeof(VertexAttribDivisorANGLE) == 12,
@@ -9727,86 +8109,37 @@ COMPILE_ASSERT(offsetof(VertexAttribDivisorANGLE, index) == 4,
COMPILE_ASSERT(offsetof(VertexAttribDivisorANGLE, divisor) == 8,
OffsetOf_VertexAttribDivisorANGLE_divisor_not_8);
-struct ProduceTextureCHROMIUM {
- typedef ProduceTextureCHROMIUM ValueType;
- static const CommandId kCmdId = kProduceTextureCHROMIUM;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLenum _target, uint32 _mailbox_shm_id, uint32 _mailbox_shm_offset) {
- SetHeader();
- target = _target;
- mailbox_shm_id = _mailbox_shm_id;
- mailbox_shm_offset = _mailbox_shm_offset;
- }
-
- void* Set(
- void* cmd, GLenum _target, uint32 _mailbox_shm_id,
- uint32 _mailbox_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _mailbox_shm_id, _mailbox_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- uint32 mailbox_shm_id;
- uint32 mailbox_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(ProduceTextureCHROMIUM) == 16,
- Sizeof_ProduceTextureCHROMIUM_is_not_16);
-COMPILE_ASSERT(offsetof(ProduceTextureCHROMIUM, header) == 0,
- OffsetOf_ProduceTextureCHROMIUM_header_not_0);
-COMPILE_ASSERT(offsetof(ProduceTextureCHROMIUM, target) == 4,
- OffsetOf_ProduceTextureCHROMIUM_target_not_4);
-COMPILE_ASSERT(offsetof(ProduceTextureCHROMIUM, mailbox_shm_id) == 8,
- OffsetOf_ProduceTextureCHROMIUM_mailbox_shm_id_not_8);
-COMPILE_ASSERT(offsetof(ProduceTextureCHROMIUM, mailbox_shm_offset) == 12,
- OffsetOf_ProduceTextureCHROMIUM_mailbox_shm_offset_not_12);
-
struct ProduceTextureCHROMIUMImmediate {
typedef ProduceTextureCHROMIUMImmediate ValueType;
static const CommandId kCmdId = kProduceTextureCHROMIUMImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeDataSize() {
- return static_cast<uint32>(
- sizeof(GLbyte) * 64); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLbyte) * 64); // NOLINT
}
- static uint32 ComputeSize() {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize()); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void SetHeader() {
- header.SetCmdByTotalSize<ValueType>(ComputeSize());
- }
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
void Init(GLenum _target, const GLbyte* _mailbox) {
SetHeader();
target = _target;
- memcpy(ImmediateDataAddress(this),
- _mailbox, ComputeDataSize());
+ memcpy(ImmediateDataAddress(this), _mailbox, ComputeDataSize());
}
void* Set(void* cmd, GLenum _target, const GLbyte* _mailbox) {
static_cast<ValueType*>(cmd)->Init(_target, _mailbox);
- const uint32 size = ComputeSize();
+ const uint32_t size = ComputeSize();
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 target;
+ uint32_t target;
};
COMPILE_ASSERT(sizeof(ProduceTextureCHROMIUMImmediate) == 8,
@@ -9816,86 +8149,84 @@ COMPILE_ASSERT(offsetof(ProduceTextureCHROMIUMImmediate, header) == 0,
COMPILE_ASSERT(offsetof(ProduceTextureCHROMIUMImmediate, target) == 4,
OffsetOf_ProduceTextureCHROMIUMImmediate_target_not_4);
-struct ConsumeTextureCHROMIUM {
- typedef ConsumeTextureCHROMIUM ValueType;
- static const CommandId kCmdId = kConsumeTextureCHROMIUM;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+struct ProduceTextureDirectCHROMIUMImmediate {
+ typedef ProduceTextureDirectCHROMIUMImmediate ValueType;
+ static const CommandId kCmdId = kProduceTextureDirectCHROMIUMImmediate;
+ static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLbyte) * 64); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void Init(
- GLenum _target, uint32 _mailbox_shm_id, uint32 _mailbox_shm_offset) {
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
+
+ void Init(GLuint _texture, GLenum _target, const GLbyte* _mailbox) {
SetHeader();
+ texture = _texture;
target = _target;
- mailbox_shm_id = _mailbox_shm_id;
- mailbox_shm_offset = _mailbox_shm_offset;
+ memcpy(ImmediateDataAddress(this), _mailbox, ComputeDataSize());
}
- void* Set(
- void* cmd, GLenum _target, uint32 _mailbox_shm_id,
- uint32 _mailbox_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(_target, _mailbox_shm_id, _mailbox_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
+ void* Set(void* cmd,
+ GLuint _texture,
+ GLenum _target,
+ const GLbyte* _mailbox) {
+ static_cast<ValueType*>(cmd)->Init(_texture, _target, _mailbox);
+ const uint32_t size = ComputeSize();
+ return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 target;
- uint32 mailbox_shm_id;
- uint32 mailbox_shm_offset;
+ uint32_t texture;
+ uint32_t target;
};
-COMPILE_ASSERT(sizeof(ConsumeTextureCHROMIUM) == 16,
- Sizeof_ConsumeTextureCHROMIUM_is_not_16);
-COMPILE_ASSERT(offsetof(ConsumeTextureCHROMIUM, header) == 0,
- OffsetOf_ConsumeTextureCHROMIUM_header_not_0);
-COMPILE_ASSERT(offsetof(ConsumeTextureCHROMIUM, target) == 4,
- OffsetOf_ConsumeTextureCHROMIUM_target_not_4);
-COMPILE_ASSERT(offsetof(ConsumeTextureCHROMIUM, mailbox_shm_id) == 8,
- OffsetOf_ConsumeTextureCHROMIUM_mailbox_shm_id_not_8);
-COMPILE_ASSERT(offsetof(ConsumeTextureCHROMIUM, mailbox_shm_offset) == 12,
- OffsetOf_ConsumeTextureCHROMIUM_mailbox_shm_offset_not_12);
+COMPILE_ASSERT(sizeof(ProduceTextureDirectCHROMIUMImmediate) == 12,
+ Sizeof_ProduceTextureDirectCHROMIUMImmediate_is_not_12);
+COMPILE_ASSERT(offsetof(ProduceTextureDirectCHROMIUMImmediate, header) == 0,
+ OffsetOf_ProduceTextureDirectCHROMIUMImmediate_header_not_0);
+COMPILE_ASSERT(offsetof(ProduceTextureDirectCHROMIUMImmediate, texture) == 4,
+ OffsetOf_ProduceTextureDirectCHROMIUMImmediate_texture_not_4);
+COMPILE_ASSERT(offsetof(ProduceTextureDirectCHROMIUMImmediate, target) == 8,
+ OffsetOf_ProduceTextureDirectCHROMIUMImmediate_target_not_8);
struct ConsumeTextureCHROMIUMImmediate {
typedef ConsumeTextureCHROMIUMImmediate ValueType;
static const CommandId kCmdId = kConsumeTextureCHROMIUMImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeDataSize() {
- return static_cast<uint32>(
- sizeof(GLbyte) * 64); // NOLINT
+ static uint32_t ComputeDataSize() {
+ return static_cast<uint32_t>(sizeof(GLbyte) * 64); // NOLINT
}
- static uint32 ComputeSize() {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize()); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize()); // NOLINT
}
- void SetHeader() {
- header.SetCmdByTotalSize<ValueType>(ComputeSize());
- }
+ void SetHeader() { header.SetCmdByTotalSize<ValueType>(ComputeSize()); }
void Init(GLenum _target, const GLbyte* _mailbox) {
SetHeader();
target = _target;
- memcpy(ImmediateDataAddress(this),
- _mailbox, ComputeDataSize());
+ memcpy(ImmediateDataAddress(this), _mailbox, ComputeDataSize());
}
void* Set(void* cmd, GLenum _target, const GLbyte* _mailbox) {
static_cast<ValueType*>(cmd)->Init(_target, _mailbox);
- const uint32 size = ComputeSize();
+ const uint32_t size = ComputeSize();
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 target;
+ uint32_t target;
};
COMPILE_ASSERT(sizeof(ConsumeTextureCHROMIUMImmediate) == 8,
@@ -9905,92 +8236,37 @@ COMPILE_ASSERT(offsetof(ConsumeTextureCHROMIUMImmediate, header) == 0,
COMPILE_ASSERT(offsetof(ConsumeTextureCHROMIUMImmediate, target) == 4,
OffsetOf_ConsumeTextureCHROMIUMImmediate_target_not_4);
-struct BindUniformLocationCHROMIUM {
- typedef BindUniformLocationCHROMIUM ValueType;
- static const CommandId kCmdId = kBindUniformLocationCHROMIUM;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(
- GLuint _program, GLint _location, uint32 _name_shm_id,
- uint32 _name_shm_offset, uint32 _data_size) {
- SetHeader();
- program = _program;
- location = _location;
- name_shm_id = _name_shm_id;
- name_shm_offset = _name_shm_offset;
- data_size = _data_size;
- }
-
- void* Set(
- void* cmd, GLuint _program, GLint _location, uint32 _name_shm_id,
- uint32 _name_shm_offset, uint32 _data_size) {
- static_cast<ValueType*>(
- cmd)->Init(
- _program, _location, _name_shm_id, _name_shm_offset, _data_size);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 program;
- int32 location;
- uint32 name_shm_id;
- uint32 name_shm_offset;
- uint32 data_size;
-};
-
-COMPILE_ASSERT(sizeof(BindUniformLocationCHROMIUM) == 24,
- Sizeof_BindUniformLocationCHROMIUM_is_not_24);
-COMPILE_ASSERT(offsetof(BindUniformLocationCHROMIUM, header) == 0,
- OffsetOf_BindUniformLocationCHROMIUM_header_not_0);
-COMPILE_ASSERT(offsetof(BindUniformLocationCHROMIUM, program) == 4,
- OffsetOf_BindUniformLocationCHROMIUM_program_not_4);
-COMPILE_ASSERT(offsetof(BindUniformLocationCHROMIUM, location) == 8,
- OffsetOf_BindUniformLocationCHROMIUM_location_not_8);
-COMPILE_ASSERT(offsetof(BindUniformLocationCHROMIUM, name_shm_id) == 12,
- OffsetOf_BindUniformLocationCHROMIUM_name_shm_id_not_12);
-COMPILE_ASSERT(offsetof(BindUniformLocationCHROMIUM, name_shm_offset) == 16,
- OffsetOf_BindUniformLocationCHROMIUM_name_shm_offset_not_16);
-COMPILE_ASSERT(offsetof(BindUniformLocationCHROMIUM, data_size) == 20,
- OffsetOf_BindUniformLocationCHROMIUM_data_size_not_20);
-
struct BindUniformLocationCHROMIUMBucket {
typedef BindUniformLocationCHROMIUMBucket ValueType;
static const CommandId kCmdId = kBindUniformLocationCHROMIUMBucket;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(GLuint _program, GLint _location, uint32 _name_bucket_id) {
+ void Init(GLuint _program, GLint _location, uint32_t _name_bucket_id) {
SetHeader();
program = _program;
location = _location;
name_bucket_id = _name_bucket_id;
}
- void* Set(
- void* cmd, GLuint _program, GLint _location, uint32 _name_bucket_id) {
+ void* Set(void* cmd,
+ GLuint _program,
+ GLint _location,
+ uint32_t _name_bucket_id) {
static_cast<ValueType*>(cmd)->Init(_program, _location, _name_bucket_id);
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 program;
- int32 location;
- uint32 name_bucket_id;
+ uint32_t program;
+ int32_t location;
+ uint32_t name_bucket_id;
};
COMPILE_ASSERT(sizeof(BindUniformLocationCHROMIUMBucket) == 16,
@@ -10003,20 +8279,19 @@ COMPILE_ASSERT(offsetof(BindUniformLocationCHROMIUMBucket, location) == 8,
OffsetOf_BindUniformLocationCHROMIUMBucket_location_not_8);
COMPILE_ASSERT(
offsetof(BindUniformLocationCHROMIUMBucket, name_bucket_id) == 12,
- OffsetOf_BindUniformLocationCHROMIUMBucket_name_bucket_id_not_12); // NOLINT
+ OffsetOf_BindUniformLocationCHROMIUMBucket_name_bucket_id_not_12);
struct BindTexImage2DCHROMIUM {
typedef BindTexImage2DCHROMIUM ValueType;
static const CommandId kCmdId = kBindTexImage2DCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLint _imageId) {
SetHeader();
@@ -10030,8 +8305,8 @@ struct BindTexImage2DCHROMIUM {
}
gpu::CommandHeader header;
- uint32 target;
- int32 imageId;
+ uint32_t target;
+ int32_t imageId;
};
COMPILE_ASSERT(sizeof(BindTexImage2DCHROMIUM) == 12,
@@ -10047,14 +8322,13 @@ struct ReleaseTexImage2DCHROMIUM {
typedef ReleaseTexImage2DCHROMIUM ValueType;
static const CommandId kCmdId = kReleaseTexImage2DCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target, GLint _imageId) {
SetHeader();
@@ -10068,8 +8342,8 @@ struct ReleaseTexImage2DCHROMIUM {
}
gpu::CommandHeader header;
- uint32 target;
- int32 imageId;
+ uint32_t target;
+ int32_t imageId;
};
COMPILE_ASSERT(sizeof(ReleaseTexImage2DCHROMIUM) == 12,
@@ -10085,14 +8359,13 @@ struct TraceBeginCHROMIUM {
typedef TraceBeginCHROMIUM ValueType;
static const CommandId kCmdId = kTraceBeginCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _bucket_id) {
SetHeader();
@@ -10105,7 +8378,7 @@ struct TraceBeginCHROMIUM {
}
gpu::CommandHeader header;
- uint32 bucket_id;
+ uint32_t bucket_id;
};
COMPILE_ASSERT(sizeof(TraceBeginCHROMIUM) == 8,
@@ -10119,18 +8392,15 @@ struct TraceEndCHROMIUM {
typedef TraceEndCHROMIUM ValueType;
static const CommandId kCmdId = kTraceEndCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init() {
- SetHeader();
- }
+ void Init() { SetHeader(); }
void* Set(void* cmd) {
static_cast<ValueType*>(cmd)->Init();
@@ -10140,8 +8410,7 @@ struct TraceEndCHROMIUM {
gpu::CommandHeader header;
};
-COMPILE_ASSERT(sizeof(TraceEndCHROMIUM) == 4,
- Sizeof_TraceEndCHROMIUM_is_not_4);
+COMPILE_ASSERT(sizeof(TraceEndCHROMIUM) == 4, Sizeof_TraceEndCHROMIUM_is_not_4);
COMPILE_ASSERT(offsetof(TraceEndCHROMIUM, header) == 0,
OffsetOf_TraceEndCHROMIUM_header_not_0);
@@ -10149,19 +8418,27 @@ struct AsyncTexSubImage2DCHROMIUM {
typedef AsyncTexSubImage2DCHROMIUM ValueType;
static const CommandId kCmdId = kAsyncTexSubImage2DCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLsizei _width, GLsizei _height, GLenum _format, GLenum _type,
- uint32 _data_shm_id, uint32 _data_shm_offset) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset,
+ uint32_t _async_upload_token,
+ uint32_t _sync_data_shm_id,
+ uint32_t _sync_data_shm_offset) {
SetHeader();
target = _target;
level = _level;
@@ -10173,34 +8450,59 @@ struct AsyncTexSubImage2DCHROMIUM {
type = _type;
data_shm_id = _data_shm_id;
data_shm_offset = _data_shm_offset;
+ async_upload_token = _async_upload_token;
+ sync_data_shm_id = _sync_data_shm_id;
+ sync_data_shm_offset = _sync_data_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLint _xoffset, GLint _yoffset,
- GLsizei _width, GLsizei _height, GLenum _format, GLenum _type,
- uint32 _data_shm_id, uint32 _data_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _xoffset, _yoffset, _width, _height, _format,
- _type, _data_shm_id, _data_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- int32 level;
- int32 xoffset;
- int32 yoffset;
- int32 width;
- int32 height;
- uint32 format;
- uint32 type;
- uint32 data_shm_id;
- uint32 data_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(AsyncTexSubImage2DCHROMIUM) == 44,
- Sizeof_AsyncTexSubImage2DCHROMIUM_is_not_44);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLint _xoffset,
+ GLint _yoffset,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _data_shm_id,
+ uint32_t _data_shm_offset,
+ uint32_t _async_upload_token,
+ uint32_t _sync_data_shm_id,
+ uint32_t _sync_data_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(_target,
+ _level,
+ _xoffset,
+ _yoffset,
+ _width,
+ _height,
+ _format,
+ _type,
+ _data_shm_id,
+ _data_shm_offset,
+ _async_upload_token,
+ _sync_data_shm_id,
+ _sync_data_shm_offset);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t target;
+ int32_t level;
+ int32_t xoffset;
+ int32_t yoffset;
+ int32_t width;
+ int32_t height;
+ uint32_t format;
+ uint32_t type;
+ uint32_t data_shm_id;
+ uint32_t data_shm_offset;
+ uint32_t async_upload_token;
+ uint32_t sync_data_shm_id;
+ uint32_t sync_data_shm_offset;
+};
+
+COMPILE_ASSERT(sizeof(AsyncTexSubImage2DCHROMIUM) == 56,
+ Sizeof_AsyncTexSubImage2DCHROMIUM_is_not_56);
COMPILE_ASSERT(offsetof(AsyncTexSubImage2DCHROMIUM, header) == 0,
OffsetOf_AsyncTexSubImage2DCHROMIUM_header_not_0);
COMPILE_ASSERT(offsetof(AsyncTexSubImage2DCHROMIUM, target) == 4,
@@ -10223,63 +8525,98 @@ COMPILE_ASSERT(offsetof(AsyncTexSubImage2DCHROMIUM, data_shm_id) == 36,
OffsetOf_AsyncTexSubImage2DCHROMIUM_data_shm_id_not_36);
COMPILE_ASSERT(offsetof(AsyncTexSubImage2DCHROMIUM, data_shm_offset) == 40,
OffsetOf_AsyncTexSubImage2DCHROMIUM_data_shm_offset_not_40);
+COMPILE_ASSERT(offsetof(AsyncTexSubImage2DCHROMIUM, async_upload_token) == 44,
+ OffsetOf_AsyncTexSubImage2DCHROMIUM_async_upload_token_not_44);
+COMPILE_ASSERT(offsetof(AsyncTexSubImage2DCHROMIUM, sync_data_shm_id) == 48,
+ OffsetOf_AsyncTexSubImage2DCHROMIUM_sync_data_shm_id_not_48);
+COMPILE_ASSERT(offsetof(AsyncTexSubImage2DCHROMIUM, sync_data_shm_offset) == 52,
+ OffsetOf_AsyncTexSubImage2DCHROMIUM_sync_data_shm_offset_not_52);
struct AsyncTexImage2DCHROMIUM {
typedef AsyncTexImage2DCHROMIUM ValueType;
static const CommandId kCmdId = kAsyncTexImage2DCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLint _level, GLint _internalformat, GLsizei _width,
- GLsizei _height, GLint _border, GLenum _format, GLenum _type,
- uint32 _pixels_shm_id, uint32 _pixels_shm_offset) {
+ void Init(GLenum _target,
+ GLint _level,
+ GLint _internalformat,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _pixels_shm_id,
+ uint32_t _pixels_shm_offset,
+ uint32_t _async_upload_token,
+ uint32_t _sync_data_shm_id,
+ uint32_t _sync_data_shm_offset) {
SetHeader();
target = _target;
level = _level;
internalformat = _internalformat;
width = _width;
height = _height;
- border = _border;
format = _format;
type = _type;
pixels_shm_id = _pixels_shm_id;
pixels_shm_offset = _pixels_shm_offset;
+ async_upload_token = _async_upload_token;
+ sync_data_shm_id = _sync_data_shm_id;
+ sync_data_shm_offset = _sync_data_shm_offset;
}
- void* Set(
- void* cmd, GLenum _target, GLint _level, GLint _internalformat,
- GLsizei _width, GLsizei _height, GLint _border, GLenum _format,
- GLenum _type, uint32 _pixels_shm_id, uint32 _pixels_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _level, _internalformat, _width, _height, _border, _format,
- _type, _pixels_shm_id, _pixels_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- uint32 target;
- int32 level;
- int32 internalformat;
- int32 width;
- int32 height;
- int32 border;
- uint32 format;
- uint32 type;
- uint32 pixels_shm_id;
- uint32 pixels_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(AsyncTexImage2DCHROMIUM) == 44,
- Sizeof_AsyncTexImage2DCHROMIUM_is_not_44);
+ void* Set(void* cmd,
+ GLenum _target,
+ GLint _level,
+ GLint _internalformat,
+ GLsizei _width,
+ GLsizei _height,
+ GLenum _format,
+ GLenum _type,
+ uint32_t _pixels_shm_id,
+ uint32_t _pixels_shm_offset,
+ uint32_t _async_upload_token,
+ uint32_t _sync_data_shm_id,
+ uint32_t _sync_data_shm_offset) {
+ static_cast<ValueType*>(cmd)->Init(_target,
+ _level,
+ _internalformat,
+ _width,
+ _height,
+ _format,
+ _type,
+ _pixels_shm_id,
+ _pixels_shm_offset,
+ _async_upload_token,
+ _sync_data_shm_id,
+ _sync_data_shm_offset);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t target;
+ int32_t level;
+ int32_t internalformat;
+ int32_t width;
+ int32_t height;
+ uint32_t format;
+ uint32_t type;
+ uint32_t pixels_shm_id;
+ uint32_t pixels_shm_offset;
+ uint32_t async_upload_token;
+ uint32_t sync_data_shm_id;
+ uint32_t sync_data_shm_offset;
+ static const int32_t border = 0;
+};
+
+COMPILE_ASSERT(sizeof(AsyncTexImage2DCHROMIUM) == 52,
+ Sizeof_AsyncTexImage2DCHROMIUM_is_not_52);
COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, header) == 0,
OffsetOf_AsyncTexImage2DCHROMIUM_header_not_0);
COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, target) == 4,
@@ -10292,29 +8629,32 @@ COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, width) == 16,
OffsetOf_AsyncTexImage2DCHROMIUM_width_not_16);
COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, height) == 20,
OffsetOf_AsyncTexImage2DCHROMIUM_height_not_20);
-COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, border) == 24,
- OffsetOf_AsyncTexImage2DCHROMIUM_border_not_24);
-COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, format) == 28,
- OffsetOf_AsyncTexImage2DCHROMIUM_format_not_28);
-COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, type) == 32,
- OffsetOf_AsyncTexImage2DCHROMIUM_type_not_32);
-COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, pixels_shm_id) == 36,
- OffsetOf_AsyncTexImage2DCHROMIUM_pixels_shm_id_not_36);
-COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, pixels_shm_offset) == 40,
- OffsetOf_AsyncTexImage2DCHROMIUM_pixels_shm_offset_not_40);
+COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, format) == 24,
+ OffsetOf_AsyncTexImage2DCHROMIUM_format_not_24);
+COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, type) == 28,
+ OffsetOf_AsyncTexImage2DCHROMIUM_type_not_28);
+COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, pixels_shm_id) == 32,
+ OffsetOf_AsyncTexImage2DCHROMIUM_pixels_shm_id_not_32);
+COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, pixels_shm_offset) == 36,
+ OffsetOf_AsyncTexImage2DCHROMIUM_pixels_shm_offset_not_36);
+COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, async_upload_token) == 40,
+ OffsetOf_AsyncTexImage2DCHROMIUM_async_upload_token_not_40);
+COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, sync_data_shm_id) == 44,
+ OffsetOf_AsyncTexImage2DCHROMIUM_sync_data_shm_id_not_44);
+COMPILE_ASSERT(offsetof(AsyncTexImage2DCHROMIUM, sync_data_shm_offset) == 48,
+ OffsetOf_AsyncTexImage2DCHROMIUM_sync_data_shm_offset_not_48);
struct WaitAsyncTexImage2DCHROMIUM {
typedef WaitAsyncTexImage2DCHROMIUM ValueType;
static const CommandId kCmdId = kWaitAsyncTexImage2DCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _target) {
SetHeader();
@@ -10327,7 +8667,7 @@ struct WaitAsyncTexImage2DCHROMIUM {
}
gpu::CommandHeader header;
- uint32 target;
+ uint32_t target;
};
COMPILE_ASSERT(sizeof(WaitAsyncTexImage2DCHROMIUM) == 8,
@@ -10337,71 +8677,46 @@ COMPILE_ASSERT(offsetof(WaitAsyncTexImage2DCHROMIUM, header) == 0,
COMPILE_ASSERT(offsetof(WaitAsyncTexImage2DCHROMIUM, target) == 4,
OffsetOf_WaitAsyncTexImage2DCHROMIUM_target_not_4);
-struct DiscardFramebufferEXT {
- typedef DiscardFramebufferEXT ValueType;
- static const CommandId kCmdId = kDiscardFramebufferEXT;
+struct WaitAllAsyncTexImage2DCHROMIUM {
+ typedef WaitAllAsyncTexImage2DCHROMIUM ValueType;
+ static const CommandId kCmdId = kWaitAllAsyncTexImage2DCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init(
- GLenum _target, GLsizei _count, uint32 _attachments_shm_id,
- uint32 _attachments_shm_offset) {
- SetHeader();
- target = _target;
- count = _count;
- attachments_shm_id = _attachments_shm_id;
- attachments_shm_offset = _attachments_shm_offset;
- }
+ void Init() { SetHeader(); }
- void* Set(
- void* cmd, GLenum _target, GLsizei _count, uint32 _attachments_shm_id,
- uint32 _attachments_shm_offset) {
- static_cast<ValueType*>(
- cmd)->Init(
- _target, _count, _attachments_shm_id, _attachments_shm_offset);
+ void* Set(void* cmd) {
+ static_cast<ValueType*>(cmd)->Init();
return NextCmdAddress<ValueType>(cmd);
}
gpu::CommandHeader header;
- uint32 target;
- int32 count;
- uint32 attachments_shm_id;
- uint32 attachments_shm_offset;
};
-COMPILE_ASSERT(sizeof(DiscardFramebufferEXT) == 20,
- Sizeof_DiscardFramebufferEXT_is_not_20);
-COMPILE_ASSERT(offsetof(DiscardFramebufferEXT, header) == 0,
- OffsetOf_DiscardFramebufferEXT_header_not_0);
-COMPILE_ASSERT(offsetof(DiscardFramebufferEXT, target) == 4,
- OffsetOf_DiscardFramebufferEXT_target_not_4);
-COMPILE_ASSERT(offsetof(DiscardFramebufferEXT, count) == 8,
- OffsetOf_DiscardFramebufferEXT_count_not_8);
-COMPILE_ASSERT(offsetof(DiscardFramebufferEXT, attachments_shm_id) == 12,
- OffsetOf_DiscardFramebufferEXT_attachments_shm_id_not_12);
-COMPILE_ASSERT(offsetof(DiscardFramebufferEXT, attachments_shm_offset) == 16,
- OffsetOf_DiscardFramebufferEXT_attachments_shm_offset_not_16);
+COMPILE_ASSERT(sizeof(WaitAllAsyncTexImage2DCHROMIUM) == 4,
+ Sizeof_WaitAllAsyncTexImage2DCHROMIUM_is_not_4);
+COMPILE_ASSERT(offsetof(WaitAllAsyncTexImage2DCHROMIUM, header) == 0,
+ OffsetOf_WaitAllAsyncTexImage2DCHROMIUM_header_not_0);
struct DiscardFramebufferEXTImmediate {
typedef DiscardFramebufferEXTImmediate ValueType;
static const CommandId kCmdId = kDiscardFramebufferEXTImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLenum) * 1 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLenum) * 1 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -10412,20 +8727,21 @@ struct DiscardFramebufferEXTImmediate {
SetHeader(_count);
target = _target;
count = _count;
- memcpy(ImmediateDataAddress(this),
- _attachments, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _attachments, ComputeDataSize(_count));
}
- void* Set(
- void* cmd, GLenum _target, GLsizei _count, const GLenum* _attachments) {
+ void* Set(void* cmd,
+ GLenum _target,
+ GLsizei _count,
+ const GLenum* _attachments) {
static_cast<ValueType*>(cmd)->Init(_target, _count, _attachments);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- uint32 target;
- int32 count;
+ uint32_t target;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(DiscardFramebufferEXTImmediate) == 12,
@@ -10441,14 +8757,13 @@ struct LoseContextCHROMIUM {
typedef LoseContextCHROMIUM ValueType;
static const CommandId kCmdId = kLoseContextCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLenum _current, GLenum _other) {
SetHeader();
@@ -10462,8 +8777,8 @@ struct LoseContextCHROMIUM {
}
gpu::CommandHeader header;
- uint32 current;
- uint32 other;
+ uint32_t current;
+ uint32_t other;
};
COMPILE_ASSERT(sizeof(LoseContextCHROMIUM) == 12,
@@ -10479,14 +8794,13 @@ struct WaitSyncPointCHROMIUM {
typedef WaitSyncPointCHROMIUM ValueType;
static const CommandId kCmdId = kWaitSyncPointCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(1);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
void Init(GLuint _sync_point) {
SetHeader();
@@ -10499,7 +8813,7 @@ struct WaitSyncPointCHROMIUM {
}
gpu::CommandHeader header;
- uint32 sync_point;
+ uint32_t sync_point;
};
COMPILE_ASSERT(sizeof(WaitSyncPointCHROMIUM) == 8,
@@ -10509,63 +8823,19 @@ COMPILE_ASSERT(offsetof(WaitSyncPointCHROMIUM, header) == 0,
COMPILE_ASSERT(offsetof(WaitSyncPointCHROMIUM, sync_point) == 4,
OffsetOf_WaitSyncPointCHROMIUM_sync_point_not_4);
-struct DrawBuffersEXT {
- typedef DrawBuffersEXT ValueType;
- static const CommandId kCmdId = kDrawBuffersEXT;
- static const cmd::ArgFlags kArgFlags = cmd::kFixed;
-
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
- }
-
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
-
- void Init(GLsizei _count, uint32 _bufs_shm_id, uint32 _bufs_shm_offset) {
- SetHeader();
- count = _count;
- bufs_shm_id = _bufs_shm_id;
- bufs_shm_offset = _bufs_shm_offset;
- }
-
- void* Set(
- void* cmd, GLsizei _count, uint32 _bufs_shm_id,
- uint32 _bufs_shm_offset) {
- static_cast<ValueType*>(cmd)->Init(_count, _bufs_shm_id, _bufs_shm_offset);
- return NextCmdAddress<ValueType>(cmd);
- }
-
- gpu::CommandHeader header;
- int32 count;
- uint32 bufs_shm_id;
- uint32 bufs_shm_offset;
-};
-
-COMPILE_ASSERT(sizeof(DrawBuffersEXT) == 16,
- Sizeof_DrawBuffersEXT_is_not_16);
-COMPILE_ASSERT(offsetof(DrawBuffersEXT, header) == 0,
- OffsetOf_DrawBuffersEXT_header_not_0);
-COMPILE_ASSERT(offsetof(DrawBuffersEXT, count) == 4,
- OffsetOf_DrawBuffersEXT_count_not_4);
-COMPILE_ASSERT(offsetof(DrawBuffersEXT, bufs_shm_id) == 8,
- OffsetOf_DrawBuffersEXT_bufs_shm_id_not_8);
-COMPILE_ASSERT(offsetof(DrawBuffersEXT, bufs_shm_offset) == 12,
- OffsetOf_DrawBuffersEXT_bufs_shm_offset_not_12);
-
struct DrawBuffersEXTImmediate {
typedef DrawBuffersEXTImmediate ValueType;
static const CommandId kCmdId = kDrawBuffersEXTImmediate;
static const cmd::ArgFlags kArgFlags = cmd::kAtLeastN;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeDataSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(GLenum) * 1 * count); // NOLINT
+ static uint32_t ComputeDataSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(GLenum) * 1 * count); // NOLINT
}
- static uint32 ComputeSize(GLsizei count) {
- return static_cast<uint32>(
- sizeof(ValueType) + ComputeDataSize(count)); // NOLINT
+ static uint32_t ComputeSize(GLsizei count) {
+ return static_cast<uint32_t>(sizeof(ValueType) +
+ ComputeDataSize(count)); // NOLINT
}
void SetHeader(GLsizei count) {
@@ -10575,18 +8845,17 @@ struct DrawBuffersEXTImmediate {
void Init(GLsizei _count, const GLenum* _bufs) {
SetHeader(_count);
count = _count;
- memcpy(ImmediateDataAddress(this),
- _bufs, ComputeDataSize(_count));
+ memcpy(ImmediateDataAddress(this), _bufs, ComputeDataSize(_count));
}
void* Set(void* cmd, GLsizei _count, const GLenum* _bufs) {
static_cast<ValueType*>(cmd)->Init(_count, _bufs);
- const uint32 size = ComputeSize(_count);
+ const uint32_t size = ComputeSize(_count);
return NextImmediateCmdAddressTotalSize<ValueType>(cmd, size);
}
gpu::CommandHeader header;
- int32 count;
+ int32_t count;
};
COMPILE_ASSERT(sizeof(DrawBuffersEXTImmediate) == 8,
@@ -10600,18 +8869,15 @@ struct DiscardBackbufferCHROMIUM {
typedef DiscardBackbufferCHROMIUM ValueType;
static const CommandId kCmdId = kDiscardBackbufferCHROMIUM;
static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
- static uint32 ComputeSize() {
- return static_cast<uint32>(sizeof(ValueType)); // NOLINT
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
}
- void SetHeader() {
- header.SetCmd<ValueType>();
- }
+ void SetHeader() { header.SetCmd<ValueType>(); }
- void Init() {
- SetHeader();
- }
+ void Init() { SetHeader(); }
void* Set(void* cmd) {
static_cast<ValueType*>(cmd)->Init();
@@ -10626,6 +8892,108 @@ COMPILE_ASSERT(sizeof(DiscardBackbufferCHROMIUM) == 4,
COMPILE_ASSERT(offsetof(DiscardBackbufferCHROMIUM, header) == 0,
OffsetOf_DiscardBackbufferCHROMIUM_header_not_0);
+struct ScheduleOverlayPlaneCHROMIUM {
+ typedef ScheduleOverlayPlaneCHROMIUM ValueType;
+ static const CommandId kCmdId = kScheduleOverlayPlaneCHROMIUM;
+ static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8 cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
+ }
+
+ void SetHeader() { header.SetCmd<ValueType>(); }
+
+ void Init(GLint _plane_z_order,
+ GLenum _plane_transform,
+ GLuint _overlay_texture_id,
+ GLint _bounds_x,
+ GLint _bounds_y,
+ GLint _bounds_width,
+ GLint _bounds_height,
+ GLfloat _uv_x,
+ GLfloat _uv_y,
+ GLfloat _uv_width,
+ GLfloat _uv_height) {
+ SetHeader();
+ plane_z_order = _plane_z_order;
+ plane_transform = _plane_transform;
+ overlay_texture_id = _overlay_texture_id;
+ bounds_x = _bounds_x;
+ bounds_y = _bounds_y;
+ bounds_width = _bounds_width;
+ bounds_height = _bounds_height;
+ uv_x = _uv_x;
+ uv_y = _uv_y;
+ uv_width = _uv_width;
+ uv_height = _uv_height;
+ }
+
+ void* Set(void* cmd,
+ GLint _plane_z_order,
+ GLenum _plane_transform,
+ GLuint _overlay_texture_id,
+ GLint _bounds_x,
+ GLint _bounds_y,
+ GLint _bounds_width,
+ GLint _bounds_height,
+ GLfloat _uv_x,
+ GLfloat _uv_y,
+ GLfloat _uv_width,
+ GLfloat _uv_height) {
+ static_cast<ValueType*>(cmd)->Init(_plane_z_order,
+ _plane_transform,
+ _overlay_texture_id,
+ _bounds_x,
+ _bounds_y,
+ _bounds_width,
+ _bounds_height,
+ _uv_x,
+ _uv_y,
+ _uv_width,
+ _uv_height);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ int32_t plane_z_order;
+ uint32_t plane_transform;
+ uint32_t overlay_texture_id;
+ int32_t bounds_x;
+ int32_t bounds_y;
+ int32_t bounds_width;
+ int32_t bounds_height;
+ float uv_x;
+ float uv_y;
+ float uv_width;
+ float uv_height;
+};
+
+COMPILE_ASSERT(sizeof(ScheduleOverlayPlaneCHROMIUM) == 48,
+ Sizeof_ScheduleOverlayPlaneCHROMIUM_is_not_48);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, header) == 0,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_header_not_0);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, plane_z_order) == 4,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_plane_z_order_not_4);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, plane_transform) == 8,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_plane_transform_not_8);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, overlay_texture_id) == 12,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_overlay_texture_id_not_12);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, bounds_x) == 16,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_bounds_x_not_16);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, bounds_y) == 20,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_bounds_y_not_20);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, bounds_width) == 24,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_bounds_width_not_24);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, bounds_height) == 28,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_bounds_height_not_28);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, uv_x) == 32,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_uv_x_not_32);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, uv_y) == 36,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_uv_y_not_36);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, uv_width) == 40,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_uv_width_not_40);
+COMPILE_ASSERT(offsetof(ScheduleOverlayPlaneCHROMIUM, uv_height) == 44,
+ OffsetOf_ScheduleOverlayPlaneCHROMIUM_uv_height_not_44);
#endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_format_test.cc b/chromium/gpu/command_buffer/common/gles2_cmd_format_test.cc
index 396ccb3e2d7..717e6fb2030 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_format_test.cc
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_format_test.cc
@@ -4,6 +4,11 @@
// This file contains unit tests for gles2 commmands
+#include <limits>
+
+#include "base/bind.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/thread.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "gpu/command_buffer/common/gles2_cmd_format.h"
@@ -46,6 +51,68 @@ class GLES2FormatTest : public testing::Test {
unsigned char buffer_[1024];
};
+void SignalCompletion(uint32* assigned_async_token_ptr,
+ uint32 async_token,
+ AsyncUploadSync* sync) {
+ EXPECT_EQ(async_token, *assigned_async_token_ptr);
+ sync->SetAsyncUploadToken(async_token);
+}
+
+TEST(GLES2FormatAsyncUploadSyncTest, AsyncUploadSync) {
+ const size_t kSize = 10;
+ const size_t kCount = 1000;
+
+ base::Thread thread("GLES2FormatUploadSyncTest - Fake Upload Thread");
+ thread.Start();
+
+ // Run the same test 50 times so we retest the wrap as well.
+ for (size_t test_run = 0; test_run < 50; ++test_run) {
+ AsyncUploadSync sync;
+ sync.Reset();
+
+ uint32 buffer_tokens[kSize];
+ memset(buffer_tokens, 0, sizeof(buffer_tokens));
+
+ // Start with a token large enough so that we'll wrap.
+ uint32 async_token = std::numeric_limits<uint32>::max() - kCount / 2;
+
+ // Set initial async token.
+ sync.SetAsyncUploadToken(async_token);
+
+ for (size_t i = 0; i < kCount; ++i) {
+ size_t buffer = i % kSize;
+
+ // Loop until previous async token has passed if any was set.
+ while (buffer_tokens[buffer] &&
+ !sync.HasAsyncUploadTokenPassed(buffer_tokens[buffer]))
+ base::PlatformThread::YieldCurrentThread();
+
+ // Next token, skip 0.
+ async_token++;
+ if (async_token == 0)
+ async_token++;
+
+ // Set the buffer's associated token.
+ buffer_tokens[buffer] = async_token;
+
+ // Set the async upload token on the fake upload thread and assert that
+ // the associated buffer still has the given token.
+ thread.message_loop()->PostTask(FROM_HERE,
+ base::Bind(&SignalCompletion,
+ &buffer_tokens[buffer],
+ async_token,
+ &sync));
+ }
+
+ // Flush the thread message loop before starting again.
+ base::WaitableEvent waitable(false, false);
+ thread.message_loop()->PostTask(FROM_HERE,
+ base::Bind(&base::WaitableEvent::Signal,
+ base::Unretained(&waitable)));
+ waitable.Wait();
+ }
+}
+
// GCC requires these declarations, but MSVC requires they not be present
#ifndef _MSC_VER
const unsigned char GLES2FormatTest::kInitialValue;
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/chromium/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
index 9672db4c749..071bde21a6e 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// This file contains unit tests for gles2 commmands
@@ -14,377 +16,295 @@
TEST_F(GLES2FormatTest, ActiveTexture) {
cmds::ActiveTexture& cmd = *GetBufferAs<cmds::ActiveTexture>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::ActiveTexture::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ActiveTexture::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.texture);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, AttachShader) {
cmds::AttachShader& cmd = *GetBufferAs<cmds::AttachShader>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::AttachShader::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::AttachShader::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLuint>(12), cmd.shader);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, BindAttribLocation) {
- cmds::BindAttribLocation& cmd = *GetBufferAs<cmds::BindAttribLocation>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::BindAttribLocation::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
- EXPECT_EQ(static_cast<uint32>(13), cmd.name_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.name_shm_offset);
- EXPECT_EQ(static_cast<uint32>(15), cmd.data_size);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BindAttribLocationBucket) {
cmds::BindAttribLocationBucket& cmd =
*GetBufferAs<cmds::BindAttribLocationBucket>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::BindAttribLocationBucket::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLuint>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BindAttribLocationBucket::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
- EXPECT_EQ(static_cast<uint32>(13), cmd.name_bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.name_bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BindBuffer) {
cmds::BindBuffer& cmd = *GetBufferAs<cmds::BindBuffer>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::BindBuffer::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BindBuffer::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLuint>(12), cmd.buffer);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BindFramebuffer) {
cmds::BindFramebuffer& cmd = *GetBufferAs<cmds::BindFramebuffer>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::BindFramebuffer::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BindFramebuffer::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLuint>(12), cmd.framebuffer);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BindRenderbuffer) {
cmds::BindRenderbuffer& cmd = *GetBufferAs<cmds::BindRenderbuffer>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::BindRenderbuffer::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BindRenderbuffer::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLuint>(12), cmd.renderbuffer);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BindTexture) {
cmds::BindTexture& cmd = *GetBufferAs<cmds::BindTexture>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::BindTexture::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BindTexture::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLuint>(12), cmd.texture);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BlendColor) {
cmds::BlendColor& cmd = *GetBufferAs<cmds::BlendColor>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLclampf>(11),
- static_cast<GLclampf>(12),
- static_cast<GLclampf>(13),
- static_cast<GLclampf>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::BlendColor::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLclampf>(11),
+ static_cast<GLclampf>(12),
+ static_cast<GLclampf>(13),
+ static_cast<GLclampf>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BlendColor::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLclampf>(11), cmd.red);
EXPECT_EQ(static_cast<GLclampf>(12), cmd.green);
EXPECT_EQ(static_cast<GLclampf>(13), cmd.blue);
EXPECT_EQ(static_cast<GLclampf>(14), cmd.alpha);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BlendEquation) {
cmds::BlendEquation& cmd = *GetBufferAs<cmds::BlendEquation>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::BlendEquation::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BlendEquation::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BlendEquationSeparate) {
cmds::BlendEquationSeparate& cmd =
*GetBufferAs<cmds::BlendEquationSeparate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::BlendEquationSeparate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLenum>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BlendEquationSeparate::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.modeRGB);
EXPECT_EQ(static_cast<GLenum>(12), cmd.modeAlpha);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BlendFunc) {
cmds::BlendFunc& cmd = *GetBufferAs<cmds::BlendFunc>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::BlendFunc::kCmdId),
- cmd.header.command);
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLenum>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BlendFunc::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.sfactor);
EXPECT_EQ(static_cast<GLenum>(12), cmd.dfactor);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BlendFuncSeparate) {
cmds::BlendFuncSeparate& cmd = *GetBufferAs<cmds::BlendFuncSeparate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLenum>(13),
- static_cast<GLenum>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::BlendFuncSeparate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLenum>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BlendFuncSeparate::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.srcRGB);
EXPECT_EQ(static_cast<GLenum>(12), cmd.dstRGB);
EXPECT_EQ(static_cast<GLenum>(13), cmd.srcAlpha);
EXPECT_EQ(static_cast<GLenum>(14), cmd.dstAlpha);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BufferData) {
cmds::BufferData& cmd = *GetBufferAs<cmds::BufferData>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLsizeiptr>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14),
- static_cast<GLenum>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::BufferData::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLsizeiptr>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14),
+ static_cast<GLenum>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BufferData::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLsizeiptr>(12), cmd.size);
- EXPECT_EQ(static_cast<uint32>(13), cmd.data_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.data_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.data_shm_offset);
EXPECT_EQ(static_cast<GLenum>(15), cmd.usage);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BufferSubData) {
cmds::BufferSubData& cmd = *GetBufferAs<cmds::BufferSubData>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLintptr>(12),
- static_cast<GLsizeiptr>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::BufferSubData::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLintptr>(12),
+ static_cast<GLsizeiptr>(13),
+ static_cast<uint32_t>(14),
+ static_cast<uint32_t>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BufferSubData::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLintptr>(12), cmd.offset);
EXPECT_EQ(static_cast<GLsizeiptr>(13), cmd.size);
- EXPECT_EQ(static_cast<uint32>(14), cmd.data_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.data_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(15), cmd.data_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, CheckFramebufferStatus) {
cmds::CheckFramebufferStatus& cmd =
*GetBufferAs<cmds::CheckFramebufferStatus>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::CheckFramebufferStatus::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CheckFramebufferStatus::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Clear) {
cmds::Clear& cmd = *GetBufferAs<cmds::Clear>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLbitfield>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::Clear::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLbitfield>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Clear::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLbitfield>(11), cmd.mask);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ClearColor) {
cmds::ClearColor& cmd = *GetBufferAs<cmds::ClearColor>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLclampf>(11),
- static_cast<GLclampf>(12),
- static_cast<GLclampf>(13),
- static_cast<GLclampf>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::ClearColor::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLclampf>(11),
+ static_cast<GLclampf>(12),
+ static_cast<GLclampf>(13),
+ static_cast<GLclampf>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ClearColor::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLclampf>(11), cmd.red);
EXPECT_EQ(static_cast<GLclampf>(12), cmd.green);
EXPECT_EQ(static_cast<GLclampf>(13), cmd.blue);
EXPECT_EQ(static_cast<GLclampf>(14), cmd.alpha);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ClearDepthf) {
cmds::ClearDepthf& cmd = *GetBufferAs<cmds::ClearDepthf>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLclampf>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::ClearDepthf::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLclampf>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ClearDepthf::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLclampf>(11), cmd.depth);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ClearStencil) {
cmds::ClearStencil& cmd = *GetBufferAs<cmds::ClearStencil>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::ClearStencil::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ClearStencil::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.s);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ColorMask) {
cmds::ColorMask& cmd = *GetBufferAs<cmds::ColorMask>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLboolean>(11),
- static_cast<GLboolean>(12),
- static_cast<GLboolean>(13),
- static_cast<GLboolean>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::ColorMask::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLboolean>(11),
+ static_cast<GLboolean>(12),
+ static_cast<GLboolean>(13),
+ static_cast<GLboolean>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ColorMask::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLboolean>(11), cmd.red);
EXPECT_EQ(static_cast<GLboolean>(12), cmd.green);
EXPECT_EQ(static_cast<GLboolean>(13), cmd.blue);
EXPECT_EQ(static_cast<GLboolean>(14), cmd.alpha);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, CompileShader) {
cmds::CompileShader& cmd = *GetBufferAs<cmds::CompileShader>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::CompileShader::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CompileShader::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
-TEST_F(GLES2FormatTest, CompressedTexImage2D) {
- cmds::CompressedTexImage2D& cmd = *GetBufferAs<cmds::CompressedTexImage2D>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLenum>(13),
- static_cast<GLsizei>(14),
- static_cast<GLsizei>(15),
- static_cast<GLint>(16),
- static_cast<GLsizei>(17),
- static_cast<uint32>(18),
- static_cast<uint32>(19));
- EXPECT_EQ(static_cast<uint32>(cmds::CompressedTexImage2D::kCmdId),
+TEST_F(GLES2FormatTest, CompressedTexImage2DBucket) {
+ cmds::CompressedTexImage2DBucket& cmd =
+ *GetBufferAs<cmds::CompressedTexImage2DBucket>();
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLsizei>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLuint>(16));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CompressedTexImage2DBucket::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -392,27 +312,22 @@ TEST_F(GLES2FormatTest, CompressedTexImage2D) {
EXPECT_EQ(static_cast<GLenum>(13), cmd.internalformat);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
- EXPECT_EQ(static_cast<GLint>(16), cmd.border);
- EXPECT_EQ(static_cast<GLsizei>(17), cmd.imageSize);
- EXPECT_EQ(static_cast<uint32>(18), cmd.data_shm_id);
- EXPECT_EQ(static_cast<uint32>(19), cmd.data_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<GLuint>(16), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
-TEST_F(GLES2FormatTest, CompressedTexImage2DBucket) {
- cmds::CompressedTexImage2DBucket& cmd =
- *GetBufferAs<cmds::CompressedTexImage2DBucket>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLenum>(13),
- static_cast<GLsizei>(14),
- static_cast<GLsizei>(15),
- static_cast<GLint>(16),
- static_cast<GLuint>(17));
- EXPECT_EQ(static_cast<uint32>(cmds::CompressedTexImage2DBucket::kCmdId),
+TEST_F(GLES2FormatTest, CompressedTexImage2D) {
+ cmds::CompressedTexImage2D& cmd = *GetBufferAs<cmds::CompressedTexImage2D>();
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLsizei>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLsizei>(16),
+ static_cast<uint32_t>(17),
+ static_cast<uint32_t>(18));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CompressedTexImage2D::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -420,28 +335,25 @@ TEST_F(GLES2FormatTest, CompressedTexImage2DBucket) {
EXPECT_EQ(static_cast<GLenum>(13), cmd.internalformat);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
- EXPECT_EQ(static_cast<GLint>(16), cmd.border);
- EXPECT_EQ(static_cast<GLuint>(17), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<GLsizei>(16), cmd.imageSize);
+ EXPECT_EQ(static_cast<uint32_t>(17), cmd.data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(18), cmd.data_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
-TEST_F(GLES2FormatTest, CompressedTexSubImage2D) {
- cmds::CompressedTexSubImage2D& cmd =
- *GetBufferAs<cmds::CompressedTexSubImage2D>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14),
- static_cast<GLsizei>(15),
- static_cast<GLsizei>(16),
- static_cast<GLenum>(17),
- static_cast<GLsizei>(18),
- static_cast<uint32>(19),
- static_cast<uint32>(20));
- EXPECT_EQ(static_cast<uint32>(cmds::CompressedTexSubImage2D::kCmdId),
+TEST_F(GLES2FormatTest, CompressedTexSubImage2DBucket) {
+ cmds::CompressedTexSubImage2DBucket& cmd =
+ *GetBufferAs<cmds::CompressedTexSubImage2DBucket>();
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLsizei>(16),
+ static_cast<GLenum>(17),
+ static_cast<GLuint>(18));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CompressedTexSubImage2DBucket::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -451,27 +363,25 @@ TEST_F(GLES2FormatTest, CompressedTexSubImage2D) {
EXPECT_EQ(static_cast<GLsizei>(15), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(16), cmd.height);
EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
- EXPECT_EQ(static_cast<GLsizei>(18), cmd.imageSize);
- EXPECT_EQ(static_cast<uint32>(19), cmd.data_shm_id);
- EXPECT_EQ(static_cast<uint32>(20), cmd.data_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<GLuint>(18), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
-TEST_F(GLES2FormatTest, CompressedTexSubImage2DBucket) {
- cmds::CompressedTexSubImage2DBucket& cmd =
- *GetBufferAs<cmds::CompressedTexSubImage2DBucket>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14),
- static_cast<GLsizei>(15),
- static_cast<GLsizei>(16),
- static_cast<GLenum>(17),
- static_cast<GLuint>(18));
- EXPECT_EQ(static_cast<uint32>(cmds::CompressedTexSubImage2DBucket::kCmdId),
+TEST_F(GLES2FormatTest, CompressedTexSubImage2D) {
+ cmds::CompressedTexSubImage2D& cmd =
+ *GetBufferAs<cmds::CompressedTexSubImage2D>();
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLsizei>(16),
+ static_cast<GLenum>(17),
+ static_cast<GLsizei>(18),
+ static_cast<uint32_t>(19),
+ static_cast<uint32_t>(20));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CompressedTexSubImage2D::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -481,24 +391,23 @@ TEST_F(GLES2FormatTest, CompressedTexSubImage2DBucket) {
EXPECT_EQ(static_cast<GLsizei>(15), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(16), cmd.height);
EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
- EXPECT_EQ(static_cast<GLuint>(18), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<GLsizei>(18), cmd.imageSize);
+ EXPECT_EQ(static_cast<uint32_t>(19), cmd.data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(20), cmd.data_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, CopyTexImage2D) {
cmds::CopyTexImage2D& cmd = *GetBufferAs<cmds::CopyTexImage2D>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLenum>(13),
- static_cast<GLint>(14),
- static_cast<GLint>(15),
- static_cast<GLsizei>(16),
- static_cast<GLsizei>(17),
- static_cast<GLint>(18));
- EXPECT_EQ(static_cast<uint32>(cmds::CopyTexImage2D::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLint>(14),
+ static_cast<GLint>(15),
+ static_cast<GLsizei>(16),
+ static_cast<GLsizei>(17));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CopyTexImage2D::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -508,24 +417,21 @@ TEST_F(GLES2FormatTest, CopyTexImage2D) {
EXPECT_EQ(static_cast<GLint>(15), cmd.y);
EXPECT_EQ(static_cast<GLsizei>(16), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(17), cmd.height);
- EXPECT_EQ(static_cast<GLint>(18), cmd.border);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, CopyTexSubImage2D) {
cmds::CopyTexSubImage2D& cmd = *GetBufferAs<cmds::CopyTexSubImage2D>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14),
- static_cast<GLint>(15),
- static_cast<GLint>(16),
- static_cast<GLsizei>(17),
- static_cast<GLsizei>(18));
- EXPECT_EQ(static_cast<uint32>(cmds::CopyTexSubImage2D::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14),
+ static_cast<GLint>(15),
+ static_cast<GLint>(16),
+ static_cast<GLsizei>(17),
+ static_cast<GLsizei>(18));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CopyTexSubImage2D::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -536,1241 +442,942 @@ TEST_F(GLES2FormatTest, CopyTexSubImage2D) {
EXPECT_EQ(static_cast<GLint>(16), cmd.y);
EXPECT_EQ(static_cast<GLsizei>(17), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(18), cmd.height);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, CreateProgram) {
cmds::CreateProgram& cmd = *GetBufferAs<cmds::CreateProgram>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<uint32>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::CreateProgram::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<uint32_t>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CreateProgram::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<uint32>(11), cmd.client_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(11), cmd.client_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, CreateShader) {
cmds::CreateShader& cmd = *GetBufferAs<cmds::CreateShader>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::CreateShader::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CreateShader::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.type);
- EXPECT_EQ(static_cast<uint32>(12), cmd.client_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.client_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, CullFace) {
cmds::CullFace& cmd = *GetBufferAs<cmds::CullFace>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::CullFace::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CullFace::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, DeleteBuffers) {
- cmds::DeleteBuffers& cmd = *GetBufferAs<cmds::DeleteBuffers>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteBuffers::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.buffers_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.buffers_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DeleteBuffersImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::DeleteBuffersImmediate& cmd =
*GetBufferAs<cmds::DeleteBuffersImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteBuffersImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteBuffersImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
-TEST_F(GLES2FormatTest, DeleteFramebuffers) {
- cmds::DeleteFramebuffers& cmd = *GetBufferAs<cmds::DeleteFramebuffers>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteFramebuffers::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.framebuffers_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.framebuffers_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, DeleteFramebuffersImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::DeleteFramebuffersImmediate& cmd =
*GetBufferAs<cmds::DeleteFramebuffersImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteFramebuffersImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteFramebuffersImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
TEST_F(GLES2FormatTest, DeleteProgram) {
cmds::DeleteProgram& cmd = *GetBufferAs<cmds::DeleteProgram>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteProgram::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteProgram::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, DeleteRenderbuffers) {
- cmds::DeleteRenderbuffers& cmd = *GetBufferAs<cmds::DeleteRenderbuffers>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteRenderbuffers::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.renderbuffers_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.renderbuffers_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DeleteRenderbuffersImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::DeleteRenderbuffersImmediate& cmd =
*GetBufferAs<cmds::DeleteRenderbuffersImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteRenderbuffersImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteRenderbuffersImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
TEST_F(GLES2FormatTest, DeleteShader) {
cmds::DeleteShader& cmd = *GetBufferAs<cmds::DeleteShader>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteShader::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteShader::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, DeleteTextures) {
- cmds::DeleteTextures& cmd = *GetBufferAs<cmds::DeleteTextures>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteTextures::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.textures_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.textures_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DeleteTexturesImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::DeleteTexturesImmediate& cmd =
*GetBufferAs<cmds::DeleteTexturesImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteTexturesImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteTexturesImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
TEST_F(GLES2FormatTest, DepthFunc) {
cmds::DepthFunc& cmd = *GetBufferAs<cmds::DepthFunc>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::DepthFunc::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DepthFunc::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.func);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DepthMask) {
cmds::DepthMask& cmd = *GetBufferAs<cmds::DepthMask>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLboolean>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::DepthMask::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLboolean>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DepthMask::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLboolean>(11), cmd.flag);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DepthRangef) {
cmds::DepthRangef& cmd = *GetBufferAs<cmds::DepthRangef>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLclampf>(11),
- static_cast<GLclampf>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::DepthRangef::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLclampf>(11), static_cast<GLclampf>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DepthRangef::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLclampf>(11), cmd.zNear);
EXPECT_EQ(static_cast<GLclampf>(12), cmd.zFar);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DetachShader) {
cmds::DetachShader& cmd = *GetBufferAs<cmds::DetachShader>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::DetachShader::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DetachShader::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLuint>(12), cmd.shader);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Disable) {
cmds::Disable& cmd = *GetBufferAs<cmds::Disable>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::Disable::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Disable::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.cap);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DisableVertexAttribArray) {
cmds::DisableVertexAttribArray& cmd =
*GetBufferAs<cmds::DisableVertexAttribArray>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::DisableVertexAttribArray::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DisableVertexAttribArray::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DrawArrays) {
cmds::DrawArrays& cmd = *GetBufferAs<cmds::DrawArrays>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLsizei>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::DrawArrays::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLsizei>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DrawArrays::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
EXPECT_EQ(static_cast<GLint>(12), cmd.first);
EXPECT_EQ(static_cast<GLsizei>(13), cmd.count);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DrawElements) {
cmds::DrawElements& cmd = *GetBufferAs<cmds::DrawElements>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLsizei>(12),
- static_cast<GLenum>(13),
- static_cast<GLuint>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::DrawElements::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLsizei>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLuint>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DrawElements::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
EXPECT_EQ(static_cast<GLenum>(13), cmd.type);
EXPECT_EQ(static_cast<GLuint>(14), cmd.index_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Enable) {
cmds::Enable& cmd = *GetBufferAs<cmds::Enable>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::Enable::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Enable::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.cap);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, EnableVertexAttribArray) {
cmds::EnableVertexAttribArray& cmd =
*GetBufferAs<cmds::EnableVertexAttribArray>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::EnableVertexAttribArray::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::EnableVertexAttribArray::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Finish) {
cmds::Finish& cmd = *GetBufferAs<cmds::Finish>();
- void* next_cmd = cmd.Set(
- &cmd);
- EXPECT_EQ(static_cast<uint32>(cmds::Finish::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Finish::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Flush) {
cmds::Flush& cmd = *GetBufferAs<cmds::Flush>();
- void* next_cmd = cmd.Set(
- &cmd);
- EXPECT_EQ(static_cast<uint32>(cmds::Flush::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Flush::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, FramebufferRenderbuffer) {
cmds::FramebufferRenderbuffer& cmd =
*GetBufferAs<cmds::FramebufferRenderbuffer>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLenum>(13),
- static_cast<GLuint>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::FramebufferRenderbuffer::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLuint>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::FramebufferRenderbuffer::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.attachment);
EXPECT_EQ(static_cast<GLenum>(13), cmd.renderbuffertarget);
EXPECT_EQ(static_cast<GLuint>(14), cmd.renderbuffer);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, FramebufferTexture2D) {
cmds::FramebufferTexture2D& cmd = *GetBufferAs<cmds::FramebufferTexture2D>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLenum>(13),
- static_cast<GLuint>(14),
- static_cast<GLint>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::FramebufferTexture2D::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLuint>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::FramebufferTexture2D::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.attachment);
EXPECT_EQ(static_cast<GLenum>(13), cmd.textarget);
EXPECT_EQ(static_cast<GLuint>(14), cmd.texture);
- EXPECT_EQ(static_cast<GLint>(15), cmd.level);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, FrontFace) {
cmds::FrontFace& cmd = *GetBufferAs<cmds::FrontFace>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::FrontFace::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::FrontFace::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, GenBuffers) {
- cmds::GenBuffers& cmd = *GetBufferAs<cmds::GenBuffers>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GenBuffers::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.buffers_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.buffers_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GenBuffersImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::GenBuffersImmediate& cmd = *GetBufferAs<cmds::GenBuffersImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::GenBuffersImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GenBuffersImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
TEST_F(GLES2FormatTest, GenerateMipmap) {
cmds::GenerateMipmap& cmd = *GetBufferAs<cmds::GenerateMipmap>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::GenerateMipmap::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GenerateMipmap::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, GenFramebuffers) {
- cmds::GenFramebuffers& cmd = *GetBufferAs<cmds::GenFramebuffers>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GenFramebuffers::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.framebuffers_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.framebuffers_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GenFramebuffersImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::GenFramebuffersImmediate& cmd =
*GetBufferAs<cmds::GenFramebuffersImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::GenFramebuffersImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GenFramebuffersImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
-TEST_F(GLES2FormatTest, GenRenderbuffers) {
- cmds::GenRenderbuffers& cmd = *GetBufferAs<cmds::GenRenderbuffers>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GenRenderbuffers::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.renderbuffers_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.renderbuffers_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, GenRenderbuffersImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::GenRenderbuffersImmediate& cmd =
*GetBufferAs<cmds::GenRenderbuffersImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::GenRenderbuffersImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GenRenderbuffersImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
-TEST_F(GLES2FormatTest, GenTextures) {
- cmds::GenTextures& cmd = *GetBufferAs<cmds::GenTextures>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GenTextures::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.textures_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.textures_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, GenTexturesImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::GenTexturesImmediate& cmd = *GetBufferAs<cmds::GenTexturesImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::GenTexturesImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GenTexturesImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
TEST_F(GLES2FormatTest, GetActiveAttrib) {
cmds::GetActiveAttrib& cmd = *GetBufferAs<cmds::GetActiveAttrib>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::GetActiveAttrib::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLuint>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14),
+ static_cast<uint32_t>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetActiveAttrib::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
- EXPECT_EQ(static_cast<uint32>(13), cmd.name_bucket_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.name_bucket_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(15), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetActiveUniform) {
cmds::GetActiveUniform& cmd = *GetBufferAs<cmds::GetActiveUniform>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::GetActiveUniform::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLuint>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14),
+ static_cast<uint32_t>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetActiveUniform::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLuint>(12), cmd.index);
- EXPECT_EQ(static_cast<uint32>(13), cmd.name_bucket_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.name_bucket_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(15), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetAttachedShaders) {
cmds::GetAttachedShaders& cmd = *GetBufferAs<cmds::GetAttachedShaders>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetAttachedShaders::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetAttachedShaders::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- EXPECT_EQ(static_cast<uint32>(14), cmd.result_size);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.result_size);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
// TODO(gman): Write test for GetAttribLocation
-// TODO(gman): Write test for GetAttribLocationBucket
TEST_F(GLES2FormatTest, GetBooleanv) {
cmds::GetBooleanv& cmd = *GetBufferAs<cmds::GetBooleanv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GetBooleanv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetBooleanv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(12), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetBufferParameteriv) {
cmds::GetBufferParameteriv& cmd = *GetBufferAs<cmds::GetBufferParameteriv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetBufferParameteriv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetBufferParameteriv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetError) {
cmds::GetError& cmd = *GetBufferAs<cmds::GetError>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<uint32>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::GetError::kCmdId),
- cmd.header.command);
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<uint32_t>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetError::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<uint32>(11), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(11), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetFloatv) {
cmds::GetFloatv& cmd = *GetBufferAs<cmds::GetFloatv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GetFloatv::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetFloatv::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(12), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetFramebufferAttachmentParameteriv) {
cmds::GetFramebufferAttachmentParameteriv& cmd =
*GetBufferAs<cmds::GetFramebufferAttachmentParameteriv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLenum>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLenum>(13),
+ static_cast<uint32_t>(14),
+ static_cast<uint32_t>(15));
EXPECT_EQ(
- static_cast<uint32>(cmds::GetFramebufferAttachmentParameteriv::kCmdId),
- cmd.header.command);
+ static_cast<uint32_t>(cmds::GetFramebufferAttachmentParameteriv::kCmdId),
+ cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.attachment);
EXPECT_EQ(static_cast<GLenum>(13), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(15), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetIntegerv) {
cmds::GetIntegerv& cmd = *GetBufferAs<cmds::GetIntegerv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GetIntegerv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetIntegerv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(12), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetProgramiv) {
cmds::GetProgramiv& cmd = *GetBufferAs<cmds::GetProgramiv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetProgramiv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetProgramiv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetProgramInfoLog) {
cmds::GetProgramInfoLog& cmd = *GetBufferAs<cmds::GetProgramInfoLog>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::GetProgramInfoLog::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetProgramInfoLog::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetRenderbufferParameteriv) {
cmds::GetRenderbufferParameteriv& cmd =
*GetBufferAs<cmds::GetRenderbufferParameteriv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetRenderbufferParameteriv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetRenderbufferParameteriv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetShaderiv) {
cmds::GetShaderiv& cmd = *GetBufferAs<cmds::GetShaderiv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetShaderiv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetShaderiv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetShaderInfoLog) {
cmds::GetShaderInfoLog& cmd = *GetBufferAs<cmds::GetShaderInfoLog>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::GetShaderInfoLog::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetShaderInfoLog::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
- EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetShaderPrecisionFormat) {
cmds::GetShaderPrecisionFormat& cmd =
*GetBufferAs<cmds::GetShaderPrecisionFormat>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetShaderPrecisionFormat::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetShaderPrecisionFormat::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.shadertype);
EXPECT_EQ(static_cast<GLenum>(12), cmd.precisiontype);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetShaderSource) {
cmds::GetShaderSource& cmd = *GetBufferAs<cmds::GetShaderSource>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::GetShaderSource::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetShaderSource::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
- EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetString) {
cmds::GetString& cmd = *GetBufferAs<cmds::GetString>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::GetString::kCmdId),
- cmd.header.command);
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetString::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.name);
- EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetTexParameterfv) {
cmds::GetTexParameterfv& cmd = *GetBufferAs<cmds::GetTexParameterfv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetTexParameterfv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetTexParameterfv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetTexParameteriv) {
cmds::GetTexParameteriv& cmd = *GetBufferAs<cmds::GetTexParameteriv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetTexParameteriv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetTexParameteriv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetUniformfv) {
cmds::GetUniformfv& cmd = *GetBufferAs<cmds::GetUniformfv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLint>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetUniformfv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLint>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetUniformfv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLint>(12), cmd.location);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetUniformiv) {
cmds::GetUniformiv& cmd = *GetBufferAs<cmds::GetUniformiv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLint>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetUniformiv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLint>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetUniformiv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLint>(12), cmd.location);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
// TODO(gman): Write test for GetUniformLocation
-// TODO(gman): Write test for GetUniformLocationBucket
TEST_F(GLES2FormatTest, GetVertexAttribfv) {
cmds::GetVertexAttribfv& cmd = *GetBufferAs<cmds::GetVertexAttribfv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetVertexAttribfv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetVertexAttribfv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetVertexAttribiv) {
cmds::GetVertexAttribiv& cmd = *GetBufferAs<cmds::GetVertexAttribiv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetVertexAttribiv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetVertexAttribiv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.params_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.params_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetVertexAttribPointerv) {
cmds::GetVertexAttribPointerv& cmd =
*GetBufferAs<cmds::GetVertexAttribPointerv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::GetVertexAttribPointerv::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLenum>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetVertexAttribPointerv::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.pointer_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.pointer_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.pointer_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.pointer_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Hint) {
cmds::Hint& cmd = *GetBufferAs<cmds::Hint>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::Hint::kCmdId),
- cmd.header.command);
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLenum>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Hint::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.mode);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, IsBuffer) {
cmds::IsBuffer& cmd = *GetBufferAs<cmds::IsBuffer>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::IsBuffer::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::IsBuffer::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.buffer);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, IsEnabled) {
cmds::IsEnabled& cmd = *GetBufferAs<cmds::IsEnabled>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::IsEnabled::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::IsEnabled::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.cap);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, IsFramebuffer) {
cmds::IsFramebuffer& cmd = *GetBufferAs<cmds::IsFramebuffer>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::IsFramebuffer::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::IsFramebuffer::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.framebuffer);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, IsProgram) {
cmds::IsProgram& cmd = *GetBufferAs<cmds::IsProgram>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::IsProgram::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::IsProgram::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, IsRenderbuffer) {
cmds::IsRenderbuffer& cmd = *GetBufferAs<cmds::IsRenderbuffer>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::IsRenderbuffer::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::IsRenderbuffer::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.renderbuffer);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, IsShader) {
cmds::IsShader& cmd = *GetBufferAs<cmds::IsShader>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::IsShader::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::IsShader::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, IsTexture) {
cmds::IsTexture& cmd = *GetBufferAs<cmds::IsTexture>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::IsTexture::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::IsTexture::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.texture);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, LineWidth) {
cmds::LineWidth& cmd = *GetBufferAs<cmds::LineWidth>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLfloat>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::LineWidth::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLfloat>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::LineWidth::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLfloat>(11), cmd.width);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, LinkProgram) {
cmds::LinkProgram& cmd = *GetBufferAs<cmds::LinkProgram>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::LinkProgram::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::LinkProgram::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, PixelStorei) {
cmds::PixelStorei& cmd = *GetBufferAs<cmds::PixelStorei>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::PixelStorei::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::PixelStorei::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.pname);
EXPECT_EQ(static_cast<GLint>(12), cmd.param);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, PolygonOffset) {
cmds::PolygonOffset& cmd = *GetBufferAs<cmds::PolygonOffset>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLfloat>(11),
- static_cast<GLfloat>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::PolygonOffset::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLfloat>(11), static_cast<GLfloat>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::PolygonOffset::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLfloat>(11), cmd.factor);
EXPECT_EQ(static_cast<GLfloat>(12), cmd.units);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ReadPixels) {
cmds::ReadPixels& cmd = *GetBufferAs<cmds::ReadPixels>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12),
- static_cast<GLsizei>(13),
- static_cast<GLsizei>(14),
- static_cast<GLenum>(15),
- static_cast<GLenum>(16),
- static_cast<uint32>(17),
- static_cast<uint32>(18),
- static_cast<uint32>(19),
- static_cast<uint32>(20),
- static_cast<GLboolean>(21));
- EXPECT_EQ(static_cast<uint32>(cmds::ReadPixels::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLsizei>(13),
+ static_cast<GLsizei>(14),
+ static_cast<GLenum>(15),
+ static_cast<GLenum>(16),
+ static_cast<uint32_t>(17),
+ static_cast<uint32_t>(18),
+ static_cast<uint32_t>(19),
+ static_cast<uint32_t>(20),
+ static_cast<GLboolean>(21));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ReadPixels::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.x);
@@ -1779,254 +1386,202 @@ TEST_F(GLES2FormatTest, ReadPixels) {
EXPECT_EQ(static_cast<GLsizei>(14), cmd.height);
EXPECT_EQ(static_cast<GLenum>(15), cmd.format);
EXPECT_EQ(static_cast<GLenum>(16), cmd.type);
- EXPECT_EQ(static_cast<uint32>(17), cmd.pixels_shm_id);
- EXPECT_EQ(static_cast<uint32>(18), cmd.pixels_shm_offset);
- EXPECT_EQ(static_cast<uint32>(19), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(20), cmd.result_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(17), cmd.pixels_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(18), cmd.pixels_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(19), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(20), cmd.result_shm_offset);
EXPECT_EQ(static_cast<GLboolean>(21), cmd.async);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ReleaseShaderCompiler) {
cmds::ReleaseShaderCompiler& cmd =
*GetBufferAs<cmds::ReleaseShaderCompiler>();
- void* next_cmd = cmd.Set(
- &cmd);
- EXPECT_EQ(static_cast<uint32>(cmds::ReleaseShaderCompiler::kCmdId),
+ void* next_cmd = cmd.Set(&cmd);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ReleaseShaderCompiler::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, RenderbufferStorage) {
cmds::RenderbufferStorage& cmd = *GetBufferAs<cmds::RenderbufferStorage>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLsizei>(13),
- static_cast<GLsizei>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::RenderbufferStorage::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLsizei>(13),
+ static_cast<GLsizei>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::RenderbufferStorage::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.internalformat);
EXPECT_EQ(static_cast<GLsizei>(13), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.height);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, SampleCoverage) {
cmds::SampleCoverage& cmd = *GetBufferAs<cmds::SampleCoverage>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLclampf>(11),
- static_cast<GLboolean>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::SampleCoverage::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLclampf>(11), static_cast<GLboolean>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::SampleCoverage::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLclampf>(11), cmd.value);
EXPECT_EQ(static_cast<GLboolean>(12), cmd.invert);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Scissor) {
cmds::Scissor& cmd = *GetBufferAs<cmds::Scissor>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12),
- static_cast<GLsizei>(13),
- static_cast<GLsizei>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Scissor::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLsizei>(13),
+ static_cast<GLsizei>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Scissor::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.x);
EXPECT_EQ(static_cast<GLint>(12), cmd.y);
EXPECT_EQ(static_cast<GLsizei>(13), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.height);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ShaderBinary) {
cmds::ShaderBinary& cmd = *GetBufferAs<cmds::ShaderBinary>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13),
- static_cast<GLenum>(14),
- static_cast<uint32>(15),
- static_cast<uint32>(16),
- static_cast<GLsizei>(17));
- EXPECT_EQ(static_cast<uint32>(cmds::ShaderBinary::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLsizei>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13),
+ static_cast<GLenum>(14),
+ static_cast<uint32_t>(15),
+ static_cast<uint32_t>(16),
+ static_cast<GLsizei>(17));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ShaderBinary::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.shaders_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.shaders_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.shaders_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.shaders_shm_offset);
EXPECT_EQ(static_cast<GLenum>(14), cmd.binaryformat);
- EXPECT_EQ(static_cast<uint32>(15), cmd.binary_shm_id);
- EXPECT_EQ(static_cast<uint32>(16), cmd.binary_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(15), cmd.binary_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(16), cmd.binary_shm_offset);
EXPECT_EQ(static_cast<GLsizei>(17), cmd.length);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, ShaderSource) {
- cmds::ShaderSource& cmd = *GetBufferAs<cmds::ShaderSource>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::ShaderSource::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
- EXPECT_EQ(static_cast<uint32>(12), cmd.data_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.data_shm_offset);
- EXPECT_EQ(static_cast<uint32>(14), cmd.data_size);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ShaderSourceBucket) {
cmds::ShaderSourceBucket& cmd = *GetBufferAs<cmds::ShaderSourceBucket>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::ShaderSourceBucket::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ShaderSourceBucket::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
- EXPECT_EQ(static_cast<uint32>(12), cmd.data_bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.data_bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, StencilFunc) {
cmds::StencilFunc& cmd = *GetBufferAs<cmds::StencilFunc>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLuint>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::StencilFunc::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLuint>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::StencilFunc::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.func);
EXPECT_EQ(static_cast<GLint>(12), cmd.ref);
EXPECT_EQ(static_cast<GLuint>(13), cmd.mask);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, StencilFuncSeparate) {
cmds::StencilFuncSeparate& cmd = *GetBufferAs<cmds::StencilFuncSeparate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLint>(13),
- static_cast<GLuint>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::StencilFuncSeparate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLint>(13),
+ static_cast<GLuint>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::StencilFuncSeparate::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.face);
EXPECT_EQ(static_cast<GLenum>(12), cmd.func);
EXPECT_EQ(static_cast<GLint>(13), cmd.ref);
EXPECT_EQ(static_cast<GLuint>(14), cmd.mask);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, StencilMask) {
cmds::StencilMask& cmd = *GetBufferAs<cmds::StencilMask>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::StencilMask::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::StencilMask::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.mask);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, StencilMaskSeparate) {
cmds::StencilMaskSeparate& cmd = *GetBufferAs<cmds::StencilMaskSeparate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::StencilMaskSeparate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::StencilMaskSeparate::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.face);
EXPECT_EQ(static_cast<GLuint>(12), cmd.mask);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, StencilOp) {
cmds::StencilOp& cmd = *GetBufferAs<cmds::StencilOp>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLenum>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::StencilOp::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLenum>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::StencilOp::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.fail);
EXPECT_EQ(static_cast<GLenum>(12), cmd.zfail);
EXPECT_EQ(static_cast<GLenum>(13), cmd.zpass);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, StencilOpSeparate) {
cmds::StencilOpSeparate& cmd = *GetBufferAs<cmds::StencilOpSeparate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLenum>(13),
- static_cast<GLenum>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::StencilOpSeparate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLenum>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::StencilOpSeparate::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.face);
EXPECT_EQ(static_cast<GLenum>(12), cmd.fail);
EXPECT_EQ(static_cast<GLenum>(13), cmd.zfail);
EXPECT_EQ(static_cast<GLenum>(14), cmd.zpass);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, TexImage2D) {
cmds::TexImage2D& cmd = *GetBufferAs<cmds::TexImage2D>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLsizei>(14),
- static_cast<GLsizei>(15),
- static_cast<GLint>(16),
- static_cast<GLenum>(17),
- static_cast<GLenum>(18),
- static_cast<uint32>(19),
- static_cast<uint32>(20));
- EXPECT_EQ(static_cast<uint32>(cmds::TexImage2D::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLsizei>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLenum>(16),
+ static_cast<GLenum>(17),
+ static_cast<uint32_t>(18),
+ static_cast<uint32_t>(19));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TexImage2D::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -2034,153 +1589,98 @@ TEST_F(GLES2FormatTest, TexImage2D) {
EXPECT_EQ(static_cast<GLint>(13), cmd.internalformat);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
- EXPECT_EQ(static_cast<GLint>(16), cmd.border);
- EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
- EXPECT_EQ(static_cast<GLenum>(18), cmd.type);
- EXPECT_EQ(static_cast<uint32>(19), cmd.pixels_shm_id);
- EXPECT_EQ(static_cast<uint32>(20), cmd.pixels_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<GLenum>(16), cmd.format);
+ EXPECT_EQ(static_cast<GLenum>(17), cmd.type);
+ EXPECT_EQ(static_cast<uint32_t>(18), cmd.pixels_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(19), cmd.pixels_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, TexParameterf) {
cmds::TexParameterf& cmd = *GetBufferAs<cmds::TexParameterf>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLfloat>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::TexParameterf::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLfloat>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TexParameterf::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
EXPECT_EQ(static_cast<GLfloat>(13), cmd.param);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, TexParameterfv) {
- cmds::TexParameterfv& cmd = *GetBufferAs<cmds::TexParameterfv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::TexParameterfv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
- EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, TexParameterfvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
};
cmds::TexParameterfvImmediate& cmd =
*GetBufferAs<cmds::TexParameterfvImmediate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::TexParameterfvImmediate::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLenum>(12), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TexParameterfvImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, TexParameteri) {
cmds::TexParameteri& cmd = *GetBufferAs<cmds::TexParameteri>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLint>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::TexParameteri::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLint>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TexParameteri::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
EXPECT_EQ(static_cast<GLint>(13), cmd.param);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, TexParameteriv) {
- cmds::TexParameteriv& cmd = *GetBufferAs<cmds::TexParameteriv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::TexParameteriv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
- EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
- EXPECT_EQ(static_cast<uint32>(13), cmd.params_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.params_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, TexParameterivImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLint data[] = {
- static_cast<GLint>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 0),
};
cmds::TexParameterivImmediate& cmd =
*GetBufferAs<cmds::TexParameterivImmediate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::TexParameterivImmediate::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLenum>(12), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TexParameterivImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, TexSubImage2D) {
cmds::TexSubImage2D& cmd = *GetBufferAs<cmds::TexSubImage2D>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14),
- static_cast<GLsizei>(15),
- static_cast<GLsizei>(16),
- static_cast<GLenum>(17),
- static_cast<GLenum>(18),
- static_cast<uint32>(19),
- static_cast<uint32>(20),
- static_cast<GLboolean>(21));
- EXPECT_EQ(static_cast<uint32>(cmds::TexSubImage2D::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLsizei>(16),
+ static_cast<GLenum>(17),
+ static_cast<GLenum>(18),
+ static_cast<uint32_t>(19),
+ static_cast<uint32_t>(20),
+ static_cast<GLboolean>(21));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TexSubImage2D::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -2191,953 +1691,581 @@ TEST_F(GLES2FormatTest, TexSubImage2D) {
EXPECT_EQ(static_cast<GLsizei>(16), cmd.height);
EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
EXPECT_EQ(static_cast<GLenum>(18), cmd.type);
- EXPECT_EQ(static_cast<uint32>(19), cmd.pixels_shm_id);
- EXPECT_EQ(static_cast<uint32>(20), cmd.pixels_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(19), cmd.pixels_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(20), cmd.pixels_shm_offset);
EXPECT_EQ(static_cast<GLboolean>(21), cmd.internal);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform1f) {
cmds::Uniform1f& cmd = *GetBufferAs<cmds::Uniform1f>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLfloat>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform1f::kCmdId),
- cmd.header.command);
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(11), static_cast<GLfloat>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform1f::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.location);
EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, Uniform1fv) {
- cmds::Uniform1fv& cmd = *GetBufferAs<cmds::Uniform1fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform1fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform1fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
};
cmds::Uniform1fvImmediate& cmd = *GetBufferAs<cmds::Uniform1fvImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLfloat) * 1;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform1fvImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform1fvImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, Uniform1i) {
cmds::Uniform1i& cmd = *GetBufferAs<cmds::Uniform1i>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform1i::kCmdId),
- cmd.header.command);
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(11), static_cast<GLint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform1i::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.location);
EXPECT_EQ(static_cast<GLint>(12), cmd.x);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, Uniform1iv) {
- cmds::Uniform1iv& cmd = *GetBufferAs<cmds::Uniform1iv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform1iv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform1ivImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLint data[] = {
- static_cast<GLint>(kSomeBaseValueToTestWith + 0),
- static_cast<GLint>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 1),
};
cmds::Uniform1ivImmediate& cmd = *GetBufferAs<cmds::Uniform1ivImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLint) * 1;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform1ivImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform1ivImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, Uniform2f) {
cmds::Uniform2f& cmd = *GetBufferAs<cmds::Uniform2f>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLfloat>(12),
- static_cast<GLfloat>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform2f::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLfloat>(12),
+ static_cast<GLfloat>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform2f::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.location);
EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, Uniform2fv) {
- cmds::Uniform2fv& cmd = *GetBufferAs<cmds::Uniform2fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform2fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform2fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
};
cmds::Uniform2fvImmediate& cmd = *GetBufferAs<cmds::Uniform2fvImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLfloat) * 2;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform2fvImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform2fvImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, Uniform2i) {
cmds::Uniform2i& cmd = *GetBufferAs<cmds::Uniform2i>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform2i::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform2i::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.location);
EXPECT_EQ(static_cast<GLint>(12), cmd.x);
EXPECT_EQ(static_cast<GLint>(13), cmd.y);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, Uniform2iv) {
- cmds::Uniform2iv& cmd = *GetBufferAs<cmds::Uniform2iv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform2iv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform2ivImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLint data[] = {
- static_cast<GLint>(kSomeBaseValueToTestWith + 0),
- static_cast<GLint>(kSomeBaseValueToTestWith + 1),
- static_cast<GLint>(kSomeBaseValueToTestWith + 2),
- static_cast<GLint>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 3),
};
cmds::Uniform2ivImmediate& cmd = *GetBufferAs<cmds::Uniform2ivImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLint) * 2;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform2ivImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform2ivImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, Uniform3f) {
cmds::Uniform3f& cmd = *GetBufferAs<cmds::Uniform3f>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLfloat>(12),
- static_cast<GLfloat>(13),
- static_cast<GLfloat>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform3f::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLfloat>(12),
+ static_cast<GLfloat>(13),
+ static_cast<GLfloat>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform3f::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.location);
EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
EXPECT_EQ(static_cast<GLfloat>(14), cmd.z);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, Uniform3fv) {
- cmds::Uniform3fv& cmd = *GetBufferAs<cmds::Uniform3fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform3fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform3fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
};
cmds::Uniform3fvImmediate& cmd = *GetBufferAs<cmds::Uniform3fvImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLfloat) * 3;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform3fvImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform3fvImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, Uniform3i) {
cmds::Uniform3i& cmd = *GetBufferAs<cmds::Uniform3i>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform3i::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform3i::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.location);
EXPECT_EQ(static_cast<GLint>(12), cmd.x);
EXPECT_EQ(static_cast<GLint>(13), cmd.y);
EXPECT_EQ(static_cast<GLint>(14), cmd.z);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, Uniform3iv) {
- cmds::Uniform3iv& cmd = *GetBufferAs<cmds::Uniform3iv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform3iv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform3ivImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLint data[] = {
- static_cast<GLint>(kSomeBaseValueToTestWith + 0),
- static_cast<GLint>(kSomeBaseValueToTestWith + 1),
- static_cast<GLint>(kSomeBaseValueToTestWith + 2),
- static_cast<GLint>(kSomeBaseValueToTestWith + 3),
- static_cast<GLint>(kSomeBaseValueToTestWith + 4),
- static_cast<GLint>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 5),
};
cmds::Uniform3ivImmediate& cmd = *GetBufferAs<cmds::Uniform3ivImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLint) * 3;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform3ivImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform3ivImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, Uniform4f) {
cmds::Uniform4f& cmd = *GetBufferAs<cmds::Uniform4f>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLfloat>(12),
- static_cast<GLfloat>(13),
- static_cast<GLfloat>(14),
- static_cast<GLfloat>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform4f::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLfloat>(12),
+ static_cast<GLfloat>(13),
+ static_cast<GLfloat>(14),
+ static_cast<GLfloat>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform4f::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.location);
EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
EXPECT_EQ(static_cast<GLfloat>(14), cmd.z);
EXPECT_EQ(static_cast<GLfloat>(15), cmd.w);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, Uniform4fv) {
- cmds::Uniform4fv& cmd = *GetBufferAs<cmds::Uniform4fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform4fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform4fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
};
cmds::Uniform4fvImmediate& cmd = *GetBufferAs<cmds::Uniform4fvImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLfloat) * 4;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform4fvImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform4fvImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, Uniform4i) {
cmds::Uniform4i& cmd = *GetBufferAs<cmds::Uniform4i>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14),
- static_cast<GLint>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform4i::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14),
+ static_cast<GLint>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform4i::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.location);
EXPECT_EQ(static_cast<GLint>(12), cmd.x);
EXPECT_EQ(static_cast<GLint>(13), cmd.y);
EXPECT_EQ(static_cast<GLint>(14), cmd.z);
EXPECT_EQ(static_cast<GLint>(15), cmd.w);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, Uniform4iv) {
- cmds::Uniform4iv& cmd = *GetBufferAs<cmds::Uniform4iv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform4iv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.v_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.v_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Uniform4ivImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLint data[] = {
- static_cast<GLint>(kSomeBaseValueToTestWith + 0),
- static_cast<GLint>(kSomeBaseValueToTestWith + 1),
- static_cast<GLint>(kSomeBaseValueToTestWith + 2),
- static_cast<GLint>(kSomeBaseValueToTestWith + 3),
- static_cast<GLint>(kSomeBaseValueToTestWith + 4),
- static_cast<GLint>(kSomeBaseValueToTestWith + 5),
- static_cast<GLint>(kSomeBaseValueToTestWith + 6),
- static_cast<GLint>(kSomeBaseValueToTestWith + 7),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 6),
+ static_cast<GLint>(kSomeBaseValueToTestWith + 7),
};
cmds::Uniform4ivImmediate& cmd = *GetBufferAs<cmds::Uniform4ivImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLint) * 4;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::Uniform4ivImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Uniform4ivImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
-TEST_F(GLES2FormatTest, UniformMatrix2fv) {
- cmds::UniformMatrix2fv& cmd = *GetBufferAs<cmds::UniformMatrix2fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<GLboolean>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix2fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<GLboolean>(13), cmd.transpose);
- EXPECT_EQ(static_cast<uint32>(14), cmd.value_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.value_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, UniformMatrix2fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
};
cmds::UniformMatrix2fvImmediate& cmd =
*GetBufferAs<cmds::UniformMatrix2fvImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLfloat) * 4;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- static_cast<GLboolean>(3),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix2fvImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::UniformMatrix2fvImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
- EXPECT_EQ(static_cast<GLboolean>(3), cmd.transpose);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
-TEST_F(GLES2FormatTest, UniformMatrix3fv) {
- cmds::UniformMatrix3fv& cmd = *GetBufferAs<cmds::UniformMatrix3fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<GLboolean>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix3fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<GLboolean>(13), cmd.transpose);
- EXPECT_EQ(static_cast<uint32>(14), cmd.value_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.value_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, UniformMatrix3fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 8),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 9),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 10),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 11),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 12),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 13),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 14),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 15),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 16),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 17),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 8),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 9),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 10),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 11),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 12),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 13),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 14),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 15),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 16),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 17),
};
cmds::UniformMatrix3fvImmediate& cmd =
*GetBufferAs<cmds::UniformMatrix3fvImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLfloat) * 9;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- static_cast<GLboolean>(3),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix3fvImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::UniformMatrix3fvImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
- EXPECT_EQ(static_cast<GLboolean>(3), cmd.transpose);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
-TEST_F(GLES2FormatTest, UniformMatrix4fv) {
- cmds::UniformMatrix4fv& cmd = *GetBufferAs<cmds::UniformMatrix4fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLsizei>(12),
- static_cast<GLboolean>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix4fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLint>(11), cmd.location);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<GLboolean>(13), cmd.transpose);
- EXPECT_EQ(static_cast<uint32>(14), cmd.value_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.value_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, UniformMatrix4fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 8),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 9),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 10),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 11),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 12),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 13),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 14),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 15),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 16),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 17),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 18),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 19),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 20),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 21),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 22),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 23),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 24),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 25),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 26),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 27),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 28),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 29),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 30),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 31),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 6),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 7),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 8),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 9),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 10),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 11),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 12),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 13),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 14),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 15),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 16),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 17),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 18),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 19),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 20),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 21),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 22),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 23),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 24),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 25),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 26),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 27),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 28),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 29),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 30),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 31),
};
cmds::UniformMatrix4fvImmediate& cmd =
*GetBufferAs<cmds::UniformMatrix4fvImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLfloat) * 16;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(1),
- static_cast<GLsizei>(2),
- static_cast<GLboolean>(3),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::UniformMatrix4fvImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLint>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::UniformMatrix4fvImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(1), cmd.location);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
- EXPECT_EQ(static_cast<GLboolean>(3), cmd.transpose);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, UseProgram) {
cmds::UseProgram& cmd = *GetBufferAs<cmds::UseProgram>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::UseProgram::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::UseProgram::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ValidateProgram) {
cmds::ValidateProgram& cmd = *GetBufferAs<cmds::ValidateProgram>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::ValidateProgram::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ValidateProgram::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, VertexAttrib1f) {
cmds::VertexAttrib1f& cmd = *GetBufferAs<cmds::VertexAttrib1f>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLfloat>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib1f::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLfloat>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttrib1f::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, VertexAttrib1fv) {
- cmds::VertexAttrib1fv& cmd = *GetBufferAs<cmds::VertexAttrib1fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib1fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
- EXPECT_EQ(static_cast<uint32>(12), cmd.values_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.values_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, VertexAttrib1fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
};
cmds::VertexAttrib1fvImmediate& cmd =
*GetBufferAs<cmds::VertexAttrib1fvImmediate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib1fvImmediate::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttrib1fvImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, VertexAttrib2f) {
cmds::VertexAttrib2f& cmd = *GetBufferAs<cmds::VertexAttrib2f>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLfloat>(12),
- static_cast<GLfloat>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib2f::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLfloat>(12),
+ static_cast<GLfloat>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttrib2f::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, VertexAttrib2fv) {
- cmds::VertexAttrib2fv& cmd = *GetBufferAs<cmds::VertexAttrib2fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib2fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
- EXPECT_EQ(static_cast<uint32>(12), cmd.values_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.values_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, VertexAttrib2fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
};
cmds::VertexAttrib2fvImmediate& cmd =
*GetBufferAs<cmds::VertexAttrib2fvImmediate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib2fvImmediate::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttrib2fvImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, VertexAttrib3f) {
cmds::VertexAttrib3f& cmd = *GetBufferAs<cmds::VertexAttrib3f>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLfloat>(12),
- static_cast<GLfloat>(13),
- static_cast<GLfloat>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib3f::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLfloat>(12),
+ static_cast<GLfloat>(13),
+ static_cast<GLfloat>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttrib3f::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
EXPECT_EQ(static_cast<GLfloat>(12), cmd.x);
EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
EXPECT_EQ(static_cast<GLfloat>(14), cmd.z);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, VertexAttrib3fv) {
- cmds::VertexAttrib3fv& cmd = *GetBufferAs<cmds::VertexAttrib3fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib3fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
- EXPECT_EQ(static_cast<uint32>(12), cmd.values_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.values_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, VertexAttrib3fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
};
cmds::VertexAttrib3fvImmediate& cmd =
*GetBufferAs<cmds::VertexAttrib3fvImmediate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib3fvImmediate::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttrib3fvImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, VertexAttrib4f) {
cmds::VertexAttrib4f& cmd = *GetBufferAs<cmds::VertexAttrib4f>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLfloat>(12),
- static_cast<GLfloat>(13),
- static_cast<GLfloat>(14),
- static_cast<GLfloat>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib4f::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLfloat>(12),
+ static_cast<GLfloat>(13),
+ static_cast<GLfloat>(14),
+ static_cast<GLfloat>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttrib4f::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
@@ -3145,64 +2273,40 @@ TEST_F(GLES2FormatTest, VertexAttrib4f) {
EXPECT_EQ(static_cast<GLfloat>(13), cmd.y);
EXPECT_EQ(static_cast<GLfloat>(14), cmd.z);
EXPECT_EQ(static_cast<GLfloat>(15), cmd.w);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, VertexAttrib4fv) {
- cmds::VertexAttrib4fv& cmd = *GetBufferAs<cmds::VertexAttrib4fv>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib4fv::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
- EXPECT_EQ(static_cast<uint32>(12), cmd.values_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.values_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, VertexAttrib4fvImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLfloat data[] = {
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
- static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLfloat>(kSomeBaseValueToTestWith + 3),
};
cmds::VertexAttrib4fvImmediate& cmd =
*GetBufferAs<cmds::VertexAttrib4fvImmediate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttrib4fvImmediate::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttrib4fvImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, VertexAttribPointer) {
cmds::VertexAttribPointer& cmd = *GetBufferAs<cmds::VertexAttribPointer>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLint>(12),
- static_cast<GLenum>(13),
- static_cast<GLboolean>(14),
- static_cast<GLsizei>(15),
- static_cast<GLuint>(16));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttribPointer::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLboolean>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLuint>(16));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttribPointer::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.indx);
@@ -3211,45 +2315,40 @@ TEST_F(GLES2FormatTest, VertexAttribPointer) {
EXPECT_EQ(static_cast<GLboolean>(14), cmd.normalized);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.stride);
EXPECT_EQ(static_cast<GLuint>(16), cmd.offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, Viewport) {
cmds::Viewport& cmd = *GetBufferAs<cmds::Viewport>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12),
- static_cast<GLsizei>(13),
- static_cast<GLsizei>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::Viewport::kCmdId),
- cmd.header.command);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLsizei>(13),
+ static_cast<GLsizei>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::Viewport::kCmdId), cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.x);
EXPECT_EQ(static_cast<GLint>(12), cmd.y);
EXPECT_EQ(static_cast<GLsizei>(13), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.height);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BlitFramebufferCHROMIUM) {
cmds::BlitFramebufferCHROMIUM& cmd =
*GetBufferAs<cmds::BlitFramebufferCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14),
- static_cast<GLint>(15),
- static_cast<GLint>(16),
- static_cast<GLint>(17),
- static_cast<GLint>(18),
- static_cast<GLbitfield>(19),
- static_cast<GLenum>(20));
- EXPECT_EQ(static_cast<uint32>(cmds::BlitFramebufferCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14),
+ static_cast<GLint>(15),
+ static_cast<GLint>(16),
+ static_cast<GLint>(17),
+ static_cast<GLint>(18),
+ static_cast<GLbitfield>(19),
+ static_cast<GLenum>(20));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BlitFramebufferCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.srcX0);
@@ -3262,23 +2361,20 @@ TEST_F(GLES2FormatTest, BlitFramebufferCHROMIUM) {
EXPECT_EQ(static_cast<GLint>(18), cmd.dstY1);
EXPECT_EQ(static_cast<GLbitfield>(19), cmd.mask);
EXPECT_EQ(static_cast<GLenum>(20), cmd.filter);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, RenderbufferStorageMultisampleCHROMIUM) {
cmds::RenderbufferStorageMultisampleCHROMIUM& cmd =
*GetBufferAs<cmds::RenderbufferStorageMultisampleCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLsizei>(12),
- static_cast<GLenum>(13),
- static_cast<GLsizei>(14),
- static_cast<GLsizei>(15));
- EXPECT_EQ(
- static_cast<uint32>(
- cmds::RenderbufferStorageMultisampleCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLsizei>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLsizei>(14),
+ static_cast<GLsizei>(15));
+ EXPECT_EQ(static_cast<uint32_t>(
+ cmds::RenderbufferStorageMultisampleCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -3286,68 +2382,60 @@ TEST_F(GLES2FormatTest, RenderbufferStorageMultisampleCHROMIUM) {
EXPECT_EQ(static_cast<GLenum>(13), cmd.internalformat);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, RenderbufferStorageMultisampleEXT) {
cmds::RenderbufferStorageMultisampleEXT& cmd =
*GetBufferAs<cmds::RenderbufferStorageMultisampleEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLsizei>(12),
- static_cast<GLenum>(13),
- static_cast<GLsizei>(14),
- static_cast<GLsizei>(15));
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLsizei>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLsizei>(14),
+ static_cast<GLsizei>(15));
EXPECT_EQ(
- static_cast<uint32>(cmds::RenderbufferStorageMultisampleEXT::kCmdId),
- cmd.header.command);
+ static_cast<uint32_t>(cmds::RenderbufferStorageMultisampleEXT::kCmdId),
+ cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLsizei>(12), cmd.samples);
EXPECT_EQ(static_cast<GLenum>(13), cmd.internalformat);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, FramebufferTexture2DMultisampleEXT) {
cmds::FramebufferTexture2DMultisampleEXT& cmd =
*GetBufferAs<cmds::FramebufferTexture2DMultisampleEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLenum>(13),
- static_cast<GLuint>(14),
- static_cast<GLint>(15),
- static_cast<GLsizei>(16));
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLuint>(14),
+ static_cast<GLsizei>(15));
EXPECT_EQ(
- static_cast<uint32>(cmds::FramebufferTexture2DMultisampleEXT::kCmdId),
- cmd.header.command);
+ static_cast<uint32_t>(cmds::FramebufferTexture2DMultisampleEXT::kCmdId),
+ cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLenum>(12), cmd.attachment);
EXPECT_EQ(static_cast<GLenum>(13), cmd.textarget);
EXPECT_EQ(static_cast<GLuint>(14), cmd.texture);
- EXPECT_EQ(static_cast<GLint>(15), cmd.level);
- EXPECT_EQ(static_cast<GLsizei>(16), cmd.samples);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<GLsizei>(15), cmd.samples);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, TexStorage2DEXT) {
cmds::TexStorage2DEXT& cmd = *GetBufferAs<cmds::TexStorage2DEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLsizei>(12),
- static_cast<GLenum>(13),
- static_cast<GLsizei>(14),
- static_cast<GLsizei>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::TexStorage2DEXT::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLsizei>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLsizei>(14),
+ static_cast<GLsizei>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TexStorage2DEXT::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -3355,531 +2443,380 @@ TEST_F(GLES2FormatTest, TexStorage2DEXT) {
EXPECT_EQ(static_cast<GLenum>(13), cmd.internalFormat);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, GenQueriesEXT) {
- cmds::GenQueriesEXT& cmd = *GetBufferAs<cmds::GenQueriesEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GenQueriesEXT::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.queries_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.queries_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GenQueriesEXTImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::GenQueriesEXTImmediate& cmd =
*GetBufferAs<cmds::GenQueriesEXTImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::GenQueriesEXTImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GenQueriesEXTImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
-TEST_F(GLES2FormatTest, DeleteQueriesEXT) {
- cmds::DeleteQueriesEXT& cmd = *GetBufferAs<cmds::DeleteQueriesEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteQueriesEXT::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.queries_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.queries_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, DeleteQueriesEXTImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::DeleteQueriesEXTImmediate& cmd =
*GetBufferAs<cmds::DeleteQueriesEXTImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteQueriesEXTImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteQueriesEXTImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
TEST_F(GLES2FormatTest, BeginQueryEXT) {
cmds::BeginQueryEXT& cmd = *GetBufferAs<cmds::BeginQueryEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLuint>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::BeginQueryEXT::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLuint>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BeginQueryEXT::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLuint>(12), cmd.id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.sync_data_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.sync_data_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.sync_data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.sync_data_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, EndQueryEXT) {
cmds::EndQueryEXT& cmd = *GetBufferAs<cmds::EndQueryEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::EndQueryEXT::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::EndQueryEXT::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLuint>(12), cmd.submit_count);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, InsertEventMarkerEXT) {
cmds::InsertEventMarkerEXT& cmd = *GetBufferAs<cmds::InsertEventMarkerEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::InsertEventMarkerEXT::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::InsertEventMarkerEXT::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, PushGroupMarkerEXT) {
cmds::PushGroupMarkerEXT& cmd = *GetBufferAs<cmds::PushGroupMarkerEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::PushGroupMarkerEXT::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::PushGroupMarkerEXT::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, PopGroupMarkerEXT) {
cmds::PopGroupMarkerEXT& cmd = *GetBufferAs<cmds::PopGroupMarkerEXT>();
- void* next_cmd = cmd.Set(
- &cmd);
- EXPECT_EQ(static_cast<uint32>(cmds::PopGroupMarkerEXT::kCmdId),
+ void* next_cmd = cmd.Set(&cmd);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::PopGroupMarkerEXT::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, GenVertexArraysOES) {
- cmds::GenVertexArraysOES& cmd = *GetBufferAs<cmds::GenVertexArraysOES>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::GenVertexArraysOES::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.arrays_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.arrays_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GenVertexArraysOESImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::GenVertexArraysOESImmediate& cmd =
*GetBufferAs<cmds::GenVertexArraysOESImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::GenVertexArraysOESImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GenVertexArraysOESImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
-TEST_F(GLES2FormatTest, DeleteVertexArraysOES) {
- cmds::DeleteVertexArraysOES& cmd =
- *GetBufferAs<cmds::DeleteVertexArraysOES>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteVertexArraysOES::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.n);
- EXPECT_EQ(static_cast<uint32>(12), cmd.arrays_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.arrays_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, DeleteVertexArraysOESImmediate) {
- static GLuint ids[] = { 12, 23, 34, };
+ static GLuint ids[] = {
+ 12, 23, 34,
+ };
cmds::DeleteVertexArraysOESImmediate& cmd =
*GetBufferAs<cmds::DeleteVertexArraysOESImmediate>();
- void* next_cmd = cmd.Set(
- &cmd, static_cast<GLsizei>(arraysize(ids)), ids);
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteVertexArraysOESImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(arraysize(ids)), ids);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteVertexArraysOESImmediate::kCmdId),
cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(cmd.n * 4u),
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(cmd.n * 4u),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(arraysize(ids)), cmd.n);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
+ next_cmd,
+ sizeof(cmd) + RoundSizeToMultipleOfEntries(arraysize(ids) * 4u));
// TODO(gman): Check that ids were inserted;
}
TEST_F(GLES2FormatTest, IsVertexArrayOES) {
cmds::IsVertexArrayOES& cmd = *GetBufferAs<cmds::IsVertexArrayOES>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::IsVertexArrayOES::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::IsVertexArrayOES::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.array);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BindVertexArrayOES) {
cmds::BindVertexArrayOES& cmd = *GetBufferAs<cmds::BindVertexArrayOES>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::BindVertexArrayOES::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BindVertexArrayOES::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.array);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, SwapBuffers) {
cmds::SwapBuffers& cmd = *GetBufferAs<cmds::SwapBuffers>();
- void* next_cmd = cmd.Set(
- &cmd);
- EXPECT_EQ(static_cast<uint32>(cmds::SwapBuffers::kCmdId),
+ void* next_cmd = cmd.Set(&cmd);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::SwapBuffers::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetMaxValueInBufferCHROMIUM) {
cmds::GetMaxValueInBufferCHROMIUM& cmd =
*GetBufferAs<cmds::GetMaxValueInBufferCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLsizei>(12),
- static_cast<GLenum>(13),
- static_cast<GLuint>(14),
- static_cast<uint32>(15),
- static_cast<uint32>(16));
- EXPECT_EQ(static_cast<uint32>(cmds::GetMaxValueInBufferCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLsizei>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLuint>(14),
+ static_cast<uint32_t>(15),
+ static_cast<uint32_t>(16));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetMaxValueInBufferCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.buffer_id);
EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
EXPECT_EQ(static_cast<GLenum>(13), cmd.type);
EXPECT_EQ(static_cast<GLuint>(14), cmd.offset);
- EXPECT_EQ(static_cast<uint32>(15), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(16), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(15), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(16), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GenSharedIdsCHROMIUM) {
cmds::GenSharedIdsCHROMIUM& cmd = *GetBufferAs<cmds::GenSharedIdsCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12),
- static_cast<GLsizei>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::GenSharedIdsCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLuint>(12),
+ static_cast<GLsizei>(13),
+ static_cast<uint32_t>(14),
+ static_cast<uint32_t>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GenSharedIdsCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.namespace_id);
EXPECT_EQ(static_cast<GLuint>(12), cmd.id_offset);
EXPECT_EQ(static_cast<GLsizei>(13), cmd.n);
- EXPECT_EQ(static_cast<uint32>(14), cmd.ids_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.ids_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.ids_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(15), cmd.ids_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DeleteSharedIdsCHROMIUM) {
cmds::DeleteSharedIdsCHROMIUM& cmd =
*GetBufferAs<cmds::DeleteSharedIdsCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::DeleteSharedIdsCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLsizei>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DeleteSharedIdsCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.namespace_id);
EXPECT_EQ(static_cast<GLsizei>(12), cmd.n);
- EXPECT_EQ(static_cast<uint32>(13), cmd.ids_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.ids_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.ids_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.ids_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, RegisterSharedIdsCHROMIUM) {
cmds::RegisterSharedIdsCHROMIUM& cmd =
*GetBufferAs<cmds::RegisterSharedIdsCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::RegisterSharedIdsCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLsizei>(12),
+ static_cast<uint32_t>(13),
+ static_cast<uint32_t>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::RegisterSharedIdsCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.namespace_id);
EXPECT_EQ(static_cast<GLsizei>(12), cmd.n);
- EXPECT_EQ(static_cast<uint32>(13), cmd.ids_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.ids_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.ids_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.ids_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, EnableFeatureCHROMIUM) {
cmds::EnableFeatureCHROMIUM& cmd =
*GetBufferAs<cmds::EnableFeatureCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::EnableFeatureCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<uint32_t>(12),
+ static_cast<uint32_t>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::EnableFeatureCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.result_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.result_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ResizeCHROMIUM) {
cmds::ResizeCHROMIUM& cmd = *GetBufferAs<cmds::ResizeCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12),
- static_cast<GLfloat>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::ResizeCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLuint>(12),
+ static_cast<GLfloat>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ResizeCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.width);
EXPECT_EQ(static_cast<GLuint>(12), cmd.height);
EXPECT_EQ(static_cast<GLfloat>(13), cmd.scale_factor);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetRequestableExtensionsCHROMIUM) {
cmds::GetRequestableExtensionsCHROMIUM& cmd =
*GetBufferAs<cmds::GetRequestableExtensionsCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<uint32>(11));
+ void* next_cmd = cmd.Set(&cmd, static_cast<uint32_t>(11));
EXPECT_EQ(
- static_cast<uint32>(cmds::GetRequestableExtensionsCHROMIUM::kCmdId),
- cmd.header.command);
+ static_cast<uint32_t>(cmds::GetRequestableExtensionsCHROMIUM::kCmdId),
+ cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<uint32>(11), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(11), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, RequestExtensionCHROMIUM) {
cmds::RequestExtensionCHROMIUM& cmd =
*GetBufferAs<cmds::RequestExtensionCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<uint32>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::RequestExtensionCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<uint32_t>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::RequestExtensionCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<uint32>(11), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(11), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetMultipleIntegervCHROMIUM) {
cmds::GetMultipleIntegervCHROMIUM& cmd =
*GetBufferAs<cmds::GetMultipleIntegervCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<uint32>(11),
- static_cast<uint32>(12),
- static_cast<GLuint>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15),
- static_cast<GLsizeiptr>(16));
- EXPECT_EQ(static_cast<uint32>(cmds::GetMultipleIntegervCHROMIUM::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<uint32>(11), cmd.pnames_shm_id);
- EXPECT_EQ(static_cast<uint32>(12), cmd.pnames_shm_offset);
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<uint32_t>(11),
+ static_cast<uint32_t>(12),
+ static_cast<GLuint>(13),
+ static_cast<uint32_t>(14),
+ static_cast<uint32_t>(15),
+ static_cast<GLsizeiptr>(16));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetMultipleIntegervCHROMIUM::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<uint32_t>(11), cmd.pnames_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.pnames_shm_offset);
EXPECT_EQ(static_cast<GLuint>(13), cmd.count);
- EXPECT_EQ(static_cast<uint32>(14), cmd.results_shm_id);
- EXPECT_EQ(static_cast<uint32>(15), cmd.results_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(14), cmd.results_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(15), cmd.results_shm_offset);
EXPECT_EQ(static_cast<GLsizeiptr>(16), cmd.size);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetProgramInfoCHROMIUM) {
cmds::GetProgramInfoCHROMIUM& cmd =
*GetBufferAs<cmds::GetProgramInfoCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::GetProgramInfoCHROMIUM::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetProgramInfoCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, CreateStreamTextureCHROMIUM) {
- cmds::CreateStreamTextureCHROMIUM& cmd =
- *GetBufferAs<cmds::CreateStreamTextureCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::CreateStreamTextureCHROMIUM::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.client_id);
- EXPECT_EQ(static_cast<uint32>(12), cmd.result_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.result_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, DestroyStreamTextureCHROMIUM) {
- cmds::DestroyStreamTextureCHROMIUM& cmd =
- *GetBufferAs<cmds::DestroyStreamTextureCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::DestroyStreamTextureCHROMIUM::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.texture);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, GetTranslatedShaderSourceANGLE) {
cmds::GetTranslatedShaderSourceANGLE& cmd =
*GetBufferAs<cmds::GetTranslatedShaderSourceANGLE>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<uint32>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::GetTranslatedShaderSourceANGLE::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<uint32_t>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::GetTranslatedShaderSourceANGLE::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.shader);
- EXPECT_EQ(static_cast<uint32>(12), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(12), cmd.bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, PostSubBufferCHROMIUM) {
cmds::PostSubBufferCHROMIUM& cmd =
*GetBufferAs<cmds::PostSubBufferCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLint>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::PostSubBufferCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::PostSubBufferCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLint>(11), cmd.x);
EXPECT_EQ(static_cast<GLint>(12), cmd.y);
EXPECT_EQ(static_cast<GLint>(13), cmd.width);
EXPECT_EQ(static_cast<GLint>(14), cmd.height);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, TexImageIOSurface2DCHROMIUM) {
cmds::TexImageIOSurface2DCHROMIUM& cmd =
*GetBufferAs<cmds::TexImageIOSurface2DCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLsizei>(12),
- static_cast<GLsizei>(13),
- static_cast<GLuint>(14),
- static_cast<GLuint>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::TexImageIOSurface2DCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLsizei>(12),
+ static_cast<GLsizei>(13),
+ static_cast<GLuint>(14),
+ static_cast<GLuint>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TexImageIOSurface2DCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -3887,21 +2824,19 @@ TEST_F(GLES2FormatTest, TexImageIOSurface2DCHROMIUM) {
EXPECT_EQ(static_cast<GLsizei>(13), cmd.height);
EXPECT_EQ(static_cast<GLuint>(14), cmd.ioSurfaceId);
EXPECT_EQ(static_cast<GLuint>(15), cmd.plane);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, CopyTextureCHROMIUM) {
cmds::CopyTextureCHROMIUM& cmd = *GetBufferAs<cmds::CopyTextureCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12),
- static_cast<GLenum>(13),
- static_cast<GLint>(14),
- static_cast<GLint>(15),
- static_cast<GLenum>(16));
- EXPECT_EQ(static_cast<uint32>(cmds::CopyTextureCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLint>(14),
+ static_cast<GLint>(15),
+ static_cast<GLenum>(16));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::CopyTextureCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -3910,41 +2845,37 @@ TEST_F(GLES2FormatTest, CopyTextureCHROMIUM) {
EXPECT_EQ(static_cast<GLint>(14), cmd.level);
EXPECT_EQ(static_cast<GLint>(15), cmd.internalformat);
EXPECT_EQ(static_cast<GLenum>(16), cmd.dest_type);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DrawArraysInstancedANGLE) {
cmds::DrawArraysInstancedANGLE& cmd =
*GetBufferAs<cmds::DrawArraysInstancedANGLE>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLsizei>(13),
- static_cast<GLsizei>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::DrawArraysInstancedANGLE::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLsizei>(13),
+ static_cast<GLsizei>(14));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DrawArraysInstancedANGLE::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
EXPECT_EQ(static_cast<GLint>(12), cmd.first);
EXPECT_EQ(static_cast<GLsizei>(13), cmd.count);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.primcount);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DrawElementsInstancedANGLE) {
cmds::DrawElementsInstancedANGLE& cmd =
*GetBufferAs<cmds::DrawElementsInstancedANGLE>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLsizei>(12),
- static_cast<GLenum>(13),
- static_cast<GLuint>(14),
- static_cast<GLsizei>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::DrawElementsInstancedANGLE::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLsizei>(12),
+ static_cast<GLenum>(13),
+ static_cast<GLuint>(14),
+ static_cast<GLsizei>(15));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DrawElementsInstancedANGLE::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
@@ -3952,348 +2883,352 @@ TEST_F(GLES2FormatTest, DrawElementsInstancedANGLE) {
EXPECT_EQ(static_cast<GLenum>(13), cmd.type);
EXPECT_EQ(static_cast<GLuint>(14), cmd.index_offset);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.primcount);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, VertexAttribDivisorANGLE) {
cmds::VertexAttribDivisorANGLE& cmd =
*GetBufferAs<cmds::VertexAttribDivisorANGLE>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLuint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::VertexAttribDivisorANGLE::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::VertexAttribDivisorANGLE::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.index);
EXPECT_EQ(static_cast<GLuint>(12), cmd.divisor);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
// TODO(gman): Write test for GenMailboxCHROMIUM
-TEST_F(GLES2FormatTest, ProduceTextureCHROMIUM) {
- cmds::ProduceTextureCHROMIUM& cmd =
- *GetBufferAs<cmds::ProduceTextureCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::ProduceTextureCHROMIUM::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
- EXPECT_EQ(static_cast<uint32>(12), cmd.mailbox_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.mailbox_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
TEST_F(GLES2FormatTest, ProduceTextureCHROMIUMImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLbyte data[] = {
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 0),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 1),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 2),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 3),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 4),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 5),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 6),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 7),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 8),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 9),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 10),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 11),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 12),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 13),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 14),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 15),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 16),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 17),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 18),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 19),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 20),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 21),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 22),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 23),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 24),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 25),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 26),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 27),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 28),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 29),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 30),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 31),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 32),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 33),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 34),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 35),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 36),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 37),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 38),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 39),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 40),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 41),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 42),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 43),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 44),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 45),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 46),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 47),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 48),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 49),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 50),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 51),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 52),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 53),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 54),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 55),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 56),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 57),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 58),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 59),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 60),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 61),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 62),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 63),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 6),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 7),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 8),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 9),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 10),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 11),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 12),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 13),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 14),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 15),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 16),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 17),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 18),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 19),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 20),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 21),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 22),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 23),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 24),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 25),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 26),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 27),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 28),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 29),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 30),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 31),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 32),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 33),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 34),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 35),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 36),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 37),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 38),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 39),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 40),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 41),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 42),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 43),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 44),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 45),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 46),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 47),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 48),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 49),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 50),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 51),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 52),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 53),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 54),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 55),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 56),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 57),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 58),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 59),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 60),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 61),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 62),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 63),
};
cmds::ProduceTextureCHROMIUMImmediate& cmd =
*GetBufferAs<cmds::ProduceTextureCHROMIUMImmediate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::ProduceTextureCHROMIUMImmediate::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11), data);
+ EXPECT_EQ(
+ static_cast<uint32_t>(cmds::ProduceTextureCHROMIUMImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
-TEST_F(GLES2FormatTest, ConsumeTextureCHROMIUM) {
- cmds::ConsumeTextureCHROMIUM& cmd =
- *GetBufferAs<cmds::ConsumeTextureCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::ConsumeTextureCHROMIUM::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
- EXPECT_EQ(static_cast<uint32>(12), cmd.mailbox_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.mailbox_shm_offset);
+TEST_F(GLES2FormatTest, ProduceTextureDirectCHROMIUMImmediate) {
+ const int kSomeBaseValueToTestWith = 51;
+ static GLbyte data[] = {
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 6),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 7),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 8),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 9),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 10),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 11),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 12),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 13),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 14),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 15),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 16),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 17),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 18),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 19),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 20),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 21),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 22),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 23),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 24),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 25),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 26),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 27),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 28),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 29),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 30),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 31),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 32),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 33),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 34),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 35),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 36),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 37),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 38),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 39),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 40),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 41),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 42),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 43),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 44),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 45),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 46),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 47),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 48),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 49),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 50),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 51),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 52),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 53),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 54),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 55),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 56),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 57),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 58),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 59),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 60),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 61),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 62),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 63),
+ };
+ cmds::ProduceTextureDirectCHROMIUMImmediate& cmd =
+ *GetBufferAs<cmds::ProduceTextureDirectCHROMIUMImmediate>();
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLuint>(11), static_cast<GLenum>(12), data);
+ EXPECT_EQ(static_cast<uint32_t>(
+ cmds::ProduceTextureDirectCHROMIUMImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
+ cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLuint>(11), cmd.texture);
+ EXPECT_EQ(static_cast<GLenum>(12), cmd.target);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
+ // TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, ConsumeTextureCHROMIUMImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLbyte data[] = {
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 0),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 1),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 2),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 3),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 4),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 5),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 6),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 7),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 8),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 9),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 10),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 11),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 12),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 13),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 14),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 15),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 16),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 17),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 18),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 19),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 20),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 21),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 22),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 23),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 24),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 25),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 26),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 27),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 28),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 29),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 30),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 31),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 32),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 33),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 34),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 35),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 36),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 37),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 38),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 39),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 40),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 41),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 42),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 43),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 44),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 45),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 46),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 47),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 48),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 49),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 50),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 51),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 52),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 53),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 54),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 55),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 56),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 57),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 58),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 59),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 60),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 61),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 62),
- static_cast<GLbyte>(kSomeBaseValueToTestWith + 63),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 2),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 3),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 4),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 5),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 6),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 7),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 8),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 9),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 10),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 11),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 12),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 13),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 14),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 15),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 16),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 17),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 18),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 19),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 20),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 21),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 22),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 23),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 24),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 25),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 26),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 27),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 28),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 29),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 30),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 31),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 32),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 33),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 34),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 35),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 36),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 37),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 38),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 39),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 40),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 41),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 42),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 43),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 44),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 45),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 46),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 47),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 48),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 49),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 50),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 51),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 52),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 53),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 54),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 55),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 56),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 57),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 58),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 59),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 60),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 61),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 62),
+ static_cast<GLbyte>(kSomeBaseValueToTestWith + 63),
};
cmds::ConsumeTextureCHROMIUMImmediate& cmd =
*GetBufferAs<cmds::ConsumeTextureCHROMIUMImmediate>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::ConsumeTextureCHROMIUMImmediate::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11), data);
+ EXPECT_EQ(
+ static_cast<uint32_t>(cmds::ConsumeTextureCHROMIUMImmediate::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)),
cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
-TEST_F(GLES2FormatTest, BindUniformLocationCHROMIUM) {
- cmds::BindUniformLocationCHROMIUM& cmd =
- *GetBufferAs<cmds::BindUniformLocationCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLint>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14),
- static_cast<uint32>(15));
- EXPECT_EQ(static_cast<uint32>(cmds::BindUniformLocationCHROMIUM::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
- EXPECT_EQ(static_cast<GLint>(12), cmd.location);
- EXPECT_EQ(static_cast<uint32>(13), cmd.name_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.name_shm_offset);
- EXPECT_EQ(static_cast<uint32>(15), cmd.data_size);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
+// TODO(gman): Write test for CreateAndConsumeTextureCHROMIUMImmediate
TEST_F(GLES2FormatTest, BindUniformLocationCHROMIUMBucket) {
cmds::BindUniformLocationCHROMIUMBucket& cmd =
*GetBufferAs<cmds::BindUniformLocationCHROMIUMBucket>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11),
- static_cast<GLint>(12),
- static_cast<uint32>(13));
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLuint>(11),
+ static_cast<GLint>(12),
+ static_cast<uint32_t>(13));
EXPECT_EQ(
- static_cast<uint32>(cmds::BindUniformLocationCHROMIUMBucket::kCmdId),
- cmd.header.command);
+ static_cast<uint32_t>(cmds::BindUniformLocationCHROMIUMBucket::kCmdId),
+ cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.program);
EXPECT_EQ(static_cast<GLint>(12), cmd.location);
- EXPECT_EQ(static_cast<uint32>(13), cmd.name_bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(13), cmd.name_bucket_id);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, BindTexImage2DCHROMIUM) {
cmds::BindTexImage2DCHROMIUM& cmd =
*GetBufferAs<cmds::BindTexImage2DCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::BindTexImage2DCHROMIUM::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::BindTexImage2DCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLint>(12), cmd.imageId);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, ReleaseTexImage2DCHROMIUM) {
cmds::ReleaseTexImage2DCHROMIUM& cmd =
*GetBufferAs<cmds::ReleaseTexImage2DCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::ReleaseTexImage2DCHROMIUM::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ReleaseTexImage2DCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
EXPECT_EQ(static_cast<GLint>(12), cmd.imageId);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, TraceBeginCHROMIUM) {
cmds::TraceBeginCHROMIUM& cmd = *GetBufferAs<cmds::TraceBeginCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::TraceBeginCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TraceBeginCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.bucket_id);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, TraceEndCHROMIUM) {
cmds::TraceEndCHROMIUM& cmd = *GetBufferAs<cmds::TraceEndCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd);
- EXPECT_EQ(static_cast<uint32>(cmds::TraceEndCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::TraceEndCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, AsyncTexSubImage2DCHROMIUM) {
cmds::AsyncTexSubImage2DCHROMIUM& cmd =
*GetBufferAs<cmds::AsyncTexSubImage2DCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLint>(14),
- static_cast<GLsizei>(15),
- static_cast<GLsizei>(16),
- static_cast<GLenum>(17),
- static_cast<GLenum>(18),
- static_cast<uint32>(19),
- static_cast<uint32>(20));
- EXPECT_EQ(static_cast<uint32>(cmds::AsyncTexSubImage2DCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLint>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLsizei>(16),
+ static_cast<GLenum>(17),
+ static_cast<GLenum>(18),
+ static_cast<uint32_t>(19),
+ static_cast<uint32_t>(20),
+ static_cast<uint32_t>(21),
+ static_cast<uint32_t>(22),
+ static_cast<uint32_t>(23));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::AsyncTexSubImage2DCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -4304,28 +3239,31 @@ TEST_F(GLES2FormatTest, AsyncTexSubImage2DCHROMIUM) {
EXPECT_EQ(static_cast<GLsizei>(16), cmd.height);
EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
EXPECT_EQ(static_cast<GLenum>(18), cmd.type);
- EXPECT_EQ(static_cast<uint32>(19), cmd.data_shm_id);
- EXPECT_EQ(static_cast<uint32>(20), cmd.data_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<uint32_t>(19), cmd.data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(20), cmd.data_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(21), cmd.async_upload_token);
+ EXPECT_EQ(static_cast<uint32_t>(22), cmd.sync_data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(23), cmd.sync_data_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, AsyncTexImage2DCHROMIUM) {
cmds::AsyncTexImage2DCHROMIUM& cmd =
*GetBufferAs<cmds::AsyncTexImage2DCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLint>(12),
- static_cast<GLint>(13),
- static_cast<GLsizei>(14),
- static_cast<GLsizei>(15),
- static_cast<GLint>(16),
- static_cast<GLenum>(17),
- static_cast<GLenum>(18),
- static_cast<uint32>(19),
- static_cast<uint32>(20));
- EXPECT_EQ(static_cast<uint32>(cmds::AsyncTexImage2DCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLenum>(11),
+ static_cast<GLint>(12),
+ static_cast<GLint>(13),
+ static_cast<GLsizei>(14),
+ static_cast<GLsizei>(15),
+ static_cast<GLenum>(16),
+ static_cast<GLenum>(17),
+ static_cast<uint32_t>(18),
+ static_cast<uint32_t>(19),
+ static_cast<uint32_t>(20),
+ static_cast<uint32_t>(21),
+ static_cast<uint32_t>(22));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::AsyncTexImage2DCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
@@ -4333,158 +3271,144 @@ TEST_F(GLES2FormatTest, AsyncTexImage2DCHROMIUM) {
EXPECT_EQ(static_cast<GLint>(13), cmd.internalformat);
EXPECT_EQ(static_cast<GLsizei>(14), cmd.width);
EXPECT_EQ(static_cast<GLsizei>(15), cmd.height);
- EXPECT_EQ(static_cast<GLint>(16), cmd.border);
- EXPECT_EQ(static_cast<GLenum>(17), cmd.format);
- EXPECT_EQ(static_cast<GLenum>(18), cmd.type);
- EXPECT_EQ(static_cast<uint32>(19), cmd.pixels_shm_id);
- EXPECT_EQ(static_cast<uint32>(20), cmd.pixels_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ EXPECT_EQ(static_cast<GLenum>(16), cmd.format);
+ EXPECT_EQ(static_cast<GLenum>(17), cmd.type);
+ EXPECT_EQ(static_cast<uint32_t>(18), cmd.pixels_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(19), cmd.pixels_shm_offset);
+ EXPECT_EQ(static_cast<uint32_t>(20), cmd.async_upload_token);
+ EXPECT_EQ(static_cast<uint32_t>(21), cmd.sync_data_shm_id);
+ EXPECT_EQ(static_cast<uint32_t>(22), cmd.sync_data_shm_offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, WaitAsyncTexImage2DCHROMIUM) {
cmds::WaitAsyncTexImage2DCHROMIUM& cmd =
*GetBufferAs<cmds::WaitAsyncTexImage2DCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::WaitAsyncTexImage2DCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::WaitAsyncTexImage2DCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
-TEST_F(GLES2FormatTest, DiscardFramebufferEXT) {
- cmds::DiscardFramebufferEXT& cmd =
- *GetBufferAs<cmds::DiscardFramebufferEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLsizei>(12),
- static_cast<uint32>(13),
- static_cast<uint32>(14));
- EXPECT_EQ(static_cast<uint32>(cmds::DiscardFramebufferEXT::kCmdId),
+TEST_F(GLES2FormatTest, WaitAllAsyncTexImage2DCHROMIUM) {
+ cmds::WaitAllAsyncTexImage2DCHROMIUM& cmd =
+ *GetBufferAs<cmds::WaitAllAsyncTexImage2DCHROMIUM>();
+ void* next_cmd = cmd.Set(&cmd);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::WaitAllAsyncTexImage2DCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
- EXPECT_EQ(static_cast<GLsizei>(12), cmd.count);
- EXPECT_EQ(static_cast<uint32>(13), cmd.attachments_shm_id);
- EXPECT_EQ(static_cast<uint32>(14), cmd.attachments_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DiscardFramebufferEXTImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLenum data[] = {
- static_cast<GLenum>(kSomeBaseValueToTestWith + 0),
- static_cast<GLenum>(kSomeBaseValueToTestWith + 1),
+ static_cast<GLenum>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLenum>(kSomeBaseValueToTestWith + 1),
};
cmds::DiscardFramebufferEXTImmediate& cmd =
*GetBufferAs<cmds::DiscardFramebufferEXTImmediate>();
const GLsizei kNumElements = 2;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLenum) * 1;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(1),
- static_cast<GLsizei>(2),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::DiscardFramebufferEXTImmediate::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(1), static_cast<GLsizei>(2), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DiscardFramebufferEXTImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(1), cmd.target);
EXPECT_EQ(static_cast<GLsizei>(2), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, LoseContextCHROMIUM) {
cmds::LoseContextCHROMIUM& cmd = *GetBufferAs<cmds::LoseContextCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLenum>(11),
- static_cast<GLenum>(12));
- EXPECT_EQ(static_cast<uint32>(cmds::LoseContextCHROMIUM::kCmdId),
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLenum>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::LoseContextCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLenum>(11), cmd.current);
EXPECT_EQ(static_cast<GLenum>(12), cmd.other);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
// TODO(gman): Write test for InsertSyncPointCHROMIUM
TEST_F(GLES2FormatTest, WaitSyncPointCHROMIUM) {
cmds::WaitSyncPointCHROMIUM& cmd =
*GetBufferAs<cmds::WaitSyncPointCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLuint>(11));
- EXPECT_EQ(static_cast<uint32>(cmds::WaitSyncPointCHROMIUM::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLuint>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::WaitSyncPointCHROMIUM::kCmdId),
cmd.header.command);
EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLuint>(11), cmd.sync_point);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
-}
-
-TEST_F(GLES2FormatTest, DrawBuffersEXT) {
- cmds::DrawBuffersEXT& cmd = *GetBufferAs<cmds::DrawBuffersEXT>();
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(11),
- static_cast<uint32>(12),
- static_cast<uint32>(13));
- EXPECT_EQ(static_cast<uint32>(cmds::DrawBuffersEXT::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- EXPECT_EQ(static_cast<GLsizei>(11), cmd.count);
- EXPECT_EQ(static_cast<uint32>(12), cmd.bufs_shm_id);
- EXPECT_EQ(static_cast<uint32>(13), cmd.bufs_shm_offset);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
TEST_F(GLES2FormatTest, DrawBuffersEXTImmediate) {
const int kSomeBaseValueToTestWith = 51;
static GLenum data[] = {
- static_cast<GLenum>(kSomeBaseValueToTestWith + 0),
+ static_cast<GLenum>(kSomeBaseValueToTestWith + 0),
};
cmds::DrawBuffersEXTImmediate& cmd =
*GetBufferAs<cmds::DrawBuffersEXTImmediate>();
const GLsizei kNumElements = 1;
const size_t kExpectedCmdSize =
sizeof(cmd) + kNumElements * sizeof(GLenum) * 1;
- void* next_cmd = cmd.Set(
- &cmd,
- static_cast<GLsizei>(1),
- data);
- EXPECT_EQ(static_cast<uint32>(cmds::DrawBuffersEXTImmediate::kCmdId),
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLsizei>(1), data);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DrawBuffersEXTImmediate::kCmdId),
cmd.header.command);
EXPECT_EQ(kExpectedCmdSize, cmd.header.size * 4u);
EXPECT_EQ(static_cast<GLsizei>(1), cmd.count);
CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd) +
- RoundSizeToMultipleOfEntries(sizeof(data)));
+ next_cmd, sizeof(cmd) + RoundSizeToMultipleOfEntries(sizeof(data)));
// TODO(gman): Check that data was inserted;
}
TEST_F(GLES2FormatTest, DiscardBackbufferCHROMIUM) {
cmds::DiscardBackbufferCHROMIUM& cmd =
*GetBufferAs<cmds::DiscardBackbufferCHROMIUM>();
- void* next_cmd = cmd.Set(
- &cmd);
- EXPECT_EQ(static_cast<uint32>(cmds::DiscardBackbufferCHROMIUM::kCmdId),
- cmd.header.command);
- EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
- CheckBytesWrittenMatchesExpectedSize(
- next_cmd, sizeof(cmd));
+ void* next_cmd = cmd.Set(&cmd);
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DiscardBackbufferCHROMIUM::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
+TEST_F(GLES2FormatTest, ScheduleOverlayPlaneCHROMIUM) {
+ cmds::ScheduleOverlayPlaneCHROMIUM& cmd =
+ *GetBufferAs<cmds::ScheduleOverlayPlaneCHROMIUM>();
+ void* next_cmd = cmd.Set(&cmd,
+ static_cast<GLint>(11),
+ static_cast<GLenum>(12),
+ static_cast<GLuint>(13),
+ static_cast<GLint>(14),
+ static_cast<GLint>(15),
+ static_cast<GLint>(16),
+ static_cast<GLint>(17),
+ static_cast<GLfloat>(18),
+ static_cast<GLfloat>(19),
+ static_cast<GLfloat>(20),
+ static_cast<GLfloat>(21));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ScheduleOverlayPlaneCHROMIUM::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLint>(11), cmd.plane_z_order);
+ EXPECT_EQ(static_cast<GLenum>(12), cmd.plane_transform);
+ EXPECT_EQ(static_cast<GLuint>(13), cmd.overlay_texture_id);
+ EXPECT_EQ(static_cast<GLint>(14), cmd.bounds_x);
+ EXPECT_EQ(static_cast<GLint>(15), cmd.bounds_y);
+ EXPECT_EQ(static_cast<GLint>(16), cmd.bounds_width);
+ EXPECT_EQ(static_cast<GLint>(17), cmd.bounds_height);
+ EXPECT_EQ(static_cast<GLfloat>(18), cmd.uv_x);
+ EXPECT_EQ(static_cast<GLfloat>(19), cmd.uv_y);
+ EXPECT_EQ(static_cast<GLfloat>(20), cmd.uv_width);
+ EXPECT_EQ(static_cast<GLfloat>(21), cmd.uv_height);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
#endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_FORMAT_TEST_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/chromium/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
index e26e8d22d91..0d2b9b77024 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -1,258 +1,223 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_IDS_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_IDS_AUTOGEN_H_
-#define GLES2_COMMAND_LIST(OP) \
- OP(ActiveTexture) /* 256 */ \
- OP(AttachShader) /* 257 */ \
- OP(BindAttribLocation) /* 258 */ \
- OP(BindAttribLocationBucket) /* 259 */ \
- OP(BindBuffer) /* 260 */ \
- OP(BindFramebuffer) /* 261 */ \
- OP(BindRenderbuffer) /* 262 */ \
- OP(BindTexture) /* 263 */ \
- OP(BlendColor) /* 264 */ \
- OP(BlendEquation) /* 265 */ \
- OP(BlendEquationSeparate) /* 266 */ \
- OP(BlendFunc) /* 267 */ \
- OP(BlendFuncSeparate) /* 268 */ \
- OP(BufferData) /* 269 */ \
- OP(BufferSubData) /* 270 */ \
- OP(CheckFramebufferStatus) /* 271 */ \
- OP(Clear) /* 272 */ \
- OP(ClearColor) /* 273 */ \
- OP(ClearDepthf) /* 274 */ \
- OP(ClearStencil) /* 275 */ \
- OP(ColorMask) /* 276 */ \
- OP(CompileShader) /* 277 */ \
- OP(CompressedTexImage2D) /* 278 */ \
- OP(CompressedTexImage2DBucket) /* 279 */ \
- OP(CompressedTexSubImage2D) /* 280 */ \
- OP(CompressedTexSubImage2DBucket) /* 281 */ \
- OP(CopyTexImage2D) /* 282 */ \
- OP(CopyTexSubImage2D) /* 283 */ \
- OP(CreateProgram) /* 284 */ \
- OP(CreateShader) /* 285 */ \
- OP(CullFace) /* 286 */ \
- OP(DeleteBuffers) /* 287 */ \
- OP(DeleteBuffersImmediate) /* 288 */ \
- OP(DeleteFramebuffers) /* 289 */ \
- OP(DeleteFramebuffersImmediate) /* 290 */ \
- OP(DeleteProgram) /* 291 */ \
- OP(DeleteRenderbuffers) /* 292 */ \
- OP(DeleteRenderbuffersImmediate) /* 293 */ \
- OP(DeleteShader) /* 294 */ \
- OP(DeleteTextures) /* 295 */ \
- OP(DeleteTexturesImmediate) /* 296 */ \
- OP(DepthFunc) /* 297 */ \
- OP(DepthMask) /* 298 */ \
- OP(DepthRangef) /* 299 */ \
- OP(DetachShader) /* 300 */ \
- OP(Disable) /* 301 */ \
- OP(DisableVertexAttribArray) /* 302 */ \
- OP(DrawArrays) /* 303 */ \
- OP(DrawElements) /* 304 */ \
- OP(Enable) /* 305 */ \
- OP(EnableVertexAttribArray) /* 306 */ \
- OP(Finish) /* 307 */ \
- OP(Flush) /* 308 */ \
- OP(FramebufferRenderbuffer) /* 309 */ \
- OP(FramebufferTexture2D) /* 310 */ \
- OP(FrontFace) /* 311 */ \
- OP(GenBuffers) /* 312 */ \
- OP(GenBuffersImmediate) /* 313 */ \
- OP(GenerateMipmap) /* 314 */ \
- OP(GenFramebuffers) /* 315 */ \
- OP(GenFramebuffersImmediate) /* 316 */ \
- OP(GenRenderbuffers) /* 317 */ \
- OP(GenRenderbuffersImmediate) /* 318 */ \
- OP(GenTextures) /* 319 */ \
- OP(GenTexturesImmediate) /* 320 */ \
- OP(GetActiveAttrib) /* 321 */ \
- OP(GetActiveUniform) /* 322 */ \
- OP(GetAttachedShaders) /* 323 */ \
- OP(GetAttribLocation) /* 324 */ \
- OP(GetAttribLocationBucket) /* 325 */ \
- OP(GetBooleanv) /* 326 */ \
- OP(GetBufferParameteriv) /* 327 */ \
- OP(GetError) /* 328 */ \
- OP(GetFloatv) /* 329 */ \
- OP(GetFramebufferAttachmentParameteriv) /* 330 */ \
- OP(GetIntegerv) /* 331 */ \
- OP(GetProgramiv) /* 332 */ \
- OP(GetProgramInfoLog) /* 333 */ \
- OP(GetRenderbufferParameteriv) /* 334 */ \
- OP(GetShaderiv) /* 335 */ \
- OP(GetShaderInfoLog) /* 336 */ \
- OP(GetShaderPrecisionFormat) /* 337 */ \
- OP(GetShaderSource) /* 338 */ \
- OP(GetString) /* 339 */ \
- OP(GetTexParameterfv) /* 340 */ \
- OP(GetTexParameteriv) /* 341 */ \
- OP(GetUniformfv) /* 342 */ \
- OP(GetUniformiv) /* 343 */ \
- OP(GetUniformLocation) /* 344 */ \
- OP(GetUniformLocationBucket) /* 345 */ \
- OP(GetVertexAttribfv) /* 346 */ \
- OP(GetVertexAttribiv) /* 347 */ \
- OP(GetVertexAttribPointerv) /* 348 */ \
- OP(Hint) /* 349 */ \
- OP(IsBuffer) /* 350 */ \
- OP(IsEnabled) /* 351 */ \
- OP(IsFramebuffer) /* 352 */ \
- OP(IsProgram) /* 353 */ \
- OP(IsRenderbuffer) /* 354 */ \
- OP(IsShader) /* 355 */ \
- OP(IsTexture) /* 356 */ \
- OP(LineWidth) /* 357 */ \
- OP(LinkProgram) /* 358 */ \
- OP(PixelStorei) /* 359 */ \
- OP(PolygonOffset) /* 360 */ \
- OP(ReadPixels) /* 361 */ \
- OP(ReleaseShaderCompiler) /* 362 */ \
- OP(RenderbufferStorage) /* 363 */ \
- OP(SampleCoverage) /* 364 */ \
- OP(Scissor) /* 365 */ \
- OP(ShaderBinary) /* 366 */ \
- OP(ShaderSource) /* 367 */ \
- OP(ShaderSourceBucket) /* 368 */ \
- OP(StencilFunc) /* 369 */ \
- OP(StencilFuncSeparate) /* 370 */ \
- OP(StencilMask) /* 371 */ \
- OP(StencilMaskSeparate) /* 372 */ \
- OP(StencilOp) /* 373 */ \
- OP(StencilOpSeparate) /* 374 */ \
- OP(TexImage2D) /* 375 */ \
- OP(TexParameterf) /* 376 */ \
- OP(TexParameterfv) /* 377 */ \
- OP(TexParameterfvImmediate) /* 378 */ \
- OP(TexParameteri) /* 379 */ \
- OP(TexParameteriv) /* 380 */ \
- OP(TexParameterivImmediate) /* 381 */ \
- OP(TexSubImage2D) /* 382 */ \
- OP(Uniform1f) /* 383 */ \
- OP(Uniform1fv) /* 384 */ \
- OP(Uniform1fvImmediate) /* 385 */ \
- OP(Uniform1i) /* 386 */ \
- OP(Uniform1iv) /* 387 */ \
- OP(Uniform1ivImmediate) /* 388 */ \
- OP(Uniform2f) /* 389 */ \
- OP(Uniform2fv) /* 390 */ \
- OP(Uniform2fvImmediate) /* 391 */ \
- OP(Uniform2i) /* 392 */ \
- OP(Uniform2iv) /* 393 */ \
- OP(Uniform2ivImmediate) /* 394 */ \
- OP(Uniform3f) /* 395 */ \
- OP(Uniform3fv) /* 396 */ \
- OP(Uniform3fvImmediate) /* 397 */ \
- OP(Uniform3i) /* 398 */ \
- OP(Uniform3iv) /* 399 */ \
- OP(Uniform3ivImmediate) /* 400 */ \
- OP(Uniform4f) /* 401 */ \
- OP(Uniform4fv) /* 402 */ \
- OP(Uniform4fvImmediate) /* 403 */ \
- OP(Uniform4i) /* 404 */ \
- OP(Uniform4iv) /* 405 */ \
- OP(Uniform4ivImmediate) /* 406 */ \
- OP(UniformMatrix2fv) /* 407 */ \
- OP(UniformMatrix2fvImmediate) /* 408 */ \
- OP(UniformMatrix3fv) /* 409 */ \
- OP(UniformMatrix3fvImmediate) /* 410 */ \
- OP(UniformMatrix4fv) /* 411 */ \
- OP(UniformMatrix4fvImmediate) /* 412 */ \
- OP(UseProgram) /* 413 */ \
- OP(ValidateProgram) /* 414 */ \
- OP(VertexAttrib1f) /* 415 */ \
- OP(VertexAttrib1fv) /* 416 */ \
- OP(VertexAttrib1fvImmediate) /* 417 */ \
- OP(VertexAttrib2f) /* 418 */ \
- OP(VertexAttrib2fv) /* 419 */ \
- OP(VertexAttrib2fvImmediate) /* 420 */ \
- OP(VertexAttrib3f) /* 421 */ \
- OP(VertexAttrib3fv) /* 422 */ \
- OP(VertexAttrib3fvImmediate) /* 423 */ \
- OP(VertexAttrib4f) /* 424 */ \
- OP(VertexAttrib4fv) /* 425 */ \
- OP(VertexAttrib4fvImmediate) /* 426 */ \
- OP(VertexAttribPointer) /* 427 */ \
- OP(Viewport) /* 428 */ \
- OP(BlitFramebufferCHROMIUM) /* 429 */ \
- OP(RenderbufferStorageMultisampleCHROMIUM) /* 430 */ \
- OP(RenderbufferStorageMultisampleEXT) /* 431 */ \
- OP(FramebufferTexture2DMultisampleEXT) /* 432 */ \
- OP(TexStorage2DEXT) /* 433 */ \
- OP(GenQueriesEXT) /* 434 */ \
- OP(GenQueriesEXTImmediate) /* 435 */ \
- OP(DeleteQueriesEXT) /* 436 */ \
- OP(DeleteQueriesEXTImmediate) /* 437 */ \
- OP(BeginQueryEXT) /* 438 */ \
- OP(EndQueryEXT) /* 439 */ \
- OP(InsertEventMarkerEXT) /* 440 */ \
- OP(PushGroupMarkerEXT) /* 441 */ \
- OP(PopGroupMarkerEXT) /* 442 */ \
- OP(GenVertexArraysOES) /* 443 */ \
- OP(GenVertexArraysOESImmediate) /* 444 */ \
- OP(DeleteVertexArraysOES) /* 445 */ \
- OP(DeleteVertexArraysOESImmediate) /* 446 */ \
- OP(IsVertexArrayOES) /* 447 */ \
- OP(BindVertexArrayOES) /* 448 */ \
- OP(SwapBuffers) /* 449 */ \
- OP(GetMaxValueInBufferCHROMIUM) /* 450 */ \
- OP(GenSharedIdsCHROMIUM) /* 451 */ \
- OP(DeleteSharedIdsCHROMIUM) /* 452 */ \
- OP(RegisterSharedIdsCHROMIUM) /* 453 */ \
- OP(EnableFeatureCHROMIUM) /* 454 */ \
- OP(ResizeCHROMIUM) /* 455 */ \
- OP(GetRequestableExtensionsCHROMIUM) /* 456 */ \
- OP(RequestExtensionCHROMIUM) /* 457 */ \
- OP(GetMultipleIntegervCHROMIUM) /* 458 */ \
- OP(GetProgramInfoCHROMIUM) /* 459 */ \
- OP(CreateStreamTextureCHROMIUM) /* 460 */ \
- OP(DestroyStreamTextureCHROMIUM) /* 461 */ \
- OP(GetTranslatedShaderSourceANGLE) /* 462 */ \
- OP(PostSubBufferCHROMIUM) /* 463 */ \
- OP(TexImageIOSurface2DCHROMIUM) /* 464 */ \
- OP(CopyTextureCHROMIUM) /* 465 */ \
- OP(DrawArraysInstancedANGLE) /* 466 */ \
- OP(DrawElementsInstancedANGLE) /* 467 */ \
- OP(VertexAttribDivisorANGLE) /* 468 */ \
- OP(GenMailboxCHROMIUM) /* 469 */ \
- OP(ProduceTextureCHROMIUM) /* 470 */ \
- OP(ProduceTextureCHROMIUMImmediate) /* 471 */ \
- OP(ConsumeTextureCHROMIUM) /* 472 */ \
- OP(ConsumeTextureCHROMIUMImmediate) /* 473 */ \
- OP(BindUniformLocationCHROMIUM) /* 474 */ \
- OP(BindUniformLocationCHROMIUMBucket) /* 475 */ \
- OP(BindTexImage2DCHROMIUM) /* 476 */ \
- OP(ReleaseTexImage2DCHROMIUM) /* 477 */ \
- OP(TraceBeginCHROMIUM) /* 478 */ \
- OP(TraceEndCHROMIUM) /* 479 */ \
- OP(AsyncTexSubImage2DCHROMIUM) /* 480 */ \
- OP(AsyncTexImage2DCHROMIUM) /* 481 */ \
- OP(WaitAsyncTexImage2DCHROMIUM) /* 482 */ \
- OP(DiscardFramebufferEXT) /* 483 */ \
- OP(DiscardFramebufferEXTImmediate) /* 484 */ \
- OP(LoseContextCHROMIUM) /* 485 */ \
- OP(InsertSyncPointCHROMIUM) /* 486 */ \
- OP(WaitSyncPointCHROMIUM) /* 487 */ \
- OP(DrawBuffersEXT) /* 488 */ \
- OP(DrawBuffersEXTImmediate) /* 489 */ \
- OP(DiscardBackbufferCHROMIUM) /* 490 */ \
+#define GLES2_COMMAND_LIST(OP) \
+ OP(ActiveTexture) /* 256 */ \
+ OP(AttachShader) /* 257 */ \
+ OP(BindAttribLocationBucket) /* 258 */ \
+ OP(BindBuffer) /* 259 */ \
+ OP(BindFramebuffer) /* 260 */ \
+ OP(BindRenderbuffer) /* 261 */ \
+ OP(BindTexture) /* 262 */ \
+ OP(BlendColor) /* 263 */ \
+ OP(BlendEquation) /* 264 */ \
+ OP(BlendEquationSeparate) /* 265 */ \
+ OP(BlendFunc) /* 266 */ \
+ OP(BlendFuncSeparate) /* 267 */ \
+ OP(BufferData) /* 268 */ \
+ OP(BufferSubData) /* 269 */ \
+ OP(CheckFramebufferStatus) /* 270 */ \
+ OP(Clear) /* 271 */ \
+ OP(ClearColor) /* 272 */ \
+ OP(ClearDepthf) /* 273 */ \
+ OP(ClearStencil) /* 274 */ \
+ OP(ColorMask) /* 275 */ \
+ OP(CompileShader) /* 276 */ \
+ OP(CompressedTexImage2DBucket) /* 277 */ \
+ OP(CompressedTexImage2D) /* 278 */ \
+ OP(CompressedTexSubImage2DBucket) /* 279 */ \
+ OP(CompressedTexSubImage2D) /* 280 */ \
+ OP(CopyTexImage2D) /* 281 */ \
+ OP(CopyTexSubImage2D) /* 282 */ \
+ OP(CreateProgram) /* 283 */ \
+ OP(CreateShader) /* 284 */ \
+ OP(CullFace) /* 285 */ \
+ OP(DeleteBuffersImmediate) /* 286 */ \
+ OP(DeleteFramebuffersImmediate) /* 287 */ \
+ OP(DeleteProgram) /* 288 */ \
+ OP(DeleteRenderbuffersImmediate) /* 289 */ \
+ OP(DeleteShader) /* 290 */ \
+ OP(DeleteTexturesImmediate) /* 291 */ \
+ OP(DepthFunc) /* 292 */ \
+ OP(DepthMask) /* 293 */ \
+ OP(DepthRangef) /* 294 */ \
+ OP(DetachShader) /* 295 */ \
+ OP(Disable) /* 296 */ \
+ OP(DisableVertexAttribArray) /* 297 */ \
+ OP(DrawArrays) /* 298 */ \
+ OP(DrawElements) /* 299 */ \
+ OP(Enable) /* 300 */ \
+ OP(EnableVertexAttribArray) /* 301 */ \
+ OP(Finish) /* 302 */ \
+ OP(Flush) /* 303 */ \
+ OP(FramebufferRenderbuffer) /* 304 */ \
+ OP(FramebufferTexture2D) /* 305 */ \
+ OP(FrontFace) /* 306 */ \
+ OP(GenBuffersImmediate) /* 307 */ \
+ OP(GenerateMipmap) /* 308 */ \
+ OP(GenFramebuffersImmediate) /* 309 */ \
+ OP(GenRenderbuffersImmediate) /* 310 */ \
+ OP(GenTexturesImmediate) /* 311 */ \
+ OP(GetActiveAttrib) /* 312 */ \
+ OP(GetActiveUniform) /* 313 */ \
+ OP(GetAttachedShaders) /* 314 */ \
+ OP(GetAttribLocation) /* 315 */ \
+ OP(GetBooleanv) /* 316 */ \
+ OP(GetBufferParameteriv) /* 317 */ \
+ OP(GetError) /* 318 */ \
+ OP(GetFloatv) /* 319 */ \
+ OP(GetFramebufferAttachmentParameteriv) /* 320 */ \
+ OP(GetIntegerv) /* 321 */ \
+ OP(GetProgramiv) /* 322 */ \
+ OP(GetProgramInfoLog) /* 323 */ \
+ OP(GetRenderbufferParameteriv) /* 324 */ \
+ OP(GetShaderiv) /* 325 */ \
+ OP(GetShaderInfoLog) /* 326 */ \
+ OP(GetShaderPrecisionFormat) /* 327 */ \
+ OP(GetShaderSource) /* 328 */ \
+ OP(GetString) /* 329 */ \
+ OP(GetTexParameterfv) /* 330 */ \
+ OP(GetTexParameteriv) /* 331 */ \
+ OP(GetUniformfv) /* 332 */ \
+ OP(GetUniformiv) /* 333 */ \
+ OP(GetUniformLocation) /* 334 */ \
+ OP(GetVertexAttribfv) /* 335 */ \
+ OP(GetVertexAttribiv) /* 336 */ \
+ OP(GetVertexAttribPointerv) /* 337 */ \
+ OP(Hint) /* 338 */ \
+ OP(IsBuffer) /* 339 */ \
+ OP(IsEnabled) /* 340 */ \
+ OP(IsFramebuffer) /* 341 */ \
+ OP(IsProgram) /* 342 */ \
+ OP(IsRenderbuffer) /* 343 */ \
+ OP(IsShader) /* 344 */ \
+ OP(IsTexture) /* 345 */ \
+ OP(LineWidth) /* 346 */ \
+ OP(LinkProgram) /* 347 */ \
+ OP(PixelStorei) /* 348 */ \
+ OP(PolygonOffset) /* 349 */ \
+ OP(ReadPixels) /* 350 */ \
+ OP(ReleaseShaderCompiler) /* 351 */ \
+ OP(RenderbufferStorage) /* 352 */ \
+ OP(SampleCoverage) /* 353 */ \
+ OP(Scissor) /* 354 */ \
+ OP(ShaderBinary) /* 355 */ \
+ OP(ShaderSourceBucket) /* 356 */ \
+ OP(StencilFunc) /* 357 */ \
+ OP(StencilFuncSeparate) /* 358 */ \
+ OP(StencilMask) /* 359 */ \
+ OP(StencilMaskSeparate) /* 360 */ \
+ OP(StencilOp) /* 361 */ \
+ OP(StencilOpSeparate) /* 362 */ \
+ OP(TexImage2D) /* 363 */ \
+ OP(TexParameterf) /* 364 */ \
+ OP(TexParameterfvImmediate) /* 365 */ \
+ OP(TexParameteri) /* 366 */ \
+ OP(TexParameterivImmediate) /* 367 */ \
+ OP(TexSubImage2D) /* 368 */ \
+ OP(Uniform1f) /* 369 */ \
+ OP(Uniform1fvImmediate) /* 370 */ \
+ OP(Uniform1i) /* 371 */ \
+ OP(Uniform1ivImmediate) /* 372 */ \
+ OP(Uniform2f) /* 373 */ \
+ OP(Uniform2fvImmediate) /* 374 */ \
+ OP(Uniform2i) /* 375 */ \
+ OP(Uniform2ivImmediate) /* 376 */ \
+ OP(Uniform3f) /* 377 */ \
+ OP(Uniform3fvImmediate) /* 378 */ \
+ OP(Uniform3i) /* 379 */ \
+ OP(Uniform3ivImmediate) /* 380 */ \
+ OP(Uniform4f) /* 381 */ \
+ OP(Uniform4fvImmediate) /* 382 */ \
+ OP(Uniform4i) /* 383 */ \
+ OP(Uniform4ivImmediate) /* 384 */ \
+ OP(UniformMatrix2fvImmediate) /* 385 */ \
+ OP(UniformMatrix3fvImmediate) /* 386 */ \
+ OP(UniformMatrix4fvImmediate) /* 387 */ \
+ OP(UseProgram) /* 388 */ \
+ OP(ValidateProgram) /* 389 */ \
+ OP(VertexAttrib1f) /* 390 */ \
+ OP(VertexAttrib1fvImmediate) /* 391 */ \
+ OP(VertexAttrib2f) /* 392 */ \
+ OP(VertexAttrib2fvImmediate) /* 393 */ \
+ OP(VertexAttrib3f) /* 394 */ \
+ OP(VertexAttrib3fvImmediate) /* 395 */ \
+ OP(VertexAttrib4f) /* 396 */ \
+ OP(VertexAttrib4fvImmediate) /* 397 */ \
+ OP(VertexAttribPointer) /* 398 */ \
+ OP(Viewport) /* 399 */ \
+ OP(BlitFramebufferCHROMIUM) /* 400 */ \
+ OP(RenderbufferStorageMultisampleCHROMIUM) /* 401 */ \
+ OP(RenderbufferStorageMultisampleEXT) /* 402 */ \
+ OP(FramebufferTexture2DMultisampleEXT) /* 403 */ \
+ OP(TexStorage2DEXT) /* 404 */ \
+ OP(GenQueriesEXTImmediate) /* 405 */ \
+ OP(DeleteQueriesEXTImmediate) /* 406 */ \
+ OP(BeginQueryEXT) /* 407 */ \
+ OP(EndQueryEXT) /* 408 */ \
+ OP(InsertEventMarkerEXT) /* 409 */ \
+ OP(PushGroupMarkerEXT) /* 410 */ \
+ OP(PopGroupMarkerEXT) /* 411 */ \
+ OP(GenVertexArraysOESImmediate) /* 412 */ \
+ OP(DeleteVertexArraysOESImmediate) /* 413 */ \
+ OP(IsVertexArrayOES) /* 414 */ \
+ OP(BindVertexArrayOES) /* 415 */ \
+ OP(SwapBuffers) /* 416 */ \
+ OP(GetMaxValueInBufferCHROMIUM) /* 417 */ \
+ OP(GenSharedIdsCHROMIUM) /* 418 */ \
+ OP(DeleteSharedIdsCHROMIUM) /* 419 */ \
+ OP(RegisterSharedIdsCHROMIUM) /* 420 */ \
+ OP(EnableFeatureCHROMIUM) /* 421 */ \
+ OP(ResizeCHROMIUM) /* 422 */ \
+ OP(GetRequestableExtensionsCHROMIUM) /* 423 */ \
+ OP(RequestExtensionCHROMIUM) /* 424 */ \
+ OP(GetMultipleIntegervCHROMIUM) /* 425 */ \
+ OP(GetProgramInfoCHROMIUM) /* 426 */ \
+ OP(GetTranslatedShaderSourceANGLE) /* 427 */ \
+ OP(PostSubBufferCHROMIUM) /* 428 */ \
+ OP(TexImageIOSurface2DCHROMIUM) /* 429 */ \
+ OP(CopyTextureCHROMIUM) /* 430 */ \
+ OP(DrawArraysInstancedANGLE) /* 431 */ \
+ OP(DrawElementsInstancedANGLE) /* 432 */ \
+ OP(VertexAttribDivisorANGLE) /* 433 */ \
+ OP(GenMailboxCHROMIUM) /* 434 */ \
+ OP(ProduceTextureCHROMIUMImmediate) /* 435 */ \
+ OP(ProduceTextureDirectCHROMIUMImmediate) /* 436 */ \
+ OP(ConsumeTextureCHROMIUMImmediate) /* 437 */ \
+ OP(CreateAndConsumeTextureCHROMIUMImmediate) /* 438 */ \
+ OP(BindUniformLocationCHROMIUMBucket) /* 439 */ \
+ OP(BindTexImage2DCHROMIUM) /* 440 */ \
+ OP(ReleaseTexImage2DCHROMIUM) /* 441 */ \
+ OP(TraceBeginCHROMIUM) /* 442 */ \
+ OP(TraceEndCHROMIUM) /* 443 */ \
+ OP(AsyncTexSubImage2DCHROMIUM) /* 444 */ \
+ OP(AsyncTexImage2DCHROMIUM) /* 445 */ \
+ OP(WaitAsyncTexImage2DCHROMIUM) /* 446 */ \
+ OP(WaitAllAsyncTexImage2DCHROMIUM) /* 447 */ \
+ OP(DiscardFramebufferEXTImmediate) /* 448 */ \
+ OP(LoseContextCHROMIUM) /* 449 */ \
+ OP(InsertSyncPointCHROMIUM) /* 450 */ \
+ OP(WaitSyncPointCHROMIUM) /* 451 */ \
+ OP(DrawBuffersEXTImmediate) /* 452 */ \
+ OP(DiscardBackbufferCHROMIUM) /* 453 */ \
+ OP(ScheduleOverlayPlaneCHROMIUM) /* 454 */
enum CommandId {
kStartPoint = cmd::kLastCommonId, // All GLES2 commands start after this.
-#define GLES2_CMD_OP(name) k ## name,
+#define GLES2_CMD_OP(name) k##name,
GLES2_COMMAND_LIST(GLES2_CMD_OP)
#undef GLES2_CMD_OP
kNumCommands
};
#endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_IDS_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_utils.cc b/chromium/gpu/command_buffer/common/gles2_cmd_utils.cc
index b7d5e525e6d..8381586482b 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_utils.cc
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_utils.cc
@@ -5,7 +5,7 @@
// This file is here so other GLES2 related files can have a common set of
// includes where appropriate.
-#include <stdio.h>
+#include <sstream>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include <GLES2/gl2extchromium.h>
@@ -326,6 +326,10 @@ int GLES2Util::GLGetNumValuesReturned(int id) const {
case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
return 1;
+ // Chromium internal bind_generates_resource query
+ case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
+ return 1;
+
// bad enum
default:
return 0;
@@ -692,9 +696,11 @@ std::string GLES2Util::GetStringEnum(uint32 value) {
return entry->name;
}
}
- char buffer[20];
- sprintf(buffer, (value < 0x10000) ? "0x%04x" : "0x%08x", value);
- return buffer;
+ std::stringstream ss;
+ ss.fill('0');
+ ss.width(value < 0x10000 ? 4 : 8);
+ ss << std::hex << value;
+ return "0x" + ss.str();
}
std::string GLES2Util::GetStringError(uint32 value) {
@@ -772,23 +778,24 @@ const int32 kBufferDestroyed = 0x3095; // EGL_BUFFER_DESTROYED
const int32 kShareResources = 0x10000;
const int32 kBindGeneratesResource = 0x10001;
const int32 kFailIfMajorPerfCaveat = 0x10002;
+const int32 kLoseContextWhenOutOfMemory = 0x10003;
} // namespace
ContextCreationAttribHelper::ContextCreationAttribHelper()
- : alpha_size_(-1),
- blue_size_(-1),
- green_size_(-1),
- red_size_(-1),
- depth_size_(-1),
- stencil_size_(-1),
- samples_(-1),
- sample_buffers_(-1),
- buffer_preserved_(true),
- share_resources_(false),
- bind_generates_resource_(true),
- fail_if_major_perf_caveat_(false) {
-}
+ : alpha_size_(-1),
+ blue_size_(-1),
+ green_size_(-1),
+ red_size_(-1),
+ depth_size_(-1),
+ stencil_size_(-1),
+ samples_(-1),
+ sample_buffers_(-1),
+ buffer_preserved_(true),
+ share_resources_(false),
+ bind_generates_resource_(true),
+ fail_if_major_perf_caveat_(false),
+ lose_context_when_out_of_memory_(false) {}
void ContextCreationAttribHelper::Serialize(std::vector<int32>* attribs) {
if (alpha_size_ != -1) {
@@ -831,6 +838,8 @@ void ContextCreationAttribHelper::Serialize(std::vector<int32>* attribs) {
attribs->push_back(bind_generates_resource_ ? 1 : 0);
attribs->push_back(kFailIfMajorPerfCaveat);
attribs->push_back(fail_if_major_perf_caveat_ ? 1 : 0);
+ attribs->push_back(kLoseContextWhenOutOfMemory);
+ attribs->push_back(lose_context_when_out_of_memory_ ? 1 : 0);
attribs->push_back(kNone);
}
@@ -885,6 +894,9 @@ bool ContextCreationAttribHelper::Parse(const std::vector<int32>& attribs) {
case kFailIfMajorPerfCaveat:
fail_if_major_perf_caveat_ = value != 0;
break;
+ case kLoseContextWhenOutOfMemory:
+ lose_context_when_out_of_memory_ = value != 0;
+ break;
case kNone:
// Terminate list, even if more attributes.
return true;
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_utils.h b/chromium/gpu/command_buffer/common/gles2_cmd_utils.h
index 59b5d96de8c..f6432a744a9 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_utils.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_utils.h
@@ -8,12 +8,13 @@
#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_
#define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_H_
+#include <stdint.h>
+
#include <limits>
#include <string>
#include <vector>
#include "gpu/command_buffer/common/gles2_utils_export.h"
-#include "gpu/command_buffer/common/types.h"
namespace gpu {
namespace gles2 {
@@ -23,12 +24,12 @@ namespace gles2 {
// Multiplies 2 32 bit unsigned numbers checking for overflow.
// If there was no overflow returns true.
-inline bool SafeMultiplyUint32(uint32 a, uint32 b, uint32* dst) {
+inline bool SafeMultiplyUint32(uint32_t a, uint32_t b, uint32_t* dst) {
if (b == 0) {
*dst = 0;
return true;
}
- uint32 v = a * b;
+ uint32_t v = a * b;
if (v / b != a) {
*dst = 0;
return false;
@@ -38,7 +39,7 @@ inline bool SafeMultiplyUint32(uint32 a, uint32 b, uint32* dst) {
}
// Does an add checking for overflow. If there was no overflow returns true.
-inline bool SafeAddUint32(uint32 a, uint32 b, uint32* dst) {
+inline bool SafeAddUint32(uint32_t a, uint32_t b, uint32_t* dst) {
if (a + b < a) {
*dst = 0;
return false;
@@ -48,14 +49,22 @@ inline bool SafeAddUint32(uint32 a, uint32 b, uint32* dst) {
}
// Does an add checking for overflow. If there was no overflow returns true.
-inline bool SafeAddInt32(int32 a, int32 b, int32* dst) {
- int64 sum64 = static_cast<int64>(a) + b;
- int32 sum32 = static_cast<int32>(sum64);
- bool safe = sum64 == static_cast<int64>(sum32);
+inline bool SafeAddInt32(int32_t a, int32_t b, int32_t* dst) {
+ int64_t sum64 = static_cast<int64_t>(a) + b;
+ int32_t sum32 = static_cast<int32_t>(sum64);
+ bool safe = sum64 == static_cast<int64_t>(sum32);
*dst = safe ? sum32 : 0;
return safe;
}
+// Return false if |value| is more than a 32 bit integer can represent.
+template<typename T>
+inline bool FitInt32NonNegative(T value) {
+ const int32_t max = std::numeric_limits<int32_t>::max();
+ return (std::numeric_limits<T>::max() <= max ||
+ value <= static_cast<T>(max));
+}
+
// Utilties for GLES2 support.
class GLES2_UTILS_EXPORT GLES2Util {
public:
@@ -75,7 +84,7 @@ class GLES2_UTILS_EXPORT GLES2Util {
};
struct EnumToString {
- uint32 value;
+ uint32_t value;
const char* name;
};
@@ -105,12 +114,12 @@ class GLES2_UTILS_EXPORT GLES2Util {
int GLGetNumValuesReturned(int id) const;
// Computes the size of a single group of elements from a format and type pair
- static uint32 ComputeImageGroupSize(int format, int type);
+ static uint32_t ComputeImageGroupSize(int format, int type);
// Computes the size of an image row including alignment padding
static bool ComputeImagePaddedRowSize(
int width, int format, int type, int unpack_alignment,
- uint32* padded_row_size);
+ uint32_t* padded_row_size);
// Computes the size of image data for TexImage2D and TexSubImage2D.
// Optionally the unpadded and padded row sizes can be returned. If height < 2
@@ -118,40 +127,40 @@ class GLES2_UTILS_EXPORT GLES2Util {
// padding is not necessary.
static bool ComputeImageDataSizes(
int width, int height, int format, int type, int unpack_alignment,
- uint32* size, uint32* unpadded_row_size, uint32* padded_row_size);
+ uint32_t* size, uint32_t* unpadded_row_size, uint32_t* padded_row_size);
static size_t RenderbufferBytesPerPixel(int format);
- static uint32 GetGLDataTypeSizeForUniforms(int type);
+ static uint32_t GetGLDataTypeSizeForUniforms(int type);
- static size_t GetGLTypeSizeForTexturesAndBuffers(uint32 type);
+ static size_t GetGLTypeSizeForTexturesAndBuffers(uint32_t type);
- static uint32 GLErrorToErrorBit(uint32 gl_error);
+ static uint32_t GLErrorToErrorBit(uint32_t gl_error);
- static uint32 GLErrorBitToGLError(uint32 error_bit);
+ static uint32_t GLErrorBitToGLError(uint32_t error_bit);
- static uint32 IndexToGLFaceTarget(int index);
+ static uint32_t IndexToGLFaceTarget(int index);
- static uint32 GetPreferredGLReadPixelsFormat(uint32 internal_format);
+ static uint32_t GetPreferredGLReadPixelsFormat(uint32_t internal_format);
- static uint32 GetPreferredGLReadPixelsType(
- uint32 internal_format, uint32 texture_type);
+ static uint32_t GetPreferredGLReadPixelsType(
+ uint32_t internal_format, uint32_t texture_type);
// Returns a bitmask for the channels the given format supports.
// See ChannelBits.
- static uint32 GetChannelsForFormat(int format);
+ static uint32_t GetChannelsForFormat(int format);
// Returns a bitmask for the channels the given attachment type needs.
- static uint32 GetChannelsNeededForAttachmentType(
- int type, uint32 max_color_attachments);
+ static uint32_t GetChannelsNeededForAttachmentType(
+ int type, uint32_t max_color_attachments);
- static bool IsNPOT(uint32 value) {
+ static bool IsNPOT(uint32_t value) {
return value > 0 && (value & (value - 1)) != 0;
}
- static std::string GetStringEnum(uint32 value);
- static std::string GetStringBool(uint32 value);
- static std::string GetStringError(uint32 value);
+ static std::string GetStringEnum(uint32_t value);
+ static std::string GetStringBool(uint32_t value);
+ static std::string GetStringError(uint32_t value);
// Parses a uniform name.
// array_pos: the position of the last '[' character in name.
@@ -170,7 +179,7 @@ class GLES2_UTILS_EXPORT GLES2Util {
private:
static std::string GetQualifiedEnumString(
- const EnumToString* table, size_t count, uint32 value);
+ const EnumToString* table, size_t count, uint32_t value);
static const EnumToString* const enum_to_string_table_;
static const size_t enum_to_string_table_len_;
@@ -183,22 +192,23 @@ class GLES2_UTILS_EXPORT ContextCreationAttribHelper {
public:
ContextCreationAttribHelper();
- void Serialize(std::vector<int32>* attribs);
- bool Parse(const std::vector<int32>& attribs);
+ void Serialize(std::vector<int32_t>* attribs);
+ bool Parse(const std::vector<int32_t>& attribs);
// -1 if invalid or unspecified.
- int32 alpha_size_;
- int32 blue_size_;
- int32 green_size_;
- int32 red_size_;
- int32 depth_size_;
- int32 stencil_size_;
- int32 samples_;
- int32 sample_buffers_;
+ int32_t alpha_size_;
+ int32_t blue_size_;
+ int32_t green_size_;
+ int32_t red_size_;
+ int32_t depth_size_;
+ int32_t stencil_size_;
+ int32_t samples_;
+ int32_t sample_buffers_;
bool buffer_preserved_;
bool share_resources_;
bool bind_generates_resource_;
bool fail_if_major_perf_caveat_;
+ bool lose_context_when_out_of_memory_;
};
} // namespace gles2
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_utils_autogen.h b/chromium/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
index 00e1f0ea072..d4f5776096a 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
@@ -1,69 +1,70 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_AUTOGEN_H_
-static std::string GetStringAttachment(uint32 value);
-static std::string GetStringBackbufferAttachment(uint32 value);
-static std::string GetStringBlitFilter(uint32 value);
-static std::string GetStringBufferParameter(uint32 value);
-static std::string GetStringBufferTarget(uint32 value);
-static std::string GetStringBufferUsage(uint32 value);
-static std::string GetStringCapability(uint32 value);
-static std::string GetStringCmpFunction(uint32 value);
-static std::string GetStringCompressedTextureFormat(uint32 value);
-static std::string GetStringDrawMode(uint32 value);
-static std::string GetStringDstBlendFactor(uint32 value);
-static std::string GetStringEquation(uint32 value);
-static std::string GetStringFaceMode(uint32 value);
-static std::string GetStringFaceType(uint32 value);
-static std::string GetStringFrameBufferParameter(uint32 value);
-static std::string GetStringFrameBufferTarget(uint32 value);
-static std::string GetStringGLState(uint32 value);
-static std::string GetStringGetMaxIndexType(uint32 value);
-static std::string GetStringGetTexParamTarget(uint32 value);
-static std::string GetStringHintMode(uint32 value);
-static std::string GetStringHintTarget(uint32 value);
-static std::string GetStringIndexType(uint32 value);
-static std::string GetStringPixelStore(uint32 value);
-static std::string GetStringPixelType(uint32 value);
-static std::string GetStringProgramParameter(uint32 value);
-static std::string GetStringQueryObjectParameter(uint32 value);
-static std::string GetStringQueryParameter(uint32 value);
-static std::string GetStringQueryTarget(uint32 value);
-static std::string GetStringReadPixelFormat(uint32 value);
-static std::string GetStringReadPixelType(uint32 value);
-static std::string GetStringRenderBufferFormat(uint32 value);
-static std::string GetStringRenderBufferParameter(uint32 value);
-static std::string GetStringRenderBufferTarget(uint32 value);
-static std::string GetStringResetStatus(uint32 value);
-static std::string GetStringShaderBinaryFormat(uint32 value);
-static std::string GetStringShaderParameter(uint32 value);
-static std::string GetStringShaderPrecision(uint32 value);
-static std::string GetStringShaderType(uint32 value);
-static std::string GetStringSrcBlendFactor(uint32 value);
-static std::string GetStringStencilOp(uint32 value);
-static std::string GetStringStringType(uint32 value);
-static std::string GetStringTextureBindTarget(uint32 value);
-static std::string GetStringTextureFormat(uint32 value);
-static std::string GetStringTextureInternalFormat(uint32 value);
-static std::string GetStringTextureInternalFormatStorage(uint32 value);
-static std::string GetStringTextureMagFilterMode(uint32 value);
-static std::string GetStringTextureMinFilterMode(uint32 value);
-static std::string GetStringTextureParameter(uint32 value);
-static std::string GetStringTexturePool(uint32 value);
-static std::string GetStringTextureTarget(uint32 value);
-static std::string GetStringTextureUsage(uint32 value);
-static std::string GetStringTextureWrapMode(uint32 value);
-static std::string GetStringVertexAttribType(uint32 value);
-static std::string GetStringVertexAttribute(uint32 value);
-static std::string GetStringVertexPointer(uint32 value);
+static std::string GetStringAttachment(uint32_t value);
+static std::string GetStringBackbufferAttachment(uint32_t value);
+static std::string GetStringBlitFilter(uint32_t value);
+static std::string GetStringBufferParameter(uint32_t value);
+static std::string GetStringBufferTarget(uint32_t value);
+static std::string GetStringBufferUsage(uint32_t value);
+static std::string GetStringCapability(uint32_t value);
+static std::string GetStringCmpFunction(uint32_t value);
+static std::string GetStringCompressedTextureFormat(uint32_t value);
+static std::string GetStringDrawMode(uint32_t value);
+static std::string GetStringDstBlendFactor(uint32_t value);
+static std::string GetStringEquation(uint32_t value);
+static std::string GetStringFaceMode(uint32_t value);
+static std::string GetStringFaceType(uint32_t value);
+static std::string GetStringFrameBufferParameter(uint32_t value);
+static std::string GetStringFrameBufferTarget(uint32_t value);
+static std::string GetStringGLState(uint32_t value);
+static std::string GetStringGetMaxIndexType(uint32_t value);
+static std::string GetStringGetTexParamTarget(uint32_t value);
+static std::string GetStringHintMode(uint32_t value);
+static std::string GetStringHintTarget(uint32_t value);
+static std::string GetStringIndexType(uint32_t value);
+static std::string GetStringPixelStore(uint32_t value);
+static std::string GetStringPixelType(uint32_t value);
+static std::string GetStringProgramParameter(uint32_t value);
+static std::string GetStringQueryObjectParameter(uint32_t value);
+static std::string GetStringQueryParameter(uint32_t value);
+static std::string GetStringQueryTarget(uint32_t value);
+static std::string GetStringReadPixelFormat(uint32_t value);
+static std::string GetStringReadPixelType(uint32_t value);
+static std::string GetStringRenderBufferFormat(uint32_t value);
+static std::string GetStringRenderBufferParameter(uint32_t value);
+static std::string GetStringRenderBufferTarget(uint32_t value);
+static std::string GetStringResetStatus(uint32_t value);
+static std::string GetStringShaderBinaryFormat(uint32_t value);
+static std::string GetStringShaderParameter(uint32_t value);
+static std::string GetStringShaderPrecision(uint32_t value);
+static std::string GetStringShaderType(uint32_t value);
+static std::string GetStringSrcBlendFactor(uint32_t value);
+static std::string GetStringStencilOp(uint32_t value);
+static std::string GetStringStringType(uint32_t value);
+static std::string GetStringTextureBindTarget(uint32_t value);
+static std::string GetStringTextureFormat(uint32_t value);
+static std::string GetStringTextureInternalFormat(uint32_t value);
+static std::string GetStringTextureInternalFormatStorage(uint32_t value);
+static std::string GetStringTextureMagFilterMode(uint32_t value);
+static std::string GetStringTextureMinFilterMode(uint32_t value);
+static std::string GetStringTextureParameter(uint32_t value);
+static std::string GetStringTexturePool(uint32_t value);
+static std::string GetStringTextureTarget(uint32_t value);
+static std::string GetStringTextureUsage(uint32_t value);
+static std::string GetStringTextureWrapMode(uint32_t value);
+static std::string GetStringVertexAttribType(uint32_t value);
+static std::string GetStringVertexAttribute(uint32_t value);
+static std::string GetStringVertexPointer(uint32_t value);
#endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/chromium/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
index aa24ccd77ea..b3ec4218260 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
@@ -1,676 +1,2354 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
#ifndef GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_IMPLEMENTATION_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_IMPLEMENTATION_AUTOGEN_H_
static const GLES2Util::EnumToString enum_to_string_table[] = {
- { 0x78EC, "GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM", },
- { 0x8825, "GL_DRAW_BUFFER0_NV", },
- { 0x0BC1, "GL_ALPHA_TEST_FUNC_QCOM", },
- { 0x884C, "GL_TEXTURE_COMPARE_MODE_EXT", },
- { 0x0BC2, "GL_ALPHA_TEST_REF_QCOM", },
- { 0x78EF, "GL_PIXEL_UNPACK_TRANSFER_BUFFER_BINDING_CHROMIUM", },
- { 0x884D, "GL_TEXTURE_COMPARE_FUNC_EXT", },
- { 0x884E, "GL_COMPARE_REF_TO_TEXTURE_EXT", },
- { 0x93A1, "GL_BGRA8_EXT", },
- { 0x8826, "GL_DRAW_BUFFER1_NV", },
- { 0x1E01, "GL_REPLACE", },
- { 0, "GL_FALSE", },
- { 0x00400000, "GL_STENCIL_BUFFER_BIT6_QCOM", },
- { 0x82E6, "GL_SAMPLER", },
- { 0x1E02, "GL_INCR", },
- { 0x9130, "GL_SGX_PROGRAM_BINARY_IMG", },
- { 0x9133, "GL_RENDERBUFFER_SAMPLES_IMG", },
- { 0x82E0, "GL_BUFFER", },
- { 0x9135, "GL_MAX_SAMPLES_IMG", },
- { 0x9134, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG", },
- { 0x9136, "GL_TEXTURE_SAMPLES_IMG", },
- { 0x00000020, "GL_COLOR_BUFFER_BIT5_QCOM", },
- { 0x0008, "GL_MAP_INVALIDATE_BUFFER_BIT_EXT", },
- { 0x0BC0, "GL_ALPHA_TEST_QCOM", },
- { 0x0006, "GL_TRIANGLE_FAN", },
- { 0x0004, "GL_TRIANGLES", },
- { 0x0005, "GL_TRIANGLE_STRIP", },
- { 0x0002, "GL_LINE_LOOP", },
- { 0x0003, "GL_LINE_STRIP", },
- { 0x0000, "GL_POINTS", },
- { 0x0001, "GL_LINES", },
- { 0x78F0, "GL_IMAGE_ROWBYTES_CHROMIUM", },
- { 0x88B8, "GL_READ_ONLY", },
- { 0x88B9, "GL_WRITE_ONLY_OES", },
- { 0x8211, "GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT", },
- { 0x8210, "GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT", },
- { 0x8741, "GL_PROGRAM_BINARY_LENGTH_OES", },
- { 0x8740, "GL_Z400_BINARY_AMD", },
- { 0x8192, "GL_GENERATE_MIPMAP_HINT", },
- { 0x87F9, "GL_3DC_X_AMD", },
- { 0x8A53, "GL_SYNC_OBJECT_APPLE", },
- { 0x8DF8, "GL_SHADER_BINARY_FORMATS", },
- { 0x8DF9, "GL_NUM_SHADER_BINARY_FORMATS", },
- { 0x826D, "GL_DEBUG_GROUP_STACK_DEPTH", },
- { 0x826B, "GL_DEBUG_SEVERITY_NOTIFICATION", },
- { 0x826C, "GL_MAX_DEBUG_GROUP_STACK_DEPTH", },
- { 0x8B59, "GL_BOOL_VEC4", },
- { 0x8B58, "GL_BOOL_VEC3", },
- { 0x8B57, "GL_BOOL_VEC2", },
- { 0x8DF1, "GL_MEDIUM_FLOAT", },
- { 0x8B55, "GL_INT_VEC4", },
- { 0x8B54, "GL_INT_VEC3", },
- { 0x8DF4, "GL_MEDIUM_INT", },
- { 0x8DF5, "GL_HIGH_INT", },
- { 0x8DF6, "GL_UNSIGNED_INT_10_10_10_2_OES", },
- { 0x8B50, "GL_FLOAT_VEC2", },
- { 0x806F, "GL_TEXTURE_3D_OES", },
- { 0x92E0, "GL_DEBUG_OUTPUT", },
- { 0x806A, "GL_TEXTURE_BINDING_3D_OES", },
- { 0x93D9, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR", },
- { 0x8CE3, "GL_COLOR_ATTACHMENT3_NV", },
- { 0x8069, "GL_TEXTURE_BINDING_2D", },
- { 0x8261, "GL_NO_RESET_NOTIFICATION_EXT", },
- { 0x8DFA, "GL_SHADER_COMPILER", },
- { 0x8DFB, "GL_MAX_VERTEX_UNIFORM_VECTORS", },
- { 0x8DFC, "GL_MAX_VARYING_VECTORS", },
- { 0x8B5C, "GL_FLOAT_MAT4", },
- { 0x8B5B, "GL_FLOAT_MAT3", },
- { 0x8B5A, "GL_FLOAT_MAT2", },
- { 0x0D05, "GL_PACK_ALIGNMENT", },
- { 0x87FF, "GL_PROGRAM_BINARY_FORMATS_OES", },
- { 0x87FE, "GL_NUM_PROGRAM_BINARY_FORMATS_OES", },
- { 0x2600, "GL_NEAREST", },
- { 0x2601, "GL_LINEAR", },
- { 0x8C03, "GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG", },
- { 0x9242, "GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM", },
- { 0x88BA, "GL_READ_WRITE", },
- { 0x88BB, "GL_BUFFER_ACCESS_OES", },
- { 0x88BC, "GL_BUFFER_MAPPED_OES", },
- { 0x88BD, "GL_BUFFER_MAP_POINTER_OES", },
- { 0x0C10, "GL_SCISSOR_BOX", },
- { 0x0C11, "GL_SCISSOR_TEST", },
- { 0x80000000, "GL_MULTISAMPLE_BUFFER_BIT7_QCOM", },
- { 0x300E, "GL_CONTEXT_LOST", },
- { 0x02000000, "GL_MULTISAMPLE_BUFFER_BIT1_QCOM", },
- { 0x8C2F, "GL_ANY_SAMPLES_PASSED_EXT", },
- { 0x8BD2, "GL_TEXTURE_WIDTH_QCOM", },
- { 0x8BD3, "GL_TEXTURE_HEIGHT_QCOM", },
- { 0x8BD4, "GL_TEXTURE_DEPTH_QCOM", },
- { 0x8BD5, "GL_TEXTURE_INTERNAL_FORMAT_QCOM", },
- { 0x8BD6, "GL_TEXTURE_FORMAT_QCOM", },
- { 0x8BD7, "GL_TEXTURE_TYPE_QCOM", },
- { 0x8B8D, "GL_CURRENT_PROGRAM", },
- { 0x8BD9, "GL_TEXTURE_NUM_LEVELS_QCOM", },
- { 0x8B8A, "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH", },
- { 0x8B8B, "GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES", },
- { 0x8B8C, "GL_SHADING_LANGUAGE_VERSION", },
- { 0x8BDA, "GL_TEXTURE_TARGET_QCOM", },
- { 0x8BDB, "GL_TEXTURE_OBJECT_VALID_QCOM", },
- { 0x8BDC, "GL_STATE_RESTORE", },
- { 0x8B88, "GL_SHADER_SOURCE_LENGTH", },
- { 0x8B89, "GL_ACTIVE_ATTRIBUTES", },
- { 0x8B84, "GL_INFO_LOG_LENGTH", },
- { 0x8B85, "GL_ATTACHED_SHADERS", },
- { 0x8B86, "GL_ACTIVE_UNIFORMS", },
- { 0x8B87, "GL_ACTIVE_UNIFORM_MAX_LENGTH", },
- { 0x8B80, "GL_DELETE_STATUS", },
- { 0x8B81, "GL_COMPILE_STATUS", },
- { 0x8B82, "GL_LINK_STATUS", },
- { 0x8B83, "GL_VALIDATE_STATUS", },
- { 0x93D2, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR", },
- { 0x8D48, "GL_STENCIL_INDEX8", },
- { 0x8D46, "GL_STENCIL_INDEX1_OES", },
- { 0x8D47, "GL_STENCIL_INDEX4_OES", },
- { 0x8D44, "GL_RENDERBUFFER_INTERNAL_FORMAT", },
- { 0x00000100, "GL_DEPTH_BUFFER_BIT", },
- { 0x8D42, "GL_RENDERBUFFER_WIDTH", },
- { 0x8D43, "GL_RENDERBUFFER_HEIGHT", },
- { 0x8D40, "GL_FRAMEBUFFER", },
- { 0x8D41, "GL_RENDERBUFFER", },
- { 0x0BD0, "GL_DITHER", },
- { 0x93D3, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR", },
- { 0x9144, "GL_MAX_DEBUG_LOGGED_MESSAGES", },
- { 0x1801, "GL_DEPTH_EXT", },
- { 0x1800, "GL_COLOR_EXT", },
- { 0x1802, "GL_STENCIL_EXT", },
- { 0x0B21, "GL_LINE_WIDTH", },
- { 0x81A5, "GL_DEPTH_COMPONENT16", },
- { 0x81A6, "GL_DEPTH_COMPONENT24_OES", },
- { 0x81A7, "GL_DEPTH_COMPONENT32_OES", },
- { 0x88FE, "GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE", },
- { 0x93D0, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR", },
- { 0x9143, "GL_MAX_DEBUG_MESSAGE_LENGTH", },
- { 0x8DFD, "GL_MAX_FRAGMENT_UNIFORM_VECTORS", },
- { 0x9145, "GL_DEBUG_LOGGED_MESSAGES", },
- { 0x9146, "GL_DEBUG_SEVERITY_HIGH", },
- { 0x9147, "GL_DEBUG_SEVERITY_MEDIUM", },
- { 0x9148, "GL_DEBUG_SEVERITY_LOW", },
- { 0x8F60, "GL_MALI_SHADER_BINARY_ARM", },
- { 0x8F61, "GL_MALI_PROGRAM_BINARY_ARM", },
- { 0x87EE, "GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD", },
- { 0x822B, "GL_RG8_EXT", },
- { 0x93D1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR", },
- { 0x822D, "GL_R16F_EXT", },
- { 0x822E, "GL_R32F_EXT", },
- { 1, "GL_ES_VERSION_2_0", },
- { 0x84F9, "GL_DEPTH_STENCIL_OES", },
- { 0x8368, "GL_UNSIGNED_INT_2_10_10_10_REV_EXT", },
- { 0x8819, "GL_LUMINANCE_ALPHA32F_EXT", },
- { 0x8818, "GL_LUMINANCE32F_EXT", },
- { 0x8363, "GL_UNSIGNED_SHORT_5_6_5", },
- { 0x8814, "GL_RGBA32F_EXT", },
- { 0x84F2, "GL_ALL_COMPLETED_NV", },
- { 0x8816, "GL_ALPHA32F_EXT", },
- { 0x84F4, "GL_FENCE_CONDITION_NV", },
- { 0x8366, "GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT", },
- { 0x8365, "GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT", },
- { 0x881E, "GL_LUMINANCE16F_EXT", },
- { 0x84FA, "GL_UNSIGNED_INT_24_8_OES", },
- { 0x881F, "GL_LUMINANCE_ALPHA16F_EXT", },
- { 0x881A, "GL_RGBA16F_EXT", },
- { 0x84FE, "GL_TEXTURE_MAX_ANISOTROPY_EXT", },
- { 0x0901, "GL_CCW", },
- { 0x0900, "GL_CW", },
- { 0x8229, "GL_R8_EXT", },
- { 0x8227, "GL_RG_EXT", },
- { 0x8B62, "GL_SAMPLER_2D_SHADOW_EXT", },
- { 0x8B63, "GL_SAMPLER_2D_RECT_ARB", },
- { 0x8B60, "GL_SAMPLER_CUBE", },
- { 0x93D7, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR", },
- { 0x00001000, "GL_DEPTH_BUFFER_BIT4_QCOM", },
- { 0x83F0, "GL_COMPRESSED_RGB_S3TC_DXT1_EXT", },
- { 0x00000080, "GL_COLOR_BUFFER_BIT7_QCOM", },
- { 0x88F0, "GL_DEPTH24_STENCIL8_OES", },
- { 0x80A0, "GL_SAMPLE_COVERAGE", },
- { 0x93D4, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR", },
- { 0x822F, "GL_RG16F_EXT", },
- { 0x80A9, "GL_SAMPLES", },
- { 0x80A8, "GL_SAMPLE_BUFFERS", },
- { 0x0D55, "GL_ALPHA_BITS", },
- { 0x0D54, "GL_BLUE_BITS", },
- { 0x0D57, "GL_STENCIL_BITS", },
- { 0x0D56, "GL_DEPTH_BITS", },
- { 0x8CD5, "GL_FRAMEBUFFER_COMPLETE", },
- { 0x0D50, "GL_SUBPIXEL_BITS", },
- { 0x0D53, "GL_GREEN_BITS", },
- { 0x0D52, "GL_RED_BITS", },
- { 0x8037, "GL_POLYGON_OFFSET_FILL", },
- { 0x8034, "GL_UNSIGNED_SHORT_5_5_5_1", },
- { 0x8033, "GL_UNSIGNED_SHORT_4_4_4_4", },
- { 0x0305, "GL_ONE_MINUS_DST_ALPHA", },
- { 0x0304, "GL_DST_ALPHA", },
- { 0x0307, "GL_ONE_MINUS_DST_COLOR", },
- { 0x0306, "GL_DST_COLOR", },
- { 0x0301, "GL_ONE_MINUS_SRC_COLOR", },
- { 0x0300, "GL_SRC_COLOR", },
- { 0x0303, "GL_ONE_MINUS_SRC_ALPHA", },
- { 0x0302, "GL_SRC_ALPHA", },
- { 0x0308, "GL_SRC_ALPHA_SATURATE", },
- { 0x2A00, "GL_POLYGON_OFFSET_UNITS", },
- { 0xFFFFFFFF, "GL_ALL_SHADER_BITS_EXT", },
- { 0x00800000, "GL_STENCIL_BUFFER_BIT7_QCOM", },
- { 0x00020000, "GL_STENCIL_BUFFER_BIT1_QCOM", },
- { 0x8D00, "GL_DEPTH_ATTACHMENT", },
- { 0x8FA0, "GL_PERFMON_GLOBAL_MODE_QCOM", },
- { 0x8815, "GL_RGB32F_EXT", },
- { 0x813D, "GL_TEXTURE_MAX_LEVEL_APPLE", },
- { 0x84F3, "GL_FENCE_STATUS_NV", },
- { 0x8CDD, "GL_FRAMEBUFFER_UNSUPPORTED", },
- { 0x8CDF, "GL_MAX_COLOR_ATTACHMENTS_NV", },
- { 0x90F3, "GL_CONTEXT_ROBUST_ACCESS_EXT", },
- { 0x90F2, "GL_MAX_MULTIVIEW_BUFFERS_EXT", },
- { 0x90F1, "GL_MULTIVIEW_EXT", },
- { 0x90F0, "GL_COLOR_ATTACHMENT_EXT", },
- { 0x803C, "GL_ALPHA8_OES", },
- { 0x84F5, "GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM", },
- { 0x882A, "GL_DRAW_BUFFER5_NV", },
- { 0x80AA, "GL_SAMPLE_COVERAGE_VALUE", },
- { 0x84F6, "GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM", },
- { 0x80AB, "GL_SAMPLE_COVERAGE_INVERT", },
- { 0x8FC4, "GL_SHADER_BINARY_VIV", },
- { 0x882B, "GL_DRAW_BUFFER6_NV", },
- { 0x8C17, "GL_UNSIGNED_NORMALIZED_EXT", },
- { 0x8A4F, "GL_PROGRAM_PIPELINE_OBJECT_EXT", },
- { 0x882C, "GL_DRAW_BUFFER7_NV", },
- { 0x0010, "GL_MAP_FLUSH_EXPLICIT_BIT_EXT", },
- { 0x882D, "GL_DRAW_BUFFER8_NV", },
- { 0x84FF, "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT", },
- { 0x0B74, "GL_DEPTH_FUNC", },
- { 0x881B, "GL_RGB16F_EXT", },
- { 0x0B71, "GL_DEPTH_TEST", },
- { 0x0B70, "GL_DEPTH_RANGE", },
- { 0x0B73, "GL_DEPTH_CLEAR_VALUE", },
- { 0x0B72, "GL_DEPTH_WRITEMASK", },
- { 0x85BA, "GL_UNSIGNED_SHORT_8_8_APPLE", },
- { 0x882E, "GL_DRAW_BUFFER9_NV", },
- { 0x8073, "GL_MAX_3D_TEXTURE_SIZE_OES", },
- { 0x8072, "GL_TEXTURE_WRAP_R_OES", },
- { 0x882F, "GL_DRAW_BUFFER10_NV", },
- { 0x80E1, "GL_BGRA_EXT", },
- { 0x8ED7, "GL_COVERAGE_AUTOMATIC_NV", },
- { 0x8ED6, "GL_COVERAGE_EDGE_FRAGMENTS_NV", },
- { 0x8ED5, "GL_COVERAGE_ALL_FRAGMENTS_NV", },
- { 0x8ED4, "GL_COVERAGE_SAMPLES_NV", },
- { 0x8ED3, "GL_COVERAGE_BUFFERS_NV", },
- { 0x8ED2, "GL_COVERAGE_ATTACHMENT_NV", },
- { 0x8ED1, "GL_COVERAGE_COMPONENT4_NV", },
- { 0x8ED0, "GL_COVERAGE_COMPONENT_NV", },
- { 0x800B, "GL_FUNC_REVERSE_SUBTRACT", },
- { 0x00000400, "GL_STENCIL_BUFFER_BIT", },
- { 0x800A, "GL_FUNC_SUBTRACT", },
- { 0x8E2C, "GL_DEPTH_COMPONENT16_NONLINEAR_NV", },
- { 0x889F, "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", },
- { 0x8219, "GL_FRAMEBUFFER_UNDEFINED_OES", },
- { 0x8006, "GL_FUNC_ADD", },
- { 0x8007, "GL_MIN_EXT", },
- { 0x8004, "GL_ONE_MINUS_CONSTANT_ALPHA", },
- { 0x8005, "GL_BLEND_COLOR", },
- { 0x8002, "GL_ONE_MINUS_CONSTANT_COLOR", },
- { 0x8003, "GL_CONSTANT_ALPHA", },
- { 0x8000, "GL_COVERAGE_BUFFER_BIT_NV", },
- { 0x8001, "GL_CONSTANT_COLOR", },
- { 0x0204, "GL_GREATER", },
- { 0x0205, "GL_NOTEQUAL", },
- { 0x0206, "GL_GEQUAL", },
- { 0x0207, "GL_ALWAYS", },
- { 0x0200, "GL_NEVER", },
- { 0x0201, "GL_LESS", },
- { 0x0202, "GL_EQUAL", },
- { 0x0203, "GL_LEQUAL", },
- { 0x2901, "GL_REPEAT", },
- { 0x8B99, "GL_PALETTE8_RGB5_A1_OES", },
- { 0x8B98, "GL_PALETTE8_RGBA4_OES", },
- { 0x8FB2, "GL_GPU_OPTIMIZED_QCOM", },
- { 0x190A, "GL_LUMINANCE_ALPHA", },
- { 0x8FB0, "GL_BINNING_CONTROL_HINT_QCOM", },
- { 0x8FB1, "GL_CPU_OPTIMIZED_QCOM", },
- { 0x8B93, "GL_PALETTE4_RGBA4_OES", },
- { 0x8B92, "GL_PALETTE4_R5_G6_B5_OES", },
- { 0x8B91, "GL_PALETTE4_RGBA8_OES", },
- { 0x8B90, "GL_PALETTE4_RGB8_OES", },
- { 0x8B97, "GL_PALETTE8_R5_G6_B5_OES", },
- { 0x8B96, "GL_PALETTE8_RGBA8_OES", },
- { 0x8B95, "GL_PALETTE8_RGB8_OES", },
- { 0x8B94, "GL_PALETTE4_RGB5_A1_OES", },
- { 0x0BE2, "GL_BLEND", },
- { 0x84CB, "GL_TEXTURE11", },
- { 0x8D55, "GL_RENDERBUFFER_STENCIL_SIZE", },
- { 0x8D54, "GL_RENDERBUFFER_DEPTH_SIZE", },
- { 0x8D57, "GL_MAX_SAMPLES_ANGLE", },
- { 0x8D56, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE", },
- { 0x8D51, "GL_RENDERBUFFER_GREEN_SIZE", },
- { 0x8D50, "GL_RENDERBUFFER_RED_SIZE", },
- { 0x8D53, "GL_RENDERBUFFER_ALPHA_SIZE", },
- { 0x8D52, "GL_RENDERBUFFER_BLUE_SIZE", },
- { 0x00080000, "GL_STENCIL_BUFFER_BIT3_QCOM", },
- { 0x886A, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED", },
- { 0x0C01, "GL_DRAW_BUFFER_EXT", },
- { 0x9250, "GL_SHADER_BINARY_DMP", },
- { 0x10000000, "GL_MULTISAMPLE_BUFFER_BIT4_QCOM", },
- { 0x8C92, "GL_ATC_RGB_AMD", },
- { 0x9154, "GL_VERTEX_ARRAY_OBJECT_EXT", },
- { 0x9153, "GL_QUERY_OBJECT_EXT", },
- { 0x9151, "GL_BUFFER_OBJECT_EXT", },
- { 0x8C93, "GL_ATC_RGBA_EXPLICIT_ALPHA_AMD", },
- { 0x00000002, "GL_CONTEXT_FLAG_DEBUG_BIT", },
- { 0x00000001, "GL_SYNC_FLUSH_COMMANDS_BIT_APPLE", },
- { 0x00000004, "GL_COLOR_BUFFER_BIT2_QCOM", },
- { 0x1702, "GL_TEXTURE", },
- { 0x00000008, "GL_COLOR_BUFFER_BIT3_QCOM", },
- { 0x826A, "GL_DEBUG_TYPE_POP_GROUP", },
- { 0x8828, "GL_DRAW_BUFFER3_NV", },
- { 0x8DF0, "GL_LOW_FLOAT", },
- { 0x1906, "GL_ALPHA", },
- { 0x1907, "GL_RGB", },
- { 0x1902, "GL_DEPTH_COMPONENT", },
- { 0x8B56, "GL_BOOL", },
- { 0x93DB, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR", },
- { 0x8B9B, "GL_IMPLEMENTATION_COLOR_READ_FORMAT", },
- { 0x8B9A, "GL_IMPLEMENTATION_COLOR_READ_TYPE", },
- { 0x93DA, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR", },
- { 0x1908, "GL_RGBA", },
- { 0x8DF2, "GL_HIGH_FLOAT", },
- { 0x93DD, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR", },
- { 0x8827, "GL_DRAW_BUFFER2_NV", },
- { 0x9243, "GL_UNPACK_COLORSPACE_CONVERSION_CHROMIUM", },
- { 0x8DF3, "GL_LOW_INT", },
- { 0x82E8, "GL_MAX_LABEL_LENGTH", },
- { 0x8B53, "GL_INT_VEC2", },
- { 0x0C02, "GL_READ_BUFFER_EXT", },
- { 0x82E3, "GL_QUERY", },
- { 0x82E2, "GL_PROGRAM", },
- { 0x82E1, "GL_SHADER", },
- { 0x8B52, "GL_FLOAT_VEC4", },
- { 0x9240, "GL_UNPACK_FLIP_Y_CHROMIUM", },
- { 0x8B51, "GL_FLOAT_VEC3", },
- { 0x8230, "GL_RG32F_EXT", },
- { 0x8DF7, "GL_INT_10_10_10_2_OES", },
- { 0x812F, "GL_CLAMP_TO_EDGE", },
- { 0x86A3, "GL_COMPRESSED_TEXTURE_FORMATS", },
- { 0x86A2, "GL_NUM_COMPRESSED_TEXTURE_FORMATS", },
- { 0x0CF3, "GL_UNPACK_SKIP_ROWS", },
- { 0x0CF2, "GL_UNPACK_ROW_LENGTH", },
- { 0x140C, "GL_FIXED", },
- { 0x8008, "GL_MAX_EXT", },
- { 0x0CF5, "GL_UNPACK_ALIGNMENT", },
- { 0x0CF4, "GL_UNPACK_SKIP_PIXELS", },
- { 0x8009, "GL_BLEND_EQUATION", },
- { 0x1401, "GL_UNSIGNED_BYTE", },
- { 0x1400, "GL_BYTE", },
- { 0x1403, "GL_UNSIGNED_SHORT", },
- { 0x1402, "GL_SHORT", },
- { 0x1405, "GL_UNSIGNED_INT", },
- { 0x1404, "GL_INT", },
- { 0x1406, "GL_FLOAT", },
- { 0x8043, "GL_LUMINANCE4_ALPHA4_OES", },
- { 0x8040, "GL_LUMINANCE8_OES", },
- { 0x8045, "GL_LUMINANCE8_ALPHA8_OES", },
- { 0x8CD1, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", },
- { 0x00040000, "GL_STENCIL_BUFFER_BIT2_QCOM", },
- { 0x8CD0, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", },
- { 0x8CE4, "GL_COLOR_ATTACHMENT4_NV", },
- { 0x8CD3, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", },
- { 0x0B90, "GL_STENCIL_TEST", },
- { 0x8CD2, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", },
- { 0x881C, "GL_ALPHA16F_EXT", },
- { 0x8CD4, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES", },
- { 0x8CD7, "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", },
- { 0x9112, "GL_OBJECT_TYPE_APPLE", },
- { 0x8038, "GL_POLYGON_OFFSET_FACTOR", },
- { 0x851A, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z", },
- { 0x851C, "GL_MAX_CUBE_MAP_TEXTURE_SIZE", },
- { 0x8CD9, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS", },
- { 0x84CC, "GL_TEXTURE12", },
- { 0x0BA2, "GL_VIEWPORT", },
- { 0x84CA, "GL_TEXTURE10", },
- { 0x84CF, "GL_TEXTURE15", },
- { 0x84CE, "GL_TEXTURE14", },
- { 0x84CD, "GL_TEXTURE13", },
- { 0x9115, "GL_SYNC_FLAGS_APPLE", },
- { 0x83F3, "GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE", },
- { 0x83F2, "GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE", },
- { 0x83F1, "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT", },
- { 0x9114, "GL_SYNC_STATUS_APPLE", },
- { 0x8C0A, "GL_SGX_BINARY_IMG", },
- { 0x911C, "GL_CONDITION_SATISFIED_APPLE", },
- { 0x911B, "GL_TIMEOUT_EXPIRED_APPLE", },
- { 0x911A, "GL_ALREADY_SIGNALED_APPLE", },
- { 0x911D, "GL_WAIT_FAILED_APPLE", },
- { 0x846D, "GL_ALIASED_POINT_SIZE_RANGE", },
- { 0x846E, "GL_ALIASED_LINE_WIDTH_RANGE", },
- { 0x9113, "GL_SYNC_CONDITION_APPLE", },
- { 0x93A4, "GL_PACK_REVERSE_ROW_ORDER_ANGLE", },
- { 0x9111, "GL_MAX_SERVER_WAIT_TIMEOUT_APPLE", },
- { 0x9117, "GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE", },
- { 0x93A0, "GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE", },
- { 0x93A3, "GL_FRAMEBUFFER_ATTACHMENT_ANGLE", },
- { 0x93A2, "GL_TEXTURE_USAGE_ANGLE", },
- { 0x8802, "GL_STENCIL_BACK_PASS_DEPTH_FAIL", },
- { 0x9119, "GL_SIGNALED_APPLE", },
- { 0x9118, "GL_UNSIGNALED_APPLE", },
- { 0x8C01, "GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG", },
- { 0x8C00, "GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG", },
- { 0x8A52, "GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT", },
- { 0x8C02, "GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG", },
- { 0x84C9, "GL_TEXTURE9", },
- { 0x84C8, "GL_TEXTURE8", },
- { 0x8869, "GL_MAX_VERTEX_ATTRIBS", },
- { 0x84C3, "GL_TEXTURE3", },
- { 0x84C2, "GL_TEXTURE2", },
- { 0x84C1, "GL_TEXTURE1", },
- { 0x84C0, "GL_TEXTURE0", },
- { 0x84C7, "GL_TEXTURE7", },
- { 0x84C6, "GL_TEXTURE6", },
- { 0x84C5, "GL_TEXTURE5", },
- { 0x8803, "GL_STENCIL_BACK_PASS_DEPTH_PASS", },
- { 0x8518, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y", },
- { 0x8519, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z", },
- { 0x8514, "GL_TEXTURE_BINDING_CUBE_MAP", },
- { 0x8515, "GL_TEXTURE_CUBE_MAP_POSITIVE_X", },
- { 0x8516, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X", },
- { 0x8517, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y", },
- { 0x8513, "GL_TEXTURE_CUBE_MAP", },
- { 0x8626, "GL_CURRENT_VERTEX_ATTRIB", },
- { 0x8765, "GL_BUFFER_USAGE", },
- { 0x8764, "GL_BUFFER_SIZE", },
- { 0x93D8, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR", },
- { 0x0503, "GL_STACK_OVERFLOW", },
- { 0x0502, "GL_INVALID_OPERATION", },
- { 0x0501, "GL_INVALID_VALUE", },
- { 0x0500, "GL_INVALID_ENUM", },
- { 64, "GL_MAILBOX_SIZE_CHROMIUM", },
- { 0x0506, "GL_INVALID_FRAMEBUFFER_OPERATION", },
- { 0x0505, "GL_OUT_OF_MEMORY", },
- { 0x8B5F, "GL_SAMPLER_3D_OES", },
- { 0x0B44, "GL_CULL_FACE", },
- { 0x8B5E, "GL_SAMPLER_2D", },
- { 0x0B46, "GL_FRONT_FACE", },
- { 0x8FB3, "GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM", },
- { 0x824A, "GL_DEBUG_SOURCE_APPLICATION", },
- { 0x824B, "GL_DEBUG_SOURCE_OTHER", },
- { 0x824C, "GL_DEBUG_TYPE_ERROR", },
- { 0x824D, "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR", },
- { 0x824E, "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR", },
- { 0x824F, "GL_DEBUG_TYPE_PORTABILITY", },
- { 0x8B31, "GL_VERTEX_SHADER", },
- { 0x8B30, "GL_FRAGMENT_SHADER", },
- { 0x1E00, "GL_KEEP", },
- { 0x8268, "GL_DEBUG_TYPE_MARKER", },
- { 0x84D8, "GL_TEXTURE24", },
- { 0x84D9, "GL_TEXTURE25", },
- { 0x84D6, "GL_TEXTURE22", },
- { 0x84D7, "GL_TEXTURE23", },
- { 0x84D4, "GL_TEXTURE20", },
- { 0x84D5, "GL_TEXTURE21", },
- { 0x84D2, "GL_TEXTURE18", },
- { 0x84D3, "GL_TEXTURE19", },
- { 0x84D0, "GL_TEXTURE16", },
- { 0x84D1, "GL_TEXTURE17", },
- { 0x1E03, "GL_DECR", },
- { 0x84DF, "GL_TEXTURE31", },
- { 0x93D6, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR", },
- { 0x84DD, "GL_TEXTURE29", },
- { 0x84DE, "GL_TEXTURE30", },
- { 0x84DB, "GL_TEXTURE27", },
- { 0x84DC, "GL_TEXTURE28", },
- { 0x6002, "GL_TEXTURE_POOL_UNMANAGED_CHROMIUM", },
- { 0x84DA, "GL_TEXTURE26", },
- { 0x8242, "GL_DEBUG_OUTPUT_SYNCHRONOUS", },
- { 0x8243, "GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH", },
- { 0x8244, "GL_DEBUG_CALLBACK_FUNCTION", },
- { 0x8245, "GL_DEBUG_CALLBACK_USER_PARAM", },
- { 0x8246, "GL_DEBUG_SOURCE_API", },
- { 0x8247, "GL_DEBUG_SOURCE_WINDOW_SYSTEM", },
- { 0x8248, "GL_DEBUG_SOURCE_SHADER_COMPILER", },
- { 0x8249, "GL_DEBUG_SOURCE_THIRD_PARTY", },
- { 0x93D5, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR", },
- { 0x00000040, "GL_COLOR_BUFFER_BIT6_QCOM", },
- { 0x8645, "GL_VERTEX_ATTRIB_ARRAY_POINTER", },
- { 0x8865, "GL_CURRENT_QUERY_EXT", },
- { 0x8866, "GL_QUERY_RESULT_EXT", },
- { 0x8867, "GL_QUERY_RESULT_AVAILABLE_EXT", },
- { 0x08000000, "GL_MULTISAMPLE_BUFFER_BIT3_QCOM", },
- { 0x87FA, "GL_3DC_XY_AMD", },
- { 0x84C4, "GL_TEXTURE4", },
- { 0x85B5, "GL_VERTEX_ARRAY_BINDING_OES", },
- { 0x8D6A, "GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT", },
- { 0x8D6C, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT", },
- { 0x8252, "GL_LOSE_CONTEXT_ON_RESET_EXT", },
- { 0x8251, "GL_DEBUG_TYPE_OTHER", },
- { 0x8C40, "GL_SRGB_EXT", },
- { 0x8C43, "GL_SRGB8_ALPHA8_EXT", },
- { 0x8C42, "GL_SRGB_ALPHA_EXT", },
- { 0x00200000, "GL_STENCIL_BUFFER_BIT5_QCOM", },
- { 0x8D68, "GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES", },
- { 0x85BB, "GL_UNSIGNED_SHORT_8_8_REV_APPLE", },
- { 0x8D61, "GL_HALF_FLOAT_OES", },
- { 0x8D62, "GL_RGB565", },
- { 0x8D64, "GL_ETC1_RGB8_OES", },
- { 0x8D65, "GL_TEXTURE_EXTERNAL_OES", },
- { 0x8D66, "GL_SAMPLER_EXTERNAL_OES", },
- { 0x8D67, "GL_TEXTURE_BINDING_EXTERNAL_OES", },
- { 0x04000000, "GL_MULTISAMPLE_BUFFER_BIT2_QCOM", },
- { 0x8CEE, "GL_COLOR_ATTACHMENT14_NV", },
- { 0x2800, "GL_TEXTURE_MAG_FILTER", },
- { 0x2801, "GL_TEXTURE_MIN_FILTER", },
- { 0x2802, "GL_TEXTURE_WRAP_S", },
- { 0x2803, "GL_TEXTURE_WRAP_T", },
- { 0x2703, "GL_LINEAR_MIPMAP_LINEAR", },
- { 0x2702, "GL_NEAREST_MIPMAP_LINEAR", },
- { 0x1F03, "GL_EXTENSIONS", },
- { 0x1F02, "GL_VERSION", },
- { 0x1F01, "GL_RENDERER", },
- { 0x1F00, "GL_VENDOR", },
- { 0x2701, "GL_LINEAR_MIPMAP_NEAREST", },
- { 0x0B94, "GL_STENCIL_FAIL", },
- { 0x8B4C, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS", },
- { 0x8B4D, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS", },
- { 0x8B4F, "GL_SHADER_TYPE", },
- { 0x00004000, "GL_COLOR_BUFFER_BIT", },
- { 0x00000010, "GL_COLOR_BUFFER_BIT4_QCOM", },
- { 0x8834, "GL_DRAW_BUFFER15_NV", },
- { 0x8833, "GL_DRAW_BUFFER14_NV", },
- { 0x8832, "GL_DRAW_BUFFER13_NV", },
- { 0x8831, "GL_DRAW_BUFFER12_NV", },
- { 0x8830, "GL_DRAW_BUFFER11_NV", },
- { 0x93B8, "GL_COMPRESSED_RGBA_ASTC_10x5_KHR", },
- { 0x9241, "GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM", },
- { 0x00010000, "GL_STENCIL_BUFFER_BIT0_QCOM", },
- { 0x0B93, "GL_STENCIL_VALUE_MASK", },
- { 0x0B92, "GL_STENCIL_FUNC", },
- { 0x0B91, "GL_STENCIL_CLEAR_VALUE", },
- { 0x883D, "GL_BLEND_EQUATION_ALPHA", },
- { 0x0B97, "GL_STENCIL_REF", },
- { 0x0B96, "GL_STENCIL_PASS_DEPTH_PASS", },
- { 0x0B95, "GL_STENCIL_PASS_DEPTH_FAIL", },
- { 0x2700, "GL_NEAREST_MIPMAP_NEAREST", },
- { 0x0B98, "GL_STENCIL_WRITEMASK", },
- { 0x8B40, "GL_PROGRAM_OBJECT_EXT", },
- { 0x8B48, "GL_SHADER_OBJECT_EXT", },
- { 0x912F, "GL_TEXTURE_IMMUTABLE_FORMAT_EXT", },
- { 0x20000000, "GL_MULTISAMPLE_BUFFER_BIT5_QCOM", },
- { 0x0DE1, "GL_TEXTURE_2D", },
- { 0x80C9, "GL_BLEND_SRC_RGB", },
- { 0x80C8, "GL_BLEND_DST_RGB", },
- { 0x0504, "GL_STACK_UNDERFLOW", },
- { 0x8059, "GL_RGB10_A2_EXT", },
- { 0x8058, "GL_RGBA8_OES", },
- { 0x00002000, "GL_DEPTH_BUFFER_BIT5_QCOM", },
- { 0x8051, "GL_RGB8_OES", },
- { 0x8052, "GL_RGB10_EXT", },
- { 0x8CAB, "GL_RENDERBUFFER_SAMPLES_ANGLE", },
- { 0x8057, "GL_RGB5_A1", },
- { 0x8056, "GL_RGBA4", },
- { 0x150A, "GL_INVERT", },
- { 0x01000000, "GL_MULTISAMPLE_BUFFER_BIT0_QCOM", },
- { 0x78ED, "GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM", },
- { 0x78EE, "GL_PIXEL_PACK_TRANSFER_BUFFER_BINDING_CHROMIUM", },
- { 0x8269, "GL_DEBUG_TYPE_PUSH_GROUP", },
- { 0x0B45, "GL_CULL_FACE_MODE", },
- { 0x00100000, "GL_STENCIL_BUFFER_BIT4_QCOM", },
- { 0x8D20, "GL_STENCIL_ATTACHMENT", },
- { 0x00000200, "GL_DEPTH_BUFFER_BIT1_QCOM", },
- { 0x00008000, "GL_DEPTH_BUFFER_BIT7_QCOM", },
- { 0x8CA8, "GL_READ_FRAMEBUFFER_ANGLE", },
- { 0x8CA9, "GL_DRAW_FRAMEBUFFER_ANGLE", },
- { 0x8CA6, "GL_FRAMEBUFFER_BINDING", },
- { 0x8CA7, "GL_RENDERBUFFER_BINDING", },
- { 0x8CA4, "GL_STENCIL_BACK_VALUE_MASK", },
- { 0x8CA5, "GL_STENCIL_BACK_WRITEMASK", },
- { 0x8CA3, "GL_STENCIL_BACK_REF", },
- { 0x80CB, "GL_BLEND_SRC_ALPHA", },
- { 0x80CA, "GL_BLEND_DST_ALPHA", },
- { 0x93B0, "GL_COMPRESSED_RGBA_ASTC_4x4_KHR", },
- { 0x93B1, "GL_COMPRESSED_RGBA_ASTC_5x4_KHR", },
- { 0x93B2, "GL_COMPRESSED_RGBA_ASTC_5x5_KHR", },
- { 0x93B3, "GL_COMPRESSED_RGBA_ASTC_6x5_KHR", },
- { 0x93B4, "GL_COMPRESSED_RGBA_ASTC_6x6_KHR", },
- { 0x93B5, "GL_COMPRESSED_RGBA_ASTC_8x5_KHR", },
- { 0x93B6, "GL_COMPRESSED_RGBA_ASTC_8x6_KHR", },
- { 0x93B7, "GL_COMPRESSED_RGBA_ASTC_8x8_KHR", },
- { 0x8CD6, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT", },
- { 0x93B9, "GL_COMPRESSED_RGBA_ASTC_10x6_KHR", },
- { 0x8253, "GL_GUILTY_CONTEXT_RESET_EXT", },
- { 0x8CE5, "GL_COLOR_ATTACHMENT5_NV", },
- { 0x8872, "GL_MAX_TEXTURE_IMAGE_UNITS", },
- { 0x8508, "GL_DECR_WRAP", },
- { 0x8507, "GL_INCR_WRAP", },
- { 0x8895, "GL_ELEMENT_ARRAY_BUFFER_BINDING", },
- { 0x8894, "GL_ARRAY_BUFFER_BINDING", },
- { 0x8893, "GL_ELEMENT_ARRAY_BUFFER", },
- { 0x8892, "GL_ARRAY_BUFFER", },
- { 0x8BD8, "GL_TEXTURE_IMAGE_VALID_QCOM", },
- { 0x93BA, "GL_COMPRESSED_RGBA_ASTC_10x8_KHR", },
- { 0x93BB, "GL_COMPRESSED_RGBA_ASTC_10x10_KHR", },
- { 0x93BC, "GL_COMPRESSED_RGBA_ASTC_12x10_KHR", },
- { 0x93BD, "GL_COMPRESSED_RGBA_ASTC_12x12_KHR", },
- { 0x84E8, "GL_MAX_RENDERBUFFER_SIZE", },
- { 0x8370, "GL_MIRRORED_REPEAT", },
- { 0x84E0, "GL_ACTIVE_TEXTURE", },
- { 0x8800, "GL_STENCIL_BACK_FUNC", },
- { 0x8801, "GL_STENCIL_BACK_FAIL", },
- { 0x0D33, "GL_MAX_TEXTURE_SIZE", },
- { 0x8624, "GL_VERTEX_ATTRIB_ARRAY_STRIDE", },
- { 0x8625, "GL_VERTEX_ATTRIB_ARRAY_TYPE", },
- { 0x8622, "GL_VERTEX_ATTRIB_ARRAY_ENABLED", },
- { 0x8623, "GL_VERTEX_ATTRIB_ARRAY_SIZE", },
- { 0x8259, "GL_ACTIVE_PROGRAM_EXT", },
- { 0x8258, "GL_PROGRAM_SEPARABLE_EXT", },
- { 0x8256, "GL_RESET_NOTIFICATION_STRATEGY_EXT", },
- { 0x8255, "GL_UNKNOWN_CONTEXT_RESET_EXT", },
- { 0x8254, "GL_INNOCENT_CONTEXT_RESET_EXT", },
- { 0x1100, "GL_DONT_CARE", },
- { 0x1101, "GL_FASTEST", },
- { 0x1102, "GL_NICEST", },
- { 0x8250, "GL_DEBUG_TYPE_PERFORMANCE", },
- { 0x8CEB, "GL_COLOR_ATTACHMENT11_NV", },
- { 0x8CEC, "GL_COLOR_ATTACHMENT12_NV", },
- { 0x0408, "GL_FRONT_AND_BACK", },
- { 0x8CEA, "GL_COLOR_ATTACHMENT10_NV", },
- { 0x8CEF, "GL_COLOR_ATTACHMENT15_NV", },
- { 0x8CED, "GL_COLOR_ATTACHMENT13_NV", },
- { 0x8829, "GL_DRAW_BUFFER4_NV", },
- { 0x0404, "GL_FRONT", },
- { 0x0405, "GL_BACK", },
- { 0x88E1, "GL_STREAM_READ", },
- { 0x88E0, "GL_STREAM_DRAW", },
- { 0x88E4, "GL_STATIC_DRAW", },
- { 0x88E8, "GL_DYNAMIC_DRAW", },
- { 0x8CAA, "GL_READ_FRAMEBUFFER_BINDING_ANGLE", },
- { 0x40000000, "GL_MULTISAMPLE_BUFFER_BIT6_QCOM", },
- { 0x9116, "GL_SYNC_FENCE_APPLE", },
- { 0x6000, "GL_TEXTURE_POOL_CHROMIUM", },
- { 0x00000800, "GL_DEPTH_BUFFER_BIT3_QCOM", },
- { 0x1903, "GL_RED_EXT", },
- { 0x6001, "GL_TEXTURE_POOL_MANAGED_CHROMIUM", },
- { 0x8CE2, "GL_COLOR_ATTACHMENT2_NV", },
- { 0x8BC1, "GL_COUNTER_RANGE_AMD", },
- { 0x8CE0, "GL_COLOR_ATTACHMENT0", },
- { 0x8CE1, "GL_COLOR_ATTACHMENT1_NV", },
- { 0x8CE6, "GL_COLOR_ATTACHMENT6_NV", },
- { 0x8CE7, "GL_COLOR_ATTACHMENT7_NV", },
- { 0x8A1F, "GL_RGB_422_APPLE", },
- { 0x93DC, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR", },
- { 0x8CE8, "GL_COLOR_ATTACHMENT8_NV", },
- { 0x8CE9, "GL_COLOR_ATTACHMENT9_NV", },
- { 0x0C23, "GL_COLOR_WRITEMASK", },
- { 0x0C22, "GL_COLOR_CLEAR_VALUE", },
- { 0x8823, "GL_WRITEONLY_RENDERING_QCOM", },
- { 0x8824, "GL_MAX_DRAW_BUFFERS_NV", },
- { 0x825A, "GL_PROGRAM_PIPELINE_BINDING_EXT", },
- { 0x1909, "GL_LUMINANCE", },
- { 0x0D3A, "GL_MAX_VIEWPORT_DIMS", },
- { 0x0020, "GL_MAP_UNSYNCHRONIZED_BIT_EXT", },
- { 0x809E, "GL_SAMPLE_ALPHA_TO_COVERAGE", },
- { 0x8BC0, "GL_COUNTER_TYPE_AMD", },
- { 0x8BC3, "GL_PERCENTAGE_AMD", },
- { 0x8BC2, "GL_UNSIGNED_INT64_AMD", },
- { 0x8BC5, "GL_PERFMON_RESULT_SIZE_AMD", },
- { 0x8BC4, "GL_PERFMON_RESULT_AVAILABLE_AMD", },
- { 0x8BC6, "GL_PERFMON_RESULT_AMD", },
+ {
+ 0x78EC, "GL_PIXEL_UNPACK_TRANSFER_BUFFER_CHROMIUM",
+ },
+ {
+ 0x8825, "GL_DRAW_BUFFER0_EXT",
+ },
+ {
+ 0x0BC1, "GL_ALPHA_TEST_FUNC_QCOM",
+ },
+ {
+ 0x884C, "GL_TEXTURE_COMPARE_MODE_EXT",
+ },
+ {
+ 0x0BC2, "GL_ALPHA_TEST_REF_QCOM",
+ },
+ {
+ 0x884D, "GL_TEXTURE_COMPARE_FUNC_EXT",
+ },
+ {
+ 0x884E, "GL_COMPARE_REF_TO_TEXTURE_EXT",
+ },
+ {
+ 0x93A1, "GL_BGRA8_EXT",
+ },
+ {
+ 0, "GL_FALSE",
+ },
+ {
+ 0x00400000, "GL_STENCIL_BUFFER_BIT6_QCOM",
+ },
+ {
+ 0x9138, "GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG",
+ },
+ {
+ 0x8FC4, "GL_SHADER_BINARY_VIV",
+ },
+ {
+ 0x9130, "GL_SGX_PROGRAM_BINARY_IMG",
+ },
+ {
+ 0x9133, "GL_RENDERBUFFER_SAMPLES_IMG",
+ },
+ {
+ 0x82E0, "GL_BUFFER_KHR",
+ },
+ {
+ 0x9135, "GL_MAX_SAMPLES_IMG",
+ },
+ {
+ 0x9134, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG",
+ },
+ {
+ 0x9137, "GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG",
+ },
+ {
+ 0x9136, "GL_TEXTURE_SAMPLES_IMG",
+ },
+ {
+ 0x00000020, "GL_COLOR_BUFFER_BIT5_QCOM",
+ },
+ {
+ 0x0008, "GL_MAP_INVALIDATE_BUFFER_BIT_EXT",
+ },
+ {
+ 0x0BC0, "GL_ALPHA_TEST_QCOM",
+ },
+ {
+ 0x0006, "GL_TRIANGLE_FAN",
+ },
+ {
+ 0x0004, "GL_TRIANGLES",
+ },
+ {
+ 0x0005, "GL_TRIANGLE_STRIP",
+ },
+ {
+ 0x0002, "GL_LINE_LOOP",
+ },
+ {
+ 0x0003, "GL_LINE_STRIP",
+ },
+ {
+ 0x0000, "GL_POINTS",
+ },
+ {
+ 0x0001, "GL_LINES",
+ },
+ {
+ 0x78F0, "GL_IMAGE_ROWBYTES_CHROMIUM",
+ },
+ {
+ 0x88B8, "GL_READ_ONLY",
+ },
+ {
+ 0x88B9, "GL_WRITE_ONLY_OES",
+ },
+ {
+ 0x8211, "GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT",
+ },
+ {
+ 0x8210, "GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT",
+ },
+ {
+ 0x8741, "GL_PROGRAM_BINARY_LENGTH_OES",
+ },
+ {
+ 0x8740, "GL_Z400_BINARY_AMD",
+ },
+ {
+ 0x8192, "GL_GENERATE_MIPMAP_HINT",
+ },
+ {
+ 0x8A54, "GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT",
+ },
+ {
+ 0x8A55, "GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT",
+ },
+ {
+ 0x8A56, "GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT",
+ },
+ {
+ 0x8A57, "GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT",
+ },
+ {
+ 0x8A51, "GL_RGB_RAW_422_APPLE",
+ },
+ {
+ 0x87F9, "GL_3DC_X_AMD",
+ },
+ {
+ 0x8A53, "GL_SYNC_OBJECT_APPLE",
+ },
+ {
+ 0x8DF8, "GL_SHADER_BINARY_FORMATS",
+ },
+ {
+ 0x8DF9, "GL_NUM_SHADER_BINARY_FORMATS",
+ },
+ {
+ 0x826D, "GL_DEBUG_GROUP_STACK_DEPTH_KHR",
+ },
+ {
+ 0x826B, "GL_DEBUG_SEVERITY_NOTIFICATION_KHR",
+ },
+ {
+ 0x826C, "GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR",
+ },
+ {
+ 0x8B59, "GL_BOOL_VEC4",
+ },
+ {
+ 0x826A, "GL_DEBUG_TYPE_POP_GROUP_KHR",
+ },
+ {
+ 0x8B57, "GL_BOOL_VEC2",
+ },
+ {
+ 0x8DF1, "GL_MEDIUM_FLOAT",
+ },
+ {
+ 0x8B55, "GL_INT_VEC4",
+ },
+ {
+ 0x8B54, "GL_INT_VEC3",
+ },
+ {
+ 0x8DF4, "GL_MEDIUM_INT",
+ },
+ {
+ 0x8DF5, "GL_HIGH_INT",
+ },
+ {
+ 0x8B51, "GL_FLOAT_VEC3",
+ },
+ {
+ 0x8B50, "GL_FLOAT_VEC2",
+ },
+ {
+ 0x806F, "GL_TEXTURE_3D_OES",
+ },
+ {
+ 0x92E0, "GL_DEBUG_OUTPUT_KHR",
+ },
+ {
+ 0x806A, "GL_TEXTURE_BINDING_3D_OES",
+ },
+ {
+ 0x8CE3, "GL_COLOR_ATTACHMENT3_EXT",
+ },
+ {
+ 0x1904, "GL_GREEN_NV",
+ },
+ {
+ 0x928D, "GL_DST_OUT_NV",
+ },
+ {
+ 0x8069, "GL_TEXTURE_BINDING_2D",
+ },
+ {
+ 0x8261, "GL_NO_RESET_NOTIFICATION_EXT",
+ },
+ {
+ 0x8DFA, "GL_SHADER_COMPILER",
+ },
+ {
+ 0x8DFB, "GL_MAX_VERTEX_UNIFORM_VECTORS",
+ },
+ {
+ 0x8DFC, "GL_MAX_VARYING_VECTORS",
+ },
+ {
+ 0x8B5C, "GL_FLOAT_MAT4",
+ },
+ {
+ 0x8B5B, "GL_FLOAT_MAT3",
+ },
+ {
+ 0x8268, "GL_DEBUG_TYPE_MARKER_KHR",
+ },
+ {
+ 0x8269, "GL_DEBUG_TYPE_PUSH_GROUP_KHR",
+ },
+ {
+ 0x1905, "GL_BLUE_NV",
+ },
+ {
+ 0x87FF, "GL_PROGRAM_BINARY_FORMATS_OES",
+ },
+ {
+ 0x87FE, "GL_NUM_PROGRAM_BINARY_FORMATS_OES",
+ },
+ {
+ 0x2600, "GL_NEAREST",
+ },
+ {
+ 0x2601, "GL_LINEAR",
+ },
+ {
+ 0x8C03, "GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",
+ },
+ {
+ 0x9242, "GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM",
+ },
+ {
+ 0x88BB, "GL_BUFFER_ACCESS_OES",
+ },
+ {
+ 0x88BC, "GL_BUFFER_MAPPED_OES",
+ },
+ {
+ 0x88BD, "GL_BUFFER_MAP_POINTER_OES",
+ },
+ {
+ 0x88BF, "GL_TIME_ELAPSED_EXT",
+ },
+ {
+ 0x0C10, "GL_SCISSOR_BOX",
+ },
+ {
+ 0x0C11, "GL_SCISSOR_TEST",
+ },
+ {
+ 0x80000000, "GL_MULTISAMPLE_BUFFER_BIT7_QCOM",
+ },
+ {
+ 0x8A48, "GL_TEXTURE_SRGB_DECODE_EXT",
+ },
+ {
+ 0x300E, "GL_CONTEXT_LOST",
+ },
+ {
+ 0x02000000, "GL_MULTISAMPLE_BUFFER_BIT1_QCOM",
+ },
+ {
+ 0x8C2F, "GL_ANY_SAMPLES_PASSED_EXT",
+ },
+ {
+ 0x8BD2, "GL_TEXTURE_WIDTH_QCOM",
+ },
+ {
+ 0x8BD3, "GL_TEXTURE_HEIGHT_QCOM",
+ },
+ {
+ 0x8BD4, "GL_TEXTURE_DEPTH_QCOM",
+ },
+ {
+ 0x8BD5, "GL_TEXTURE_INTERNAL_FORMAT_QCOM",
+ },
+ {
+ 0x8BD6, "GL_TEXTURE_FORMAT_QCOM",
+ },
+ {
+ 0x8BD7, "GL_TEXTURE_TYPE_QCOM",
+ },
+ {
+ 0x8B8D, "GL_CURRENT_PROGRAM",
+ },
+ {
+ 0x8BD9, "GL_TEXTURE_NUM_LEVELS_QCOM",
+ },
+ {
+ 0x00200000, "GL_STENCIL_BUFFER_BIT5_QCOM",
+ },
+ {
+ 0x8B8A, "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH",
+ },
+ {
+ 0x8B8B, "GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES",
+ },
+ {
+ 0x8B8C, "GL_SHADING_LANGUAGE_VERSION",
+ },
+ {
+ 0x8BDA, "GL_TEXTURE_TARGET_QCOM",
+ },
+ {
+ 0x8BDB, "GL_TEXTURE_OBJECT_VALID_QCOM",
+ },
+ {
+ 0x8BDC, "GL_STATE_RESTORE",
+ },
+ {
+ 0x8B88, "GL_SHADER_SOURCE_LENGTH",
+ },
+ {
+ 0x8B89, "GL_ACTIVE_ATTRIBUTES",
+ },
+ {
+ 0x93C9, "GL_COMPRESSED_RGBA_ASTC_6x6x6_OES",
+ },
+ {
+ 0x93C8, "GL_COMPRESSED_RGBA_ASTC_6x6x5_OES",
+ },
+ {
+ 0x8B84, "GL_INFO_LOG_LENGTH",
+ },
+ {
+ 0x8B85, "GL_ATTACHED_SHADERS",
+ },
+ {
+ 0x8B86, "GL_ACTIVE_UNIFORMS",
+ },
+ {
+ 0x8B87, "GL_ACTIVE_UNIFORM_MAX_LENGTH",
+ },
+ {
+ 0x8B80, "GL_DELETE_STATUS",
+ },
+ {
+ 0x8B81, "GL_COMPILE_STATUS",
+ },
+ {
+ 0x8B82, "GL_LINK_STATUS",
+ },
+ {
+ 0x8B83, "GL_VALIDATE_STATUS",
+ },
+ {
+ 0x8D48, "GL_STENCIL_INDEX8",
+ },
+ {
+ 0x8D46, "GL_STENCIL_INDEX1_OES",
+ },
+ {
+ 0x8D47, "GL_STENCIL_INDEX4_OES",
+ },
+ {
+ 0x8D44, "GL_RENDERBUFFER_INTERNAL_FORMAT",
+ },
+ {
+ 0x00000100, "GL_DEPTH_BUFFER_BIT",
+ },
+ {
+ 0x8D42, "GL_RENDERBUFFER_WIDTH",
+ },
+ {
+ 0x8D43, "GL_RENDERBUFFER_HEIGHT",
+ },
+ {
+ 0x8D40, "GL_FRAMEBUFFER",
+ },
+ {
+ 0x8D41, "GL_RENDERBUFFER",
+ },
+ {
+ 0x0BD0, "GL_DITHER",
+ },
+ {
+ 0x93D3, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR",
+ },
+ {
+ 0x1801, "GL_DEPTH_EXT",
+ },
+ {
+ 0x1800, "GL_COLOR_EXT",
+ },
+ {
+ 0x1802, "GL_STENCIL_EXT",
+ },
+ {
+ 0x0B21, "GL_LINE_WIDTH",
+ },
+ {
+ 0x81A5, "GL_DEPTH_COMPONENT16",
+ },
+ {
+ 0x81A6, "GL_DEPTH_COMPONENT24_OES",
+ },
+ {
+ 0x81A7, "GL_DEPTH_COMPONENT32_OES",
+ },
+ {
+ 0x88FE, "GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE",
+ },
+ {
+ 0x8B6A, "GL_FLOAT_MAT4x3_NV",
+ },
+ {
+ 0x93D0, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR",
+ },
+ {
+ 0x9143, "GL_MAX_DEBUG_MESSAGE_LENGTH_KHR",
+ },
+ {
+ 0x9144, "GL_MAX_DEBUG_LOGGED_MESSAGES_KHR",
+ },
+ {
+ 0x9145, "GL_DEBUG_LOGGED_MESSAGES_KHR",
+ },
+ {
+ 0x9146, "GL_DEBUG_SEVERITY_HIGH_KHR",
+ },
+ {
+ 0x9147, "GL_DEBUG_SEVERITY_MEDIUM_KHR",
+ },
+ {
+ 0x9148, "GL_DEBUG_SEVERITY_LOW_KHR",
+ },
+ {
+ 0x9260, "GL_GCCSO_SHADER_BINARY_FJ",
+ },
+ {
+ 0x8F60, "GL_MALI_SHADER_BINARY_ARM",
+ },
+ {
+ 0x8F61, "GL_MALI_PROGRAM_BINARY_ARM",
+ },
+ {
+ 0x87EE, "GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD",
+ },
+ {
+ 0x822B, "GL_RG8_EXT",
+ },
+ {
+ 0x822F, "GL_RG16F_EXT",
+ },
+ {
+ 0x822D, "GL_R16F_EXT",
+ },
+ {
+ 0x822E, "GL_R32F_EXT",
+ },
+ {
+ 1, "GL_ES_VERSION_2_0",
+ },
+ {
+ 0x84F9, "GL_DEPTH_STENCIL_OES",
+ },
+ {
+ 0x8368, "GL_UNSIGNED_INT_2_10_10_10_REV_EXT",
+ },
+ {
+ 0x8819, "GL_LUMINANCE_ALPHA32F_EXT",
+ },
+ {
+ 0x8818, "GL_LUMINANCE32F_EXT",
+ },
+ {
+ 0x8363, "GL_UNSIGNED_SHORT_5_6_5",
+ },
+ {
+ 0x8814, "GL_RGBA32F_EXT",
+ },
+ {
+ 0x84F2, "GL_ALL_COMPLETED_NV",
+ },
+ {
+ 0x8816, "GL_ALPHA32F_EXT",
+ },
+ {
+ 0x84F4, "GL_FENCE_CONDITION_NV",
+ },
+ {
+ 0x8366, "GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT",
+ },
+ {
+ 0x8365, "GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT",
+ },
+ {
+ 0x84F7, "GL_COMMANDS_COMPLETED_CHROMIUM",
+ },
+ {
+ 0x881E, "GL_LUMINANCE16F_EXT",
+ },
+ {
+ 0x84FA, "GL_UNSIGNED_INT_24_8_OES",
+ },
+ {
+ 0x881F, "GL_LUMINANCE_ALPHA16F_EXT",
+ },
+ {
+ 0x881A, "GL_RGBA16F_EXT",
+ },
+ {
+ 0x84FE, "GL_TEXTURE_MAX_ANISOTROPY_EXT",
+ },
+ {
+ 0x0901, "GL_CCW",
+ },
+ {
+ 0x0900, "GL_CW",
+ },
+ {
+ 0x8229, "GL_R8_EXT",
+ },
+ {
+ 0x9283, "GL_DISJOINT_NV",
+ },
+ {
+ 0x8227, "GL_RG_EXT",
+ },
+ {
+ 0x8B66, "GL_FLOAT_MAT2x4_NV",
+ },
+ {
+ 0x8B67, "GL_FLOAT_MAT3x2_NV",
+ },
+ {
+ 0x8B65, "GL_FLOAT_MAT2x3_NV",
+ },
+ {
+ 0x8B62, "GL_SAMPLER_2D_SHADOW_EXT",
+ },
+ {
+ 0x8B63, "GL_SAMPLER_2D_RECT_ARB",
+ },
+ {
+ 0x8B60, "GL_SAMPLER_CUBE",
+ },
+ {
+ 0x00001000, "GL_DEPTH_BUFFER_BIT4_QCOM",
+ },
+ {
+ 0x8B68, "GL_FLOAT_MAT3x4_NV",
+ },
+ {
+ 0x83F0, "GL_COMPRESSED_RGB_S3TC_DXT1_EXT",
+ },
+ {
+ 0x00000080, "GL_COLOR_BUFFER_BIT7_QCOM",
+ },
+ {
+ 0x88F0, "GL_DEPTH24_STENCIL8_OES",
+ },
+ {
+ 0x80A0, "GL_SAMPLE_COVERAGE",
+ },
+ {
+ 0x928F, "GL_DST_ATOP_NV",
+ },
+ {
+ 0x80A9, "GL_SAMPLES",
+ },
+ {
+ 0x80A8, "GL_SAMPLE_BUFFERS",
+ },
+ {
+ 0x0D55, "GL_ALPHA_BITS",
+ },
+ {
+ 0x0D54, "GL_BLUE_BITS",
+ },
+ {
+ 0x0D57, "GL_STENCIL_BITS",
+ },
+ {
+ 0x0D56, "GL_DEPTH_BITS",
+ },
+ {
+ 0x8CD5, "GL_FRAMEBUFFER_COMPLETE",
+ },
+ {
+ 0x0D50, "GL_SUBPIXEL_BITS",
+ },
+ {
+ 0x0D53, "GL_GREEN_BITS",
+ },
+ {
+ 0x0D52, "GL_RED_BITS",
+ },
+ {
+ 0x8037, "GL_POLYGON_OFFSET_FILL",
+ },
+ {
+ 0x928C, "GL_SRC_OUT_NV",
+ },
+ {
+ 0x8034, "GL_UNSIGNED_SHORT_5_5_5_1",
+ },
+ {
+ 0x8033, "GL_UNSIGNED_SHORT_4_4_4_4",
+ },
+ {
+ 0x928B, "GL_DST_IN_NV",
+ },
+ {
+ 0x0305, "GL_ONE_MINUS_DST_ALPHA",
+ },
+ {
+ 0x0304, "GL_DST_ALPHA",
+ },
+ {
+ 0x0307, "GL_ONE_MINUS_DST_COLOR",
+ },
+ {
+ 0x0306, "GL_DST_COLOR",
+ },
+ {
+ 0x0301, "GL_ONE_MINUS_SRC_COLOR",
+ },
+ {
+ 0x0300, "GL_SRC_COLOR",
+ },
+ {
+ 0x0303, "GL_ONE_MINUS_SRC_ALPHA",
+ },
+ {
+ 0x0302, "GL_SRC_ALPHA",
+ },
+ {
+ 0x0308, "GL_SRC_ALPHA_SATURATE",
+ },
+ {
+ 0x2A00, "GL_POLYGON_OFFSET_UNITS",
+ },
+ {
+ 0xFFFFFFFF, "GL_ALL_SHADER_BITS_EXT",
+ },
+ {
+ 0x00800000, "GL_STENCIL_BUFFER_BIT7_QCOM",
+ },
+ {
+ 0x8C4D, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV",
+ },
+ {
+ 0x00020000, "GL_STENCIL_BUFFER_BIT1_QCOM",
+ },
+ {
+ 0x8D00, "GL_DEPTH_ATTACHMENT",
+ },
+ {
+ 0x8FA0, "GL_PERFMON_GLOBAL_MODE_QCOM",
+ },
+ {
+ 0x8815, "GL_RGB32F_EXT",
+ },
+ {
+ 0x813D, "GL_TEXTURE_MAX_LEVEL_APPLE",
+ },
+ {
+ 0x8DFD, "GL_MAX_FRAGMENT_UNIFORM_VECTORS",
+ },
+ {
+ 0x8CDD, "GL_FRAMEBUFFER_UNSUPPORTED",
+ },
+ {
+ 0x8CDF, "GL_MAX_COLOR_ATTACHMENTS_EXT",
+ },
+ {
+ 0x90F3, "GL_CONTEXT_ROBUST_ACCESS_EXT",
+ },
+ {
+ 0x90F2, "GL_MAX_MULTIVIEW_BUFFERS_EXT",
+ },
+ {
+ 0x90F1, "GL_MULTIVIEW_EXT",
+ },
+ {
+ 0x90F0, "GL_COLOR_ATTACHMENT_EXT",
+ },
+ {
+ 0x803C, "GL_ALPHA8_OES",
+ },
+ {
+ 0x84F5, "GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM",
+ },
+ {
+ 0x882A, "GL_DRAW_BUFFER5_EXT",
+ },
+ {
+ 0x80AA, "GL_SAMPLE_COVERAGE_VALUE",
+ },
+ {
+ 0x84F6, "GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM",
+ },
+ {
+ 0x80AB, "GL_SAMPLE_COVERAGE_INVERT",
+ },
+ {
+ 0x8C41, "GL_SRGB8_NV",
+ },
+ {
+ 0x8C40, "GL_SRGB_EXT",
+ },
+ {
+ 0x882B, "GL_DRAW_BUFFER6_EXT",
+ },
+ {
+ 0x8C17, "GL_UNSIGNED_NORMALIZED_EXT",
+ },
+ {
+ 0x8A4A, "GL_SKIP_DECODE_EXT",
+ },
+ {
+ 0x8A4F, "GL_PROGRAM_PIPELINE_OBJECT_EXT",
+ },
+ {
+ 0x882C, "GL_DRAW_BUFFER7_EXT",
+ },
+ {
+ 0x0010, "GL_MAP_FLUSH_EXPLICIT_BIT_EXT",
+ },
+ {
+ 0x882D, "GL_DRAW_BUFFER8_EXT",
+ },
+ {
+ 0x8F37, "GL_COPY_WRITE_BUFFER_NV",
+ },
+ {
+ 0x8F36, "GL_COPY_READ_BUFFER_NV",
+ },
+ {
+ 0x84FF, "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT",
+ },
+ {
+ 0x6000, "GL_TEXTURE_POOL_CHROMIUM",
+ },
+ {
+ 0x0B74, "GL_DEPTH_FUNC",
+ },
+ {
+ 0x8A49, "GL_DECODE_EXT",
+ },
+ {
+ 0x881B, "GL_RGB16F_EXT",
+ },
+ {
+ 0x0B71, "GL_DEPTH_TEST",
+ },
+ {
+ 0x0B70, "GL_DEPTH_RANGE",
+ },
+ {
+ 0x0B73, "GL_DEPTH_CLEAR_VALUE",
+ },
+ {
+ 0x0B72, "GL_DEPTH_WRITEMASK",
+ },
+ {
+ 0x85BA, "GL_UNSIGNED_SHORT_8_8_APPLE",
+ },
+ {
+ 0x882E, "GL_DRAW_BUFFER9_EXT",
+ },
+ {
+ 0x6001, "GL_TEXTURE_POOL_MANAGED_CHROMIUM",
+ },
+ {
+ 0x8073, "GL_MAX_3D_TEXTURE_SIZE_OES",
+ },
+ {
+ 0x8072, "GL_TEXTURE_WRAP_R_OES",
+ },
+ {
+ 0x9289, "GL_DST_OVER_NV",
+ },
+ {
+ 0x882F, "GL_DRAW_BUFFER10_EXT",
+ },
+ {
+ 0x8074, "GL_VERTEX_ARRAY_KHR",
+ },
+ {
+ 0x80E1, "GL_BGRA_EXT",
+ },
+ {
+ 0x8ED7, "GL_COVERAGE_AUTOMATIC_NV",
+ },
+ {
+ 0x8ED6, "GL_COVERAGE_EDGE_FRAGMENTS_NV",
+ },
+ {
+ 0x8ED5, "GL_COVERAGE_ALL_FRAGMENTS_NV",
+ },
+ {
+ 0x8ED4, "GL_COVERAGE_SAMPLES_NV",
+ },
+ {
+ 0x8ED3, "GL_COVERAGE_BUFFERS_NV",
+ },
+ {
+ 0x8ED2, "GL_COVERAGE_ATTACHMENT_NV",
+ },
+ {
+ 0x8ED1, "GL_COVERAGE_COMPONENT4_NV",
+ },
+ {
+ 0x8ED0, "GL_COVERAGE_COMPONENT_NV",
+ },
+ {
+ 0x9288, "GL_SRC_OVER_NV",
+ },
+ {
+ 0x800B, "GL_FUNC_REVERSE_SUBTRACT",
+ },
+ {
+ 0x00000400, "GL_STENCIL_BUFFER_BIT",
+ },
+ {
+ 0x800A, "GL_FUNC_SUBTRACT",
+ },
+ {
+ 0x8E2C, "GL_DEPTH_COMPONENT16_NONLINEAR_NV",
+ },
+ {
+ 0x889F, "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",
+ },
+ {
+ 0x8219, "GL_FRAMEBUFFER_UNDEFINED_OES",
+ },
+ {
+ 0x8E22, "GL_TRANSFORM_FEEDBACK",
+ },
+ {
+ 0x8E28, "GL_TIMESTAMP_EXT",
+ },
+ {
+ 0x8006, "GL_FUNC_ADD",
+ },
+ {
+ 0x8007, "GL_MIN_EXT",
+ },
+ {
+ 0x8004, "GL_ONE_MINUS_CONSTANT_ALPHA",
+ },
+ {
+ 0x8005, "GL_BLEND_COLOR",
+ },
+ {
+ 0x8002, "GL_ONE_MINUS_CONSTANT_COLOR",
+ },
+ {
+ 0x8003, "GL_CONSTANT_ALPHA",
+ },
+ {
+ 0x8001, "GL_CONSTANT_COLOR",
+ },
+ {
+ 0x0204, "GL_GREATER",
+ },
+ {
+ 0x0205, "GL_NOTEQUAL",
+ },
+ {
+ 0x0206, "GL_GEQUAL",
+ },
+ {
+ 0x0207, "GL_ALWAYS",
+ },
+ {
+ 0x0200, "GL_NEVER",
+ },
+ {
+ 0x0201, "GL_LESS",
+ },
+ {
+ 0x0202, "GL_EQUAL",
+ },
+ {
+ 0x0203, "GL_LEQUAL",
+ },
+ {
+ 0x2901, "GL_REPEAT",
+ },
+ {
+ 0x92A0, "GL_EXCLUSION_NV",
+ },
+ {
+ 0x93D8, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR",
+ },
+ {
+ 0x93D9, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR",
+ },
+ {
+ 0x8FB2, "GL_GPU_OPTIMIZED_QCOM",
+ },
+ {
+ 0x190A, "GL_LUMINANCE_ALPHA",
+ },
+ {
+ 0x8FB0, "GL_BINNING_CONTROL_HINT_QCOM",
+ },
+ {
+ 0x92A1, "GL_CONTRAST_NV",
+ },
+ {
+ 0x1E00, "GL_KEEP",
+ },
+ {
+ 0x1E01, "GL_REPLACE",
+ },
+ {
+ 0x1E02, "GL_INCR",
+ },
+ {
+ 0x1E03, "GL_DECR",
+ },
+ {
+ 0x93D6, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR",
+ },
+ {
+ 0x93D7, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR",
+ },
+ {
+ 0x93D4, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR",
+ },
+ {
+ 0x93D5, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR",
+ },
+ {
+ 0x0BE2, "GL_BLEND",
+ },
+ {
+ 0x84CB, "GL_TEXTURE11",
+ },
+ {
+ 0x8D55, "GL_RENDERBUFFER_STENCIL_SIZE",
+ },
+ {
+ 0x8D54, "GL_RENDERBUFFER_DEPTH_SIZE",
+ },
+ {
+ 0x8D57, "GL_MAX_SAMPLES_ANGLE",
+ },
+ {
+ 0x8D56, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE",
+ },
+ {
+ 0x8D51, "GL_RENDERBUFFER_GREEN_SIZE",
+ },
+ {
+ 0x8D50, "GL_RENDERBUFFER_RED_SIZE",
+ },
+ {
+ 0x8D53, "GL_RENDERBUFFER_ALPHA_SIZE",
+ },
+ {
+ 0x8D52, "GL_RENDERBUFFER_BLUE_SIZE",
+ },
+ {
+ 0x92A6, "GL_VIVIDLIGHT_NV",
+ },
+ {
+ 0x00080000, "GL_STENCIL_BUFFER_BIT3_QCOM",
+ },
+ {
+ 0x92A7, "GL_LINEARLIGHT_NV",
+ },
+ {
+ 0x886A, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED",
+ },
+ {
+ 0x0C01, "GL_DRAW_BUFFER_EXT",
+ },
+ {
+ 0x78F2, "GL_IMAGE_SCANOUT_CHROMIUM",
+ },
+ {
+ 0x93C7, "GL_COMPRESSED_RGBA_ASTC_6x5x5_OES",
+ },
+ {
+ 0x8B5F, "GL_SAMPLER_3D_OES",
+ },
+ {
+ 0x8B95, "GL_PALETTE8_RGB8_OES",
+ },
+ {
+ 0x9250, "GL_SHADER_BINARY_DMP",
+ },
+ {
+ 0x10000000, "GL_MULTISAMPLE_BUFFER_BIT4_QCOM",
+ },
+ {
+ 0x8C92, "GL_ATC_RGB_AMD",
+ },
+ {
+ 0x9154, "GL_VERTEX_ARRAY_OBJECT_EXT",
+ },
+ {
+ 0x9153, "GL_QUERY_OBJECT_EXT",
+ },
+ {
+ 0x8864, "GL_QUERY_COUNTER_BITS_EXT",
+ },
+ {
+ 0x9151, "GL_BUFFER_OBJECT_EXT",
+ },
+ {
+ 0x8C93, "GL_ATC_RGBA_EXPLICIT_ALPHA_AMD",
+ },
+ {
+ 0x00000002, "GL_CONTEXT_FLAG_DEBUG_BIT_KHR",
+ },
+ {
+ 0x00000001, "GL_SYNC_FLUSH_COMMANDS_BIT_APPLE",
+ },
+ {
+ 0x9248, "GL_OVERLAY_TRANSFORM_ROTATE_90_CHROMIUM",
+ },
+ {
+ 0x00000004, "GL_COLOR_BUFFER_BIT2_QCOM",
+ },
+ {
+ 0x1702, "GL_TEXTURE",
+ },
+ {
+ 0x00000008, "GL_COLOR_BUFFER_BIT3_QCOM",
+ },
+ {
+ 0x8B58, "GL_BOOL_VEC3",
+ },
+ {
+ 0x8828, "GL_DRAW_BUFFER3_EXT",
+ },
+ {
+ 0x8DF0, "GL_LOW_FLOAT",
+ },
+ {
+ 0x1906, "GL_ALPHA",
+ },
+ {
+ 0x1907, "GL_RGB",
+ },
+ {
+ 0x8FBB, "GL_GPU_DISJOINT_EXT",
+ },
+ {
+ 0x1902, "GL_DEPTH_COMPONENT",
+ },
+ {
+ 0x8B56, "GL_BOOL",
+ },
+ {
+ 0x93DB, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR",
+ },
+ {
+ 0x8B9B, "GL_IMPLEMENTATION_COLOR_READ_FORMAT",
+ },
+ {
+ 0x8B9A, "GL_IMPLEMENTATION_COLOR_READ_TYPE",
+ },
+ {
+ 0x93DA, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR",
+ },
+ {
+ 0x1908, "GL_RGBA",
+ },
+ {
+ 0x8DF2, "GL_HIGH_FLOAT",
+ },
+ {
+ 0x93DD, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR",
+ },
+ {
+ 0x8827, "GL_DRAW_BUFFER2_EXT",
+ },
+ {
+ 0x9243, "GL_UNPACK_COLORSPACE_CONVERSION_CHROMIUM",
+ },
+ {
+ 0x8DF3, "GL_LOW_INT",
+ },
+ {
+ 0x82E8, "GL_MAX_LABEL_LENGTH_KHR",
+ },
+ {
+ 0x82E6, "GL_SAMPLER_KHR",
+ },
+ {
+ 0x0C02, "GL_READ_BUFFER_EXT",
+ },
+ {
+ 0x82E3, "GL_QUERY_KHR",
+ },
+ {
+ 0x82E2, "GL_PROGRAM_KHR",
+ },
+ {
+ 0x82E1, "GL_SHADER_KHR",
+ },
+ {
+ 0x8B52, "GL_FLOAT_VEC4",
+ },
+ {
+ 0x9240, "GL_UNPACK_FLIP_Y_CHROMIUM",
+ },
+ {
+ 0x8DF6, "GL_UNSIGNED_INT_10_10_10_2_OES",
+ },
+ {
+ 0x8230, "GL_RG32F_EXT",
+ },
+ {
+ 0x8DF7, "GL_INT_10_10_10_2_OES",
+ },
+ {
+ 0x9246, "GL_OVERLAY_TRANSFORM_FLIP_HORIZONTAL_CHROMIUM",
+ },
+ {
+ 0x8B69, "GL_FLOAT_MAT4x2_NV",
+ },
+ {
+ 0x812D, "GL_CLAMP_TO_BORDER_NV",
+ },
+ {
+ 0x812F, "GL_CLAMP_TO_EDGE",
+ },
+ {
+ 0x86A3, "GL_COMPRESSED_TEXTURE_FORMATS",
+ },
+ {
+ 0x9244, "GL_BIND_GENERATES_RESOURCE_CHROMIUM",
+ },
+ {
+ 0x86A2, "GL_NUM_COMPRESSED_TEXTURE_FORMATS",
+ },
+ {
+ 0x0CF3, "GL_UNPACK_SKIP_ROWS_EXT",
+ },
+ {
+ 0x0CF2, "GL_UNPACK_ROW_LENGTH_EXT",
+ },
+ {
+ 0x140C, "GL_FIXED",
+ },
+ {
+ 0x8008, "GL_MAX_EXT",
+ },
+ {
+ 0x0CF5, "GL_UNPACK_ALIGNMENT",
+ },
+ {
+ 0x0CF4, "GL_UNPACK_SKIP_PIXELS_EXT",
+ },
+ {
+ 0x8009, "GL_BLEND_EQUATION",
+ },
+ {
+ 0x1401, "GL_UNSIGNED_BYTE",
+ },
+ {
+ 0x1400, "GL_BYTE",
+ },
+ {
+ 0x1403, "GL_UNSIGNED_SHORT",
+ },
+ {
+ 0x1402, "GL_SHORT",
+ },
+ {
+ 0x1405, "GL_UNSIGNED_INT",
+ },
+ {
+ 0x1404, "GL_INT",
+ },
+ {
+ 0x1406, "GL_FLOAT",
+ },
+ {
+ 0x8043, "GL_LUMINANCE4_ALPHA4_OES",
+ },
+ {
+ 0x8040, "GL_LUMINANCE8_OES",
+ },
+ {
+ 0x8045, "GL_LUMINANCE8_ALPHA8_OES",
+ },
+ {
+ 0x8CD1, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",
+ },
+ {
+ 0x00040000, "GL_STENCIL_BUFFER_BIT2_QCOM",
+ },
+ {
+ 0x8CD0, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",
+ },
+ {
+ 0x8CE4, "GL_COLOR_ATTACHMENT4_EXT",
+ },
+ {
+ 0x8CD3, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",
+ },
+ {
+ 0x929E, "GL_DIFFERENCE_NV",
+ },
+ {
+ 0x0B90, "GL_STENCIL_TEST",
+ },
+ {
+ 0x8CD2, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",
+ },
+ {
+ 0x881C, "GL_ALPHA16F_EXT",
+ },
+ {
+ 0x928E, "GL_SRC_ATOP_NV",
+ },
+ {
+ 0x8CD4, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES",
+ },
+ {
+ 0x9298, "GL_LIGHTEN_NV",
+ },
+ {
+ 0x8CD7, "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",
+ },
+ {
+ 0x9112, "GL_OBJECT_TYPE_APPLE",
+ },
+ {
+ 0x8038, "GL_POLYGON_OFFSET_FACTOR",
+ },
+ {
+ 0x851A, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z",
+ },
+ {
+ 0x851C, "GL_MAX_CUBE_MAP_TEXTURE_SIZE",
+ },
+ {
+ 0x8CD9, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS",
+ },
+ {
+ 0x84CC, "GL_TEXTURE12",
+ },
+ {
+ 0x0BA2, "GL_VIEWPORT",
+ },
+ {
+ 0x84CA, "GL_TEXTURE10",
+ },
+ {
+ 0x78F1, "GL_IMAGE_MAP_CHROMIUM",
+ },
+ {
+ 0x84CF, "GL_TEXTURE15",
+ },
+ {
+ 0x84CE, "GL_TEXTURE14",
+ },
+ {
+ 0x84CD, "GL_TEXTURE13",
+ },
+ {
+ 0x9115, "GL_SYNC_FLAGS_APPLE",
+ },
+ {
+ 0x9286, "GL_SRC_NV",
+ },
+ {
+ 0x83F3, "GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE",
+ },
+ {
+ 0x83F2, "GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE",
+ },
+ {
+ 0x83F1, "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT",
+ },
+ {
+ 0x9114, "GL_SYNC_STATUS_APPLE",
+ },
+ {
+ 0x8C0A, "GL_SGX_BINARY_IMG",
+ },
+ {
+ 0x9285, "GL_BLEND_ADVANCED_COHERENT_NV",
+ },
+ {
+ 0x911C, "GL_CONDITION_SATISFIED_APPLE",
+ },
+ {
+ 0x911B, "GL_TIMEOUT_EXPIRED_APPLE",
+ },
+ {
+ 0x911A, "GL_ALREADY_SIGNALED_APPLE",
+ },
+ {
+ 0x9284, "GL_CONJOINT_NV",
+ },
+ {
+ 0x911D, "GL_WAIT_FAILED_APPLE",
+ },
+ {
+ 0x929A, "GL_COLORBURN_NV",
+ },
+ {
+ 0x929B, "GL_HARDLIGHT_NV",
+ },
+ {
+ 0x929C, "GL_SOFTLIGHT_NV",
+ },
+ {
+ 0x846D, "GL_ALIASED_POINT_SIZE_RANGE",
+ },
+ {
+ 0x846E, "GL_ALIASED_LINE_WIDTH_RANGE",
+ },
+ {
+ 0x929F, "GL_MINUS_NV",
+ },
+ {
+ 0x9282, "GL_UNCORRELATED_NV",
+ },
+ {
+ 0x9113, "GL_SYNC_CONDITION_APPLE",
+ },
+ {
+ 0x93A4, "GL_PACK_REVERSE_ROW_ORDER_ANGLE",
+ },
+ {
+ 0x9111, "GL_MAX_SERVER_WAIT_TIMEOUT_APPLE",
+ },
+ {
+ 0x93A6, "GL_PROGRAM_BINARY_ANGLE",
+ },
+ {
+ 0x9117, "GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE",
+ },
+ {
+ 0x93A0, "GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE",
+ },
+ {
+ 0x93A3, "GL_FRAMEBUFFER_ATTACHMENT_ANGLE",
+ },
+ {
+ 0x93A2, "GL_TEXTURE_USAGE_ANGLE",
+ },
+ {
+ 0x8802, "GL_STENCIL_BACK_PASS_DEPTH_FAIL",
+ },
+ {
+ 0x9119, "GL_SIGNALED_APPLE",
+ },
+ {
+ 0x9118, "GL_UNSIGNALED_APPLE",
+ },
+ {
+ 0x9294, "GL_MULTIPLY_NV",
+ },
+ {
+ 0x9295, "GL_SCREEN_NV",
+ },
+ {
+ 0x9296, "GL_OVERLAY_NV",
+ },
+ {
+ 0x9297, "GL_DARKEN_NV",
+ },
+ {
+ 0x0020, "GL_MAP_UNSYNCHRONIZED_BIT_EXT",
+ },
+ {
+ 0x8C01, "GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG",
+ },
+ {
+ 0x8C00, "GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG",
+ },
+ {
+ 0x8A52, "GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT",
+ },
+ {
+ 0x8C02, "GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",
+ },
+ {
+ 0x84C9, "GL_TEXTURE9",
+ },
+ {
+ 0x84C8, "GL_TEXTURE8",
+ },
+ {
+ 0x8869, "GL_MAX_VERTEX_ATTRIBS",
+ },
+ {
+ 0x84C3, "GL_TEXTURE3",
+ },
+ {
+ 0x84C2, "GL_TEXTURE2",
+ },
+ {
+ 0x84C1, "GL_TEXTURE1",
+ },
+ {
+ 0x84C0, "GL_TEXTURE0",
+ },
+ {
+ 0x84C7, "GL_TEXTURE7",
+ },
+ {
+ 0x84C6, "GL_TEXTURE6",
+ },
+ {
+ 0x84C5, "GL_TEXTURE5",
+ },
+ {
+ 0x8803, "GL_STENCIL_BACK_PASS_DEPTH_PASS",
+ },
+ {
+ 0x928A, "GL_SRC_IN_NV",
+ },
+ {
+ 0x8518, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y",
+ },
+ {
+ 0x8519, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z",
+ },
+ {
+ 0x8514, "GL_TEXTURE_BINDING_CUBE_MAP",
+ },
+ {
+ 0x8515, "GL_TEXTURE_CUBE_MAP_POSITIVE_X",
+ },
+ {
+ 0x8516, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X",
+ },
+ {
+ 0x8517, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y",
+ },
+ {
+ 0x8513, "GL_TEXTURE_CUBE_MAP",
+ },
+ {
+ 0x8626, "GL_CURRENT_VERTEX_ATTRIB",
+ },
+ {
+ 0x92B1, "GL_PLUS_CLAMPED_NV",
+ },
+ {
+ 0x92B0, "GL_HSL_LUMINOSITY_NV",
+ },
+ {
+ 0x92B3, "GL_MINUS_CLAMPED_NV",
+ },
+ {
+ 0x92B2, "GL_PLUS_CLAMPED_ALPHA_NV",
+ },
+ {
+ 0x8765, "GL_BUFFER_USAGE",
+ },
+ {
+ 0x8764, "GL_BUFFER_SIZE",
+ },
+ {
+ 0x8B99, "GL_PALETTE8_RGB5_A1_OES",
+ },
+ {
+ 0x0503, "GL_STACK_OVERFLOW_KHR",
+ },
+ {
+ 0x0502, "GL_INVALID_OPERATION",
+ },
+ {
+ 0x0501, "GL_INVALID_VALUE",
+ },
+ {
+ 0x0500, "GL_INVALID_ENUM",
+ },
+ {
+ 64, "GL_MAILBOX_SIZE_CHROMIUM",
+ },
+ {
+ 0x0506, "GL_INVALID_FRAMEBUFFER_OPERATION",
+ },
+ {
+ 0x0505, "GL_OUT_OF_MEMORY",
+ },
+ {
+ 0x0504, "GL_STACK_UNDERFLOW_KHR",
+ },
+ {
+ 0x0B44, "GL_CULL_FACE",
+ },
+ {
+ 0x8B5E, "GL_SAMPLER_2D",
+ },
+ {
+ 0x0B46, "GL_FRONT_FACE",
+ },
+ {
+ 0x8FB3, "GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM",
+ },
+ {
+ 0x824A, "GL_DEBUG_SOURCE_APPLICATION_KHR",
+ },
+ {
+ 0x824B, "GL_DEBUG_SOURCE_OTHER_KHR",
+ },
+ {
+ 0x824C, "GL_DEBUG_TYPE_ERROR_KHR",
+ },
+ {
+ 0x824D, "GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR",
+ },
+ {
+ 0x824E, "GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR",
+ },
+ {
+ 0x824F, "GL_DEBUG_TYPE_PORTABILITY_KHR",
+ },
+ {
+ 0x8B31, "GL_VERTEX_SHADER",
+ },
+ {
+ 0x8B30, "GL_FRAGMENT_SHADER",
+ },
+ {
+ 0x8FB1, "GL_CPU_OPTIMIZED_QCOM",
+ },
+ {
+ 0x93D2, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR",
+ },
+ {
+ 0x8B5A, "GL_FLOAT_MAT2",
+ },
+ {
+ 0x84D8, "GL_TEXTURE24",
+ },
+ {
+ 0x84D9, "GL_TEXTURE25",
+ },
+ {
+ 0x84D6, "GL_TEXTURE22",
+ },
+ {
+ 0x84D7, "GL_TEXTURE23",
+ },
+ {
+ 0x84D4, "GL_TEXTURE20",
+ },
+ {
+ 0x0D05, "GL_PACK_ALIGNMENT",
+ },
+ {
+ 0x84D2, "GL_TEXTURE18",
+ },
+ {
+ 0x84D3, "GL_TEXTURE19",
+ },
+ {
+ 0x84D0, "GL_TEXTURE16",
+ },
+ {
+ 0x84D1, "GL_TEXTURE17",
+ },
+ {
+ 0x93D1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR",
+ },
+ {
+ 0x84DF, "GL_TEXTURE31",
+ },
+ {
+ 0x8B97, "GL_PALETTE8_R5_G6_B5_OES",
+ },
+ {
+ 0x84DD, "GL_TEXTURE29",
+ },
+ {
+ 0x84DE, "GL_TEXTURE30",
+ },
+ {
+ 0x84DB, "GL_TEXTURE27",
+ },
+ {
+ 0x84DC, "GL_TEXTURE28",
+ },
+ {
+ 0x6002, "GL_TEXTURE_POOL_UNMANAGED_CHROMIUM",
+ },
+ {
+ 0x84DA, "GL_TEXTURE26",
+ },
+ {
+ 0x8242, "GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR",
+ },
+ {
+ 0x8243, "GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR",
+ },
+ {
+ 0x8244, "GL_DEBUG_CALLBACK_FUNCTION_KHR",
+ },
+ {
+ 0x8245, "GL_DEBUG_CALLBACK_USER_PARAM_KHR",
+ },
+ {
+ 0x8246, "GL_DEBUG_SOURCE_API_KHR",
+ },
+ {
+ 0x8247, "GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR",
+ },
+ {
+ 0x8248, "GL_DEBUG_SOURCE_SHADER_COMPILER_KHR",
+ },
+ {
+ 0x8249, "GL_DEBUG_SOURCE_THIRD_PARTY_KHR",
+ },
+ {
+ 0x8B94, "GL_PALETTE4_RGB5_A1_OES",
+ },
+ {
+ 0x00000040, "GL_COLOR_BUFFER_BIT6_QCOM",
+ },
+ {
+ 0x8645, "GL_VERTEX_ATTRIB_ARRAY_POINTER",
+ },
+ {
+ 0x8865, "GL_CURRENT_QUERY_EXT",
+ },
+ {
+ 0x8866, "GL_QUERY_RESULT_EXT",
+ },
+ {
+ 0x8867, "GL_QUERY_RESULT_AVAILABLE_EXT",
+ },
+ {
+ 0x08000000, "GL_MULTISAMPLE_BUFFER_BIT3_QCOM",
+ },
+ {
+ 0x87FA, "GL_3DC_XY_AMD",
+ },
+ {
+ 0x84C4, "GL_TEXTURE4",
+ },
+ {
+ 0x85B5, "GL_VERTEX_ARRAY_BINDING_OES",
+ },
+ {
+ 0x8D6A, "GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT",
+ },
+ {
+ 0x8D6C, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT",
+ },
+ {
+ 0x8252, "GL_LOSE_CONTEXT_ON_RESET_EXT",
+ },
+ {
+ 0x8C4C, "GL_COMPRESSED_SRGB_S3TC_DXT1_NV",
+ },
+ {
+ 0x8C4E, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV",
+ },
+ {
+ 0x1102, "GL_NICEST",
+ },
+ {
+ 0x8C4F, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV",
+ },
+ {
+ 0x93E9, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES",
+ },
+ {
+ 0x93E8, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES",
+ },
+ {
+ 0x8C43, "GL_SRGB8_ALPHA8_EXT",
+ },
+ {
+ 0x8C42, "GL_SRGB_ALPHA_EXT",
+ },
+ {
+ 0x8C45, "GL_SLUMINANCE8_ALPHA8_NV",
+ },
+ {
+ 0x8C44, "GL_SLUMINANCE_ALPHA_NV",
+ },
+ {
+ 0x8C47, "GL_SLUMINANCE8_NV",
+ },
+ {
+ 0x8C46, "GL_SLUMINANCE_NV",
+ },
+ {
+ 0x93E1, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES",
+ },
+ {
+ 0x93E0, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES",
+ },
+ {
+ 0x93E3, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES",
+ },
+ {
+ 0x93E2, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES",
+ },
+ {
+ 0x93E5, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES",
+ },
+ {
+ 0x93E4, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES",
+ },
+ {
+ 0x93E7, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES",
+ },
+ {
+ 0x93E6, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES",
+ },
+ {
+ 0x8D68, "GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES",
+ },
+ {
+ 0x85BB, "GL_UNSIGNED_SHORT_8_8_REV_APPLE",
+ },
+ {
+ 0x8D61, "GL_HALF_FLOAT_OES",
+ },
+ {
+ 0x8D62, "GL_RGB565",
+ },
+ {
+ 0x8D64, "GL_ETC1_RGB8_OES",
+ },
+ {
+ 0x8D65, "GL_TEXTURE_EXTERNAL_OES",
+ },
+ {
+ 0x8D66, "GL_SAMPLER_EXTERNAL_OES",
+ },
+ {
+ 0x8D67, "GL_TEXTURE_BINDING_EXTERNAL_OES",
+ },
+ {
+ 0x04000000, "GL_MULTISAMPLE_BUFFER_BIT2_QCOM",
+ },
+ {
+ 0x8CEE, "GL_COLOR_ATTACHMENT14_EXT",
+ },
+ {
+ 0x2800, "GL_TEXTURE_MAG_FILTER",
+ },
+ {
+ 0x2801, "GL_TEXTURE_MIN_FILTER",
+ },
+ {
+ 0x2802, "GL_TEXTURE_WRAP_S",
+ },
+ {
+ 0x2803, "GL_TEXTURE_WRAP_T",
+ },
+ {
+ 0x2703, "GL_LINEAR_MIPMAP_LINEAR",
+ },
+ {
+ 0x8B98, "GL_PALETTE8_RGBA4_OES",
+ },
+ {
+ 0x84F3, "GL_FENCE_STATUS_NV",
+ },
+ {
+ 0x2702, "GL_NEAREST_MIPMAP_LINEAR",
+ },
+ {
+ 0x1F03, "GL_EXTENSIONS",
+ },
+ {
+ 0x1F02, "GL_VERSION",
+ },
+ {
+ 0x1F01, "GL_RENDERER",
+ },
+ {
+ 0x1F00, "GL_VENDOR",
+ },
+ {
+ 0x9247, "GL_OVERLAY_TRANSFORM_FLIP_VERTICAL_CHROMIUM",
+ },
+ {
+ 0x2701, "GL_LINEAR_MIPMAP_NEAREST",
+ },
+ {
+ 0x9245, "GL_OVERLAY_TRANSFORM_NONE_CHROMIUM",
+ },
+ {
+ 0x92B4, "GL_INVERT_OVG_NV",
+ },
+ {
+ 0x9249, "GL_OVERLAY_TRANSFORM_ROTATE_180_CHROMIUM",
+ },
+ {
+ 0x0B94, "GL_STENCIL_FAIL",
+ },
+ {
+ 0x8B4C, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS",
+ },
+ {
+ 0x8B4D, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS",
+ },
+ {
+ 0x8B4F, "GL_SHADER_TYPE",
+ },
+ {
+ 0x00004000, "GL_COLOR_BUFFER_BIT",
+ },
+ {
+ 0x00000010, "GL_COLOR_BUFFER_BIT4_QCOM",
+ },
+ {
+ 0x8834, "GL_DRAW_BUFFER15_EXT",
+ },
+ {
+ 0x8833, "GL_DRAW_BUFFER14_EXT",
+ },
+ {
+ 0x8832, "GL_DRAW_BUFFER13_EXT",
+ },
+ {
+ 0x8831, "GL_DRAW_BUFFER12_EXT",
+ },
+ {
+ 0x8830, "GL_DRAW_BUFFER11_EXT",
+ },
+ {
+ 0x8DC5, "GL_SAMPLER_CUBE_SHADOW_NV",
+ },
+ {
+ 0x93B8, "GL_COMPRESSED_RGBA_ASTC_10x5_KHR",
+ },
+ {
+ 0x9241, "GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM",
+ },
+ {
+ 0x00010000, "GL_STENCIL_BUFFER_BIT0_QCOM",
+ },
+ {
+ 0x0B93, "GL_STENCIL_VALUE_MASK",
+ },
+ {
+ 0x0B92, "GL_STENCIL_FUNC",
+ },
+ {
+ 0x0B91, "GL_STENCIL_CLEAR_VALUE",
+ },
+ {
+ 0x883D, "GL_BLEND_EQUATION_ALPHA",
+ },
+ {
+ 0x0B97, "GL_STENCIL_REF",
+ },
+ {
+ 0x0B96, "GL_STENCIL_PASS_DEPTH_PASS",
+ },
+ {
+ 0x0B95, "GL_STENCIL_PASS_DEPTH_FAIL",
+ },
+ {
+ 0x2700, "GL_NEAREST_MIPMAP_NEAREST",
+ },
+ {
+ 0x0B98, "GL_STENCIL_WRITEMASK",
+ },
+ {
+ 0x8B40, "GL_PROGRAM_OBJECT_EXT",
+ },
+ {
+ 0x1004, "GL_TEXTURE_BORDER_COLOR_NV",
+ },
+ {
+ 0x8B48, "GL_SHADER_OBJECT_EXT",
+ },
+ {
+ 0x912F, "GL_TEXTURE_IMMUTABLE_FORMAT_EXT",
+ },
+ {
+ 0x924A, "GL_OVERLAY_TRANSFORM_ROTATE_270_CHROMIUM",
+ },
+ {
+ 0x20000000, "GL_MULTISAMPLE_BUFFER_BIT5_QCOM",
+ },
+ {
+ 0x0DE1, "GL_TEXTURE_2D",
+ },
+ {
+ 0x80C9, "GL_BLEND_SRC_RGB",
+ },
+ {
+ 0x80C8, "GL_BLEND_DST_RGB",
+ },
+ {
+ 0x8059, "GL_RGB10_A2_EXT",
+ },
+ {
+ 0x8058, "GL_RGBA8_OES",
+ },
+ {
+ 0x8B93, "GL_PALETTE4_RGBA4_OES",
+ },
+ {
+ 0x00002000, "GL_DEPTH_BUFFER_BIT5_QCOM",
+ },
+ {
+ 0x8051, "GL_RGB8_OES",
+ },
+ {
+ 0x8052, "GL_RGB10_EXT",
+ },
+ {
+ 0x8CAB, "GL_RENDERBUFFER_SAMPLES_ANGLE",
+ },
+ {
+ 0x8057, "GL_RGB5_A1",
+ },
+ {
+ 0x8056, "GL_RGBA4",
+ },
+ {
+ 0x150A, "GL_INVERT",
+ },
+ {
+ 0x01000000, "GL_MULTISAMPLE_BUFFER_BIT0_QCOM",
+ },
+ {
+ 0x78ED, "GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM",
+ },
+ {
+ 0x78EE, "GL_PIXEL_PACK_TRANSFER_BUFFER_BINDING_CHROMIUM",
+ },
+ {
+ 0x78EF, "GL_PIXEL_UNPACK_TRANSFER_BUFFER_BINDING_CHROMIUM",
+ },
+ {
+ 0x0B45, "GL_CULL_FACE_MODE",
+ },
+ {
+ 0x8B92, "GL_PALETTE4_R5_G6_B5_OES",
+ },
+ {
+ 0x00100000, "GL_STENCIL_BUFFER_BIT4_QCOM",
+ },
+ {
+ 0x9299, "GL_COLORDODGE_NV",
+ },
+ {
+ 0x8D20, "GL_STENCIL_ATTACHMENT",
+ },
+ {
+ 0x8B91, "GL_PALETTE4_RGBA8_OES",
+ },
+ {
+ 0x00000200, "GL_DEPTH_BUFFER_BIT1_QCOM",
+ },
+ {
+ 0x00008000, "GL_COVERAGE_BUFFER_BIT_NV",
+ },
+ {
+ 0x1506, "GL_XOR_NV",
+ },
+ {
+ 0x8CA8, "GL_READ_FRAMEBUFFER_ANGLE",
+ },
+ {
+ 0x8CA9, "GL_DRAW_FRAMEBUFFER_ANGLE",
+ },
+ {
+ 0x8CA6, "GL_FRAMEBUFFER_BINDING",
+ },
+ {
+ 0x8CA7, "GL_RENDERBUFFER_BINDING",
+ },
+ {
+ 0x8CA4, "GL_STENCIL_BACK_VALUE_MASK",
+ },
+ {
+ 0x8CA5, "GL_STENCIL_BACK_WRITEMASK",
+ },
+ {
+ 0x8B90, "GL_PALETTE4_RGB8_OES",
+ },
+ {
+ 0x8CA3, "GL_STENCIL_BACK_REF",
+ },
+ {
+ 0x80CB, "GL_BLEND_SRC_ALPHA",
+ },
+ {
+ 0x80CA, "GL_BLEND_DST_ALPHA",
+ },
+ {
+ 0x8CE7, "GL_COLOR_ATTACHMENT7_EXT",
+ },
+ {
+ 0x93B0, "GL_COMPRESSED_RGBA_ASTC_4x4_KHR",
+ },
+ {
+ 0x93B1, "GL_COMPRESSED_RGBA_ASTC_5x4_KHR",
+ },
+ {
+ 0x93B2, "GL_COMPRESSED_RGBA_ASTC_5x5_KHR",
+ },
+ {
+ 0x93B3, "GL_COMPRESSED_RGBA_ASTC_6x5_KHR",
+ },
+ {
+ 0x93B4, "GL_COMPRESSED_RGBA_ASTC_6x6_KHR",
+ },
+ {
+ 0x93B5, "GL_COMPRESSED_RGBA_ASTC_8x5_KHR",
+ },
+ {
+ 0x93B6, "GL_COMPRESSED_RGBA_ASTC_8x6_KHR",
+ },
+ {
+ 0x93B7, "GL_COMPRESSED_RGBA_ASTC_8x8_KHR",
+ },
+ {
+ 0x8CD6, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT",
+ },
+ {
+ 0x93B9, "GL_COMPRESSED_RGBA_ASTC_10x6_KHR",
+ },
+ {
+ 0x8253, "GL_GUILTY_CONTEXT_RESET_EXT",
+ },
+ {
+ 0x8CE5, "GL_COLOR_ATTACHMENT5_EXT",
+ },
+ {
+ 0x8CE9, "GL_COLOR_ATTACHMENT9_EXT",
+ },
+ {
+ 0x8B96, "GL_PALETTE8_RGBA8_OES",
+ },
+ {
+ 0x8872, "GL_MAX_TEXTURE_IMAGE_UNITS",
+ },
+ {
+ 0x8508, "GL_DECR_WRAP",
+ },
+ {
+ 0x92AD, "GL_HSL_HUE_NV",
+ },
+ {
+ 0x92AE, "GL_HSL_SATURATION_NV",
+ },
+ {
+ 0x92AF, "GL_HSL_COLOR_NV",
+ },
+ {
+ 0x8DC4, "GL_SAMPLER_2D_ARRAY_SHADOW_NV",
+ },
+ {
+ 0x8507, "GL_INCR_WRAP",
+ },
+ {
+ 0x8895, "GL_ELEMENT_ARRAY_BUFFER_BINDING",
+ },
+ {
+ 0x8894, "GL_ARRAY_BUFFER_BINDING",
+ },
+ {
+ 0x92A3, "GL_INVERT_RGB_NV",
+ },
+ {
+ 0x92A4, "GL_LINEARDODGE_NV",
+ },
+ {
+ 0x92A5, "GL_LINEARBURN_NV",
+ },
+ {
+ 0x8893, "GL_ELEMENT_ARRAY_BUFFER",
+ },
+ {
+ 0x8892, "GL_ARRAY_BUFFER",
+ },
+ {
+ 0x92A8, "GL_PINLIGHT_NV",
+ },
+ {
+ 0x92A9, "GL_HARDMIX_NV",
+ },
+ {
+ 0x8BD8, "GL_TEXTURE_IMAGE_VALID_QCOM",
+ },
+ {
+ 0x84D5, "GL_TEXTURE21",
+ },
+ {
+ 0x9287, "GL_DST_NV",
+ },
+ {
+ 0x93BA, "GL_COMPRESSED_RGBA_ASTC_10x8_KHR",
+ },
+ {
+ 0x93BB, "GL_COMPRESSED_RGBA_ASTC_10x10_KHR",
+ },
+ {
+ 0x93BC, "GL_COMPRESSED_RGBA_ASTC_12x10_KHR",
+ },
+ {
+ 0x93BD, "GL_COMPRESSED_RGBA_ASTC_12x12_KHR",
+ },
+ {
+ 0x84E8, "GL_MAX_RENDERBUFFER_SIZE",
+ },
+ {
+ 0x9281, "GL_BLEND_OVERLAP_NV",
+ },
+ {
+ 0x9280, "GL_BLEND_PREMULTIPLIED_SRC_NV",
+ },
+ {
+ 0x8370, "GL_MIRRORED_REPEAT",
+ },
+ {
+ 0x84E0, "GL_ACTIVE_TEXTURE",
+ },
+ {
+ 0x8800, "GL_STENCIL_BACK_FUNC",
+ },
+ {
+ 0x8801, "GL_STENCIL_BACK_FAIL",
+ },
+ {
+ 0x0D33, "GL_MAX_TEXTURE_SIZE",
+ },
+ {
+ 0x8624, "GL_VERTEX_ATTRIB_ARRAY_STRIDE",
+ },
+ {
+ 0x8625, "GL_VERTEX_ATTRIB_ARRAY_TYPE",
+ },
+ {
+ 0x8622, "GL_VERTEX_ATTRIB_ARRAY_ENABLED",
+ },
+ {
+ 0x8623, "GL_VERTEX_ATTRIB_ARRAY_SIZE",
+ },
+ {
+ 0x8DB9, "GL_FRAMEBUFFER_SRGB_EXT",
+ },
+ {
+ 0x8259, "GL_ACTIVE_PROGRAM_EXT",
+ },
+ {
+ 0x8258, "GL_PROGRAM_SEPARABLE_EXT",
+ },
+ {
+ 0x8256, "GL_RESET_NOTIFICATION_STRATEGY_EXT",
+ },
+ {
+ 0x8255, "GL_UNKNOWN_CONTEXT_RESET_EXT",
+ },
+ {
+ 0x8254, "GL_INNOCENT_CONTEXT_RESET_EXT",
+ },
+ {
+ 0x1100, "GL_DONT_CARE",
+ },
+ {
+ 0x1101, "GL_FASTEST",
+ },
+ {
+ 0x8251, "GL_DEBUG_TYPE_OTHER_KHR",
+ },
+ {
+ 0x8250, "GL_DEBUG_TYPE_PERFORMANCE_KHR",
+ },
+ {
+ 0x8CEB, "GL_COLOR_ATTACHMENT11_EXT",
+ },
+ {
+ 0x8CEC, "GL_COLOR_ATTACHMENT12_EXT",
+ },
+ {
+ 0x0408, "GL_FRONT_AND_BACK",
+ },
+ {
+ 0x8CEA, "GL_COLOR_ATTACHMENT10_EXT",
+ },
+ {
+ 0x8CEF, "GL_COLOR_ATTACHMENT15_EXT",
+ },
+ {
+ 0x8CED, "GL_COLOR_ATTACHMENT13_EXT",
+ },
+ {
+ 0x8829, "GL_DRAW_BUFFER4_EXT",
+ },
+ {
+ 0x0404, "GL_FRONT",
+ },
+ {
+ 0x0405, "GL_BACK",
+ },
+ {
+ 0x88E1, "GL_STREAM_READ",
+ },
+ {
+ 0x88E0, "GL_STREAM_DRAW",
+ },
+ {
+ 0x88E4, "GL_STATIC_DRAW",
+ },
+ {
+ 0x93C6, "GL_COMPRESSED_RGBA_ASTC_5x5x5_OES",
+ },
+ {
+ 0x88E8, "GL_DYNAMIC_DRAW",
+ },
+ {
+ 0x9291, "GL_PLUS_NV",
+ },
+ {
+ 0x8CAA, "GL_READ_FRAMEBUFFER_BINDING_ANGLE",
+ },
+ {
+ 0x93C5, "GL_COMPRESSED_RGBA_ASTC_5x5x4_OES",
+ },
+ {
+ 0x40000000, "GL_MULTISAMPLE_BUFFER_BIT6_QCOM",
+ },
+ {
+ 0x9116, "GL_SYNC_FENCE_APPLE",
+ },
+ {
+ 0x93C4, "GL_COMPRESSED_RGBA_ASTC_5x4x4_OES",
+ },
+ {
+ 0x88EE, "GL_ETC1_SRGB8_NV",
+ },
+ {
+ 0x93C3, "GL_COMPRESSED_RGBA_ASTC_4x4x4_OES",
+ },
+ {
+ 0x00000800, "GL_DEPTH_BUFFER_BIT3_QCOM",
+ },
+ {
+ 0x1903, "GL_RED_EXT",
+ },
+ {
+ 0x93C2, "GL_COMPRESSED_RGBA_ASTC_4x4x3_OES",
+ },
+ {
+ 0x8CE2, "GL_COLOR_ATTACHMENT2_EXT",
+ },
+ {
+ 0x8BC1, "GL_COUNTER_RANGE_AMD",
+ },
+ {
+ 0x8CE0, "GL_COLOR_ATTACHMENT0",
+ },
+ {
+ 0x8CE1, "GL_COLOR_ATTACHMENT1_EXT",
+ },
+ {
+ 0x8CE6, "GL_COLOR_ATTACHMENT6_EXT",
+ },
+ {
+ 0x93C1, "GL_COMPRESSED_RGBA_ASTC_4x3x3_OES",
+ },
+ {
+ 0x8A1F, "GL_RGB_422_APPLE",
+ },
+ {
+ 0x93DC, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR",
+ },
+ {
+ 0x9292, "GL_PLUS_DARKER_NV",
+ },
+ {
+ 0x8CE8, "GL_COLOR_ATTACHMENT8_EXT",
+ },
+ {
+ 0x93C0, "GL_COMPRESSED_RGBA_ASTC_3x3x3_OES",
+ },
+ {
+ 0x0C23, "GL_COLOR_WRITEMASK",
+ },
+ {
+ 0x0C22, "GL_COLOR_CLEAR_VALUE",
+ },
+ {
+ 0x8823, "GL_WRITEONLY_RENDERING_QCOM",
+ },
+ {
+ 0x8824, "GL_MAX_DRAW_BUFFERS_EXT",
+ },
+ {
+ 0x825A, "GL_PROGRAM_PIPELINE_BINDING_EXT",
+ },
+ {
+ 0x1909, "GL_LUMINANCE",
+ },
+ {
+ 0x0D3A, "GL_MAX_VIEWPORT_DIMS",
+ },
+ {
+ 0x8B53, "GL_INT_VEC2",
+ },
+ {
+ 0x8826, "GL_DRAW_BUFFER1_EXT",
+ },
+ {
+ 0x809E, "GL_SAMPLE_ALPHA_TO_COVERAGE",
+ },
+ {
+ 0x8BC0, "GL_COUNTER_TYPE_AMD",
+ },
+ {
+ 0x8BC3, "GL_PERCENTAGE_AMD",
+ },
+ {
+ 0x8BC2, "GL_UNSIGNED_INT64_AMD",
+ },
+ {
+ 0x8BC5, "GL_PERFMON_RESULT_SIZE_AMD",
+ },
+ {
+ 0x8BC4, "GL_PERFMON_RESULT_AVAILABLE_AMD",
+ },
+ {
+ 0x8BC6, "GL_PERFMON_RESULT_AMD",
+ },
};
const GLES2Util::EnumToString* const GLES2Util::enum_to_string_table_ =
@@ -678,731 +2356,717 @@ const GLES2Util::EnumToString* const GLES2Util::enum_to_string_table_ =
const size_t GLES2Util::enum_to_string_table_len_ =
sizeof(enum_to_string_table) / sizeof(enum_to_string_table[0]);
-std::string GLES2Util::GetStringAttachment(uint32 value) {
+std::string GLES2Util::GetStringAttachment(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_COLOR_ATTACHMENT0, "GL_COLOR_ATTACHMENT0" },
- { GL_DEPTH_ATTACHMENT, "GL_DEPTH_ATTACHMENT" },
- { GL_STENCIL_ATTACHMENT, "GL_STENCIL_ATTACHMENT" },
+ {GL_COLOR_ATTACHMENT0, "GL_COLOR_ATTACHMENT0"},
+ {GL_DEPTH_ATTACHMENT, "GL_DEPTH_ATTACHMENT"},
+ {GL_STENCIL_ATTACHMENT, "GL_STENCIL_ATTACHMENT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringBackbufferAttachment(uint32 value) {
+std::string GLES2Util::GetStringBackbufferAttachment(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_COLOR_EXT, "GL_COLOR_EXT" },
- { GL_DEPTH_EXT, "GL_DEPTH_EXT" },
- { GL_STENCIL_EXT, "GL_STENCIL_EXT" },
+ {GL_COLOR_EXT, "GL_COLOR_EXT"},
+ {GL_DEPTH_EXT, "GL_DEPTH_EXT"},
+ {GL_STENCIL_EXT, "GL_STENCIL_EXT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringBlitFilter(uint32 value) {
+std::string GLES2Util::GetStringBlitFilter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_NEAREST, "GL_NEAREST" },
- { GL_LINEAR, "GL_LINEAR" },
+ {GL_NEAREST, "GL_NEAREST"}, {GL_LINEAR, "GL_LINEAR"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringBufferParameter(uint32 value) {
+std::string GLES2Util::GetStringBufferParameter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_BUFFER_SIZE, "GL_BUFFER_SIZE" },
- { GL_BUFFER_USAGE, "GL_BUFFER_USAGE" },
+ {GL_BUFFER_SIZE, "GL_BUFFER_SIZE"}, {GL_BUFFER_USAGE, "GL_BUFFER_USAGE"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringBufferTarget(uint32 value) {
+std::string GLES2Util::GetStringBufferTarget(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_ARRAY_BUFFER, "GL_ARRAY_BUFFER" },
- { GL_ELEMENT_ARRAY_BUFFER, "GL_ELEMENT_ARRAY_BUFFER" },
+ {GL_ARRAY_BUFFER, "GL_ARRAY_BUFFER"},
+ {GL_ELEMENT_ARRAY_BUFFER, "GL_ELEMENT_ARRAY_BUFFER"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringBufferUsage(uint32 value) {
+std::string GLES2Util::GetStringBufferUsage(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_STREAM_DRAW, "GL_STREAM_DRAW" },
- { GL_STATIC_DRAW, "GL_STATIC_DRAW" },
- { GL_DYNAMIC_DRAW, "GL_DYNAMIC_DRAW" },
+ {GL_STREAM_DRAW, "GL_STREAM_DRAW"},
+ {GL_STATIC_DRAW, "GL_STATIC_DRAW"},
+ {GL_DYNAMIC_DRAW, "GL_DYNAMIC_DRAW"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringCapability(uint32 value) {
+std::string GLES2Util::GetStringCapability(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_BLEND, "GL_BLEND" },
- { GL_CULL_FACE, "GL_CULL_FACE" },
- { GL_DEPTH_TEST, "GL_DEPTH_TEST" },
- { GL_DITHER, "GL_DITHER" },
- { GL_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL" },
- { GL_SAMPLE_ALPHA_TO_COVERAGE, "GL_SAMPLE_ALPHA_TO_COVERAGE" },
- { GL_SAMPLE_COVERAGE, "GL_SAMPLE_COVERAGE" },
- { GL_SCISSOR_TEST, "GL_SCISSOR_TEST" },
- { GL_STENCIL_TEST, "GL_STENCIL_TEST" },
+ {GL_BLEND, "GL_BLEND"},
+ {GL_CULL_FACE, "GL_CULL_FACE"},
+ {GL_DEPTH_TEST, "GL_DEPTH_TEST"},
+ {GL_DITHER, "GL_DITHER"},
+ {GL_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL"},
+ {GL_SAMPLE_ALPHA_TO_COVERAGE, "GL_SAMPLE_ALPHA_TO_COVERAGE"},
+ {GL_SAMPLE_COVERAGE, "GL_SAMPLE_COVERAGE"},
+ {GL_SCISSOR_TEST, "GL_SCISSOR_TEST"},
+ {GL_STENCIL_TEST, "GL_STENCIL_TEST"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringCmpFunction(uint32 value) {
+std::string GLES2Util::GetStringCmpFunction(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_NEVER, "GL_NEVER" },
- { GL_LESS, "GL_LESS" },
- { GL_EQUAL, "GL_EQUAL" },
- { GL_LEQUAL, "GL_LEQUAL" },
- { GL_GREATER, "GL_GREATER" },
- { GL_NOTEQUAL, "GL_NOTEQUAL" },
- { GL_GEQUAL, "GL_GEQUAL" },
- { GL_ALWAYS, "GL_ALWAYS" },
+ {GL_NEVER, "GL_NEVER"},
+ {GL_LESS, "GL_LESS"},
+ {GL_EQUAL, "GL_EQUAL"},
+ {GL_LEQUAL, "GL_LEQUAL"},
+ {GL_GREATER, "GL_GREATER"},
+ {GL_NOTEQUAL, "GL_NOTEQUAL"},
+ {GL_GEQUAL, "GL_GEQUAL"},
+ {GL_ALWAYS, "GL_ALWAYS"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringCompressedTextureFormat(uint32 value) {
- return GLES2Util::GetQualifiedEnumString(
- NULL, 0, value);
+std::string GLES2Util::GetStringCompressedTextureFormat(uint32_t value) {
+ return GLES2Util::GetQualifiedEnumString(NULL, 0, value);
}
-std::string GLES2Util::GetStringDrawMode(uint32 value) {
+std::string GLES2Util::GetStringDrawMode(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_POINTS, "GL_POINTS" },
- { GL_LINE_STRIP, "GL_LINE_STRIP" },
- { GL_LINE_LOOP, "GL_LINE_LOOP" },
- { GL_LINES, "GL_LINES" },
- { GL_TRIANGLE_STRIP, "GL_TRIANGLE_STRIP" },
- { GL_TRIANGLE_FAN, "GL_TRIANGLE_FAN" },
- { GL_TRIANGLES, "GL_TRIANGLES" },
+ {GL_POINTS, "GL_POINTS"},
+ {GL_LINE_STRIP, "GL_LINE_STRIP"},
+ {GL_LINE_LOOP, "GL_LINE_LOOP"},
+ {GL_LINES, "GL_LINES"},
+ {GL_TRIANGLE_STRIP, "GL_TRIANGLE_STRIP"},
+ {GL_TRIANGLE_FAN, "GL_TRIANGLE_FAN"},
+ {GL_TRIANGLES, "GL_TRIANGLES"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringDstBlendFactor(uint32 value) {
+std::string GLES2Util::GetStringDstBlendFactor(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_ZERO, "GL_ZERO" },
- { GL_ONE, "GL_ONE" },
- { GL_SRC_COLOR, "GL_SRC_COLOR" },
- { GL_ONE_MINUS_SRC_COLOR, "GL_ONE_MINUS_SRC_COLOR" },
- { GL_DST_COLOR, "GL_DST_COLOR" },
- { GL_ONE_MINUS_DST_COLOR, "GL_ONE_MINUS_DST_COLOR" },
- { GL_SRC_ALPHA, "GL_SRC_ALPHA" },
- { GL_ONE_MINUS_SRC_ALPHA, "GL_ONE_MINUS_SRC_ALPHA" },
- { GL_DST_ALPHA, "GL_DST_ALPHA" },
- { GL_ONE_MINUS_DST_ALPHA, "GL_ONE_MINUS_DST_ALPHA" },
- { GL_CONSTANT_COLOR, "GL_CONSTANT_COLOR" },
- { GL_ONE_MINUS_CONSTANT_COLOR, "GL_ONE_MINUS_CONSTANT_COLOR" },
- { GL_CONSTANT_ALPHA, "GL_CONSTANT_ALPHA" },
- { GL_ONE_MINUS_CONSTANT_ALPHA, "GL_ONE_MINUS_CONSTANT_ALPHA" },
+ {GL_ZERO, "GL_ZERO"},
+ {GL_ONE, "GL_ONE"},
+ {GL_SRC_COLOR, "GL_SRC_COLOR"},
+ {GL_ONE_MINUS_SRC_COLOR, "GL_ONE_MINUS_SRC_COLOR"},
+ {GL_DST_COLOR, "GL_DST_COLOR"},
+ {GL_ONE_MINUS_DST_COLOR, "GL_ONE_MINUS_DST_COLOR"},
+ {GL_SRC_ALPHA, "GL_SRC_ALPHA"},
+ {GL_ONE_MINUS_SRC_ALPHA, "GL_ONE_MINUS_SRC_ALPHA"},
+ {GL_DST_ALPHA, "GL_DST_ALPHA"},
+ {GL_ONE_MINUS_DST_ALPHA, "GL_ONE_MINUS_DST_ALPHA"},
+ {GL_CONSTANT_COLOR, "GL_CONSTANT_COLOR"},
+ {GL_ONE_MINUS_CONSTANT_COLOR, "GL_ONE_MINUS_CONSTANT_COLOR"},
+ {GL_CONSTANT_ALPHA, "GL_CONSTANT_ALPHA"},
+ {GL_ONE_MINUS_CONSTANT_ALPHA, "GL_ONE_MINUS_CONSTANT_ALPHA"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringEquation(uint32 value) {
+std::string GLES2Util::GetStringEquation(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_FUNC_ADD, "GL_FUNC_ADD" },
- { GL_FUNC_SUBTRACT, "GL_FUNC_SUBTRACT" },
- { GL_FUNC_REVERSE_SUBTRACT, "GL_FUNC_REVERSE_SUBTRACT" },
+ {GL_FUNC_ADD, "GL_FUNC_ADD"},
+ {GL_FUNC_SUBTRACT, "GL_FUNC_SUBTRACT"},
+ {GL_FUNC_REVERSE_SUBTRACT, "GL_FUNC_REVERSE_SUBTRACT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringFaceMode(uint32 value) {
+std::string GLES2Util::GetStringFaceMode(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_CW, "GL_CW" },
- { GL_CCW, "GL_CCW" },
+ {GL_CW, "GL_CW"}, {GL_CCW, "GL_CCW"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringFaceType(uint32 value) {
+std::string GLES2Util::GetStringFaceType(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_FRONT, "GL_FRONT" },
- { GL_BACK, "GL_BACK" },
- { GL_FRONT_AND_BACK, "GL_FRONT_AND_BACK" },
+ {GL_FRONT, "GL_FRONT"},
+ {GL_BACK, "GL_BACK"},
+ {GL_FRONT_AND_BACK, "GL_FRONT_AND_BACK"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringFrameBufferParameter(uint32 value) {
+std::string GLES2Util::GetStringFrameBufferParameter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
- "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE" },
- { GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
- "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME" },
- { GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,
- "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL" },
- { GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE,
- "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE" },
+ {GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"},
+ {GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
+ "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"},
+ {GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,
+ "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"},
+ {GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE,
+ "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringFrameBufferTarget(uint32 value) {
+std::string GLES2Util::GetStringFrameBufferTarget(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_FRAMEBUFFER, "GL_FRAMEBUFFER" },
+ {GL_FRAMEBUFFER, "GL_FRAMEBUFFER"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringGLState(uint32 value) {
+std::string GLES2Util::GetStringGLState(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_ACTIVE_TEXTURE, "GL_ACTIVE_TEXTURE" },
- { GL_ALIASED_LINE_WIDTH_RANGE, "GL_ALIASED_LINE_WIDTH_RANGE" },
- { GL_ALIASED_POINT_SIZE_RANGE, "GL_ALIASED_POINT_SIZE_RANGE" },
- { GL_ALPHA_BITS, "GL_ALPHA_BITS" },
- { GL_ARRAY_BUFFER_BINDING, "GL_ARRAY_BUFFER_BINDING" },
- { GL_BLUE_BITS, "GL_BLUE_BITS" },
- { GL_COMPRESSED_TEXTURE_FORMATS, "GL_COMPRESSED_TEXTURE_FORMATS" },
- { GL_CURRENT_PROGRAM, "GL_CURRENT_PROGRAM" },
- { GL_DEPTH_BITS, "GL_DEPTH_BITS" },
- { GL_DEPTH_RANGE, "GL_DEPTH_RANGE" },
- { GL_ELEMENT_ARRAY_BUFFER_BINDING, "GL_ELEMENT_ARRAY_BUFFER_BINDING" },
- { GL_FRAMEBUFFER_BINDING, "GL_FRAMEBUFFER_BINDING" },
- { GL_GENERATE_MIPMAP_HINT, "GL_GENERATE_MIPMAP_HINT" },
- { GL_GREEN_BITS, "GL_GREEN_BITS" },
- { GL_IMPLEMENTATION_COLOR_READ_FORMAT,
- "GL_IMPLEMENTATION_COLOR_READ_FORMAT" },
- { GL_IMPLEMENTATION_COLOR_READ_TYPE, "GL_IMPLEMENTATION_COLOR_READ_TYPE" },
- { GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,
- "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS" },
- { GL_MAX_CUBE_MAP_TEXTURE_SIZE, "GL_MAX_CUBE_MAP_TEXTURE_SIZE" },
- { GL_MAX_FRAGMENT_UNIFORM_VECTORS, "GL_MAX_FRAGMENT_UNIFORM_VECTORS" },
- { GL_MAX_RENDERBUFFER_SIZE, "GL_MAX_RENDERBUFFER_SIZE" },
- { GL_MAX_TEXTURE_IMAGE_UNITS, "GL_MAX_TEXTURE_IMAGE_UNITS" },
- { GL_MAX_TEXTURE_SIZE, "GL_MAX_TEXTURE_SIZE" },
- { GL_MAX_VARYING_VECTORS, "GL_MAX_VARYING_VECTORS" },
- { GL_MAX_VERTEX_ATTRIBS, "GL_MAX_VERTEX_ATTRIBS" },
- { GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS" },
- { GL_MAX_VERTEX_UNIFORM_VECTORS, "GL_MAX_VERTEX_UNIFORM_VECTORS" },
- { GL_MAX_VIEWPORT_DIMS, "GL_MAX_VIEWPORT_DIMS" },
- { GL_NUM_COMPRESSED_TEXTURE_FORMATS, "GL_NUM_COMPRESSED_TEXTURE_FORMATS" },
- { GL_NUM_SHADER_BINARY_FORMATS, "GL_NUM_SHADER_BINARY_FORMATS" },
- { GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT" },
- { GL_RED_BITS, "GL_RED_BITS" },
- { GL_RENDERBUFFER_BINDING, "GL_RENDERBUFFER_BINDING" },
- { GL_SAMPLE_BUFFERS, "GL_SAMPLE_BUFFERS" },
- { GL_SAMPLE_COVERAGE_INVERT, "GL_SAMPLE_COVERAGE_INVERT" },
- { GL_SAMPLE_COVERAGE_VALUE, "GL_SAMPLE_COVERAGE_VALUE" },
- { GL_SAMPLES, "GL_SAMPLES" },
- { GL_SCISSOR_BOX, "GL_SCISSOR_BOX" },
- { GL_SHADER_BINARY_FORMATS, "GL_SHADER_BINARY_FORMATS" },
- { GL_SHADER_COMPILER, "GL_SHADER_COMPILER" },
- { GL_SUBPIXEL_BITS, "GL_SUBPIXEL_BITS" },
- { GL_STENCIL_BITS, "GL_STENCIL_BITS" },
- { GL_TEXTURE_BINDING_2D, "GL_TEXTURE_BINDING_2D" },
- { GL_TEXTURE_BINDING_CUBE_MAP, "GL_TEXTURE_BINDING_CUBE_MAP" },
- { GL_UNPACK_ALIGNMENT, "GL_UNPACK_ALIGNMENT" },
- { GL_UNPACK_FLIP_Y_CHROMIUM, "GL_UNPACK_FLIP_Y_CHROMIUM" },
- { GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM,
- "GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM" },
- { GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
- "GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM" },
- { GL_VERTEX_ARRAY_BINDING_OES, "GL_VERTEX_ARRAY_BINDING_OES" },
- { GL_VIEWPORT, "GL_VIEWPORT" },
- { GL_BLEND_COLOR, "GL_BLEND_COLOR" },
- { GL_BLEND_EQUATION_RGB, "GL_BLEND_EQUATION_RGB" },
- { GL_BLEND_EQUATION_ALPHA, "GL_BLEND_EQUATION_ALPHA" },
- { GL_BLEND_SRC_RGB, "GL_BLEND_SRC_RGB" },
- { GL_BLEND_DST_RGB, "GL_BLEND_DST_RGB" },
- { GL_BLEND_SRC_ALPHA, "GL_BLEND_SRC_ALPHA" },
- { GL_BLEND_DST_ALPHA, "GL_BLEND_DST_ALPHA" },
- { GL_COLOR_CLEAR_VALUE, "GL_COLOR_CLEAR_VALUE" },
- { GL_DEPTH_CLEAR_VALUE, "GL_DEPTH_CLEAR_VALUE" },
- { GL_STENCIL_CLEAR_VALUE, "GL_STENCIL_CLEAR_VALUE" },
- { GL_COLOR_WRITEMASK, "GL_COLOR_WRITEMASK" },
- { GL_CULL_FACE_MODE, "GL_CULL_FACE_MODE" },
- { GL_DEPTH_FUNC, "GL_DEPTH_FUNC" },
- { GL_DEPTH_WRITEMASK, "GL_DEPTH_WRITEMASK" },
- { GL_DEPTH_RANGE, "GL_DEPTH_RANGE" },
- { GL_FRONT_FACE, "GL_FRONT_FACE" },
- { GL_GENERATE_MIPMAP_HINT, "GL_GENERATE_MIPMAP_HINT" },
- { GL_LINE_WIDTH, "GL_LINE_WIDTH" },
- { GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT" },
- { GL_UNPACK_ALIGNMENT, "GL_UNPACK_ALIGNMENT" },
- { GL_POLYGON_OFFSET_FACTOR, "GL_POLYGON_OFFSET_FACTOR" },
- { GL_POLYGON_OFFSET_UNITS, "GL_POLYGON_OFFSET_UNITS" },
- { GL_SAMPLE_COVERAGE_VALUE, "GL_SAMPLE_COVERAGE_VALUE" },
- { GL_SAMPLE_COVERAGE_INVERT, "GL_SAMPLE_COVERAGE_INVERT" },
- { GL_SCISSOR_BOX, "GL_SCISSOR_BOX" },
- { GL_STENCIL_FUNC, "GL_STENCIL_FUNC" },
- { GL_STENCIL_REF, "GL_STENCIL_REF" },
- { GL_STENCIL_VALUE_MASK, "GL_STENCIL_VALUE_MASK" },
- { GL_STENCIL_BACK_FUNC, "GL_STENCIL_BACK_FUNC" },
- { GL_STENCIL_BACK_REF, "GL_STENCIL_BACK_REF" },
- { GL_STENCIL_BACK_VALUE_MASK, "GL_STENCIL_BACK_VALUE_MASK" },
- { GL_STENCIL_WRITEMASK, "GL_STENCIL_WRITEMASK" },
- { GL_STENCIL_BACK_WRITEMASK, "GL_STENCIL_BACK_WRITEMASK" },
- { GL_STENCIL_FAIL, "GL_STENCIL_FAIL" },
- { GL_STENCIL_PASS_DEPTH_FAIL, "GL_STENCIL_PASS_DEPTH_FAIL" },
- { GL_STENCIL_PASS_DEPTH_PASS, "GL_STENCIL_PASS_DEPTH_PASS" },
- { GL_STENCIL_BACK_FAIL, "GL_STENCIL_BACK_FAIL" },
- { GL_STENCIL_BACK_PASS_DEPTH_FAIL, "GL_STENCIL_BACK_PASS_DEPTH_FAIL" },
- { GL_STENCIL_BACK_PASS_DEPTH_PASS, "GL_STENCIL_BACK_PASS_DEPTH_PASS" },
- { GL_VIEWPORT, "GL_VIEWPORT" },
- { GL_BLEND, "GL_BLEND" },
- { GL_CULL_FACE, "GL_CULL_FACE" },
- { GL_DEPTH_TEST, "GL_DEPTH_TEST" },
- { GL_DITHER, "GL_DITHER" },
- { GL_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL" },
- { GL_SAMPLE_ALPHA_TO_COVERAGE, "GL_SAMPLE_ALPHA_TO_COVERAGE" },
- { GL_SAMPLE_COVERAGE, "GL_SAMPLE_COVERAGE" },
- { GL_SCISSOR_TEST, "GL_SCISSOR_TEST" },
- { GL_STENCIL_TEST, "GL_STENCIL_TEST" },
+ {GL_ACTIVE_TEXTURE, "GL_ACTIVE_TEXTURE"},
+ {GL_ALIASED_LINE_WIDTH_RANGE, "GL_ALIASED_LINE_WIDTH_RANGE"},
+ {GL_ALIASED_POINT_SIZE_RANGE, "GL_ALIASED_POINT_SIZE_RANGE"},
+ {GL_ALPHA_BITS, "GL_ALPHA_BITS"},
+ {GL_ARRAY_BUFFER_BINDING, "GL_ARRAY_BUFFER_BINDING"},
+ {GL_BLUE_BITS, "GL_BLUE_BITS"},
+ {GL_COMPRESSED_TEXTURE_FORMATS, "GL_COMPRESSED_TEXTURE_FORMATS"},
+ {GL_CURRENT_PROGRAM, "GL_CURRENT_PROGRAM"},
+ {GL_DEPTH_BITS, "GL_DEPTH_BITS"},
+ {GL_DEPTH_RANGE, "GL_DEPTH_RANGE"},
+ {GL_ELEMENT_ARRAY_BUFFER_BINDING, "GL_ELEMENT_ARRAY_BUFFER_BINDING"},
+ {GL_FRAMEBUFFER_BINDING, "GL_FRAMEBUFFER_BINDING"},
+ {GL_GENERATE_MIPMAP_HINT, "GL_GENERATE_MIPMAP_HINT"},
+ {GL_GREEN_BITS, "GL_GREEN_BITS"},
+ {GL_IMPLEMENTATION_COLOR_READ_FORMAT,
+ "GL_IMPLEMENTATION_COLOR_READ_FORMAT"},
+ {GL_IMPLEMENTATION_COLOR_READ_TYPE, "GL_IMPLEMENTATION_COLOR_READ_TYPE"},
+ {GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,
+ "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS"},
+ {GL_MAX_CUBE_MAP_TEXTURE_SIZE, "GL_MAX_CUBE_MAP_TEXTURE_SIZE"},
+ {GL_MAX_FRAGMENT_UNIFORM_VECTORS, "GL_MAX_FRAGMENT_UNIFORM_VECTORS"},
+ {GL_MAX_RENDERBUFFER_SIZE, "GL_MAX_RENDERBUFFER_SIZE"},
+ {GL_MAX_TEXTURE_IMAGE_UNITS, "GL_MAX_TEXTURE_IMAGE_UNITS"},
+ {GL_MAX_TEXTURE_SIZE, "GL_MAX_TEXTURE_SIZE"},
+ {GL_MAX_VARYING_VECTORS, "GL_MAX_VARYING_VECTORS"},
+ {GL_MAX_VERTEX_ATTRIBS, "GL_MAX_VERTEX_ATTRIBS"},
+ {GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS"},
+ {GL_MAX_VERTEX_UNIFORM_VECTORS, "GL_MAX_VERTEX_UNIFORM_VECTORS"},
+ {GL_MAX_VIEWPORT_DIMS, "GL_MAX_VIEWPORT_DIMS"},
+ {GL_NUM_COMPRESSED_TEXTURE_FORMATS, "GL_NUM_COMPRESSED_TEXTURE_FORMATS"},
+ {GL_NUM_SHADER_BINARY_FORMATS, "GL_NUM_SHADER_BINARY_FORMATS"},
+ {GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT"},
+ {GL_RED_BITS, "GL_RED_BITS"},
+ {GL_RENDERBUFFER_BINDING, "GL_RENDERBUFFER_BINDING"},
+ {GL_SAMPLE_BUFFERS, "GL_SAMPLE_BUFFERS"},
+ {GL_SAMPLE_COVERAGE_INVERT, "GL_SAMPLE_COVERAGE_INVERT"},
+ {GL_SAMPLE_COVERAGE_VALUE, "GL_SAMPLE_COVERAGE_VALUE"},
+ {GL_SAMPLES, "GL_SAMPLES"},
+ {GL_SCISSOR_BOX, "GL_SCISSOR_BOX"},
+ {GL_SHADER_BINARY_FORMATS, "GL_SHADER_BINARY_FORMATS"},
+ {GL_SHADER_COMPILER, "GL_SHADER_COMPILER"},
+ {GL_SUBPIXEL_BITS, "GL_SUBPIXEL_BITS"},
+ {GL_STENCIL_BITS, "GL_STENCIL_BITS"},
+ {GL_TEXTURE_BINDING_2D, "GL_TEXTURE_BINDING_2D"},
+ {GL_TEXTURE_BINDING_CUBE_MAP, "GL_TEXTURE_BINDING_CUBE_MAP"},
+ {GL_UNPACK_ALIGNMENT, "GL_UNPACK_ALIGNMENT"},
+ {GL_UNPACK_FLIP_Y_CHROMIUM, "GL_UNPACK_FLIP_Y_CHROMIUM"},
+ {GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM,
+ "GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM"},
+ {GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
+ "GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM"},
+ {GL_BIND_GENERATES_RESOURCE_CHROMIUM,
+ "GL_BIND_GENERATES_RESOURCE_CHROMIUM"},
+ {GL_VERTEX_ARRAY_BINDING_OES, "GL_VERTEX_ARRAY_BINDING_OES"},
+ {GL_VIEWPORT, "GL_VIEWPORT"},
+ {GL_BLEND_COLOR, "GL_BLEND_COLOR"},
+ {GL_BLEND_EQUATION_RGB, "GL_BLEND_EQUATION_RGB"},
+ {GL_BLEND_EQUATION_ALPHA, "GL_BLEND_EQUATION_ALPHA"},
+ {GL_BLEND_SRC_RGB, "GL_BLEND_SRC_RGB"},
+ {GL_BLEND_DST_RGB, "GL_BLEND_DST_RGB"},
+ {GL_BLEND_SRC_ALPHA, "GL_BLEND_SRC_ALPHA"},
+ {GL_BLEND_DST_ALPHA, "GL_BLEND_DST_ALPHA"},
+ {GL_COLOR_CLEAR_VALUE, "GL_COLOR_CLEAR_VALUE"},
+ {GL_DEPTH_CLEAR_VALUE, "GL_DEPTH_CLEAR_VALUE"},
+ {GL_STENCIL_CLEAR_VALUE, "GL_STENCIL_CLEAR_VALUE"},
+ {GL_COLOR_WRITEMASK, "GL_COLOR_WRITEMASK"},
+ {GL_CULL_FACE_MODE, "GL_CULL_FACE_MODE"},
+ {GL_DEPTH_FUNC, "GL_DEPTH_FUNC"},
+ {GL_DEPTH_WRITEMASK, "GL_DEPTH_WRITEMASK"},
+ {GL_FRONT_FACE, "GL_FRONT_FACE"},
+ {GL_LINE_WIDTH, "GL_LINE_WIDTH"},
+ {GL_POLYGON_OFFSET_FACTOR, "GL_POLYGON_OFFSET_FACTOR"},
+ {GL_POLYGON_OFFSET_UNITS, "GL_POLYGON_OFFSET_UNITS"},
+ {GL_STENCIL_FUNC, "GL_STENCIL_FUNC"},
+ {GL_STENCIL_REF, "GL_STENCIL_REF"},
+ {GL_STENCIL_VALUE_MASK, "GL_STENCIL_VALUE_MASK"},
+ {GL_STENCIL_BACK_FUNC, "GL_STENCIL_BACK_FUNC"},
+ {GL_STENCIL_BACK_REF, "GL_STENCIL_BACK_REF"},
+ {GL_STENCIL_BACK_VALUE_MASK, "GL_STENCIL_BACK_VALUE_MASK"},
+ {GL_STENCIL_WRITEMASK, "GL_STENCIL_WRITEMASK"},
+ {GL_STENCIL_BACK_WRITEMASK, "GL_STENCIL_BACK_WRITEMASK"},
+ {GL_STENCIL_FAIL, "GL_STENCIL_FAIL"},
+ {GL_STENCIL_PASS_DEPTH_FAIL, "GL_STENCIL_PASS_DEPTH_FAIL"},
+ {GL_STENCIL_PASS_DEPTH_PASS, "GL_STENCIL_PASS_DEPTH_PASS"},
+ {GL_STENCIL_BACK_FAIL, "GL_STENCIL_BACK_FAIL"},
+ {GL_STENCIL_BACK_PASS_DEPTH_FAIL, "GL_STENCIL_BACK_PASS_DEPTH_FAIL"},
+ {GL_STENCIL_BACK_PASS_DEPTH_PASS, "GL_STENCIL_BACK_PASS_DEPTH_PASS"},
+ {GL_BLEND, "GL_BLEND"},
+ {GL_CULL_FACE, "GL_CULL_FACE"},
+ {GL_DEPTH_TEST, "GL_DEPTH_TEST"},
+ {GL_DITHER, "GL_DITHER"},
+ {GL_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL"},
+ {GL_SAMPLE_ALPHA_TO_COVERAGE, "GL_SAMPLE_ALPHA_TO_COVERAGE"},
+ {GL_SAMPLE_COVERAGE, "GL_SAMPLE_COVERAGE"},
+ {GL_SCISSOR_TEST, "GL_SCISSOR_TEST"},
+ {GL_STENCIL_TEST, "GL_STENCIL_TEST"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringGetMaxIndexType(uint32 value) {
+std::string GLES2Util::GetStringGetMaxIndexType(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE" },
- { GL_UNSIGNED_SHORT, "GL_UNSIGNED_SHORT" },
- { GL_UNSIGNED_INT, "GL_UNSIGNED_INT" },
+ {GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE"},
+ {GL_UNSIGNED_SHORT, "GL_UNSIGNED_SHORT"},
+ {GL_UNSIGNED_INT, "GL_UNSIGNED_INT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringGetTexParamTarget(uint32 value) {
+std::string GLES2Util::GetStringGetTexParamTarget(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_TEXTURE_2D, "GL_TEXTURE_2D" },
- { GL_TEXTURE_CUBE_MAP, "GL_TEXTURE_CUBE_MAP" },
+ {GL_TEXTURE_2D, "GL_TEXTURE_2D"},
+ {GL_TEXTURE_CUBE_MAP, "GL_TEXTURE_CUBE_MAP"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringHintMode(uint32 value) {
+std::string GLES2Util::GetStringHintMode(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_FASTEST, "GL_FASTEST" },
- { GL_NICEST, "GL_NICEST" },
- { GL_DONT_CARE, "GL_DONT_CARE" },
+ {GL_FASTEST, "GL_FASTEST"},
+ {GL_NICEST, "GL_NICEST"},
+ {GL_DONT_CARE, "GL_DONT_CARE"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringHintTarget(uint32 value) {
+std::string GLES2Util::GetStringHintTarget(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_GENERATE_MIPMAP_HINT, "GL_GENERATE_MIPMAP_HINT" },
+ {GL_GENERATE_MIPMAP_HINT, "GL_GENERATE_MIPMAP_HINT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringIndexType(uint32 value) {
+std::string GLES2Util::GetStringIndexType(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE" },
- { GL_UNSIGNED_SHORT, "GL_UNSIGNED_SHORT" },
+ {GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE"},
+ {GL_UNSIGNED_SHORT, "GL_UNSIGNED_SHORT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringPixelStore(uint32 value) {
+std::string GLES2Util::GetStringPixelStore(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT" },
- { GL_UNPACK_ALIGNMENT, "GL_UNPACK_ALIGNMENT" },
- { GL_UNPACK_FLIP_Y_CHROMIUM, "GL_UNPACK_FLIP_Y_CHROMIUM" },
- { GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM,
- "GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM" },
- { GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
- "GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM" },
+ {GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT"},
+ {GL_UNPACK_ALIGNMENT, "GL_UNPACK_ALIGNMENT"},
+ {GL_UNPACK_FLIP_Y_CHROMIUM, "GL_UNPACK_FLIP_Y_CHROMIUM"},
+ {GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM,
+ "GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM"},
+ {GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
+ "GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringPixelType(uint32 value) {
+std::string GLES2Util::GetStringPixelType(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE" },
- { GL_UNSIGNED_SHORT_5_6_5, "GL_UNSIGNED_SHORT_5_6_5" },
- { GL_UNSIGNED_SHORT_4_4_4_4, "GL_UNSIGNED_SHORT_4_4_4_4" },
- { GL_UNSIGNED_SHORT_5_5_5_1, "GL_UNSIGNED_SHORT_5_5_5_1" },
+ {GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE"},
+ {GL_UNSIGNED_SHORT_5_6_5, "GL_UNSIGNED_SHORT_5_6_5"},
+ {GL_UNSIGNED_SHORT_4_4_4_4, "GL_UNSIGNED_SHORT_4_4_4_4"},
+ {GL_UNSIGNED_SHORT_5_5_5_1, "GL_UNSIGNED_SHORT_5_5_5_1"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringProgramParameter(uint32 value) {
+std::string GLES2Util::GetStringProgramParameter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_DELETE_STATUS, "GL_DELETE_STATUS" },
- { GL_LINK_STATUS, "GL_LINK_STATUS" },
- { GL_VALIDATE_STATUS, "GL_VALIDATE_STATUS" },
- { GL_INFO_LOG_LENGTH, "GL_INFO_LOG_LENGTH" },
- { GL_ATTACHED_SHADERS, "GL_ATTACHED_SHADERS" },
- { GL_ACTIVE_ATTRIBUTES, "GL_ACTIVE_ATTRIBUTES" },
- { GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH" },
- { GL_ACTIVE_UNIFORMS, "GL_ACTIVE_UNIFORMS" },
- { GL_ACTIVE_UNIFORM_MAX_LENGTH, "GL_ACTIVE_UNIFORM_MAX_LENGTH" },
+ {GL_DELETE_STATUS, "GL_DELETE_STATUS"},
+ {GL_LINK_STATUS, "GL_LINK_STATUS"},
+ {GL_VALIDATE_STATUS, "GL_VALIDATE_STATUS"},
+ {GL_INFO_LOG_LENGTH, "GL_INFO_LOG_LENGTH"},
+ {GL_ATTACHED_SHADERS, "GL_ATTACHED_SHADERS"},
+ {GL_ACTIVE_ATTRIBUTES, "GL_ACTIVE_ATTRIBUTES"},
+ {GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH"},
+ {GL_ACTIVE_UNIFORMS, "GL_ACTIVE_UNIFORMS"},
+ {GL_ACTIVE_UNIFORM_MAX_LENGTH, "GL_ACTIVE_UNIFORM_MAX_LENGTH"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringQueryObjectParameter(uint32 value) {
+std::string GLES2Util::GetStringQueryObjectParameter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_QUERY_RESULT_EXT, "GL_QUERY_RESULT_EXT" },
- { GL_QUERY_RESULT_AVAILABLE_EXT, "GL_QUERY_RESULT_AVAILABLE_EXT" },
+ {GL_QUERY_RESULT_EXT, "GL_QUERY_RESULT_EXT"},
+ {GL_QUERY_RESULT_AVAILABLE_EXT, "GL_QUERY_RESULT_AVAILABLE_EXT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringQueryParameter(uint32 value) {
+std::string GLES2Util::GetStringQueryParameter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_CURRENT_QUERY_EXT, "GL_CURRENT_QUERY_EXT" },
+ {GL_CURRENT_QUERY_EXT, "GL_CURRENT_QUERY_EXT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringQueryTarget(uint32 value) {
+std::string GLES2Util::GetStringQueryTarget(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_ANY_SAMPLES_PASSED_EXT, "GL_ANY_SAMPLES_PASSED_EXT" },
- { GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT,
- "GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT" },
- { GL_COMMANDS_ISSUED_CHROMIUM, "GL_COMMANDS_ISSUED_CHROMIUM" },
- { GL_LATENCY_QUERY_CHROMIUM, "GL_LATENCY_QUERY_CHROMIUM" },
- { GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
- "GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM" },
- { GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM,
- "GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM" },
+ {GL_ANY_SAMPLES_PASSED_EXT, "GL_ANY_SAMPLES_PASSED_EXT"},
+ {GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT,
+ "GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT"},
+ {GL_COMMANDS_ISSUED_CHROMIUM, "GL_COMMANDS_ISSUED_CHROMIUM"},
+ {GL_LATENCY_QUERY_CHROMIUM, "GL_LATENCY_QUERY_CHROMIUM"},
+ {GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
+ "GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM"},
+ {GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM,
+ "GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM"},
+ {GL_COMMANDS_COMPLETED_CHROMIUM, "GL_COMMANDS_COMPLETED_CHROMIUM"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringReadPixelFormat(uint32 value) {
+std::string GLES2Util::GetStringReadPixelFormat(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_ALPHA, "GL_ALPHA" },
- { GL_RGB, "GL_RGB" },
- { GL_RGBA, "GL_RGBA" },
+ {GL_ALPHA, "GL_ALPHA"}, {GL_RGB, "GL_RGB"}, {GL_RGBA, "GL_RGBA"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringReadPixelType(uint32 value) {
+std::string GLES2Util::GetStringReadPixelType(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE" },
- { GL_UNSIGNED_SHORT_5_6_5, "GL_UNSIGNED_SHORT_5_6_5" },
- { GL_UNSIGNED_SHORT_4_4_4_4, "GL_UNSIGNED_SHORT_4_4_4_4" },
- { GL_UNSIGNED_SHORT_5_5_5_1, "GL_UNSIGNED_SHORT_5_5_5_1" },
+ {GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE"},
+ {GL_UNSIGNED_SHORT_5_6_5, "GL_UNSIGNED_SHORT_5_6_5"},
+ {GL_UNSIGNED_SHORT_4_4_4_4, "GL_UNSIGNED_SHORT_4_4_4_4"},
+ {GL_UNSIGNED_SHORT_5_5_5_1, "GL_UNSIGNED_SHORT_5_5_5_1"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringRenderBufferFormat(uint32 value) {
+std::string GLES2Util::GetStringRenderBufferFormat(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_RGBA4, "GL_RGBA4" },
- { GL_RGB565, "GL_RGB565" },
- { GL_RGB5_A1, "GL_RGB5_A1" },
- { GL_DEPTH_COMPONENT16, "GL_DEPTH_COMPONENT16" },
- { GL_STENCIL_INDEX8, "GL_STENCIL_INDEX8" },
+ {GL_RGBA4, "GL_RGBA4"},
+ {GL_RGB565, "GL_RGB565"},
+ {GL_RGB5_A1, "GL_RGB5_A1"},
+ {GL_DEPTH_COMPONENT16, "GL_DEPTH_COMPONENT16"},
+ {GL_STENCIL_INDEX8, "GL_STENCIL_INDEX8"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringRenderBufferParameter(uint32 value) {
+std::string GLES2Util::GetStringRenderBufferParameter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_RENDERBUFFER_RED_SIZE, "GL_RENDERBUFFER_RED_SIZE" },
- { GL_RENDERBUFFER_GREEN_SIZE, "GL_RENDERBUFFER_GREEN_SIZE" },
- { GL_RENDERBUFFER_BLUE_SIZE, "GL_RENDERBUFFER_BLUE_SIZE" },
- { GL_RENDERBUFFER_ALPHA_SIZE, "GL_RENDERBUFFER_ALPHA_SIZE" },
- { GL_RENDERBUFFER_DEPTH_SIZE, "GL_RENDERBUFFER_DEPTH_SIZE" },
- { GL_RENDERBUFFER_STENCIL_SIZE, "GL_RENDERBUFFER_STENCIL_SIZE" },
- { GL_RENDERBUFFER_WIDTH, "GL_RENDERBUFFER_WIDTH" },
- { GL_RENDERBUFFER_HEIGHT, "GL_RENDERBUFFER_HEIGHT" },
- { GL_RENDERBUFFER_INTERNAL_FORMAT, "GL_RENDERBUFFER_INTERNAL_FORMAT" },
+ {GL_RENDERBUFFER_RED_SIZE, "GL_RENDERBUFFER_RED_SIZE"},
+ {GL_RENDERBUFFER_GREEN_SIZE, "GL_RENDERBUFFER_GREEN_SIZE"},
+ {GL_RENDERBUFFER_BLUE_SIZE, "GL_RENDERBUFFER_BLUE_SIZE"},
+ {GL_RENDERBUFFER_ALPHA_SIZE, "GL_RENDERBUFFER_ALPHA_SIZE"},
+ {GL_RENDERBUFFER_DEPTH_SIZE, "GL_RENDERBUFFER_DEPTH_SIZE"},
+ {GL_RENDERBUFFER_STENCIL_SIZE, "GL_RENDERBUFFER_STENCIL_SIZE"},
+ {GL_RENDERBUFFER_WIDTH, "GL_RENDERBUFFER_WIDTH"},
+ {GL_RENDERBUFFER_HEIGHT, "GL_RENDERBUFFER_HEIGHT"},
+ {GL_RENDERBUFFER_INTERNAL_FORMAT, "GL_RENDERBUFFER_INTERNAL_FORMAT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringRenderBufferTarget(uint32 value) {
+std::string GLES2Util::GetStringRenderBufferTarget(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_RENDERBUFFER, "GL_RENDERBUFFER" },
+ {GL_RENDERBUFFER, "GL_RENDERBUFFER"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringResetStatus(uint32 value) {
+std::string GLES2Util::GetStringResetStatus(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_GUILTY_CONTEXT_RESET_ARB, "GL_GUILTY_CONTEXT_RESET_ARB" },
- { GL_INNOCENT_CONTEXT_RESET_ARB, "GL_INNOCENT_CONTEXT_RESET_ARB" },
- { GL_UNKNOWN_CONTEXT_RESET_ARB, "GL_UNKNOWN_CONTEXT_RESET_ARB" },
+ {GL_GUILTY_CONTEXT_RESET_ARB, "GL_GUILTY_CONTEXT_RESET_ARB"},
+ {GL_INNOCENT_CONTEXT_RESET_ARB, "GL_INNOCENT_CONTEXT_RESET_ARB"},
+ {GL_UNKNOWN_CONTEXT_RESET_ARB, "GL_UNKNOWN_CONTEXT_RESET_ARB"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringShaderBinaryFormat(uint32 value) {
- return GLES2Util::GetQualifiedEnumString(
- NULL, 0, value);
+std::string GLES2Util::GetStringShaderBinaryFormat(uint32_t value) {
+ return GLES2Util::GetQualifiedEnumString(NULL, 0, value);
}
-std::string GLES2Util::GetStringShaderParameter(uint32 value) {
+std::string GLES2Util::GetStringShaderParameter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_SHADER_TYPE, "GL_SHADER_TYPE" },
- { GL_DELETE_STATUS, "GL_DELETE_STATUS" },
- { GL_COMPILE_STATUS, "GL_COMPILE_STATUS" },
- { GL_INFO_LOG_LENGTH, "GL_INFO_LOG_LENGTH" },
- { GL_SHADER_SOURCE_LENGTH, "GL_SHADER_SOURCE_LENGTH" },
- { GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
- "GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE" },
+ {GL_SHADER_TYPE, "GL_SHADER_TYPE"},
+ {GL_DELETE_STATUS, "GL_DELETE_STATUS"},
+ {GL_COMPILE_STATUS, "GL_COMPILE_STATUS"},
+ {GL_INFO_LOG_LENGTH, "GL_INFO_LOG_LENGTH"},
+ {GL_SHADER_SOURCE_LENGTH, "GL_SHADER_SOURCE_LENGTH"},
+ {GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
+ "GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringShaderPrecision(uint32 value) {
+std::string GLES2Util::GetStringShaderPrecision(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_LOW_FLOAT, "GL_LOW_FLOAT" },
- { GL_MEDIUM_FLOAT, "GL_MEDIUM_FLOAT" },
- { GL_HIGH_FLOAT, "GL_HIGH_FLOAT" },
- { GL_LOW_INT, "GL_LOW_INT" },
- { GL_MEDIUM_INT, "GL_MEDIUM_INT" },
- { GL_HIGH_INT, "GL_HIGH_INT" },
+ {GL_LOW_FLOAT, "GL_LOW_FLOAT"},
+ {GL_MEDIUM_FLOAT, "GL_MEDIUM_FLOAT"},
+ {GL_HIGH_FLOAT, "GL_HIGH_FLOAT"},
+ {GL_LOW_INT, "GL_LOW_INT"},
+ {GL_MEDIUM_INT, "GL_MEDIUM_INT"},
+ {GL_HIGH_INT, "GL_HIGH_INT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringShaderType(uint32 value) {
+std::string GLES2Util::GetStringShaderType(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_VERTEX_SHADER, "GL_VERTEX_SHADER" },
- { GL_FRAGMENT_SHADER, "GL_FRAGMENT_SHADER" },
+ {GL_VERTEX_SHADER, "GL_VERTEX_SHADER"},
+ {GL_FRAGMENT_SHADER, "GL_FRAGMENT_SHADER"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringSrcBlendFactor(uint32 value) {
+std::string GLES2Util::GetStringSrcBlendFactor(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_ZERO, "GL_ZERO" },
- { GL_ONE, "GL_ONE" },
- { GL_SRC_COLOR, "GL_SRC_COLOR" },
- { GL_ONE_MINUS_SRC_COLOR, "GL_ONE_MINUS_SRC_COLOR" },
- { GL_DST_COLOR, "GL_DST_COLOR" },
- { GL_ONE_MINUS_DST_COLOR, "GL_ONE_MINUS_DST_COLOR" },
- { GL_SRC_ALPHA, "GL_SRC_ALPHA" },
- { GL_ONE_MINUS_SRC_ALPHA, "GL_ONE_MINUS_SRC_ALPHA" },
- { GL_DST_ALPHA, "GL_DST_ALPHA" },
- { GL_ONE_MINUS_DST_ALPHA, "GL_ONE_MINUS_DST_ALPHA" },
- { GL_CONSTANT_COLOR, "GL_CONSTANT_COLOR" },
- { GL_ONE_MINUS_CONSTANT_COLOR, "GL_ONE_MINUS_CONSTANT_COLOR" },
- { GL_CONSTANT_ALPHA, "GL_CONSTANT_ALPHA" },
- { GL_ONE_MINUS_CONSTANT_ALPHA, "GL_ONE_MINUS_CONSTANT_ALPHA" },
- { GL_SRC_ALPHA_SATURATE, "GL_SRC_ALPHA_SATURATE" },
+ {GL_ZERO, "GL_ZERO"},
+ {GL_ONE, "GL_ONE"},
+ {GL_SRC_COLOR, "GL_SRC_COLOR"},
+ {GL_ONE_MINUS_SRC_COLOR, "GL_ONE_MINUS_SRC_COLOR"},
+ {GL_DST_COLOR, "GL_DST_COLOR"},
+ {GL_ONE_MINUS_DST_COLOR, "GL_ONE_MINUS_DST_COLOR"},
+ {GL_SRC_ALPHA, "GL_SRC_ALPHA"},
+ {GL_ONE_MINUS_SRC_ALPHA, "GL_ONE_MINUS_SRC_ALPHA"},
+ {GL_DST_ALPHA, "GL_DST_ALPHA"},
+ {GL_ONE_MINUS_DST_ALPHA, "GL_ONE_MINUS_DST_ALPHA"},
+ {GL_CONSTANT_COLOR, "GL_CONSTANT_COLOR"},
+ {GL_ONE_MINUS_CONSTANT_COLOR, "GL_ONE_MINUS_CONSTANT_COLOR"},
+ {GL_CONSTANT_ALPHA, "GL_CONSTANT_ALPHA"},
+ {GL_ONE_MINUS_CONSTANT_ALPHA, "GL_ONE_MINUS_CONSTANT_ALPHA"},
+ {GL_SRC_ALPHA_SATURATE, "GL_SRC_ALPHA_SATURATE"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringStencilOp(uint32 value) {
+std::string GLES2Util::GetStringStencilOp(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_KEEP, "GL_KEEP" },
- { GL_ZERO, "GL_ZERO" },
- { GL_REPLACE, "GL_REPLACE" },
- { GL_INCR, "GL_INCR" },
- { GL_INCR_WRAP, "GL_INCR_WRAP" },
- { GL_DECR, "GL_DECR" },
- { GL_DECR_WRAP, "GL_DECR_WRAP" },
- { GL_INVERT, "GL_INVERT" },
+ {GL_KEEP, "GL_KEEP"},
+ {GL_ZERO, "GL_ZERO"},
+ {GL_REPLACE, "GL_REPLACE"},
+ {GL_INCR, "GL_INCR"},
+ {GL_INCR_WRAP, "GL_INCR_WRAP"},
+ {GL_DECR, "GL_DECR"},
+ {GL_DECR_WRAP, "GL_DECR_WRAP"},
+ {GL_INVERT, "GL_INVERT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringStringType(uint32 value) {
+std::string GLES2Util::GetStringStringType(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_VENDOR, "GL_VENDOR" },
- { GL_RENDERER, "GL_RENDERER" },
- { GL_VERSION, "GL_VERSION" },
- { GL_SHADING_LANGUAGE_VERSION, "GL_SHADING_LANGUAGE_VERSION" },
- { GL_EXTENSIONS, "GL_EXTENSIONS" },
+ {GL_VENDOR, "GL_VENDOR"},
+ {GL_RENDERER, "GL_RENDERER"},
+ {GL_VERSION, "GL_VERSION"},
+ {GL_SHADING_LANGUAGE_VERSION, "GL_SHADING_LANGUAGE_VERSION"},
+ {GL_EXTENSIONS, "GL_EXTENSIONS"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureBindTarget(uint32 value) {
+std::string GLES2Util::GetStringTextureBindTarget(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_TEXTURE_2D, "GL_TEXTURE_2D" },
- { GL_TEXTURE_CUBE_MAP, "GL_TEXTURE_CUBE_MAP" },
+ {GL_TEXTURE_2D, "GL_TEXTURE_2D"},
+ {GL_TEXTURE_CUBE_MAP, "GL_TEXTURE_CUBE_MAP"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureFormat(uint32 value) {
+std::string GLES2Util::GetStringTextureFormat(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_ALPHA, "GL_ALPHA" },
- { GL_LUMINANCE, "GL_LUMINANCE" },
- { GL_LUMINANCE_ALPHA, "GL_LUMINANCE_ALPHA" },
- { GL_RGB, "GL_RGB" },
- { GL_RGBA, "GL_RGBA" },
+ {GL_ALPHA, "GL_ALPHA"},
+ {GL_LUMINANCE, "GL_LUMINANCE"},
+ {GL_LUMINANCE_ALPHA, "GL_LUMINANCE_ALPHA"},
+ {GL_RGB, "GL_RGB"},
+ {GL_RGBA, "GL_RGBA"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureInternalFormat(uint32 value) {
+std::string GLES2Util::GetStringTextureInternalFormat(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_ALPHA, "GL_ALPHA" },
- { GL_LUMINANCE, "GL_LUMINANCE" },
- { GL_LUMINANCE_ALPHA, "GL_LUMINANCE_ALPHA" },
- { GL_RGB, "GL_RGB" },
- { GL_RGBA, "GL_RGBA" },
+ {GL_ALPHA, "GL_ALPHA"},
+ {GL_LUMINANCE, "GL_LUMINANCE"},
+ {GL_LUMINANCE_ALPHA, "GL_LUMINANCE_ALPHA"},
+ {GL_RGB, "GL_RGB"},
+ {GL_RGBA, "GL_RGBA"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureInternalFormatStorage(uint32 value) {
+std::string GLES2Util::GetStringTextureInternalFormatStorage(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_RGB565, "GL_RGB565" },
- { GL_RGBA4, "GL_RGBA4" },
- { GL_RGB5_A1, "GL_RGB5_A1" },
- { GL_ALPHA8_EXT, "GL_ALPHA8_EXT" },
- { GL_LUMINANCE8_EXT, "GL_LUMINANCE8_EXT" },
- { GL_LUMINANCE8_ALPHA8_EXT, "GL_LUMINANCE8_ALPHA8_EXT" },
- { GL_RGB8_OES, "GL_RGB8_OES" },
- { GL_RGBA8_OES, "GL_RGBA8_OES" },
+ {GL_RGB565, "GL_RGB565"},
+ {GL_RGBA4, "GL_RGBA4"},
+ {GL_RGB5_A1, "GL_RGB5_A1"},
+ {GL_ALPHA8_EXT, "GL_ALPHA8_EXT"},
+ {GL_LUMINANCE8_EXT, "GL_LUMINANCE8_EXT"},
+ {GL_LUMINANCE8_ALPHA8_EXT, "GL_LUMINANCE8_ALPHA8_EXT"},
+ {GL_RGB8_OES, "GL_RGB8_OES"},
+ {GL_RGBA8_OES, "GL_RGBA8_OES"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureMagFilterMode(uint32 value) {
+std::string GLES2Util::GetStringTextureMagFilterMode(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_NEAREST, "GL_NEAREST" },
- { GL_LINEAR, "GL_LINEAR" },
+ {GL_NEAREST, "GL_NEAREST"}, {GL_LINEAR, "GL_LINEAR"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureMinFilterMode(uint32 value) {
+std::string GLES2Util::GetStringTextureMinFilterMode(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_NEAREST, "GL_NEAREST" },
- { GL_LINEAR, "GL_LINEAR" },
- { GL_NEAREST_MIPMAP_NEAREST, "GL_NEAREST_MIPMAP_NEAREST" },
- { GL_LINEAR_MIPMAP_NEAREST, "GL_LINEAR_MIPMAP_NEAREST" },
- { GL_NEAREST_MIPMAP_LINEAR, "GL_NEAREST_MIPMAP_LINEAR" },
- { GL_LINEAR_MIPMAP_LINEAR, "GL_LINEAR_MIPMAP_LINEAR" },
+ {GL_NEAREST, "GL_NEAREST"},
+ {GL_LINEAR, "GL_LINEAR"},
+ {GL_NEAREST_MIPMAP_NEAREST, "GL_NEAREST_MIPMAP_NEAREST"},
+ {GL_LINEAR_MIPMAP_NEAREST, "GL_LINEAR_MIPMAP_NEAREST"},
+ {GL_NEAREST_MIPMAP_LINEAR, "GL_NEAREST_MIPMAP_LINEAR"},
+ {GL_LINEAR_MIPMAP_LINEAR, "GL_LINEAR_MIPMAP_LINEAR"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureParameter(uint32 value) {
+std::string GLES2Util::GetStringTextureParameter(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_TEXTURE_MAG_FILTER, "GL_TEXTURE_MAG_FILTER" },
- { GL_TEXTURE_MIN_FILTER, "GL_TEXTURE_MIN_FILTER" },
- { GL_TEXTURE_POOL_CHROMIUM, "GL_TEXTURE_POOL_CHROMIUM" },
- { GL_TEXTURE_WRAP_S, "GL_TEXTURE_WRAP_S" },
- { GL_TEXTURE_WRAP_T, "GL_TEXTURE_WRAP_T" },
+ {GL_TEXTURE_MAG_FILTER, "GL_TEXTURE_MAG_FILTER"},
+ {GL_TEXTURE_MIN_FILTER, "GL_TEXTURE_MIN_FILTER"},
+ {GL_TEXTURE_POOL_CHROMIUM, "GL_TEXTURE_POOL_CHROMIUM"},
+ {GL_TEXTURE_WRAP_S, "GL_TEXTURE_WRAP_S"},
+ {GL_TEXTURE_WRAP_T, "GL_TEXTURE_WRAP_T"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTexturePool(uint32 value) {
+std::string GLES2Util::GetStringTexturePool(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_TEXTURE_POOL_MANAGED_CHROMIUM, "GL_TEXTURE_POOL_MANAGED_CHROMIUM" },
- { GL_TEXTURE_POOL_UNMANAGED_CHROMIUM,
- "GL_TEXTURE_POOL_UNMANAGED_CHROMIUM" },
+ {GL_TEXTURE_POOL_MANAGED_CHROMIUM, "GL_TEXTURE_POOL_MANAGED_CHROMIUM"},
+ {GL_TEXTURE_POOL_UNMANAGED_CHROMIUM,
+ "GL_TEXTURE_POOL_UNMANAGED_CHROMIUM"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureTarget(uint32 value) {
+std::string GLES2Util::GetStringTextureTarget(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_TEXTURE_2D, "GL_TEXTURE_2D" },
- { GL_TEXTURE_CUBE_MAP_POSITIVE_X, "GL_TEXTURE_CUBE_MAP_POSITIVE_X" },
- { GL_TEXTURE_CUBE_MAP_NEGATIVE_X, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X" },
- { GL_TEXTURE_CUBE_MAP_POSITIVE_Y, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y" },
- { GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y" },
- { GL_TEXTURE_CUBE_MAP_POSITIVE_Z, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z" },
- { GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z" },
+ {GL_TEXTURE_2D, "GL_TEXTURE_2D"},
+ {GL_TEXTURE_CUBE_MAP_POSITIVE_X, "GL_TEXTURE_CUBE_MAP_POSITIVE_X"},
+ {GL_TEXTURE_CUBE_MAP_NEGATIVE_X, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X"},
+ {GL_TEXTURE_CUBE_MAP_POSITIVE_Y, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y"},
+ {GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"},
+ {GL_TEXTURE_CUBE_MAP_POSITIVE_Z, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z"},
+ {GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureUsage(uint32 value) {
+std::string GLES2Util::GetStringTextureUsage(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_NONE, "GL_NONE" },
- { GL_FRAMEBUFFER_ATTACHMENT_ANGLE, "GL_FRAMEBUFFER_ATTACHMENT_ANGLE" },
+ {GL_NONE, "GL_NONE"},
+ {GL_FRAMEBUFFER_ATTACHMENT_ANGLE, "GL_FRAMEBUFFER_ATTACHMENT_ANGLE"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringTextureWrapMode(uint32 value) {
+std::string GLES2Util::GetStringTextureWrapMode(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_CLAMP_TO_EDGE, "GL_CLAMP_TO_EDGE" },
- { GL_MIRRORED_REPEAT, "GL_MIRRORED_REPEAT" },
- { GL_REPEAT, "GL_REPEAT" },
+ {GL_CLAMP_TO_EDGE, "GL_CLAMP_TO_EDGE"},
+ {GL_MIRRORED_REPEAT, "GL_MIRRORED_REPEAT"},
+ {GL_REPEAT, "GL_REPEAT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringVertexAttribType(uint32 value) {
+std::string GLES2Util::GetStringVertexAttribType(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_BYTE, "GL_BYTE" },
- { GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE" },
- { GL_SHORT, "GL_SHORT" },
- { GL_UNSIGNED_SHORT, "GL_UNSIGNED_SHORT" },
- { GL_FLOAT, "GL_FLOAT" },
+ {GL_BYTE, "GL_BYTE"},
+ {GL_UNSIGNED_BYTE, "GL_UNSIGNED_BYTE"},
+ {GL_SHORT, "GL_SHORT"},
+ {GL_UNSIGNED_SHORT, "GL_UNSIGNED_SHORT"},
+ {GL_FLOAT, "GL_FLOAT"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringVertexAttribute(uint32 value) {
+std::string GLES2Util::GetStringVertexAttribute(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED" },
- { GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
- "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING" },
- { GL_VERTEX_ATTRIB_ARRAY_ENABLED, "GL_VERTEX_ATTRIB_ARRAY_ENABLED" },
- { GL_VERTEX_ATTRIB_ARRAY_SIZE, "GL_VERTEX_ATTRIB_ARRAY_SIZE" },
- { GL_VERTEX_ATTRIB_ARRAY_STRIDE, "GL_VERTEX_ATTRIB_ARRAY_STRIDE" },
- { GL_VERTEX_ATTRIB_ARRAY_TYPE, "GL_VERTEX_ATTRIB_ARRAY_TYPE" },
- { GL_CURRENT_VERTEX_ATTRIB, "GL_CURRENT_VERTEX_ATTRIB" },
+ {GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED"},
+ {GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
+ "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"},
+ {GL_VERTEX_ATTRIB_ARRAY_ENABLED, "GL_VERTEX_ATTRIB_ARRAY_ENABLED"},
+ {GL_VERTEX_ATTRIB_ARRAY_SIZE, "GL_VERTEX_ATTRIB_ARRAY_SIZE"},
+ {GL_VERTEX_ATTRIB_ARRAY_STRIDE, "GL_VERTEX_ATTRIB_ARRAY_STRIDE"},
+ {GL_VERTEX_ATTRIB_ARRAY_TYPE, "GL_VERTEX_ATTRIB_ARRAY_TYPE"},
+ {GL_CURRENT_VERTEX_ATTRIB, "GL_CURRENT_VERTEX_ATTRIB"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
-std::string GLES2Util::GetStringVertexPointer(uint32 value) {
+std::string GLES2Util::GetStringVertexPointer(uint32_t value) {
static const EnumToString string_table[] = {
- { GL_VERTEX_ATTRIB_ARRAY_POINTER, "GL_VERTEX_ATTRIB_ARRAY_POINTER" },
+ {GL_VERTEX_ATTRIB_ARRAY_POINTER, "GL_VERTEX_ATTRIB_ARRAY_POINTER"},
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
}
#endif // GPU_COMMAND_BUFFER_COMMON_GLES2_CMD_UTILS_IMPLEMENTATION_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/common/gles2_cmd_utils_unittest.cc b/chromium/gpu/command_buffer/common/gles2_cmd_utils_unittest.cc
index 864c8811d2a..d0e7e037ebc 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_utils_unittest.cc
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_utils_unittest.cc
@@ -20,7 +20,7 @@ class GLES2UtilTest : public testing:: Test {
};
TEST_F(GLES2UtilTest, SafeMultiplyUint32) {
- uint32 result = 0;
+ uint32_t result = 0;
EXPECT_TRUE(SafeMultiplyUint32(2u, 3u, &result));
EXPECT_EQ(6u, result);
EXPECT_FALSE(SafeMultiplyUint32(0x80000000u, 2u, &result));
@@ -32,7 +32,7 @@ TEST_F(GLES2UtilTest, SafeMultiplyUint32) {
}
TEST_F(GLES2UtilTest, SafeAddUint32) {
- uint32 result = 0;
+ uint32_t result = 0;
EXPECT_TRUE(SafeAddUint32(2u, 3u, &result));
EXPECT_EQ(5u, result);
EXPECT_FALSE(SafeAddUint32(0x80000000u, 0x80000000u, &result));
@@ -48,9 +48,9 @@ TEST_F(GLES2UtilTest, SafeAddUint32) {
}
TEST_F(GLES2UtilTest, SafeAddInt32) {
- int32 result = 0;
- const int32 kMax = std::numeric_limits<int32>::max();
- const int32 kMin = std::numeric_limits<int32>::min();
+ int32_t result = 0;
+ const int32_t kMax = std::numeric_limits<int32_t>::max();
+ const int32_t kMin = std::numeric_limits<int32_t>::min();
EXPECT_TRUE(SafeAddInt32(2, 3, &result));
EXPECT_EQ(5, result);
EXPECT_FALSE(SafeAddInt32(kMax, 1, &result));
@@ -89,11 +89,11 @@ TEST_F(GLES2UtilTest, GLGetNumValuesReturned) {
}
TEST_F(GLES2UtilTest, ComputeImageDataSizesFormats) {
- const uint32 kWidth = 16;
- const uint32 kHeight = 12;
- uint32 size;
- uint32 unpadded_row_size;
- uint32 padded_row_size;
+ const uint32_t kWidth = 16;
+ const uint32_t kHeight = 12;
+ uint32_t size;
+ uint32_t unpadded_row_size;
+ uint32_t padded_row_size;
EXPECT_TRUE(GLES2Util::ComputeImageDataSizes(
kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, 1, &size, &unpadded_row_size,
&padded_row_size));
@@ -146,11 +146,11 @@ TEST_F(GLES2UtilTest, ComputeImageDataSizesFormats) {
}
TEST_F(GLES2UtilTest, ComputeImageDataSizeTypes) {
- const uint32 kWidth = 16;
- const uint32 kHeight = 12;
- uint32 size;
- uint32 unpadded_row_size;
- uint32 padded_row_size;
+ const uint32_t kWidth = 16;
+ const uint32_t kHeight = 12;
+ uint32_t size;
+ uint32_t unpadded_row_size;
+ uint32_t padded_row_size;
EXPECT_TRUE(GLES2Util::ComputeImageDataSizes(
kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 1, &size, &unpadded_row_size,
&padded_row_size));
@@ -184,11 +184,11 @@ TEST_F(GLES2UtilTest, ComputeImageDataSizeTypes) {
}
TEST_F(GLES2UtilTest, ComputeImageDataSizesUnpackAlignment) {
- const uint32 kWidth = 19;
- const uint32 kHeight = 12;
- uint32 size;
- uint32 unpadded_row_size;
- uint32 padded_row_size;
+ const uint32_t kWidth = 19;
+ const uint32_t kHeight = 12;
+ uint32_t size;
+ uint32_t unpadded_row_size;
+ uint32_t padded_row_size;
EXPECT_TRUE(GLES2Util::ComputeImageDataSizes(
kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, 1, &size, &unpadded_row_size,
&padded_row_size));
@@ -245,6 +245,19 @@ TEST_F(GLES2UtilTest, GetChannelsForCompressedFormat) {
GL_COMPRESSED_RGBA_S3TC_DXT3_EXT));
EXPECT_EQ(0u, GLES2Util::GetChannelsForFormat(
GL_COMPRESSED_RGBA_S3TC_DXT5_EXT));
+ EXPECT_EQ(0u, GLES2Util::GetChannelsForFormat(GL_ATC_RGB_AMD));
+ EXPECT_EQ(0u, GLES2Util::GetChannelsForFormat(
+ GL_ATC_RGBA_EXPLICIT_ALPHA_AMD));
+ EXPECT_EQ(0u, GLES2Util::GetChannelsForFormat(
+ GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD));
+ EXPECT_EQ(0u, GLES2Util::GetChannelsForFormat(
+ GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
+ EXPECT_EQ(0u, GLES2Util::GetChannelsForFormat(
+ GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG));
+ EXPECT_EQ(0u, GLES2Util::GetChannelsForFormat(
+ GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG));
+ EXPECT_EQ(0u, GLES2Util::GetChannelsForFormat(
+ GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG));
}
namespace {
diff --git a/chromium/gpu/command_buffer/common/gpu_memory_allocation.h b/chromium/gpu/command_buffer/common/gpu_memory_allocation.h
index 57be4c5490f..facbd7ff885 100644
--- a/chromium/gpu/command_buffer/common/gpu_memory_allocation.h
+++ b/chromium/gpu/command_buffer/common/gpu_memory_allocation.h
@@ -25,6 +25,7 @@ struct MemoryAllocation {
CUTOFF_ALLOW_NICE_TO_HAVE,
// Allow all allocations.
CUTOFF_ALLOW_EVERYTHING,
+ CUTOFF_LAST = CUTOFF_ALLOW_EVERYTHING
};
// Limits when this renderer is visible.
@@ -48,48 +49,6 @@ struct MemoryAllocation {
}
};
-// Memory Allocation request which is sent by a client, to help GpuMemoryManager
-// more ideally split memory allocations across clients.
-struct ManagedMemoryStats {
- // Bytes required for correct rendering.
- uint64 bytes_required;
-
- // Bytes that are not strictly required for correctness, but, if allocated,
- // will provide good performance.
- uint64 bytes_nice_to_have;
-
- // The number of bytes currently allocated.
- uint64 bytes_allocated;
-
- // Whether or not a backbuffer is currently requested (the memory usage
- // of the buffer is known by the GPU process).
- bool backbuffer_requested;
-
- ManagedMemoryStats()
- : bytes_required(0),
- bytes_nice_to_have(0),
- bytes_allocated(0),
- backbuffer_requested(false) {
- }
-
- ManagedMemoryStats(uint64 bytes_required,
- uint64 bytes_nice_to_have,
- uint64 bytes_allocated,
- bool backbuffer_requested)
- : bytes_required(bytes_required),
- bytes_nice_to_have(bytes_nice_to_have),
- bytes_allocated(bytes_allocated),
- backbuffer_requested(backbuffer_requested) {
- }
-
- bool Equals(const ManagedMemoryStats& other) const {
- return bytes_required == other.bytes_required &&
- bytes_nice_to_have == other.bytes_nice_to_have &&
- bytes_allocated == other.bytes_allocated &&
- backbuffer_requested == other.backbuffer_requested;
- }
-};
-
} // namespace content
#endif // GPU_COMMAND_BUFFER_COMMON_GPU_MEMORY_ALLOCATION_H_
diff --git a/chromium/gpu/command_buffer/common/id_allocator.h b/chromium/gpu/command_buffer/common/id_allocator.h
index 46fcd1acf03..3f2dc4a65e2 100644
--- a/chromium/gpu/command_buffer/common/id_allocator.h
+++ b/chromium/gpu/command_buffer/common/id_allocator.h
@@ -7,17 +7,19 @@
#ifndef GPU_COMMAND_BUFFER_CLIENT_ID_ALLOCATOR_H_
#define GPU_COMMAND_BUFFER_CLIENT_ID_ALLOCATOR_H_
+#include <stdint.h>
+
#include <set>
#include <utility>
#include "base/compiler_specific.h"
-#include "gpu/command_buffer/common/types.h"
+#include "base/macros.h"
#include "gpu/gpu_export.h"
namespace gpu {
// A resource ID, key to the resource maps.
-typedef uint32 ResourceId;
+typedef uint32_t ResourceId;
// Invalid resource ID.
static const ResourceId kInvalidResource = 0u;
diff --git a/chromium/gpu/command_buffer/common/mailbox.cc b/chromium/gpu/command_buffer/common/mailbox.cc
index 8d8393fa63c..21602ab6d4d 100644
--- a/chromium/gpu/command_buffer/common/mailbox.cc
+++ b/chromium/gpu/command_buffer/common/mailbox.cc
@@ -7,6 +7,7 @@
#include <string.h>
#include "base/logging.h"
+#include "base/rand_util.h"
namespace gpu {
@@ -31,4 +32,28 @@ void Mailbox::SetName(const int8* n) {
memcpy(name, n, sizeof(name));
}
+Mailbox Mailbox::Generate() {
+ Mailbox result;
+ // Generates cryptographically-secure bytes.
+ base::RandBytes(result.name, sizeof(result.name));
+#if !defined(NDEBUG)
+ int8 value = 1;
+ for (size_t i = 1; i < sizeof(result.name); ++i)
+ value ^= result.name[i];
+ result.name[0] = value;
+#endif
+ return result;
+}
+
+bool Mailbox::Verify() const {
+#if !defined(NDEBUG)
+ int8 value = 1;
+ for (size_t i = 0; i < sizeof(name); ++i)
+ value ^= name[i];
+ return value == 0;
+#else
+ return true;
+#endif
+}
+
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/common/mailbox.h b/chromium/gpu/command_buffer/common/mailbox.h
index 938167f5cf8..a45c91f279b 100644
--- a/chromium/gpu/command_buffer/common/mailbox.h
+++ b/chromium/gpu/command_buffer/common/mailbox.h
@@ -5,22 +5,42 @@
#ifndef GPU_COMMAND_BUFFER_MAILBOX_H_
#define GPU_COMMAND_BUFFER_MAILBOX_H_
+#include <stdint.h>
#include <string.h>
-#include "gpu/command_buffer/common/types.h"
#include "gpu/gpu_export.h"
+// From gl2/gl2ext.h.
+#ifndef GL_MAILBOX_SIZE_CHROMIUM
+#define GL_MAILBOX_SIZE_CHROMIUM 64
+#endif
+
namespace gpu {
struct GPU_EXPORT Mailbox {
Mailbox();
bool IsZero() const;
void SetZero();
- void SetName(const int8* name);
- int8 name[64];
+ void SetName(const int8_t* name);
+
+ // Generate a unique unguessable mailbox name.
+ static Mailbox Generate();
+
+ // Verify that the mailbox was created through Mailbox::Generate. This only
+ // works in Debug (always returns true in Release). This is not a secure
+ // check, only to catch bugs where clients forgot to call Mailbox::Generate.
+ bool Verify() const;
+
+ int8_t name[GL_MAILBOX_SIZE_CHROMIUM];
bool operator<(const Mailbox& other) const {
return memcmp(this, &other, sizeof other) < 0;
}
+ bool operator==(const Mailbox& other) const {
+ return memcmp(this, &other, sizeof other) == 0;
+ }
+ bool operator!=(const Mailbox& other) const {
+ return !operator==(other);
+ }
};
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/common/mailbox_holder.cc b/chromium/gpu/command_buffer/common/mailbox_holder.cc
new file mode 100644
index 00000000000..87dec36fe23
--- /dev/null
+++ b/chromium/gpu/command_buffer/common/mailbox_holder.cc
@@ -0,0 +1,18 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/common/mailbox_holder.h"
+
+namespace gpu {
+
+MailboxHolder::MailboxHolder() : texture_target(0), sync_point(0) {}
+
+MailboxHolder::MailboxHolder(const Mailbox& mailbox,
+ uint32_t texture_target,
+ uint32_t sync_point)
+ : mailbox(mailbox),
+ texture_target(texture_target),
+ sync_point(sync_point) {}
+
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/common/mailbox_holder.h b/chromium/gpu/command_buffer/common/mailbox_holder.h
new file mode 100644
index 00000000000..7c7a0e23123
--- /dev/null
+++ b/chromium/gpu/command_buffer/common/mailbox_holder.h
@@ -0,0 +1,28 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_MAILBOX_HOLDER_H_
+#define GPU_COMMAND_BUFFER_MAILBOX_HOLDER_H_
+
+#include <stdint.h>
+#include <string.h>
+
+#include "gpu/command_buffer/common/mailbox.h"
+#include "gpu/gpu_export.h"
+
+namespace gpu {
+
+struct GPU_EXPORT MailboxHolder {
+ MailboxHolder();
+ MailboxHolder(const gpu::Mailbox& mailbox,
+ uint32_t texture_target,
+ uint32_t sync_point);
+ gpu::Mailbox mailbox;
+ uint32_t texture_target;
+ uint32_t sync_point;
+};
+
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_MAILBOX_HOLDER_H_
diff --git a/chromium/gpu/command_buffer/common/types.h b/chromium/gpu/command_buffer/common/types.h
deleted file mode 100644
index 718ecca6763..00000000000
--- a/chromium/gpu/command_buffer/common/types.h
+++ /dev/null
@@ -1,186 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// This file contains cross-platform basic type definitions
-
-#ifndef GPU_COMMAND_BUFFER_COMMON_TYPES_H_
-#define GPU_COMMAND_BUFFER_COMMON_TYPES_H_
-
-#if !defined(_MSC_VER)
-#include <stdint.h>
-#endif
-#include <cstddef>
-#include <string>
-
-typedef signed char schar;
-typedef signed char int8;
-// TODO(mbelshe) Remove these type guards. These are
-// temporary to avoid conflicts with npapi.h.
-#ifndef _INT16
-#define _INT16
-typedef short int16;
-#endif
-#ifndef _INT32
-#define _INT32
-typedef int int32;
-#endif
-
-// The NSPR system headers define 64-bit as |long| when possible. In order to
-// not have typedef mismatches, we do the same on LP64.
-#if defined(__LP64__) && !defined(__APPLE__) && !defined(__OpenBSD__)
-typedef long int64;
-#else
-typedef long long int64;
-#endif
-
-// NOTE: unsigned types are DANGEROUS in loops and other arithmetical
-// places. Use the signed types unless your variable represents a bit
-// pattern (eg a hash value) or you really need the extra bit. Do NOT
-// use 'unsigned' to express "this value should always be positive";
-// use assertions for this.
-
-typedef unsigned char uint8;
-// TODO(mbelshe) Remove these type guards. These are
-// temporary to avoid conflicts with npapi.h.
-#ifndef _UINT16
-#define _UINT16
-typedef unsigned short uint16;
-#endif
-#ifndef _UINT32
-#define _UINT32
-typedef unsigned int uint32;
-#endif
-
-// See the comment above about NSPR and 64-bit.
-#if defined(__LP64__) && !defined(__APPLE__) && !defined(__OpenBSD__)
-typedef unsigned long uint64;
-#else
-typedef unsigned long long uint64;
-#endif
-
-// A macro to disallow the copy constructor and operator= functions
-// This should be used in the private: declarations for a class
-#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
- TypeName(const TypeName&); \
- void operator=(const TypeName&)
-
-// A macro to disallow all the implicit constructors, namely the
-// default constructor, copy constructor and operator= functions.
-//
-// This should be used in the private: declarations for a class
-// that wants to prevent anyone from instantiating it. This is
-// especially useful for classes containing only static methods.
-#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \
- TypeName(); \
- DISALLOW_COPY_AND_ASSIGN(TypeName)
-
-// The arraysize(arr) macro returns the # of elements in an array arr.
-// The expression is a compile-time constant, and therefore can be
-// used in defining new arrays, for example. If you use arraysize on
-// a pointer by mistake, you will get a compile-time error.
-//
-// One caveat is that arraysize() doesn't accept any array of an
-// anonymous type or a type defined inside a function. In these rare
-// cases, you have to use the unsafe ARRAYSIZE_UNSAFE() macro below. This is
-// due to a limitation in C++'s template system. The limitation might
-// eventually be removed, but it hasn't happened yet.
-
-// This template function declaration is used in defining arraysize.
-// Note that the function doesn't need an implementation, as we only
-// use its type.
-template <typename T, size_t N>
-char (&ArraySizeHelper(T (&array)[N]))[N];
-
-// That gcc wants both of these prototypes seems mysterious. VC, for
-// its part, can't decide which to use (another mystery). Matching of
-// template overloads: the final frontier.
-#if !defined(_MSC_VER)
-template <typename T, size_t N>
-char (&ArraySizeHelper(const T (&array)[N]))[N];
-#endif
-
-#define arraysize(array) (sizeof(ArraySizeHelper(array)))
-
-// The COMPILE_ASSERT macro can be used to verify that a compile time
-// expression is true. For example, you could use it to verify the
-// size of a static array:
-//
-// COMPILE_ASSERT(ARRAYSIZE_UNSAFE(content_type_names) == CONTENT_NUM_TYPES,
-// content_type_names_incorrect_size);
-//
-// or to make sure a struct is smaller than a certain size:
-//
-// COMPILE_ASSERT(sizeof(foo) < 128, foo_too_large);
-//
-// The second argument to the macro is the name of the variable. If
-// the expression is false, most compilers will issue a warning/error
-// containing the name of the variable.
-
-template <bool>
-struct GpuCompileAssert {
-};
-
-#undef COMPILE_ASSERT
-#define COMPILE_ASSERT(expr, msg) \
- typedef GpuCompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
-
-// Implementation details of COMPILE_ASSERT:
-//
-// - COMPILE_ASSERT works by defining an array type that has -1
-// elements (and thus is invalid) when the expression is false.
-//
-// - The simpler definition
-//
-// #define COMPILE_ASSERT(expr, msg) typedef char msg[(expr) ? 1 : -1]
-//
-// does not work, as gcc supports variable-length arrays whose sizes
-// are determined at run-time (this is gcc's extension and not part
-// of the C++ standard). As a result, gcc fails to reject the
-// following code with the simple definition:
-//
-// int foo;
-// COMPILE_ASSERT(foo, msg); // not supposed to compile as foo is
-// // not a compile-time constant.
-//
-// - By using the type CompileAssert<(bool(expr))>, we ensures that
-// expr is a compile-time constant. (Template arguments must be
-// determined at compile-time.)
-//
-// - The outter parentheses in CompileAssert<(bool(expr))> are necessary
-// to work around a bug in gcc 3.4.4 and 4.0.1. If we had written
-//
-// CompileAssert<bool(expr)>
-//
-// instead, these compilers will refuse to compile
-//
-// COMPILE_ASSERT(5 > 0, some_message);
-//
-// (They seem to think the ">" in "5 > 0" marks the end of the
-// template argument list.)
-//
-// - The array size is (bool(expr) ? 1 : -1), instead of simply
-//
-// ((expr) ? 1 : -1).
-//
-// This is to avoid running into a bug in MS VC 7.1, which
-// causes ((0.0) ? 1 : -1) to incorrectly evaluate to 1.
-
-namespace gpu {
-#if defined(_MSC_VER)
-typedef short Int16;
-typedef unsigned short Uint16;
-typedef int Int32;
-typedef unsigned int Uint32;
-#else
-typedef int16_t Int16;
-typedef uint16_t Uint16;
-typedef int32_t Int32;
-typedef uint32_t Uint32;
-#endif
-
-typedef std::string String;
-
-} // namespace gpu
-
-#endif // GPU_COMMAND_BUFFER_COMMON_TYPES_H_
diff --git a/chromium/gpu/command_buffer/common/unittest_main.cc b/chromium/gpu/command_buffer/common/unittest_main.cc
index db22191fde2..2d6a2d116ea 100644
--- a/chromium/gpu/command_buffer/common/unittest_main.cc
+++ b/chromium/gpu/command_buffer/common/unittest_main.cc
@@ -9,7 +9,6 @@
#include "base/test/test_suite.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gl/gl_implementation.h"
namespace {
@@ -34,7 +33,6 @@ int main(int argc, char** argv) {
base::AtExitManager exit_manager;
#endif
CommandLine::Init(argc, argv);
- gfx::InitializeGLBindings(gfx::kGLImplementationMockGL);
testing::InitGoogleMock(&argc, argv);
return base::LaunchUnitTests(argc,
argv,
diff --git a/chromium/gpu/command_buffer/service/BUILD.gn b/chromium/gpu/command_buffer/service/BUILD.gn
new file mode 100644
index 00000000000..c9f8f57e9dc
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/BUILD.gn
@@ -0,0 +1,155 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/ui.gni")
+import("//third_party/protobuf/proto_library.gni")
+
+source_set("service") {
+ sources = [
+ "async_pixel_transfer_delegate.cc",
+ "async_pixel_transfer_delegate.h",
+ "async_pixel_transfer_manager_android.cc",
+ "async_pixel_transfer_manager_idle.cc",
+ "async_pixel_transfer_manager_idle.h",
+ "async_pixel_transfer_manager_linux.cc",
+ "async_pixel_transfer_manager_mac.cc",
+ "async_pixel_transfer_manager_share_group.cc",
+ "async_pixel_transfer_manager_share_group.h",
+ "async_pixel_transfer_manager_stub.cc",
+ "async_pixel_transfer_manager_stub.h",
+ "async_pixel_transfer_manager_sync.cc",
+ "async_pixel_transfer_manager_sync.h",
+ "async_pixel_transfer_manager_win.cc",
+ "async_pixel_transfer_manager.cc",
+ "async_pixel_transfer_manager.h",
+ "buffer_manager.h",
+ "buffer_manager.cc",
+ "cmd_buffer_engine.h",
+ "cmd_parser.cc",
+ "cmd_parser.h",
+ "command_buffer_service.cc",
+ "command_buffer_service.h",
+ "common_decoder.cc",
+ "common_decoder.h",
+ "context_group.h",
+ "context_group.cc",
+ "context_state.h",
+ "context_state_autogen.h",
+ "context_state_impl_autogen.h",
+ "context_state.cc",
+ "error_state.cc",
+ "error_state.h",
+ "feature_info.h",
+ "feature_info.cc",
+ "framebuffer_manager.h",
+ "framebuffer_manager.cc",
+ "gles2_cmd_copy_texture_chromium.cc",
+ "gles2_cmd_copy_texture_chromium.h",
+ "gles2_cmd_decoder.h",
+ "gles2_cmd_decoder_autogen.h",
+ "gles2_cmd_decoder.cc",
+ "gles2_cmd_validation.h",
+ "gles2_cmd_validation.cc",
+ "gles2_cmd_validation_autogen.h",
+ "gles2_cmd_validation_implementation_autogen.h",
+ "gl_context_virtual.cc",
+ "gl_context_virtual.h",
+ "gl_state_restorer_impl.cc",
+ "gl_state_restorer_impl.h",
+ "gl_utils.h",
+ "gpu_control_service.cc",
+ "gpu_control_service.h",
+ "gpu_memory_buffer_manager.h",
+ "gpu_scheduler.cc",
+ "gpu_scheduler.h",
+ "gpu_scheduler_mock.h",
+ "gpu_state_tracer.cc",
+ "gpu_state_tracer.h",
+ "gpu_switches.cc",
+ "gpu_switches.h",
+ "gpu_tracer.cc",
+ "gpu_tracer.h",
+ "id_manager.h",
+ "id_manager.cc",
+ "image_manager.cc",
+ "image_manager.h",
+ "in_process_command_buffer.cc",
+ "in_process_command_buffer.h",
+ "logger.cc",
+ "logger.h",
+ "mailbox_manager.cc",
+ "mailbox_manager.h",
+ "mailbox_synchronizer.cc",
+ "mailbox_synchronizer.h",
+ "memory_program_cache.h",
+ "memory_program_cache.cc",
+ "mocks.h",
+ "program_manager.h",
+ "program_manager.cc",
+ "query_manager.h",
+ "query_manager.cc",
+ "renderbuffer_manager.h",
+ "renderbuffer_manager.cc",
+ "program_cache.h",
+ "program_cache.cc",
+ "shader_manager.h",
+ "shader_manager.cc",
+ "shader_translator.h",
+ "shader_translator.cc",
+ "shader_translator_cache.h",
+ "shader_translator_cache.cc",
+ "stream_texture_manager_in_process_android.h",
+ "stream_texture_manager_in_process_android.cc",
+ "texture_definition.h",
+ "texture_definition.cc",
+ "texture_manager.h",
+ "texture_manager.cc",
+ "transfer_buffer_manager.cc",
+ "transfer_buffer_manager.h",
+ "vertex_array_manager.h",
+ "vertex_array_manager.cc",
+ "vertex_attrib_manager.h",
+ "vertex_attrib_manager.cc",
+ ]
+
+ configs += [
+ "//third_party/khronos:khronos_headers",
+ ]
+
+ deps = [
+ ":disk_cache_proto",
+ "//base",
+ "//base/third_party/dynamic_annotations",
+ "//crypto",
+ "//gpu/command_buffer/common",
+ "//third_party/angle:translator",
+ "//third_party/protobuf:protobuf_lite",
+ "//third_party/re2",
+ "//third_party/smhasher:cityhash",
+ "//ui/gfx",
+ "//ui/gfx/geometry",
+ "//ui/gl",
+ ]
+
+ if (ui_compositor_image_transport) {
+ include_dirs = [ "//third_party/khronos" ]
+ }
+
+ if (is_win || is_android || (is_linux && use_x11)) {
+ sources += [
+ "async_pixel_transfer_manager_egl.cc",
+ "async_pixel_transfer_manager_egl.h",
+ ]
+ }
+
+ if (is_android && !is_debug) {
+ # On Android optimize more since this component can be a bottleneck.
+ configs -= [ "//build/config/compiler:optimize" ]
+ configs += [ "//build/config/compiler:optimize_max" ]
+ }
+}
+
+proto_library("disk_cache_proto") {
+ sources = [ "disk_cache_proto.proto" ]
+}
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.cc
index 074f6752dd8..6b1dbc6eb3b 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.cc
@@ -4,26 +4,18 @@
#include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
-#include "base/memory/shared_memory.h"
-#include "gpu/command_buffer/service/safe_shared_memory_pool.h"
-
namespace gpu {
-namespace {
-
-void* GetAddressImpl(base::SharedMemory* shared_memory,
- uint32 shm_size,
- uint32 shm_data_offset,
- uint32 shm_data_size) {
- // Memory bounds have already been validated, so there
- // are just DCHECKS here.
- DCHECK(shared_memory);
- DCHECK(shared_memory->memory());
- DCHECK_LE(shm_data_offset + shm_data_size, shm_size);
- return static_cast<int8*>(shared_memory->memory()) + shm_data_offset;
+AsyncMemoryParams::AsyncMemoryParams(scoped_refptr<Buffer> buffer,
+ uint32 data_offset,
+ uint32 data_size)
+ : buffer_(buffer), data_offset_(data_offset), data_size_(data_size) {
+ DCHECK(buffer_);
+ DCHECK(buffer_->memory());
}
-} // namespace
+AsyncMemoryParams::~AsyncMemoryParams() {
+}
AsyncPixelTransferUploadStats::AsyncPixelTransferUploadStats()
: texture_upload_count_(0) {}
@@ -44,27 +36,8 @@ int AsyncPixelTransferUploadStats::GetStats(
return texture_upload_count_;
}
-AsyncPixelTransferDelegate::AsyncPixelTransferDelegate(){}
-
-AsyncPixelTransferDelegate::~AsyncPixelTransferDelegate(){}
+AsyncPixelTransferDelegate::AsyncPixelTransferDelegate() {}
-// static
-void* AsyncPixelTransferDelegate::GetAddress(
- const AsyncMemoryParams& mem_params) {
- return GetAddressImpl(mem_params.shared_memory,
- mem_params.shm_size,
- mem_params.shm_data_offset,
- mem_params.shm_data_size);
-}
-
-// static
-void* AsyncPixelTransferDelegate::GetAddress(
- ScopedSafeSharedMemory* safe_shared_memory,
- const AsyncMemoryParams& mem_params) {
- return GetAddressImpl(safe_shared_memory->shared_memory(),
- mem_params.shm_size,
- mem_params.shm_data_offset,
- mem_params.shm_data_size);
-}
+AsyncPixelTransferDelegate::~AsyncPixelTransferDelegate() {}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.h b/chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.h
index dc0f2d7b62f..b41bcd52444 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.h
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_delegate.h
@@ -11,6 +11,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/synchronization/lock.h"
#include "base/time/time.h"
+#include "gpu/command_buffer/common/buffer.h"
#include "gpu/gpu_export.h"
#include "ui/gl/gl_bindings.h"
@@ -20,8 +21,6 @@ class SharedMemory;
namespace gpu {
-class ScopedSafeSharedMemory;
-
struct AsyncTexImage2DParams {
GLenum target;
GLint level;
@@ -44,11 +43,24 @@ struct AsyncTexSubImage2DParams {
GLenum type;
};
-struct AsyncMemoryParams {
- base::SharedMemory* shared_memory;
- uint32 shm_size;
- uint32 shm_data_offset;
- uint32 shm_data_size;
+class AsyncMemoryParams {
+ public:
+ AsyncMemoryParams(scoped_refptr<Buffer> buffer,
+ uint32 data_offset,
+ uint32 data_size);
+ ~AsyncMemoryParams();
+
+ scoped_refptr<Buffer> buffer() const { return buffer_; }
+ uint32 data_size() const { return data_size_; }
+ uint32 data_offset() const { return data_offset_; }
+ void* GetDataAddress() const {
+ return buffer_->GetDataAddress(data_offset_, data_size_);
+ }
+
+ private:
+ scoped_refptr<Buffer> buffer_;
+ uint32 data_offset_;
+ uint32 data_size_;
};
class AsyncPixelTransferUploadStats
@@ -92,13 +104,6 @@ class GPU_EXPORT AsyncPixelTransferDelegate {
// Block until the specified transfer completes.
virtual void WaitForTransferCompletion() = 0;
- // Gets the address of the data from shared memory.
- static void* GetAddress(const AsyncMemoryParams& mem_params);
-
- // Sometimes the |safe_shared_memory| is duplicate to prevent use after free.
- static void* GetAddress(ScopedSafeSharedMemory* safe_shared_memory,
- const AsyncMemoryParams& mem_params);
-
protected:
AsyncPixelTransferDelegate();
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc
index 3084dd61964..efc893a40ca 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.cc
@@ -17,6 +17,12 @@ AsyncPixelTransferManager::AsyncPixelTransferManager() {}
AsyncPixelTransferManager::~AsyncPixelTransferManager() {
if (manager_)
manager_->RemoveObserver(this);
+
+ for (TextureToDelegateMap::iterator ref = delegate_map_.begin();
+ ref != delegate_map_.end();
+ ref++) {
+ ref->first->RemoveObserver();
+ }
}
void AsyncPixelTransferManager::Initialize(gles2::TextureManager* manager) {
@@ -32,6 +38,7 @@ AsyncPixelTransferManager::CreatePixelTransferDelegate(
AsyncPixelTransferDelegate* delegate =
CreatePixelTransferDelegateImpl(ref, define_params);
delegate_map_[ref] = make_linked_ptr(delegate);
+ ref->AddObserver();
return delegate;
}
@@ -49,8 +56,10 @@ AsyncPixelTransferManager::GetPixelTransferDelegate(
void AsyncPixelTransferManager::ClearPixelTransferDelegateForTest(
gles2::TextureRef* ref) {
TextureToDelegateMap::iterator it = delegate_map_.find(ref);
- if (it != delegate_map_.end())
+ if (it != delegate_map_.end()) {
delegate_map_.erase(it);
+ ref->RemoveObserver();
+ }
}
bool AsyncPixelTransferManager::AsyncTransferIsInProgress(
@@ -69,8 +78,10 @@ void AsyncPixelTransferManager::OnTextureManagerDestroying(
void AsyncPixelTransferManager::OnTextureRefDestroying(
gles2::TextureRef* texture) {
TextureToDelegateMap::iterator it = delegate_map_.find(texture);
- if (it != delegate_map_.end())
+ if (it != delegate_map_.end()) {
delegate_map_.erase(it);
+ texture->RemoveObserver();
+ }
}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.h b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.h
index d0ea5da153c..1a818f3c1ad 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.h
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager.h
@@ -32,7 +32,7 @@ class GLContext;
namespace gpu {
class AsyncPixelTransferDelegate;
-struct AsyncMemoryParams;
+class AsyncMemoryParams;
struct AsyncTexImage2DParams;
class AsyncPixelTransferCompletionObserver
@@ -78,6 +78,9 @@ class GPU_EXPORT AsyncPixelTransferManager
virtual void ProcessMorePendingTransfers() = 0;
virtual bool NeedsProcessMorePendingTransfers() = 0;
+ // Wait for all AsyncTex(Sub)Image2D uploads to finish before returning.
+ virtual void WaitAllAsyncTexImage2D() = 0;
+
AsyncPixelTransferDelegate* CreatePixelTransferDelegate(
gles2::TextureRef* ref,
const AsyncTexImage2DParams& define_params);
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
index 5aaabf4ea8a..a2b22552a46 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_android.cc
@@ -30,6 +30,14 @@ bool IsImagination() {
return false;
}
+bool IsNvidia31() {
+ const char* vendor = reinterpret_cast<const char*>(glGetString(GL_VENDOR));
+ const char* version = reinterpret_cast<const char*>(glGetString(GL_VERSION));
+ return vendor && version &&
+ std::string(vendor).find("NVIDIA") != std::string::npos &&
+ std::string(version).find("OpenGL ES 3.1") != std::string::npos;
+}
+
}
// We only used threaded uploads when we can:
@@ -54,10 +62,12 @@ AsyncPixelTransferManager* AsyncPixelTransferManager::Create(
context->HasExtension("GL_OES_EGL_image") &&
!IsBroadcom() &&
!IsImagination() &&
+ !IsNvidia31() &&
!base::android::SysUtils::IsLowEndDevice()) {
return new AsyncPixelTransferManagerEGL;
}
- LOG(INFO) << "Async pixel transfers not supported";
+ return new AsyncPixelTransferManagerIdle;
+ case gfx::kGLImplementationOSMesaGL:
return new AsyncPixelTransferManagerIdle;
case gfx::kGLImplementationMockGL:
return new AsyncPixelTransferManagerStub;
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
index 7e0d515e49c..2bbe76b3371 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.cc
@@ -9,13 +9,13 @@
#include "base/bind.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_synthetic_delay.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/memory/ref_counted.h"
#include "base/synchronization/waitable_event.h"
#include "base/threading/thread.h"
#include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
-#include "gpu/command_buffer/service/safe_shared_memory_pool.h"
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_surface_egl.h"
#include "ui/gl/scoped_binders.h"
@@ -80,12 +80,9 @@ void SetGlParametersForEglImageTexture() {
void PerformNotifyCompletion(
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
scoped_refptr<AsyncPixelTransferCompletionObserver> observer) {
TRACE_EVENT0("gpu", "PerformNotifyCompletion");
- AsyncMemoryParams safe_mem_params = mem_params;
- safe_mem_params.shared_memory = safe_shared_memory->shared_memory();
- observer->DidComplete(safe_mem_params);
+ observer->DidComplete(mem_params);
}
class TransferThread : public base::Thread {
@@ -116,16 +113,10 @@ class TransferThread : public base::Thread {
context_ = NULL;
}
- SafeSharedMemoryPool* safe_shared_memory_pool() {
- return &safe_shared_memory_pool_;
- }
-
private:
scoped_refptr<gfx::GLContext> context_;
scoped_refptr<gfx::GLSurface> surface_;
- SafeSharedMemoryPool safe_shared_memory_pool_;
-
DISALLOW_COPY_AND_ASSIGN(TransferThread);
};
@@ -136,10 +127,6 @@ base::MessageLoopProxy* transfer_message_loop_proxy() {
return g_transfer_thread.Pointer()->message_loop_proxy().get();
}
-SafeSharedMemoryPool* safe_shared_memory_pool() {
- return g_transfer_thread.Pointer()->safe_shared_memory_pool();
-}
-
// Class which holds async pixel transfers state (EGLImage).
// The EGLImage is accessed by either thread, but everything
// else accessed only on the main thread.
@@ -234,10 +221,12 @@ class TransferStateInternal
}
void MarkAsTransferIsInProgress() {
+ TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage");
transfer_completion_.Reset();
}
void MarkAsCompleted() {
+ TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage");
transfer_completion_.Signal();
}
@@ -251,7 +240,6 @@ class TransferStateInternal
void PerformAsyncTexImage2D(
AsyncTexImage2DParams tex_params,
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) {
TRACE_EVENT2("gpu",
"PerformAsyncTexImage",
@@ -266,8 +254,7 @@ class TransferStateInternal
return;
}
- void* data =
- AsyncPixelTransferDelegate::GetAddress(safe_shared_memory, mem_params);
+ void* data = mem_params.GetDataAddress();
base::TimeTicks begin_time;
if (texture_upload_stats.get())
@@ -314,7 +301,6 @@ class TransferStateInternal
void PerformAsyncTexSubImage2D(
AsyncTexSubImage2DParams tex_params,
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) {
TRACE_EVENT2("gpu",
"PerformAsyncTexSubImage2D",
@@ -326,8 +312,7 @@ class TransferStateInternal
DCHECK_NE(EGL_NO_IMAGE_KHR, egl_image_);
DCHECK_EQ(0, tex_params.level);
- void* data =
- AsyncPixelTransferDelegate::GetAddress(safe_shared_memory, mem_params);
+ void* data = mem_params.GetDataAddress();
base::TimeTicks begin_time;
if (texture_upload_stats.get())
@@ -506,9 +491,6 @@ void AsyncPixelTransferDelegateEGL::AsyncTexImage2D(
if (WorkAroundAsyncTexImage2D(tex_params, mem_params, bind_callback))
return;
- DCHECK(mem_params.shared_memory);
- DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
- mem_params.shm_size);
DCHECK(!state_->TransferIsInProgress());
DCHECK_EQ(state_->egl_image_, EGL_NO_IMAGE_KHR);
DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
@@ -530,9 +512,6 @@ void AsyncPixelTransferDelegateEGL::AsyncTexImage2D(
state_,
tex_params,
mem_params,
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)),
shared_state_->texture_upload_stats));
DCHECK(CHECK_GL());
@@ -547,9 +526,6 @@ void AsyncPixelTransferDelegateEGL::AsyncTexSubImage2D(
if (WorkAroundAsyncTexSubImage2D(tex_params, mem_params))
return;
DCHECK(!state_->TransferIsInProgress());
- DCHECK(mem_params.shared_memory);
- DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
- mem_params.shm_size);
DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
DCHECK_EQ(tex_params.level, 0);
@@ -568,9 +544,6 @@ void AsyncPixelTransferDelegateEGL::AsyncTexSubImage2D(
state_,
tex_params,
mem_params,
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)),
shared_state_->texture_upload_stats));
DCHECK(CHECK_GL());
@@ -618,7 +591,7 @@ bool AsyncPixelTransferDelegateEGL::WorkAroundAsyncTexImage2D(
// On imagination we allocate synchronously all the time, even
// if the dimensions support fast uploads. This is for part a.)
// above, so allocations occur on a different thread/context as uploads.
- void* data = GetAddress(mem_params);
+ void* data = mem_params.GetDataAddress();
SetGlParametersForEglImageTexture();
{
@@ -669,7 +642,7 @@ bool AsyncPixelTransferDelegateEGL::WorkAroundAsyncTexSubImage2D(
DCHECK_EQ(state_->define_params_.format, tex_params.format);
DCHECK_EQ(state_->define_params_.type, tex_params.type);
- void* data = GetAddress(mem_params);
+ void* data = mem_params.GetDataAddress();
base::TimeTicks begin_time;
if (shared_state_->texture_upload_stats.get())
begin_time = base::TimeTicks::HighResNow();
@@ -730,19 +703,12 @@ void AsyncPixelTransferManagerEGL::BindCompletedAsyncTransfers() {
void AsyncPixelTransferManagerEGL::AsyncNotifyCompletion(
const AsyncMemoryParams& mem_params,
AsyncPixelTransferCompletionObserver* observer) {
- DCHECK(mem_params.shared_memory);
- DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
- mem_params.shm_size);
// Post a PerformNotifyCompletion task to the upload thread. This task
// will run after all async transfers are complete.
transfer_message_loop_proxy()->PostTask(
FROM_HERE,
base::Bind(&PerformNotifyCompletion,
mem_params,
- base::Owned(
- new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)),
make_scoped_refptr(observer)));
}
@@ -763,6 +729,16 @@ bool AsyncPixelTransferManagerEGL::NeedsProcessMorePendingTransfers() {
return false;
}
+void AsyncPixelTransferManagerEGL::WaitAllAsyncTexImage2D() {
+ if (shared_state_.pending_allocations.empty())
+ return;
+
+ AsyncPixelTransferDelegateEGL* delegate =
+ shared_state_.pending_allocations.back().get();
+ if (delegate)
+ delegate->WaitForTransferCompletion();
+}
+
AsyncPixelTransferDelegate*
AsyncPixelTransferManagerEGL::CreatePixelTransferDelegateImpl(
gles2::TextureRef* ref,
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.h b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.h
index 4c273fe7f52..8f0c4b3d7ec 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.h
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_egl.h
@@ -27,6 +27,7 @@ class AsyncPixelTransferManagerEGL : public AsyncPixelTransferManager {
virtual base::TimeDelta GetTotalTextureUploadTime() OVERRIDE;
virtual void ProcessMorePendingTransfers() OVERRIDE;
virtual bool NeedsProcessMorePendingTransfers() OVERRIDE;
+ virtual void WaitAllAsyncTexImage2D() OVERRIDE;
// State shared between Managers and Delegates.
struct SharedState {
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
index 88aff575b08..40ec87f6896 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.cc
@@ -6,32 +6,22 @@
#include "base/bind.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_synthetic_delay.h"
#include "base/lazy_instance.h"
#include "base/memory/weak_ptr.h"
-#include "gpu/command_buffer/service/safe_shared_memory_pool.h"
#include "ui/gl/scoped_binders.h"
namespace gpu {
namespace {
-base::LazyInstance<SafeSharedMemoryPool> g_safe_shared_memory_pool =
- LAZY_INSTANCE_INITIALIZER;
-
-SafeSharedMemoryPool* safe_shared_memory_pool() {
- return g_safe_shared_memory_pool.Pointer();
-}
-
static uint64 g_next_pixel_transfer_state_id = 1;
void PerformNotifyCompletion(
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
scoped_refptr<AsyncPixelTransferCompletionObserver> observer) {
TRACE_EVENT0("gpu", "PerformNotifyCompletion");
- AsyncMemoryParams safe_mem_params = mem_params;
- safe_mem_params.shared_memory = safe_shared_memory->shared_memory();
- observer->DidComplete(safe_mem_params);
+ observer->DidComplete(mem_params);
}
} // namespace
@@ -60,15 +50,11 @@ class AsyncPixelTransferDelegateIdle
virtual void WaitForTransferCompletion() OVERRIDE;
private:
- void PerformAsyncTexImage2D(
- AsyncTexImage2DParams tex_params,
- AsyncMemoryParams mem_params,
- const base::Closure& bind_callback,
- ScopedSafeSharedMemory* safe_shared_memory);
- void PerformAsyncTexSubImage2D(
- AsyncTexSubImage2DParams tex_params,
- AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory);
+ void PerformAsyncTexImage2D(AsyncTexImage2DParams tex_params,
+ AsyncMemoryParams mem_params,
+ const base::Closure& bind_callback);
+ void PerformAsyncTexSubImage2D(AsyncTexSubImage2DParams tex_params,
+ AsyncMemoryParams mem_params);
uint64 id_;
GLuint texture_id_;
@@ -98,22 +84,17 @@ void AsyncPixelTransferDelegateIdle::AsyncTexImage2D(
const AsyncTexImage2DParams& tex_params,
const AsyncMemoryParams& mem_params,
const base::Closure& bind_callback) {
+ TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage");
DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
- DCHECK(mem_params.shared_memory);
- DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
- mem_params.shm_size);
shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task(
id_,
- base::Bind(
- &AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D,
- AsWeakPtr(),
- tex_params,
- mem_params,
- bind_callback,
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)))));
+ this,
+ base::Bind(&AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D,
+ AsWeakPtr(),
+ tex_params,
+ mem_params,
+ bind_callback)));
transfer_in_progress_ = true;
}
@@ -121,21 +102,16 @@ void AsyncPixelTransferDelegateIdle::AsyncTexImage2D(
void AsyncPixelTransferDelegateIdle::AsyncTexSubImage2D(
const AsyncTexSubImage2DParams& tex_params,
const AsyncMemoryParams& mem_params) {
+ TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage");
DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
- DCHECK(mem_params.shared_memory);
- DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
- mem_params.shm_size);
shared_state_->tasks.push_back(AsyncPixelTransferManagerIdle::Task(
id_,
- base::Bind(
- &AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D,
- AsWeakPtr(),
- tex_params,
- mem_params,
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)))));
+ this,
+ base::Bind(&AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D,
+ AsWeakPtr(),
+ tex_params,
+ mem_params)));
transfer_in_progress_ = true;
}
@@ -163,13 +139,12 @@ void AsyncPixelTransferDelegateIdle::WaitForTransferCompletion() {
void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D(
AsyncTexImage2DParams tex_params,
AsyncMemoryParams mem_params,
- const base::Closure& bind_callback,
- ScopedSafeSharedMemory* safe_shared_memory) {
+ const base::Closure& bind_callback) {
TRACE_EVENT2("gpu", "PerformAsyncTexImage2D",
"width", tex_params.width,
"height", tex_params.height);
- void* data = GetAddress(safe_shared_memory, mem_params);
+ void* data = mem_params.GetDataAddress();
base::TimeTicks begin_time(base::TimeTicks::HighResNow());
gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_);
@@ -188,6 +163,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D(
data);
}
+ TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage");
transfer_in_progress_ = false;
shared_state_->texture_upload_count++;
shared_state_->total_texture_upload_time +=
@@ -199,13 +175,12 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexImage2D(
void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D(
AsyncTexSubImage2DParams tex_params,
- AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory) {
+ AsyncMemoryParams mem_params) {
TRACE_EVENT2("gpu", "PerformAsyncTexSubImage2D",
"width", tex_params.width,
"height", tex_params.height);
- void* data = GetAddress(safe_shared_memory, mem_params);
+ void* data = mem_params.GetDataAddress();
base::TimeTicks begin_time(base::TimeTicks::HighResNow());
gfx::ScopedTextureBinder texture_binder(tex_params.target, texture_id_);
@@ -243,6 +218,7 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D(
data);
}
+ TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage");
transfer_in_progress_ = false;
shared_state_->texture_upload_count++;
shared_state_->total_texture_upload_time +=
@@ -250,8 +226,11 @@ void AsyncPixelTransferDelegateIdle::PerformAsyncTexSubImage2D(
}
AsyncPixelTransferManagerIdle::Task::Task(
- uint64 transfer_id, const base::Closure& task)
+ uint64 transfer_id,
+ AsyncPixelTransferDelegate* delegate,
+ const base::Closure& task)
: transfer_id(transfer_id),
+ delegate(delegate),
task(task) {
}
@@ -293,12 +272,10 @@ void AsyncPixelTransferManagerIdle::AsyncNotifyCompletion(
shared_state_.tasks.push_back(
Task(0, // 0 transfer_id for notification tasks.
+ NULL,
base::Bind(
&PerformNotifyCompletion,
mem_params,
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)),
make_scoped_refptr(observer))));
}
@@ -326,6 +303,15 @@ bool AsyncPixelTransferManagerIdle::NeedsProcessMorePendingTransfers() {
return !shared_state_.tasks.empty();
}
+void AsyncPixelTransferManagerIdle::WaitAllAsyncTexImage2D() {
+ if (shared_state_.tasks.empty())
+ return;
+
+ const Task& task = shared_state_.tasks.back();
+ if (task.delegate)
+ task.delegate->WaitForTransferCompletion();
+}
+
AsyncPixelTransferDelegate*
AsyncPixelTransferManagerIdle::CreatePixelTransferDelegateImpl(
gles2::TextureRef* ref,
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h
index e7f990e317a..af3262f2889 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_idle.h
@@ -25,14 +25,19 @@ class AsyncPixelTransferManagerIdle : public AsyncPixelTransferManager {
virtual base::TimeDelta GetTotalTextureUploadTime() OVERRIDE;
virtual void ProcessMorePendingTransfers() OVERRIDE;
virtual bool NeedsProcessMorePendingTransfers() OVERRIDE;
+ virtual void WaitAllAsyncTexImage2D() OVERRIDE;
struct Task {
- Task(uint64 transfer_id, const base::Closure& task);
+ Task(uint64 transfer_id,
+ AsyncPixelTransferDelegate* delegate,
+ const base::Closure& task);
~Task();
// This is non-zero if pixel transfer task.
uint64 transfer_id;
+ AsyncPixelTransferDelegate* delegate;
+
base::Closure task;
};
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_mock.h b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_mock.h
index adc2a6f939e..3bc8b6bd036 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_mock.h
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_mock.h
@@ -24,6 +24,7 @@ class MockAsyncPixelTransferManager : public AsyncPixelTransferManager {
MOCK_METHOD0(GetTotalTextureUploadTime, base::TimeDelta());
MOCK_METHOD0(ProcessMorePendingTransfers, void());
MOCK_METHOD0(NeedsProcessMorePendingTransfers, bool());
+ MOCK_METHOD0(WaitAllAsyncTexImage2D, void());
MOCK_METHOD2(
CreatePixelTransferDelegateImpl,
AsyncPixelTransferDelegate*(gles2::TextureRef* ref,
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
index f71e07e76ee..99103b81c65 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.cc
@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_synthetic_delay.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/memory/ref_counted.h"
@@ -18,7 +19,6 @@
#include "base/threading/thread.h"
#include "base/threading/thread_checker.h"
#include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
-#include "gpu/command_buffer/service/safe_shared_memory_pool.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_surface.h"
@@ -33,12 +33,9 @@ const char kAsyncTransferThreadName[] = "AsyncTransferThread";
void PerformNotifyCompletion(
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
scoped_refptr<AsyncPixelTransferCompletionObserver> observer) {
TRACE_EVENT0("gpu", "PerformNotifyCompletion");
- AsyncMemoryParams safe_mem_params = mem_params;
- safe_mem_params.shared_memory = safe_shared_memory->shared_memory();
- observer->DidComplete(safe_mem_params);
+ observer->DidComplete(mem_params);
}
// TODO(backer): Factor out common thread scheduling logic from the EGL and
@@ -79,16 +76,11 @@ class TransferThread : public base::Thread {
context_ = NULL;
}
- SafeSharedMemoryPool* safe_shared_memory_pool() {
- return &safe_shared_memory_pool_;
- }
-
private:
bool initialized_;
scoped_refptr<gfx::GLSurface> surface_;
scoped_refptr<gfx::GLContext> context_;
- SafeSharedMemoryPool safe_shared_memory_pool_;
void InitializeOnTransferThread(gfx::GLContext* parent_context,
base::WaitableEvent* caller_wait) {
@@ -135,10 +127,6 @@ base::MessageLoopProxy* transfer_message_loop_proxy() {
return g_transfer_thread.Pointer()->message_loop_proxy().get();
}
-SafeSharedMemoryPool* safe_shared_memory_pool() {
- return g_transfer_thread.Pointer()->safe_shared_memory_pool();
-}
-
class PendingTask : public base::RefCountedThreadSafe<PendingTask> {
public:
explicit PendingTask(const base::Closure& task)
@@ -251,16 +239,12 @@ class TransferStateInternal
const AsyncMemoryParams mem_params,
scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats,
const base::Closure& bind_callback) {
+ TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage");
pending_upload_task_ = new PendingTask(base::Bind(
&TransferStateInternal::PerformAsyncTexImage2D,
this,
tex_params,
mem_params,
- // Duplicate the shared memory so there is no way we can get
- // a use-after-free of the raw pixels.
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)),
texture_upload_stats));
transfer_message_loop_proxy()->PostTask(
FROM_HERE,
@@ -276,14 +260,12 @@ class TransferStateInternal
AsyncTexSubImage2DParams tex_params,
AsyncMemoryParams mem_params,
scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) {
+ TRACE_EVENT_SYNTHETIC_DELAY_BEGIN("gpu.AsyncTexImage");
pending_upload_task_ = new PendingTask(base::Bind(
&TransferStateInternal::PerformAsyncTexSubImage2D,
this,
tex_params,
mem_params,
- base::Owned(new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)),
texture_upload_stats));
transfer_message_loop_proxy()->PostTask(
FROM_HERE,
@@ -300,7 +282,6 @@ class TransferStateInternal
void PerformAsyncTexImage2D(
AsyncTexImage2DParams tex_params,
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) {
TRACE_EVENT2("gpu",
"PerformAsyncTexImage",
@@ -314,8 +295,7 @@ class TransferStateInternal
if (texture_upload_stats.get())
begin_time = base::TimeTicks::HighResNow();
- void* data =
- AsyncPixelTransferDelegate::GetAddress(safe_shared_memory, mem_params);
+ void* data = mem_params.GetDataAddress();
{
TRACE_EVENT0("gpu", "glTexImage2D");
@@ -328,6 +308,7 @@ class TransferStateInternal
tex_params.format,
tex_params.type,
data);
+ TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage");
}
if (texture_upload_stats.get()) {
@@ -339,7 +320,6 @@ class TransferStateInternal
void PerformAsyncTexSubImage2D(
AsyncTexSubImage2DParams tex_params,
AsyncMemoryParams mem_params,
- ScopedSafeSharedMemory* safe_shared_memory,
scoped_refptr<AsyncPixelTransferUploadStats> texture_upload_stats) {
TRACE_EVENT2("gpu",
"PerformAsyncTexSubImage2D",
@@ -353,9 +333,7 @@ class TransferStateInternal
if (texture_upload_stats.get())
begin_time = base::TimeTicks::HighResNow();
- void* data =
- AsyncPixelTransferDelegate::GetAddress(safe_shared_memory, mem_params);
-
+ void* data = mem_params.GetDataAddress();
{
TRACE_EVENT0("gpu", "glTexSubImage2D");
glTexSubImage2D(GL_TEXTURE_2D,
@@ -367,6 +345,7 @@ class TransferStateInternal
tex_params.format,
tex_params.type,
data);
+ TRACE_EVENT_SYNTHETIC_DELAY_END("gpu.AsyncTexImage");
}
if (texture_upload_stats.get()) {
@@ -462,9 +441,6 @@ void AsyncPixelTransferDelegateShareGroup::AsyncTexImage2D(
const AsyncTexImage2DParams& tex_params,
const AsyncMemoryParams& mem_params,
const base::Closure& bind_callback) {
- DCHECK(mem_params.shared_memory);
- DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
- mem_params.shm_size);
DCHECK(!state_->TransferIsInProgress());
DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
DCHECK_EQ(tex_params.level, 0);
@@ -483,9 +459,6 @@ void AsyncPixelTransferDelegateShareGroup::AsyncTexSubImage2D(
"width", tex_params.width,
"height", tex_params.height);
DCHECK(!state_->TransferIsInProgress());
- DCHECK(mem_params.shared_memory);
- DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
- mem_params.shm_size);
DCHECK_EQ(static_cast<GLenum>(GL_TEXTURE_2D), tex_params.target);
DCHECK_EQ(tex_params.level, 0);
@@ -534,19 +507,12 @@ void AsyncPixelTransferManagerShareGroup::BindCompletedAsyncTransfers() {
void AsyncPixelTransferManagerShareGroup::AsyncNotifyCompletion(
const AsyncMemoryParams& mem_params,
AsyncPixelTransferCompletionObserver* observer) {
- DCHECK(mem_params.shared_memory);
- DCHECK_LE(mem_params.shm_data_offset + mem_params.shm_data_size,
- mem_params.shm_size);
// Post a PerformNotifyCompletion task to the upload thread. This task
// will run after all async transfers are complete.
transfer_message_loop_proxy()->PostTask(
FROM_HERE,
base::Bind(&PerformNotifyCompletion,
mem_params,
- base::Owned(
- new ScopedSafeSharedMemory(safe_shared_memory_pool(),
- mem_params.shared_memory,
- mem_params.shm_size)),
make_scoped_refptr(observer)));
}
@@ -568,6 +534,16 @@ bool AsyncPixelTransferManagerShareGroup::NeedsProcessMorePendingTransfers() {
return false;
}
+void AsyncPixelTransferManagerShareGroup::WaitAllAsyncTexImage2D() {
+ if (shared_state_.pending_allocations.empty())
+ return;
+
+ AsyncPixelTransferDelegateShareGroup* delegate =
+ shared_state_.pending_allocations.back().get();
+ if (delegate)
+ delegate->WaitForTransferCompletion();
+}
+
AsyncPixelTransferDelegate*
AsyncPixelTransferManagerShareGroup::CreatePixelTransferDelegateImpl(
gles2::TextureRef* ref,
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h
index 173b5322faf..64daffe60f7 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_share_group.h
@@ -31,6 +31,7 @@ class AsyncPixelTransferManagerShareGroup : public AsyncPixelTransferManager {
virtual base::TimeDelta GetTotalTextureUploadTime() OVERRIDE;
virtual void ProcessMorePendingTransfers() OVERRIDE;
virtual bool NeedsProcessMorePendingTransfers() OVERRIDE;
+ virtual void WaitAllAsyncTexImage2D() OVERRIDE;
// State shared between Managers and Delegates.
struct SharedState {
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc
index ccd5d3d3e60..d5f96b03b73 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.cc
@@ -78,6 +78,9 @@ bool AsyncPixelTransferManagerStub::NeedsProcessMorePendingTransfers() {
return false;
}
+void AsyncPixelTransferManagerStub::WaitAllAsyncTexImage2D() {
+}
+
AsyncPixelTransferDelegate*
AsyncPixelTransferManagerStub::CreatePixelTransferDelegateImpl(
gles2::TextureRef* ref,
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h
index 0f4e4ba95cd..a93ce9499e5 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_stub.h
@@ -23,6 +23,7 @@ class AsyncPixelTransferManagerStub : public AsyncPixelTransferManager {
virtual base::TimeDelta GetTotalTextureUploadTime() OVERRIDE;
virtual void ProcessMorePendingTransfers() OVERRIDE;
virtual bool NeedsProcessMorePendingTransfers() OVERRIDE;
+ virtual void WaitAllAsyncTexImage2D() OVERRIDE;
private:
// AsyncPixelTransferManager implementation:
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc
index ffe55849358..cd7d087730f 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.cc
@@ -46,7 +46,7 @@ void AsyncPixelTransferDelegateSync::AsyncTexImage2D(
const base::Closure& bind_callback) {
// Save the define params to return later during deferred
// binding of the transfer texture.
- void* data = GetAddress(mem_params);
+ void* data = mem_params.GetDataAddress();
base::TimeTicks begin_time(base::TimeTicks::HighResNow());
glTexImage2D(
tex_params.target,
@@ -68,7 +68,7 @@ void AsyncPixelTransferDelegateSync::AsyncTexImage2D(
void AsyncPixelTransferDelegateSync::AsyncTexSubImage2D(
const AsyncTexSubImage2DParams& tex_params,
const AsyncMemoryParams& mem_params) {
- void* data = GetAddress(mem_params);
+ void* data = mem_params.GetDataAddress();
base::TimeTicks begin_time(base::TimeTicks::HighResNow());
glTexSubImage2D(
tex_params.target,
@@ -128,6 +128,9 @@ bool AsyncPixelTransferManagerSync::NeedsProcessMorePendingTransfers() {
return false;
}
+void AsyncPixelTransferManagerSync::WaitAllAsyncTexImage2D() {
+}
+
AsyncPixelTransferDelegate*
AsyncPixelTransferManagerSync::CreatePixelTransferDelegateImpl(
gles2::TextureRef* ref,
diff --git a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h
index cb62062a860..7d0b8b6636b 100644
--- a/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h
+++ b/chromium/gpu/command_buffer/service/async_pixel_transfer_manager_sync.h
@@ -23,6 +23,7 @@ class AsyncPixelTransferManagerSync : public AsyncPixelTransferManager {
virtual base::TimeDelta GetTotalTextureUploadTime() OVERRIDE;
virtual void ProcessMorePendingTransfers() OVERRIDE;
virtual bool NeedsProcessMorePendingTransfers() OVERRIDE;
+ virtual void WaitAllAsyncTexImage2D() OVERRIDE;
// State shared between Managers and Delegates.
struct SharedState {
diff --git a/chromium/gpu/command_buffer/service/buffer_manager_unittest.cc b/chromium/gpu/command_buffer/service/buffer_manager_unittest.cc
index 444c3935bf5..77f32dcc416 100644
--- a/chromium/gpu/command_buffer/service/buffer_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/buffer_manager_unittest.cc
@@ -5,6 +5,7 @@
#include "gpu/command_buffer/service/buffer_manager.h"
#include "gpu/command_buffer/service/error_state_mock.h"
#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/mocks.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -17,14 +18,13 @@ using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
-class BufferManagerTestBase : public testing::Test {
+class BufferManagerTestBase : public GpuServiceTest {
protected:
void SetUpBase(
MemoryTracker* memory_tracker,
FeatureInfo* feature_info,
const char* extensions) {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ GpuServiceTest::SetUp();
if (feature_info) {
TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), extensions);
feature_info->Initialize();
@@ -36,9 +36,8 @@ class BufferManagerTestBase : public testing::Test {
virtual void TearDown() {
manager_->Destroy(false);
manager_.reset();
- ::gfx::GLInterface::SetGLInterface(NULL);
error_state_.reset();
- gl_.reset();
+ GpuServiceTest::TearDown();
}
GLenum GetTarget(const Buffer* buffer) const {
@@ -73,8 +72,6 @@ class BufferManagerTestBase : public testing::Test {
return success;
}
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_ptr<BufferManager> manager_;
scoped_ptr<MockErrorState> error_state_;
};
diff --git a/chromium/gpu/command_buffer/service/cmd_buffer_engine.h b/chromium/gpu/command_buffer/service/cmd_buffer_engine.h
index 6aefe82e35e..75e60691f51 100644
--- a/chromium/gpu/command_buffer/service/cmd_buffer_engine.h
+++ b/chromium/gpu/command_buffer/service/cmd_buffer_engine.h
@@ -24,7 +24,7 @@ class CommandBufferEngine {
// Gets the base address and size of a registered shared memory buffer.
// Parameters:
// shm_id: the identifier for the shared memory buffer.
- virtual Buffer GetSharedMemoryBuffer(int32 shm_id) = 0;
+ virtual scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id) = 0;
// Sets the token value.
virtual void set_token(int32 token) = 0;
diff --git a/chromium/gpu/command_buffer/service/command_buffer_service.cc b/chromium/gpu/command_buffer/service/command_buffer_service.cc
index bae2d801dd5..c9c07822e81 100644
--- a/chromium/gpu/command_buffer/service/command_buffer_service.cc
+++ b/chromium/gpu/command_buffer/service/command_buffer_service.cc
@@ -37,7 +37,7 @@ bool CommandBufferService::Initialize() {
return true;
}
-CommandBufferService::State CommandBufferService::GetState() {
+CommandBufferService::State CommandBufferService::GetLastState() {
State state;
state.num_entries = num_entries_;
state.get_offset = get_offset_;
@@ -50,34 +50,23 @@ CommandBufferService::State CommandBufferService::GetState() {
return state;
}
-CommandBufferService::State CommandBufferService::GetLastState() {
- return GetState();
-}
-
int32 CommandBufferService::GetLastToken() {
- return GetState().token;
+ return GetLastState().token;
}
void CommandBufferService::UpdateState() {
if (shared_state_) {
- CommandBufferService::State state = GetState();
+ CommandBufferService::State state = GetLastState();
shared_state_->Write(state);
}
}
-CommandBufferService::State CommandBufferService::FlushSync(
- int32 put_offset, int32 last_known_get) {
- if (put_offset < 0 || put_offset > num_entries_) {
- error_ = gpu::error::kOutOfBounds;
- return GetState();
- }
-
- put_offset_ = put_offset;
-
- if (!put_offset_change_callback_.is_null())
- put_offset_change_callback_.Run();
+void CommandBufferService::WaitForTokenInRange(int32 start, int32 end) {
+ DCHECK(error_ != error::kNoError || InRange(start, end, token_));
+}
- return GetState();
+void CommandBufferService::WaitForGetOffsetInRange(int32 start, int32 end) {
+ DCHECK(error_ != error::kNoError || InRange(start, end, get_offset_));
}
void CommandBufferService::Flush(int32 put_offset) {
@@ -95,10 +84,12 @@ void CommandBufferService::Flush(int32 put_offset) {
void CommandBufferService::SetGetBuffer(int32 transfer_buffer_id) {
DCHECK_EQ(-1, ring_buffer_id_);
DCHECK_EQ(put_offset_, get_offset_); // Only if it's empty.
+ // If the buffer is invalid we handle it gracefully.
+ // This means ring_buffer_ can be NULL.
ring_buffer_ = GetTransferBuffer(transfer_buffer_id);
- DCHECK(ring_buffer_.ptr);
ring_buffer_id_ = transfer_buffer_id;
- num_entries_ = ring_buffer_.size / sizeof(CommandBufferEntry);
+ int32 size = ring_buffer_ ? ring_buffer_->size() : 0;
+ num_entries_ = size / sizeof(CommandBufferEntry);
put_offset_ = 0;
SetGetOffset(0);
if (!get_buffer_change_callback_.is_null()) {
@@ -108,17 +99,15 @@ void CommandBufferService::SetGetBuffer(int32 transfer_buffer_id) {
UpdateState();
}
-bool CommandBufferService::SetSharedStateBuffer(
- scoped_ptr<base::SharedMemory> shared_state_shm) {
- shared_state_shm_.reset(shared_state_shm.release());
- if (!shared_state_shm_->Map(sizeof(*shared_state_)))
- return false;
+void CommandBufferService::SetSharedStateBuffer(
+ scoped_ptr<BufferBacking> shared_state_buffer) {
+ shared_state_buffer_ = shared_state_buffer.Pass();
+ DCHECK(shared_state_buffer_->GetSize() >= sizeof(*shared_state_));
shared_state_ =
- static_cast<CommandBufferSharedState*>(shared_state_shm_->memory());
+ static_cast<CommandBufferSharedState*>(shared_state_buffer_->GetMemory());
UpdateState();
- return true;
}
void CommandBufferService::SetGetOffset(int32 get_offset) {
@@ -126,20 +115,21 @@ void CommandBufferService::SetGetOffset(int32 get_offset) {
get_offset_ = get_offset;
}
-Buffer CommandBufferService::CreateTransferBuffer(size_t size,
- int32* id) {
+scoped_refptr<Buffer> CommandBufferService::CreateTransferBuffer(size_t size,
+ int32* id) {
*id = -1;
- SharedMemory buffer;
- if (!buffer.CreateAnonymous(size))
- return Buffer();
+ scoped_ptr<SharedMemory> shared_memory(new SharedMemory());
+ if (!shared_memory->CreateAndMapAnonymous(size))
+ return NULL;
static int32 next_id = 1;
*id = next_id++;
- if (!RegisterTransferBuffer(*id, &buffer, size)) {
+ if (!RegisterTransferBuffer(
+ *id, MakeBackingFromSharedMemory(shared_memory.Pass(), size))) {
*id = -1;
- return Buffer();
+ return NULL;
}
return GetTransferBuffer(*id);
@@ -149,24 +139,21 @@ void CommandBufferService::DestroyTransferBuffer(int32 id) {
transfer_buffer_manager_->DestroyTransferBuffer(id);
if (id == ring_buffer_id_) {
ring_buffer_id_ = -1;
- ring_buffer_ = Buffer();
+ ring_buffer_ = NULL;
num_entries_ = 0;
get_offset_ = 0;
put_offset_ = 0;
}
}
-Buffer CommandBufferService::GetTransferBuffer(int32 id) {
+scoped_refptr<Buffer> CommandBufferService::GetTransferBuffer(int32 id) {
return transfer_buffer_manager_->GetTransferBuffer(id);
}
bool CommandBufferService::RegisterTransferBuffer(
int32 id,
- base::SharedMemory* shared_memory,
- size_t size) {
- return transfer_buffer_manager_->RegisterTransferBuffer(id,
- shared_memory,
- size);
+ scoped_ptr<BufferBacking> buffer) {
+ return transfer_buffer_manager_->RegisterTransferBuffer(id, buffer.Pass());
}
void CommandBufferService::SetToken(int32 token) {
diff --git a/chromium/gpu/command_buffer/service/command_buffer_service.h b/chromium/gpu/command_buffer/service/command_buffer_service.h
index b1f8fa15fea..ac2330100b8 100644
--- a/chromium/gpu/command_buffer/service/command_buffer_service.h
+++ b/chromium/gpu/command_buffer/service/command_buffer_service.h
@@ -14,9 +14,30 @@ namespace gpu {
class TransferBufferManagerInterface;
+class GPU_EXPORT CommandBufferServiceBase : public CommandBuffer {
+ public:
+ // Sets the current get offset. This can be called from any thread.
+ virtual void SetGetOffset(int32 get_offset) = 0;
+
+ // Get the transfer buffer associated with an ID. Returns a null buffer for
+ // ID 0.
+ virtual scoped_refptr<gpu::Buffer> GetTransferBuffer(int32 id) = 0;
+
+ // Allows the reader to update the current token value.
+ virtual void SetToken(int32 token) = 0;
+
+ // Allows the reader to set the current parse error.
+ virtual void SetParseError(error::Error) = 0;
+
+ // Allows the reader to set the current context lost reason.
+ // NOTE: if calling this in conjunction with SetParseError,
+ // call this first.
+ virtual void SetContextLostReason(error::ContextLostReason) = 0;
+};
+
// An object that implements a shared memory command buffer and a synchronous
// API to manage the put and get pointers.
-class GPU_EXPORT CommandBufferService : public CommandBuffer {
+class GPU_EXPORT CommandBufferService : public CommandBufferServiceBase {
public:
typedef base::Callback<bool(int32)> GetBufferChangedCallback;
explicit CommandBufferService(
@@ -25,16 +46,19 @@ class GPU_EXPORT CommandBufferService : public CommandBuffer {
// CommandBuffer implementation:
virtual bool Initialize() OVERRIDE;
- virtual State GetState() OVERRIDE;
virtual State GetLastState() OVERRIDE;
virtual int32 GetLastToken() OVERRIDE;
virtual void Flush(int32 put_offset) OVERRIDE;
- virtual State FlushSync(int32 put_offset, int32 last_known_get) OVERRIDE;
+ virtual void WaitForTokenInRange(int32 start, int32 end) OVERRIDE;
+ virtual void WaitForGetOffsetInRange(int32 start, int32 end) OVERRIDE;
virtual void SetGetBuffer(int32 transfer_buffer_id) OVERRIDE;
- virtual void SetGetOffset(int32 get_offset) OVERRIDE;
- virtual Buffer CreateTransferBuffer(size_t size, int32* id) OVERRIDE;
+ virtual scoped_refptr<Buffer> CreateTransferBuffer(size_t size,
+ int32* id) OVERRIDE;
virtual void DestroyTransferBuffer(int32 id) OVERRIDE;
- virtual Buffer GetTransferBuffer(int32 id) OVERRIDE;
+
+ // CommandBufferServiceBase implementation:
+ virtual void SetGetOffset(int32 get_offset) OVERRIDE;
+ virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) OVERRIDE;
virtual void SetToken(int32 token) OVERRIDE;
virtual void SetParseError(error::Error error) OVERRIDE;
virtual void SetContextLostReason(error::ContextLostReason) OVERRIDE;
@@ -54,22 +78,19 @@ class GPU_EXPORT CommandBufferService : public CommandBuffer {
virtual void SetParseErrorCallback(const base::Closure& callback);
// Setup the shared memory that shared state should be copied into.
- bool SetSharedStateBuffer(scoped_ptr<base::SharedMemory> shared_state_shm);
+ void SetSharedStateBuffer(scoped_ptr<BufferBacking> shared_state_buffer);
// Copy the current state into the shared state transfer buffer.
void UpdateState();
- // Register an existing shared memory object and get an ID that can be used
- // to identify it in the command buffer. Callee dups the handle until
- // DestroyTransferBuffer is called.
- bool RegisterTransferBuffer(int32 id,
- base::SharedMemory* shared_memory,
- size_t size);
+ // Registers an existing shared memory object and get an ID that can be used
+ // to identify it in the command buffer.
+ bool RegisterTransferBuffer(int32 id, scoped_ptr<BufferBacking> buffer);
private:
int32 ring_buffer_id_;
- Buffer ring_buffer_;
- scoped_ptr<base::SharedMemory> shared_state_shm_;
+ scoped_refptr<Buffer> ring_buffer_;
+ scoped_ptr<BufferBacking> shared_state_buffer_;
CommandBufferSharedState* shared_state_;
int32 num_entries_;
int32 get_offset_;
diff --git a/chromium/gpu/command_buffer/service/command_buffer_service_unittest.cc b/chromium/gpu/command_buffer/service/command_buffer_service_unittest.cc
index bf4d619f819..229aafaf1d0 100644
--- a/chromium/gpu/command_buffer/service/command_buffer_service_unittest.cc
+++ b/chromium/gpu/command_buffer/service/command_buffer_service_unittest.cc
@@ -34,19 +34,19 @@ class CommandBufferServiceTest : public testing::Test {
}
int32 GetGetOffset() {
- return command_buffer_->GetState().get_offset;
+ return command_buffer_->GetLastState().get_offset;
}
int32 GetPutOffset() {
- return command_buffer_->GetState().put_offset;
+ return command_buffer_->GetLastState().put_offset;
}
int32 GetToken() {
- return command_buffer_->GetState().token;
+ return command_buffer_->GetLastState().token;
}
int32 GetError() {
- return command_buffer_->GetState().error;
+ return command_buffer_->GetLastState().error;
}
bool Initialize(size_t size) {
@@ -63,7 +63,7 @@ class CommandBufferServiceTest : public testing::Test {
TEST_F(CommandBufferServiceTest, InitializesCommandBuffer) {
EXPECT_TRUE(Initialize(1024));
- CommandBuffer::State state = command_buffer_->GetState();
+ CommandBuffer::State state = command_buffer_->GetLastState();
EXPECT_EQ(0, state.get_offset);
EXPECT_EQ(0, state.put_offset);
EXPECT_EQ(0, state.token);
diff --git a/chromium/gpu/command_buffer/service/common_decoder.cc b/chromium/gpu/command_buffer/service/common_decoder.cc
index 72f30a30bfc..06cf3a4bb37 100644
--- a/chromium/gpu/command_buffer/service/common_decoder.cc
+++ b/chromium/gpu/command_buffer/service/common_decoder.cc
@@ -61,20 +61,17 @@ CommonDecoder::CommonDecoder() : engine_(NULL) {}
CommonDecoder::~CommonDecoder() {}
void* CommonDecoder::GetAddressAndCheckSize(unsigned int shm_id,
- unsigned int offset,
- unsigned int size) {
+ unsigned int data_offset,
+ unsigned int data_size) {
CHECK(engine_);
- Buffer buffer = engine_->GetSharedMemoryBuffer(shm_id);
- if (!buffer.ptr)
+ scoped_refptr<gpu::Buffer> buffer = engine_->GetSharedMemoryBuffer(shm_id);
+ if (!buffer)
return NULL;
- unsigned int end = offset + size;
- if (end > buffer.size || end < offset) {
- return NULL;
- }
- return static_cast<int8*>(buffer.ptr) + offset;
+ return buffer->GetDataAddress(data_offset, data_size);
}
-Buffer CommonDecoder::GetSharedMemoryBuffer(unsigned int shm_id) {
+scoped_refptr<gpu::Buffer> CommonDecoder::GetSharedMemoryBuffer(
+ unsigned int shm_id) {
return engine_->GetSharedMemoryBuffer(shm_id);
}
@@ -111,17 +108,23 @@ RETURN_TYPE GetImmediateDataAs(const COMMAND_TYPE& pod) {
return static_cast<RETURN_TYPE>(const_cast<void*>(AddressAfterStruct(pod)));
}
+// TODO(vmiura): Looks like this g_command_info is duplicated in
+// common_decoder.cc
+// and gles2_cmd_decoder.cc. Fix it!
+
// A struct to hold info about each command.
struct CommandInfo {
- int arg_flags; // How to handle the arguments for this command
- int arg_count; // How many arguments are expected for this command.
+ uint8 arg_flags; // How to handle the arguments for this command
+ uint8 cmd_flags; // How to handle this command
+ uint16 arg_count; // How many arguments are expected for this command.
};
// A table of CommandInfo for all the commands.
const CommandInfo g_command_info[] = {
#define COMMON_COMMAND_BUFFER_CMD_OP(name) { \
cmd::name::kArgFlags, \
- sizeof(cmd::name) / sizeof(CommandBufferEntry) - 1, }, /* NOLINT */ \
+ cmd::name::cmd_flags, \
+ sizeof(cmd::name) / sizeof(CommandBufferEntry) - 1, }, /* NOLINT */
COMMON_COMMAND_BUFFER_CMDS(COMMON_COMMAND_BUFFER_CMD_OP)
diff --git a/chromium/gpu/command_buffer/service/common_decoder.h b/chromium/gpu/command_buffer/service/common_decoder.h
index 03002c8b06f..2132afbf4fb 100644
--- a/chromium/gpu/command_buffer/service/common_decoder.h
+++ b/chromium/gpu/command_buffer/service/common_decoder.h
@@ -132,7 +132,7 @@ class GPU_EXPORT CommonDecoder : NON_EXPORTED_BASE(public AsyncAPIInterface) {
}
// Get the actual shared memory buffer.
- Buffer GetSharedMemoryBuffer(unsigned int shm_id);
+ scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(unsigned int shm_id);
protected:
// Executes a common command.
diff --git a/chromium/gpu/command_buffer/service/common_decoder_unittest.cc b/chromium/gpu/command_buffer/service/common_decoder_unittest.cc
index d90e34bf93b..11274e05f07 100644
--- a/chromium/gpu/command_buffer/service/common_decoder_unittest.cc
+++ b/chromium/gpu/command_buffer/service/common_decoder_unittest.cc
@@ -81,26 +81,29 @@ class MockCommandBufferEngine : public CommandBufferEngine {
: CommandBufferEngine(),
token_(),
get_offset_(0) {
+ scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
+ shared_memory->CreateAndMapAnonymous(kBufferSize);
+ buffer_ = MakeBufferFromSharedMemory(shared_memory.Pass(), kBufferSize);
}
// Overridden from CommandBufferEngine.
- virtual Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE {
- Buffer buffer;
- if (IsValidSharedMemoryId(shm_id)) {
- buffer.ptr = buffer_;
- buffer.size = kBufferSize;
- }
- return buffer;
+ virtual scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id)
+ OVERRIDE {
+ if (IsValidSharedMemoryId(shm_id))
+ return buffer_;
+ return NULL;
}
template <typename T>
T GetSharedMemoryAs(uint32 offset) {
DCHECK_LT(offset, kBufferSize);
- return reinterpret_cast<T>(&buffer_[offset]);
+ int8* buffer_memory = static_cast<int8*>(buffer_->memory());
+ return reinterpret_cast<T>(&buffer_memory[offset]);
}
int32 GetSharedMemoryOffset(const void* memory) {
- ptrdiff_t offset = reinterpret_cast<const int8*>(memory) - &buffer_[0];
+ int8* buffer_memory = static_cast<int8*>(buffer_->memory());
+ ptrdiff_t offset = static_cast<const int8*>(memory) - &buffer_memory[0];
DCHECK_GE(offset, 0);
DCHECK_LT(static_cast<size_t>(offset), kBufferSize);
return static_cast<int32>(offset);
@@ -140,7 +143,7 @@ class MockCommandBufferEngine : public CommandBufferEngine {
return shm_id == kValidShmId || shm_id == kStartValidShmId;
}
- int8 buffer_[kBufferSize];
+ scoped_refptr<gpu::Buffer> buffer_;
int32 token_;
int32 get_offset_;
};
diff --git a/chromium/gpu/command_buffer/service/context_group.cc b/chromium/gpu/command_buffer/service/context_group.cc
index 27af0abafad..ba0437bfd4e 100644
--- a/chromium/gpu/command_buffer/service/context_group.cc
+++ b/chromium/gpu/command_buffer/service/context_group.cc
@@ -32,13 +32,13 @@ ContextGroup::ContextGroup(
MailboxManager* mailbox_manager,
ImageManager* image_manager,
MemoryTracker* memory_tracker,
- StreamTextureManager* stream_texture_manager,
+ ShaderTranslatorCache* shader_translator_cache,
FeatureInfo* feature_info,
bool bind_generates_resource)
: mailbox_manager_(mailbox_manager ? mailbox_manager : new MailboxManager),
image_manager_(image_manager ? image_manager : new ImageManager),
memory_tracker_(memory_tracker),
- stream_texture_manager_(stream_texture_manager),
+ shader_translator_cache_(shader_translator_cache),
enforce_gl_minimums_(CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnforceGLMinimums)),
bind_generates_resource_(bind_generates_resource),
@@ -178,9 +178,9 @@ bool ContextGroup::Initialize(
texture_manager_.reset(new TextureManager(memory_tracker_.get(),
feature_info_.get(),
max_texture_size,
- max_cube_map_texture_size));
+ max_cube_map_texture_size,
+ bind_generates_resource_));
texture_manager_->set_framebuffer_manager(framebuffer_manager_.get());
- texture_manager_->set_stream_texture_manager(stream_texture_manager_);
const GLint kMinTextureImageUnits = 8;
const GLint kMinVertexTextureImageUnits = 0;
@@ -223,18 +223,24 @@ bool ContextGroup::Initialize(
return false;
}
- // TODO(gman): Use workarounds similar to max_texture_size above to implement.
- if (gfx::GetGLImplementation() == gfx::kGLImplementationOSMesaGL) {
- // Some shaders in Skia needed more than the min.
- max_fragment_uniform_vectors_ =
- std::min(static_cast<uint32>(kMinFragmentUniformVectors * 2),
- max_fragment_uniform_vectors_);
- max_varying_vectors_ =
- std::min(static_cast<uint32>(kMinVaryingVectors * 2),
- max_varying_vectors_);
+ // Some shaders in Skia need more than the min available vertex and
+ // fragment shader uniform vectors in case of OSMesa GL Implementation
+ if (feature_info_->workarounds().max_fragment_uniform_vectors) {
+ max_fragment_uniform_vectors_ = std::min(
+ max_fragment_uniform_vectors_,
+ static_cast<uint32>(
+ feature_info_->workarounds().max_fragment_uniform_vectors));
+ }
+ if (feature_info_->workarounds().max_varying_vectors) {
+ max_varying_vectors_ = std::min(
+ max_varying_vectors_,
+ static_cast<uint32>(feature_info_->workarounds().max_varying_vectors));
+ }
+ if (feature_info_->workarounds().max_vertex_uniform_vectors) {
max_vertex_uniform_vectors_ =
- std::min(static_cast<uint32>(kMinVertexUniformVectors * 2),
- max_vertex_uniform_vectors_);
+ std::min(max_vertex_uniform_vectors_,
+ static_cast<uint32>(
+ feature_info_->workarounds().max_vertex_uniform_vectors));
}
program_manager_.reset(new ProgramManager(
@@ -319,7 +325,6 @@ void ContextGroup::Destroy(GLES2Decoder* decoder, bool have_context) {
}
memory_tracker_ = NULL;
- stream_texture_manager_ = NULL;
}
IdAllocatorInterface* ContextGroup::GetIdAllocator(unsigned namespace_id) {
diff --git a/chromium/gpu/command_buffer/service/context_group.h b/chromium/gpu/command_buffer/service/context_group.h
index 391db1a4ace..924527f87de 100644
--- a/chromium/gpu/command_buffer/service/context_group.h
+++ b/chromium/gpu/command_buffer/service/context_group.h
@@ -16,12 +16,12 @@
#include "gpu/command_buffer/common/gles2_cmd_format.h"
#include "gpu/command_buffer/service/feature_info.h"
#include "gpu/command_buffer/service/gles2_cmd_validation.h"
+#include "gpu/command_buffer/service/shader_translator_cache.h"
#include "gpu/gpu_export.h"
namespace gpu {
class IdAllocatorInterface;
-class StreamTextureManager;
class TransferBufferManagerInterface;
namespace gles2 {
@@ -47,7 +47,7 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> {
MailboxManager* mailbox_manager,
ImageManager* image_manager,
MemoryTracker* memory_tracker,
- StreamTextureManager* stream_texture_manager,
+ ShaderTranslatorCache* shader_translator_cache,
FeatureInfo* feature_info,
bool bind_generates_resource);
@@ -73,8 +73,8 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> {
return memory_tracker_.get();
}
- StreamTextureManager* stream_texture_manager() const {
- return stream_texture_manager_;
+ ShaderTranslatorCache* shader_translator_cache() const {
+ return shader_translator_cache_.get();
}
bool bind_generates_resource() {
@@ -185,7 +185,7 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> {
scoped_refptr<MailboxManager> mailbox_manager_;
scoped_refptr<ImageManager> image_manager_;
scoped_refptr<MemoryTracker> memory_tracker_;
- StreamTextureManager* stream_texture_manager_;
+ scoped_refptr<ShaderTranslatorCache> shader_translator_cache_;
scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
bool enforce_gl_minimums_;
diff --git a/chromium/gpu/command_buffer/service/context_group_unittest.cc b/chromium/gpu/command_buffer/service/context_group_unittest.cc
index 0c710362d69..608109dffd0 100644
--- a/chromium/gpu/command_buffer/service/context_group_unittest.cc
+++ b/chromium/gpu/command_buffer/service/context_group_unittest.cc
@@ -6,12 +6,12 @@
#include "base/memory/scoped_ptr.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
-using ::gfx::MockGLInterface;
using ::testing::_;
using ::testing::DoAll;
using ::testing::HasSubstr;
@@ -23,31 +23,24 @@ using ::testing::Return;
using ::testing::SetArrayArgument;
using ::testing::SetArgumentPointee;
using ::testing::StrEq;
-using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
-class ContextGroupTest : public testing::Test {
+class ContextGroupTest : public GpuServiceTest {
public:
- ContextGroupTest() {
- }
+ static const bool kBindGeneratesResource = false;
+
+ ContextGroupTest() {}
protected:
virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ GpuServiceTest::SetUp();
decoder_.reset(new MockGLES2Decoder());
group_ = scoped_refptr<ContextGroup>(
- new ContextGroup(NULL, NULL, NULL, NULL, NULL, true));
- }
-
- virtual void TearDown() {
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
+ new ContextGroup(NULL, NULL, NULL, NULL, NULL, kBindGeneratesResource));
}
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_ptr<MockGLES2Decoder> decoder_;
scoped_refptr<ContextGroup> group_;
};
@@ -70,8 +63,8 @@ TEST_F(ContextGroupTest, Basic) {
}
TEST_F(ContextGroupTest, InitializeNoExtensions) {
- TestHelper::SetupContextGroupInitExpectations(gl_.get(),
- DisallowedFeatures(), "");
+ TestHelper::SetupContextGroupInitExpectations(
+ gl_.get(), DisallowedFeatures(), "", "", kBindGeneratesResource);
group_->Initialize(decoder_.get(), DisallowedFeatures());
EXPECT_EQ(static_cast<uint32>(TestHelper::kNumVertexAttribs),
group_->max_vertex_attribs());
@@ -105,8 +98,8 @@ TEST_F(ContextGroupTest, InitializeNoExtensions) {
TEST_F(ContextGroupTest, MultipleContexts) {
scoped_ptr<MockGLES2Decoder> decoder2_(new MockGLES2Decoder());
- TestHelper::SetupContextGroupInitExpectations(gl_.get(),
- DisallowedFeatures(), "");
+ TestHelper::SetupContextGroupInitExpectations(
+ gl_.get(), DisallowedFeatures(), "", "", kBindGeneratesResource);
group_->Initialize(decoder_.get(), DisallowedFeatures());
group_->Initialize(decoder2_.get(), DisallowedFeatures());
diff --git a/chromium/gpu/command_buffer/service/context_state.cc b/chromium/gpu/command_buffer/service/context_state.cc
index e8912cfe162..77d1f9286d1 100644
--- a/chromium/gpu/command_buffer/service/context_state.cc
+++ b/chromium/gpu/command_buffer/service/context_state.cc
@@ -18,7 +18,7 @@ namespace gles2 {
namespace {
-void EnableDisable(GLenum pname, bool enable) {
+static void EnableDisable(GLenum pname, bool enable) {
if (enable) {
glEnable(pname);
} else {
@@ -26,6 +26,58 @@ void EnableDisable(GLenum pname, bool enable) {
}
}
+GLuint Get2dServiceId(const TextureUnit& unit) {
+ return unit.bound_texture_2d.get()
+ ? unit.bound_texture_2d->service_id() : 0;
+}
+
+GLuint GetCubeServiceId(const TextureUnit& unit) {
+ return unit.bound_texture_cube_map.get()
+ ? unit.bound_texture_cube_map->service_id() : 0;
+}
+
+GLuint GetOesServiceId(const TextureUnit& unit) {
+ return unit.bound_texture_external_oes.get()
+ ? unit.bound_texture_external_oes->service_id() : 0;
+}
+
+GLuint GetArbServiceId(const TextureUnit& unit) {
+ return unit.bound_texture_rectangle_arb.get()
+ ? unit.bound_texture_rectangle_arb->service_id() : 0;
+}
+
+GLuint GetServiceId(const TextureUnit& unit, GLuint target) {
+ switch (target) {
+ case GL_TEXTURE_2D:
+ return Get2dServiceId(unit);
+ case GL_TEXTURE_CUBE_MAP:
+ return GetCubeServiceId(unit);
+ case GL_TEXTURE_RECTANGLE_ARB:
+ return GetArbServiceId(unit);
+ case GL_TEXTURE_EXTERNAL_OES:
+ return GetOesServiceId(unit);
+ default:
+ NOTREACHED();
+ return 0;
+ }
+}
+
+bool TargetIsSupported(const FeatureInfo* feature_info, GLuint target) {
+ switch (target) {
+ case GL_TEXTURE_2D:
+ return true;
+ case GL_TEXTURE_CUBE_MAP:
+ return true;
+ case GL_TEXTURE_RECTANGLE_ARB:
+ return feature_info->feature_flags().arb_texture_rectangle;
+ case GL_TEXTURE_EXTERNAL_OES:
+ return feature_info->feature_flags().oes_egl_image_external;
+ default:
+ NOTREACHED();
+ return false;
+ }
+}
+
} // anonymous namespace.
TextureUnit::TextureUnit()
@@ -35,43 +87,63 @@ TextureUnit::TextureUnit()
TextureUnit::~TextureUnit() {
}
-ContextState::ContextState(FeatureInfo* feature_info, Logger* logger)
+ContextState::ContextState(FeatureInfo* feature_info,
+ ErrorStateClient* error_state_client,
+ Logger* logger)
: active_texture_unit(0),
pack_reverse_row_order(false),
+ ignore_cached_state(false),
fbo_binding_for_scissor_workaround_dirty_(false),
feature_info_(feature_info),
- error_state_(ErrorState::Create(logger)) {
+ error_state_(ErrorState::Create(error_state_client, logger)) {
Initialize();
}
ContextState::~ContextState() {
}
-void ContextState::RestoreTextureUnitBindings(GLuint unit) const {
+void ContextState::RestoreTextureUnitBindings(
+ GLuint unit, const ContextState* prev_state) const {
DCHECK_LT(unit, texture_units.size());
const TextureUnit& texture_unit = texture_units[unit];
- glActiveTexture(GL_TEXTURE0 + unit);
- GLuint service_id = texture_unit.bound_texture_2d.get()
- ? texture_unit.bound_texture_2d->service_id()
- : 0;
- glBindTexture(GL_TEXTURE_2D, service_id);
- service_id = texture_unit.bound_texture_cube_map.get()
- ? texture_unit.bound_texture_cube_map->service_id()
- : 0;
- glBindTexture(GL_TEXTURE_CUBE_MAP, service_id);
-
- if (feature_info_->feature_flags().oes_egl_image_external) {
- service_id = texture_unit.bound_texture_external_oes.get()
- ? texture_unit.bound_texture_external_oes->service_id()
- : 0;
- glBindTexture(GL_TEXTURE_EXTERNAL_OES, service_id);
+ GLuint service_id_2d = Get2dServiceId(texture_unit);
+ GLuint service_id_cube = GetCubeServiceId(texture_unit);
+ GLuint service_id_oes = GetOesServiceId(texture_unit);
+ GLuint service_id_arb = GetArbServiceId(texture_unit);
+
+ bool bind_texture_2d = true;
+ bool bind_texture_cube = true;
+ bool bind_texture_oes = feature_info_->feature_flags().oes_egl_image_external;
+ bool bind_texture_arb = feature_info_->feature_flags().arb_texture_rectangle;
+
+ if (prev_state) {
+ const TextureUnit& prev_unit = prev_state->texture_units[unit];
+ bind_texture_2d = service_id_2d != Get2dServiceId(prev_unit);
+ bind_texture_cube = service_id_cube != GetCubeServiceId(prev_unit);
+ bind_texture_oes =
+ bind_texture_oes && service_id_oes != GetOesServiceId(prev_unit);
+ bind_texture_arb =
+ bind_texture_arb && service_id_arb != GetArbServiceId(prev_unit);
+ }
+
+ // Early-out if nothing has changed from the previous state.
+ if (!bind_texture_2d && !bind_texture_cube
+ && !bind_texture_oes && !bind_texture_arb) {
+ return;
}
- if (feature_info_->feature_flags().arb_texture_rectangle) {
- service_id = texture_unit.bound_texture_rectangle_arb.get()
- ? texture_unit.bound_texture_rectangle_arb->service_id()
- : 0;
- glBindTexture(GL_TEXTURE_RECTANGLE_ARB, service_id);
+ glActiveTexture(GL_TEXTURE0 + unit);
+ if (bind_texture_2d) {
+ glBindTexture(GL_TEXTURE_2D, service_id_2d);
+ }
+ if (bind_texture_cube) {
+ glBindTexture(GL_TEXTURE_CUBE_MAP, service_id_cube);
+ }
+ if (bind_texture_oes) {
+ glBindTexture(GL_TEXTURE_EXTERNAL_OES, service_id_oes);
+ }
+ if (bind_texture_arb) {
+ glBindTexture(GL_TEXTURE_RECTANGLE_ARB, service_id_arb);
}
}
@@ -101,62 +173,117 @@ void ContextState::RestoreActiveTexture() const {
glActiveTexture(GL_TEXTURE0 + active_texture_unit);
}
-void ContextState::RestoreAllTextureUnitBindings() const {
+void ContextState::RestoreAllTextureUnitBindings(
+ const ContextState* prev_state) const {
// Restore Texture state.
for (size_t ii = 0; ii < texture_units.size(); ++ii) {
- RestoreTextureUnitBindings(ii);
+ RestoreTextureUnitBindings(ii, prev_state);
}
RestoreActiveTexture();
}
-void ContextState::RestoreAttribute(GLuint attrib_index) const {
- const VertexAttrib* attrib =
- vertex_attrib_manager->GetVertexAttrib(attrib_index);
- const void* ptr = reinterpret_cast<const void*>(attrib->offset());
- Buffer* buffer = attrib->buffer();
- glBindBuffer(GL_ARRAY_BUFFER, buffer ? buffer->service_id() : 0);
- glVertexAttribPointer(
- attrib_index, attrib->size(), attrib->type(), attrib->normalized(),
- attrib->gl_stride(), ptr);
- if (attrib->divisor())
- glVertexAttribDivisorANGLE(attrib_index, attrib->divisor());
- // Never touch vertex attribute 0's state (in particular, never
- // disable it) when running on desktop GL because it will never be
- // re-enabled.
- if (attrib_index != 0 ||
- gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) {
- if (attrib->enabled()) {
- glEnableVertexAttribArray(attrib_index);
- } else {
- glDisableVertexAttribArray(attrib_index);
- }
- }
- glVertexAttrib4fv(attrib_index, attrib_values[attrib_index].v);
+void ContextState::RestoreActiveTextureUnitBinding(unsigned int target) const {
+ DCHECK_LT(active_texture_unit, texture_units.size());
+ const TextureUnit& texture_unit = texture_units[active_texture_unit];
+ if (TargetIsSupported(feature_info_, target))
+ glBindTexture(target, GetServiceId(texture_unit, target));
}
-void ContextState::RestoreGlobalState() const {
- InitCapabilities();
- InitState();
+void ContextState::RestoreVertexAttribValues() const {
+ for (size_t attrib = 0; attrib < vertex_attrib_manager->num_attribs();
+ ++attrib) {
+ glVertexAttrib4fv(attrib, attrib_values[attrib].v);
+ }
}
-void ContextState::RestoreState() const {
- RestoreAllTextureUnitBindings();
+void ContextState::RestoreVertexAttribArrays(
+ const scoped_refptr<VertexAttribManager> attrib_manager) const {
+ // This is expected to be called only for VAO with service_id 0,
+ // either to restore the default VAO or a virtual VAO with service_id 0.
+ GLuint vao_service_id = attrib_manager->service_id();
+ DCHECK(vao_service_id == 0);
+
+ // Bind VAO if supported.
+ if (feature_info_->feature_flags().native_vertex_array_object)
+ glBindVertexArrayOES(vao_service_id);
+
+ // Restore vertex attrib arrays.
+ for (size_t attrib_index = 0; attrib_index < attrib_manager->num_attribs();
+ ++attrib_index) {
+ const VertexAttrib* attrib = attrib_manager->GetVertexAttrib(attrib_index);
+
+ // Restore vertex array.
+ Buffer* buffer = attrib->buffer();
+ GLuint buffer_service_id = buffer ? buffer->service_id() : 0;
+ glBindBuffer(GL_ARRAY_BUFFER, buffer_service_id);
+ const void* ptr = reinterpret_cast<const void*>(attrib->offset());
+ glVertexAttribPointer(attrib_index,
+ attrib->size(),
+ attrib->type(),
+ attrib->normalized(),
+ attrib->gl_stride(),
+ ptr);
+
+ // Restore attrib divisor if supported.
+ if (feature_info_->feature_flags().angle_instanced_arrays)
+ glVertexAttribDivisorANGLE(attrib_index, attrib->divisor());
- // Restore Attrib State
+ // Never touch vertex attribute 0's state (in particular, never
+ // disable it) when running on desktop GL because it will never be
+ // re-enabled.
+ if (attrib_index != 0 ||
+ gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) {
+ if (attrib->enabled()) {
+ glEnableVertexAttribArray(attrib_index);
+ } else {
+ glDisableVertexAttribArray(attrib_index);
+ }
+ }
+ }
+}
+
+void ContextState::RestoreVertexAttribs() const {
+ // Restore Vertex Attrib Arrays
// TODO: This if should not be needed. RestoreState is getting called
// before GLES2Decoder::Initialize which is a bug.
if (vertex_attrib_manager.get()) {
- // TODO(gman): Move this restoration to VertexAttribManager.
- for (size_t attrib = 0; attrib < vertex_attrib_manager->num_attribs();
- ++attrib) {
- RestoreAttribute(attrib);
+ // Restore VAOs.
+ if (feature_info_->feature_flags().native_vertex_array_object) {
+ // If default VAO is still using shared id 0 instead of unique ids
+ // per-context, default VAO state must be restored.
+ GLuint default_vao_service_id =
+ default_vertex_attrib_manager->service_id();
+ if (default_vao_service_id == 0)
+ RestoreVertexAttribArrays(default_vertex_attrib_manager);
+
+ // Restore the current VAO binding, unless it's the same as the
+ // default above.
+ GLuint curr_vao_service_id = vertex_attrib_manager->service_id();
+ if (curr_vao_service_id != 0)
+ glBindVertexArrayOES(curr_vao_service_id);
+ } else {
+ // If native VAO isn't supported, emulated VAOs are used.
+ // Restore to the currently bound VAO.
+ RestoreVertexAttribArrays(vertex_attrib_manager);
}
}
+ // glVertexAttrib4fv aren't part of VAO state and must be restored.
+ RestoreVertexAttribValues();
+}
+
+void ContextState::RestoreGlobalState(const ContextState* prev_state) const {
+ InitCapabilities(prev_state);
+ InitState(prev_state);
+}
+
+void ContextState::RestoreState(const ContextState* prev_state) const {
+ RestoreAllTextureUnitBindings(prev_state);
+ RestoreVertexAttribs();
RestoreBufferBindings();
RestoreRenderbufferBindings();
RestoreProgramBindings();
- RestoreGlobalState();
+ RestoreGlobalState(prev_state);
}
ErrorState* ContextState::GetErrorState() {
diff --git a/chromium/gpu/command_buffer/service/context_state.h b/chromium/gpu/command_buffer/service/context_state.h
index 8d5edcaea61..e436e74e280 100644
--- a/chromium/gpu/command_buffer/service/context_state.h
+++ b/chromium/gpu/command_buffer/service/context_state.h
@@ -22,6 +22,7 @@ namespace gles2 {
class Buffer;
class ErrorState;
+class ErrorStateClient;
class FeatureInfo;
class Framebuffer;
class Program;
@@ -93,23 +94,34 @@ struct Vec4 {
};
struct GPU_EXPORT ContextState {
- ContextState(FeatureInfo* feature_info, Logger* logger);
+ ContextState(FeatureInfo* feature_info,
+ ErrorStateClient* error_state_client,
+ Logger* logger);
~ContextState();
void Initialize();
- void RestoreState() const;
- void InitCapabilities() const;
- void InitState() const;
+ void SetIgnoreCachedStateForTest(bool ignore) {
+ ignore_cached_state = ignore;
+ }
+
+ void RestoreState(const ContextState* prev_state) const;
+ void InitCapabilities(const ContextState* prev_state) const;
+ void InitState(const ContextState* prev_state) const;
void RestoreActiveTexture() const;
- void RestoreAllTextureUnitBindings() const;
- void RestoreAttribute(GLuint index) const;
+ void RestoreAllTextureUnitBindings(const ContextState* prev_state) const;
+ void RestoreActiveTextureUnitBinding(unsigned int target) const;
+ void RestoreVertexAttribValues() const;
+ void RestoreVertexAttribArrays(
+ const scoped_refptr<VertexAttribManager> attrib_manager) const;
+ void RestoreVertexAttribs() const;
void RestoreBufferBindings() const;
- void RestoreGlobalState() const;
+ void RestoreGlobalState(const ContextState* prev_state) const;
void RestoreProgramBindings() const;
void RestoreRenderbufferBindings() const;
- void RestoreTextureUnitBindings(GLuint unit) const;
+ void RestoreTextureUnitBindings(
+ GLuint unit, const ContextState* prev_state) const;
// Helper for getting cached state.
bool GetStateAsGLint(
@@ -118,6 +130,44 @@ struct GPU_EXPORT ContextState {
GLenum pname, GLfloat* params, GLsizei* num_written) const;
bool GetEnabled(GLenum cap) const;
+ inline void SetDeviceColorMask(GLboolean red,
+ GLboolean green,
+ GLboolean blue,
+ GLboolean alpha) {
+ if (cached_color_mask_red == red && cached_color_mask_green == green &&
+ cached_color_mask_blue == blue && cached_color_mask_alpha == alpha &&
+ !ignore_cached_state)
+ return;
+ cached_color_mask_red = red;
+ cached_color_mask_green = green;
+ cached_color_mask_blue = blue;
+ cached_color_mask_alpha = alpha;
+ glColorMask(red, green, blue, alpha);
+ }
+
+ inline void SetDeviceDepthMask(GLboolean mask) {
+ if (cached_depth_mask == mask && !ignore_cached_state)
+ return;
+ cached_depth_mask = mask;
+ glDepthMask(mask);
+ }
+
+ inline void SetDeviceStencilMaskSeparate(GLenum op, GLuint mask) {
+ if (op == GL_FRONT) {
+ if (cached_stencil_front_writemask == mask && !ignore_cached_state)
+ return;
+ cached_stencil_front_writemask = mask;
+ } else if (op == GL_BACK) {
+ if (cached_stencil_back_writemask == mask && !ignore_cached_state)
+ return;
+ cached_stencil_back_writemask = mask;
+ } else {
+ NOTREACHED();
+ return;
+ }
+ glStencilMaskSeparate(op, mask);
+ }
+
ErrorState* GetErrorState();
#include "gpu/command_buffer/service/context_state_autogen.h"
@@ -141,6 +191,7 @@ struct GPU_EXPORT ContextState {
// Class that manages vertex attribs.
scoped_refptr<VertexAttribManager> vertex_attrib_manager;
+ scoped_refptr<VertexAttribManager> default_vertex_attrib_manager;
// The program in use by glUseProgram
scoped_refptr<Program> current_program;
@@ -148,9 +199,12 @@ struct GPU_EXPORT ContextState {
// The currently bound renderbuffer
scoped_refptr<Renderbuffer> bound_renderbuffer;
- scoped_refptr<QueryManager::Query> current_query;
+ // A map of of target -> Query for current queries
+ typedef std::map<GLuint, scoped_refptr<QueryManager::Query> > QueryMap;
+ QueryMap current_queries;
bool pack_reverse_row_order;
+ bool ignore_cached_state;
mutable bool fbo_binding_for_scissor_workaround_dirty_;
FeatureInfo* feature_info_;
diff --git a/chromium/gpu/command_buffer/service/context_state_autogen.h b/chromium/gpu/command_buffer/service/context_state_autogen.h
index a76aabccac7..309301f1b28 100644
--- a/chromium/gpu/command_buffer/service/context_state_autogen.h
+++ b/chromium/gpu/command_buffer/service/context_state_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by context_state.h
@@ -13,14 +15,23 @@
struct EnableFlags {
EnableFlags();
bool blend;
+ bool cached_blend;
bool cull_face;
+ bool cached_cull_face;
bool depth_test;
+ bool cached_depth_test;
bool dither;
+ bool cached_dither;
bool polygon_offset_fill;
+ bool cached_polygon_offset_fill;
bool sample_alpha_to_coverage;
+ bool cached_sample_alpha_to_coverage;
bool sample_coverage;
+ bool cached_sample_coverage;
bool scissor_test;
+ bool cached_scissor_test;
bool stencil_test;
+ bool cached_stencil_test;
};
GLfloat blend_color_red;
@@ -40,12 +51,17 @@ GLfloat color_clear_alpha;
GLclampf depth_clear;
GLint stencil_clear;
GLboolean color_mask_red;
+GLboolean cached_color_mask_red;
GLboolean color_mask_green;
+GLboolean cached_color_mask_green;
GLboolean color_mask_blue;
+GLboolean cached_color_mask_blue;
GLboolean color_mask_alpha;
+GLboolean cached_color_mask_alpha;
GLenum cull_mode;
GLenum depth_func;
GLboolean depth_mask;
+GLboolean cached_depth_mask;
GLclampf z_near;
GLclampf z_far;
GLenum front_face;
@@ -69,7 +85,9 @@ GLenum stencil_back_func;
GLint stencil_back_ref;
GLuint stencil_back_mask;
GLuint stencil_front_writemask;
+GLuint cached_stencil_front_writemask;
GLuint stencil_back_writemask;
+GLuint cached_stencil_back_writemask;
GLenum stencil_front_fail_op;
GLenum stencil_front_z_fail_op;
GLenum stencil_front_z_pass_op;
@@ -81,5 +99,62 @@ GLint viewport_y;
GLsizei viewport_width;
GLsizei viewport_height;
+inline void SetDeviceCapabilityState(GLenum cap, bool enable) {
+ switch (cap) {
+ case GL_BLEND:
+ if (enable_flags.cached_blend == enable && !ignore_cached_state)
+ return;
+ enable_flags.cached_blend = enable;
+ break;
+ case GL_CULL_FACE:
+ if (enable_flags.cached_cull_face == enable && !ignore_cached_state)
+ return;
+ enable_flags.cached_cull_face = enable;
+ break;
+ case GL_DEPTH_TEST:
+ if (enable_flags.cached_depth_test == enable && !ignore_cached_state)
+ return;
+ enable_flags.cached_depth_test = enable;
+ break;
+ case GL_DITHER:
+ if (enable_flags.cached_dither == enable && !ignore_cached_state)
+ return;
+ enable_flags.cached_dither = enable;
+ break;
+ case GL_POLYGON_OFFSET_FILL:
+ if (enable_flags.cached_polygon_offset_fill == enable &&
+ !ignore_cached_state)
+ return;
+ enable_flags.cached_polygon_offset_fill = enable;
+ break;
+ case GL_SAMPLE_ALPHA_TO_COVERAGE:
+ if (enable_flags.cached_sample_alpha_to_coverage == enable &&
+ !ignore_cached_state)
+ return;
+ enable_flags.cached_sample_alpha_to_coverage = enable;
+ break;
+ case GL_SAMPLE_COVERAGE:
+ if (enable_flags.cached_sample_coverage == enable && !ignore_cached_state)
+ return;
+ enable_flags.cached_sample_coverage = enable;
+ break;
+ case GL_SCISSOR_TEST:
+ if (enable_flags.cached_scissor_test == enable && !ignore_cached_state)
+ return;
+ enable_flags.cached_scissor_test = enable;
+ break;
+ case GL_STENCIL_TEST:
+ if (enable_flags.cached_stencil_test == enable && !ignore_cached_state)
+ return;
+ enable_flags.cached_stencil_test = enable;
+ break;
+ default:
+ NOTREACHED();
+ return;
+ }
+ if (enable)
+ glEnable(cap);
+ else
+ glDisable(cap);
+}
#endif // GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/service/context_state_impl_autogen.h b/chromium/gpu/command_buffer/service/context_state_impl_autogen.h
index 100199c6b49..056a382d24d 100644
--- a/chromium/gpu/command_buffer/service/context_state_impl_autogen.h
+++ b/chromium/gpu/command_buffer/service/context_state_impl_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by context_state.cc
@@ -12,14 +14,23 @@
ContextState::EnableFlags::EnableFlags()
: blend(false),
+ cached_blend(false),
cull_face(false),
+ cached_cull_face(false),
depth_test(false),
+ cached_depth_test(false),
dither(true),
+ cached_dither(true),
polygon_offset_fill(false),
+ cached_polygon_offset_fill(false),
sample_alpha_to_coverage(false),
+ cached_sample_alpha_to_coverage(false),
sample_coverage(false),
+ cached_sample_coverage(false),
scissor_test(false),
- stencil_test(false) {
+ cached_scissor_test(false),
+ stencil_test(false),
+ cached_stencil_test(false) {
}
void ContextState::Initialize() {
@@ -40,12 +51,17 @@ void ContextState::Initialize() {
depth_clear = 1.0f;
stencil_clear = 0;
color_mask_red = true;
+ cached_color_mask_red = true;
color_mask_green = true;
+ cached_color_mask_green = true;
color_mask_blue = true;
+ cached_color_mask_blue = true;
color_mask_alpha = true;
+ cached_color_mask_alpha = true;
cull_mode = GL_BACK;
depth_func = GL_LESS;
depth_mask = true;
+ cached_depth_mask = true;
z_near = 0.0f;
z_far = 1.0f;
front_face = GL_CCW;
@@ -69,7 +85,9 @@ void ContextState::Initialize() {
stencil_back_ref = 0;
stencil_back_mask = 0xFFFFFFFFU;
stencil_front_writemask = 0xFFFFFFFFU;
+ cached_stencil_front_writemask = 0xFFFFFFFFU;
stencil_back_writemask = 0xFFFFFFFFU;
+ cached_stencil_back_writemask = 0xFFFFFFFFU;
stencil_front_fail_op = GL_KEEP;
stencil_front_z_fail_op = GL_KEEP;
stencil_front_z_pass_op = GL_KEEP;
@@ -82,59 +100,209 @@ void ContextState::Initialize() {
viewport_height = 1;
}
-void ContextState::InitCapabilities() const {
- EnableDisable(GL_BLEND, enable_flags.blend);
- EnableDisable(GL_CULL_FACE, enable_flags.cull_face);
- EnableDisable(GL_DEPTH_TEST, enable_flags.depth_test);
- EnableDisable(GL_DITHER, enable_flags.dither);
- EnableDisable(GL_POLYGON_OFFSET_FILL, enable_flags.polygon_offset_fill);
- EnableDisable(
- GL_SAMPLE_ALPHA_TO_COVERAGE, enable_flags.sample_alpha_to_coverage);
- EnableDisable(GL_SAMPLE_COVERAGE, enable_flags.sample_coverage);
- EnableDisable(GL_SCISSOR_TEST, enable_flags.scissor_test);
- EnableDisable(GL_STENCIL_TEST, enable_flags.stencil_test);
+void ContextState::InitCapabilities(const ContextState* prev_state) const {
+ if (prev_state) {
+ if (prev_state->enable_flags.cached_blend != enable_flags.cached_blend)
+ EnableDisable(GL_BLEND, enable_flags.cached_blend);
+ if (prev_state->enable_flags.cached_cull_face !=
+ enable_flags.cached_cull_face)
+ EnableDisable(GL_CULL_FACE, enable_flags.cached_cull_face);
+ if (prev_state->enable_flags.cached_depth_test !=
+ enable_flags.cached_depth_test)
+ EnableDisable(GL_DEPTH_TEST, enable_flags.cached_depth_test);
+ if (prev_state->enable_flags.cached_dither != enable_flags.cached_dither)
+ EnableDisable(GL_DITHER, enable_flags.cached_dither);
+ if (prev_state->enable_flags.cached_polygon_offset_fill !=
+ enable_flags.cached_polygon_offset_fill)
+ EnableDisable(GL_POLYGON_OFFSET_FILL,
+ enable_flags.cached_polygon_offset_fill);
+ if (prev_state->enable_flags.cached_sample_alpha_to_coverage !=
+ enable_flags.cached_sample_alpha_to_coverage)
+ EnableDisable(GL_SAMPLE_ALPHA_TO_COVERAGE,
+ enable_flags.cached_sample_alpha_to_coverage);
+ if (prev_state->enable_flags.cached_sample_coverage !=
+ enable_flags.cached_sample_coverage)
+ EnableDisable(GL_SAMPLE_COVERAGE, enable_flags.cached_sample_coverage);
+ if (prev_state->enable_flags.cached_scissor_test !=
+ enable_flags.cached_scissor_test)
+ EnableDisable(GL_SCISSOR_TEST, enable_flags.cached_scissor_test);
+ if (prev_state->enable_flags.cached_stencil_test !=
+ enable_flags.cached_stencil_test)
+ EnableDisable(GL_STENCIL_TEST, enable_flags.cached_stencil_test);
+ } else {
+ EnableDisable(GL_BLEND, enable_flags.cached_blend);
+ EnableDisable(GL_CULL_FACE, enable_flags.cached_cull_face);
+ EnableDisable(GL_DEPTH_TEST, enable_flags.cached_depth_test);
+ EnableDisable(GL_DITHER, enable_flags.cached_dither);
+ EnableDisable(GL_POLYGON_OFFSET_FILL,
+ enable_flags.cached_polygon_offset_fill);
+ EnableDisable(GL_SAMPLE_ALPHA_TO_COVERAGE,
+ enable_flags.cached_sample_alpha_to_coverage);
+ EnableDisable(GL_SAMPLE_COVERAGE, enable_flags.cached_sample_coverage);
+ EnableDisable(GL_SCISSOR_TEST, enable_flags.cached_scissor_test);
+ EnableDisable(GL_STENCIL_TEST, enable_flags.cached_stencil_test);
+ }
}
-void ContextState::InitState() const {
- glBlendColor(
- blend_color_red, blend_color_green, blend_color_blue, blend_color_alpha);
- glBlendEquationSeparate(blend_equation_rgb, blend_equation_alpha);
- glBlendFuncSeparate(
- blend_source_rgb, blend_dest_rgb, blend_source_alpha, blend_dest_alpha);
- glClearColor(
- color_clear_red, color_clear_green, color_clear_blue, color_clear_alpha);
- glClearDepth(depth_clear);
- glClearStencil(stencil_clear);
- glColorMask(
- color_mask_red, color_mask_green, color_mask_blue, color_mask_alpha);
- glCullFace(cull_mode);
- glDepthFunc(depth_func);
- glDepthMask(depth_mask);
- glDepthRange(z_near, z_far);
- glFrontFace(front_face);
- glHint(GL_GENERATE_MIPMAP_HINT, hint_generate_mipmap);
- if (feature_info_->feature_flags().oes_standard_derivatives)
- glHint(
- GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES, hint_fragment_shader_derivative);
- glLineWidth(line_width);
- glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment);
- glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment);
- glPolygonOffset(polygon_offset_factor, polygon_offset_units);
- glSampleCoverage(sample_coverage_value, sample_coverage_invert);
- glScissor(scissor_x, scissor_y, scissor_width, scissor_height);
- glStencilFuncSeparate(
- GL_FRONT, stencil_front_func, stencil_front_ref, stencil_front_mask);
- glStencilFuncSeparate(
- GL_BACK, stencil_back_func, stencil_back_ref, stencil_back_mask);
- glStencilMaskSeparate(GL_FRONT, stencil_front_writemask);
- glStencilMaskSeparate(GL_BACK, stencil_back_writemask);
- glStencilOpSeparate(
- GL_FRONT, stencil_front_fail_op, stencil_front_z_fail_op,
- stencil_front_z_pass_op);
- glStencilOpSeparate(
- GL_BACK, stencil_back_fail_op, stencil_back_z_fail_op,
- stencil_back_z_pass_op);
- glViewport(viewport_x, viewport_y, viewport_width, viewport_height);
+void ContextState::InitState(const ContextState* prev_state) const {
+ if (prev_state) {
+ if ((blend_color_red != prev_state->blend_color_red) ||
+ (blend_color_green != prev_state->blend_color_green) ||
+ (blend_color_blue != prev_state->blend_color_blue) ||
+ (blend_color_alpha != prev_state->blend_color_alpha))
+ glBlendColor(blend_color_red,
+ blend_color_green,
+ blend_color_blue,
+ blend_color_alpha);
+ if ((blend_equation_rgb != prev_state->blend_equation_rgb) ||
+ (blend_equation_alpha != prev_state->blend_equation_alpha))
+ glBlendEquationSeparate(blend_equation_rgb, blend_equation_alpha);
+ if ((blend_source_rgb != prev_state->blend_source_rgb) ||
+ (blend_dest_rgb != prev_state->blend_dest_rgb) ||
+ (blend_source_alpha != prev_state->blend_source_alpha) ||
+ (blend_dest_alpha != prev_state->blend_dest_alpha))
+ glBlendFuncSeparate(blend_source_rgb,
+ blend_dest_rgb,
+ blend_source_alpha,
+ blend_dest_alpha);
+ if ((color_clear_red != prev_state->color_clear_red) ||
+ (color_clear_green != prev_state->color_clear_green) ||
+ (color_clear_blue != prev_state->color_clear_blue) ||
+ (color_clear_alpha != prev_state->color_clear_alpha))
+ glClearColor(color_clear_red,
+ color_clear_green,
+ color_clear_blue,
+ color_clear_alpha);
+ if ((depth_clear != prev_state->depth_clear))
+ glClearDepth(depth_clear);
+ if ((stencil_clear != prev_state->stencil_clear))
+ glClearStencil(stencil_clear);
+ if ((cached_color_mask_red != prev_state->cached_color_mask_red) ||
+ (cached_color_mask_green != prev_state->cached_color_mask_green) ||
+ (cached_color_mask_blue != prev_state->cached_color_mask_blue) ||
+ (cached_color_mask_alpha != prev_state->cached_color_mask_alpha))
+ glColorMask(cached_color_mask_red,
+ cached_color_mask_green,
+ cached_color_mask_blue,
+ cached_color_mask_alpha);
+ if ((cull_mode != prev_state->cull_mode))
+ glCullFace(cull_mode);
+ if ((depth_func != prev_state->depth_func))
+ glDepthFunc(depth_func);
+ if ((cached_depth_mask != prev_state->cached_depth_mask))
+ glDepthMask(cached_depth_mask);
+ if ((z_near != prev_state->z_near) || (z_far != prev_state->z_far))
+ glDepthRange(z_near, z_far);
+ if ((front_face != prev_state->front_face))
+ glFrontFace(front_face);
+ if (prev_state->hint_generate_mipmap != hint_generate_mipmap)
+ glHint(GL_GENERATE_MIPMAP_HINT, hint_generate_mipmap);
+ if (feature_info_->feature_flags().oes_standard_derivatives)
+ if (prev_state->hint_fragment_shader_derivative !=
+ hint_fragment_shader_derivative)
+ glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES,
+ hint_fragment_shader_derivative);
+ if ((line_width != prev_state->line_width))
+ glLineWidth(line_width);
+ if (prev_state->pack_alignment != pack_alignment)
+ glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment);
+ if (prev_state->unpack_alignment != unpack_alignment)
+ glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment);
+ if ((polygon_offset_factor != prev_state->polygon_offset_factor) ||
+ (polygon_offset_units != prev_state->polygon_offset_units))
+ glPolygonOffset(polygon_offset_factor, polygon_offset_units);
+ if ((sample_coverage_value != prev_state->sample_coverage_value) ||
+ (sample_coverage_invert != prev_state->sample_coverage_invert))
+ glSampleCoverage(sample_coverage_value, sample_coverage_invert);
+ if ((scissor_x != prev_state->scissor_x) ||
+ (scissor_y != prev_state->scissor_y) ||
+ (scissor_width != prev_state->scissor_width) ||
+ (scissor_height != prev_state->scissor_height))
+ glScissor(scissor_x, scissor_y, scissor_width, scissor_height);
+ if ((stencil_front_func != prev_state->stencil_front_func) ||
+ (stencil_front_ref != prev_state->stencil_front_ref) ||
+ (stencil_front_mask != prev_state->stencil_front_mask))
+ glStencilFuncSeparate(
+ GL_FRONT, stencil_front_func, stencil_front_ref, stencil_front_mask);
+ if ((stencil_back_func != prev_state->stencil_back_func) ||
+ (stencil_back_ref != prev_state->stencil_back_ref) ||
+ (stencil_back_mask != prev_state->stencil_back_mask))
+ glStencilFuncSeparate(
+ GL_BACK, stencil_back_func, stencil_back_ref, stencil_back_mask);
+ if ((cached_stencil_front_writemask !=
+ prev_state->cached_stencil_front_writemask))
+ glStencilMaskSeparate(GL_FRONT, cached_stencil_front_writemask);
+ if ((cached_stencil_back_writemask !=
+ prev_state->cached_stencil_back_writemask))
+ glStencilMaskSeparate(GL_BACK, cached_stencil_back_writemask);
+ if ((stencil_front_fail_op != prev_state->stencil_front_fail_op) ||
+ (stencil_front_z_fail_op != prev_state->stencil_front_z_fail_op) ||
+ (stencil_front_z_pass_op != prev_state->stencil_front_z_pass_op))
+ glStencilOpSeparate(GL_FRONT,
+ stencil_front_fail_op,
+ stencil_front_z_fail_op,
+ stencil_front_z_pass_op);
+ if ((stencil_back_fail_op != prev_state->stencil_back_fail_op) ||
+ (stencil_back_z_fail_op != prev_state->stencil_back_z_fail_op) ||
+ (stencil_back_z_pass_op != prev_state->stencil_back_z_pass_op))
+ glStencilOpSeparate(GL_BACK,
+ stencil_back_fail_op,
+ stencil_back_z_fail_op,
+ stencil_back_z_pass_op);
+ if ((viewport_x != prev_state->viewport_x) ||
+ (viewport_y != prev_state->viewport_y) ||
+ (viewport_width != prev_state->viewport_width) ||
+ (viewport_height != prev_state->viewport_height))
+ glViewport(viewport_x, viewport_y, viewport_width, viewport_height);
+ } else {
+ glBlendColor(blend_color_red,
+ blend_color_green,
+ blend_color_blue,
+ blend_color_alpha);
+ glBlendEquationSeparate(blend_equation_rgb, blend_equation_alpha);
+ glBlendFuncSeparate(
+ blend_source_rgb, blend_dest_rgb, blend_source_alpha, blend_dest_alpha);
+ glClearColor(color_clear_red,
+ color_clear_green,
+ color_clear_blue,
+ color_clear_alpha);
+ glClearDepth(depth_clear);
+ glClearStencil(stencil_clear);
+ glColorMask(cached_color_mask_red,
+ cached_color_mask_green,
+ cached_color_mask_blue,
+ cached_color_mask_alpha);
+ glCullFace(cull_mode);
+ glDepthFunc(depth_func);
+ glDepthMask(cached_depth_mask);
+ glDepthRange(z_near, z_far);
+ glFrontFace(front_face);
+ glHint(GL_GENERATE_MIPMAP_HINT, hint_generate_mipmap);
+ if (feature_info_->feature_flags().oes_standard_derivatives)
+ glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES,
+ hint_fragment_shader_derivative);
+ glLineWidth(line_width);
+ glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment);
+ glPolygonOffset(polygon_offset_factor, polygon_offset_units);
+ glSampleCoverage(sample_coverage_value, sample_coverage_invert);
+ glScissor(scissor_x, scissor_y, scissor_width, scissor_height);
+ glStencilFuncSeparate(
+ GL_FRONT, stencil_front_func, stencil_front_ref, stencil_front_mask);
+ glStencilFuncSeparate(
+ GL_BACK, stencil_back_func, stencil_back_ref, stencil_back_mask);
+ glStencilMaskSeparate(GL_FRONT, cached_stencil_front_writemask);
+ glStencilMaskSeparate(GL_BACK, cached_stencil_back_writemask);
+ glStencilOpSeparate(GL_FRONT,
+ stencil_front_fail_op,
+ stencil_front_z_fail_op,
+ stencil_front_z_pass_op);
+ glStencilOpSeparate(GL_BACK,
+ stencil_back_fail_op,
+ stencil_back_z_fail_op,
+ stencil_back_z_pass_op);
+ glViewport(viewport_x, viewport_y, viewport_width, viewport_height);
+ }
}
bool ContextState::GetEnabled(GLenum cap) const {
switch (cap) {
@@ -162,8 +330,9 @@ bool ContextState::GetEnabled(GLenum cap) const {
}
}
-bool ContextState::GetStateAsGLint(
- GLenum pname, GLint* params, GLsizei* num_written) const {
+bool ContextState::GetStateAsGLint(GLenum pname,
+ GLint* params,
+ GLsizei* num_written) const {
switch (pname) {
case GL_BLEND_COLOR:
*num_written = 4;
@@ -486,8 +655,9 @@ bool ContextState::GetStateAsGLint(
}
}
-bool ContextState::GetStateAsGLfloat(
- GLenum pname, GLfloat* params, GLsizei* num_written) const {
+bool ContextState::GetStateAsGLfloat(GLenum pname,
+ GLfloat* params,
+ GLsizei* num_written) const {
switch (pname) {
case GL_BLEND_COLOR:
*num_written = 4;
@@ -784,8 +954,7 @@ bool ContextState::GetStateAsGLfloat(
case GL_SAMPLE_ALPHA_TO_COVERAGE:
*num_written = 1;
if (params) {
- params[0] =
- static_cast<GLfloat>(enable_flags.sample_alpha_to_coverage);
+ params[0] = static_cast<GLfloat>(enable_flags.sample_alpha_to_coverage);
}
return true;
case GL_SAMPLE_COVERAGE:
@@ -811,4 +980,3 @@ bool ContextState::GetStateAsGLfloat(
}
}
#endif // GPU_COMMAND_BUFFER_SERVICE_CONTEXT_STATE_IMPL_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/service/error_state.cc b/chromium/gpu/command_buffer/service/error_state.cc
index 524ea4f79ec..ce65aa194d0 100644
--- a/chromium/gpu/command_buffer/service/error_state.cc
+++ b/chromium/gpu/command_buffer/service/error_state.cc
@@ -16,7 +16,7 @@ namespace gles2 {
class ErrorStateImpl : public ErrorState {
public:
- explicit ErrorStateImpl(Logger* logger);
+ explicit ErrorStateImpl(ErrorStateClient* client, Logger* logger);
virtual ~ErrorStateImpl();
virtual uint32 GetGLError() OVERRIDE;
@@ -33,13 +33,20 @@ class ErrorStateImpl : public ErrorState {
const char* function_name,
unsigned int value,
const char* label) OVERRIDE;
- virtual void SetGLErrorInvalidParam(
+ virtual void SetGLErrorInvalidParami(
const char* filename,
int line,
unsigned int error,
const char* function_name,
unsigned int pname,
int param) OVERRIDE;
+ virtual void SetGLErrorInvalidParamf(
+ const char* filename,
+ int line,
+ unsigned int error,
+ const char* function_name,
+ unsigned int pname,
+ float param) OVERRIDE;
virtual unsigned int PeekGLError(
const char* filename, int line, const char* function_name) OVERRIDE;
@@ -56,6 +63,7 @@ class ErrorStateImpl : public ErrorState {
// Current GL error bits.
uint32 error_bits_;
+ ErrorStateClient* client_;
Logger* logger_;
DISALLOW_COPY_AND_ASSIGN(ErrorStateImpl);
@@ -65,13 +73,12 @@ ErrorState::ErrorState() {}
ErrorState::~ErrorState() {}
-ErrorState* ErrorState::Create(Logger* logger) {
- return new ErrorStateImpl(logger);
+ErrorState* ErrorState::Create(ErrorStateClient* client, Logger* logger) {
+ return new ErrorStateImpl(client, logger);
}
-ErrorStateImpl::ErrorStateImpl(Logger* logger)
- : error_bits_(0),
- logger_(logger) {}
+ErrorStateImpl::ErrorStateImpl(ErrorStateClient* client, Logger* logger)
+ : error_bits_(0), client_(client), logger_(logger) {}
ErrorStateImpl::~ErrorStateImpl() {}
@@ -118,6 +125,8 @@ void ErrorStateImpl::SetGLError(
function_name + ": " + msg);
}
error_bits_ |= GLES2Util::GLErrorToErrorBit(error);
+ if (error == GL_OUT_OF_MEMORY)
+ client_->OnOutOfMemoryError();
}
void ErrorStateImpl::SetGLErrorInvalidEnum(
@@ -131,7 +140,7 @@ void ErrorStateImpl::SetGLErrorInvalidEnum(
GLES2Util::GetStringEnum(value)).c_str());
}
-void ErrorStateImpl::SetGLErrorInvalidParam(
+void ErrorStateImpl::SetGLErrorInvalidParami(
const char* filename,
int line,
unsigned int error,
@@ -152,6 +161,19 @@ void ErrorStateImpl::SetGLErrorInvalidParam(
}
}
+void ErrorStateImpl::SetGLErrorInvalidParamf(
+ const char* filename,
+ int line,
+ unsigned int error,
+ const char* function_name,
+ unsigned int pname, float param) {
+ SetGLError(
+ filename, line, error, function_name,
+ (std::string("trying to set ") +
+ GLES2Util::GetStringEnum(pname) + " to " +
+ base::StringPrintf("%G", param)).c_str());
+}
+
void ErrorStateImpl::CopyRealGLErrorsToWrapper(
const char* filename, int line, const char* function_name) {
GLenum error;
diff --git a/chromium/gpu/command_buffer/service/error_state.h b/chromium/gpu/command_buffer/service/error_state.h
index 507b7383670..95f118c53c9 100644
--- a/chromium/gpu/command_buffer/service/error_state.h
+++ b/chromium/gpu/command_buffer/service/error_state.h
@@ -7,8 +7,10 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_
#define GPU_COMMAND_BUFFER_SERVICE_ERROR_STATE_H_
+#include <stdint.h>
+
#include "base/compiler_specific.h"
-#include "gpu/command_buffer/common/types.h"
+#include "base/macros.h"
#include "gpu/gpu_export.h"
namespace gpu {
@@ -31,10 +33,17 @@ class Logger;
__FILE__, __LINE__, function_name, value, label)
// Use to synthesize a GL error on the error_state for an invalid enum based
-// parameter. Will attempt to expand the parameter to a string.
-#define ERRORSTATE_SET_GL_ERROR_INVALID_PARAM( \
+// integer parameter. Will attempt to expand the parameter to a string.
+#define ERRORSTATE_SET_GL_ERROR_INVALID_PARAMI( \
+ error_state, error, function_name, pname, param) \
+ error_state->SetGLErrorInvalidParami( \
+ __FILE__, __LINE__, error, function_name, pname, param)
+
+// Use to synthesize a GL error on the error_state for an invalid enum based
+// float parameter. Will attempt to expand the parameter to a string.
+#define ERRORSTATE_SET_GL_ERROR_INVALID_PARAMF( \
error_state, error, function_name, pname, param) \
- error_state->SetGLErrorInvalidParam( \
+ error_state->SetGLErrorInvalidParamf( \
__FILE__, __LINE__, error, function_name, pname, param)
// Use to move all pending error to the wrapper so on your next GL call
@@ -48,14 +57,19 @@ class Logger;
#define ERRORSTATE_CLEAR_REAL_GL_ERRORS(error_state, function_name) \
error_state->ClearRealGLErrors(__FILE__, __LINE__, function_name)
+class GPU_EXPORT ErrorStateClient {
+ public:
+ // GL_OUT_OF_MEMORY can cause side effects such as losing the context.
+ virtual void OnOutOfMemoryError() = 0;
+};
class GPU_EXPORT ErrorState {
public:
virtual ~ErrorState();
- static ErrorState* Create(Logger* logger);
+ static ErrorState* Create(ErrorStateClient* client, Logger* logger);
- virtual uint32 GetGLError() = 0;
+ virtual uint32_t GetGLError() = 0;
virtual void SetGLError(
const char* filename,
@@ -69,13 +83,20 @@ class GPU_EXPORT ErrorState {
const char* function_name,
unsigned int value,
const char* label) = 0;
- virtual void SetGLErrorInvalidParam(
+ virtual void SetGLErrorInvalidParami(
const char* filename,
int line,
unsigned int error,
const char* function_name,
unsigned int pname,
int param) = 0;
+ virtual void SetGLErrorInvalidParamf(
+ const char* filename,
+ int line,
+ unsigned int error,
+ const char* function_name,
+ unsigned int pname,
+ float param) = 0;
// Gets the GLError and stores it in our wrapper. Effectively
// this lets us peek at the error without losing it.
diff --git a/chromium/gpu/command_buffer/service/error_state_mock.h b/chromium/gpu/command_buffer/service/error_state_mock.h
index 00bed9a4712..eb056f34f4b 100644
--- a/chromium/gpu/command_buffer/service/error_state_mock.h
+++ b/chromium/gpu/command_buffer/service/error_state_mock.h
@@ -18,20 +18,27 @@ class MockErrorState : public ErrorState {
MockErrorState();
virtual ~MockErrorState();
- MOCK_METHOD0(GetGLError, uint32());
+ MOCK_METHOD0(GetGLError, uint32_t());
MOCK_METHOD5(SetGLError, void(
const char* filename, int line,
unsigned error, const char* function_name, const char* msg));
MOCK_METHOD5(SetGLErrorInvalidEnum, void(
const char* filename, int line,
const char* function_name, unsigned value, const char* label));
- MOCK_METHOD6(SetGLErrorInvalidParam, void(
+ MOCK_METHOD6(SetGLErrorInvalidParami, void(
const char* filename,
int line,
unsigned error,
const char* function_name,
unsigned pname,
int param));
+ MOCK_METHOD6(SetGLErrorInvalidParamf, void(
+ const char* filename,
+ int line,
+ unsigned error,
+ const char* function_name,
+ unsigned pname,
+ float param));
MOCK_METHOD3(PeekGLError, unsigned(
const char* file, int line, const char* filename));
MOCK_METHOD3(CopyRealGLErrorsToWrapper, void(
diff --git a/chromium/gpu/command_buffer/service/feature_info.cc b/chromium/gpu/command_buffer/service/feature_info.cc
index cbcf968adc2..94eb4cc0a23 100644
--- a/chromium/gpu/command_buffer/service/feature_info.cc
+++ b/chromium/gpu/command_buffer/service/feature_info.cc
@@ -7,6 +7,8 @@
#include <set>
#include "base/command_line.h"
+#include "base/macros.h"
+#include "base/metrics/histogram.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
@@ -14,10 +16,6 @@
#include "gpu/command_buffer/service/gpu_switches.h"
#include "ui/gl/gl_implementation.h"
-#if defined(OS_MACOSX)
-#include "ui/gl/io_surface_support_mac.h"
-#endif
-
namespace gpu {
namespace gles2 {
@@ -94,12 +92,22 @@ void StringToWorkarounds(
workarounds->max_cube_map_texture_size = 1024;
if (workarounds->max_cube_map_texture_size_limit_512)
workarounds->max_cube_map_texture_size = 512;
+
+ if (workarounds->max_fragment_uniform_vectors_32)
+ workarounds->max_fragment_uniform_vectors = 32;
+ if (workarounds->max_varying_vectors_16)
+ workarounds->max_varying_vectors = 16;
+ if (workarounds->max_vertex_uniform_vectors_256)
+ workarounds->max_vertex_uniform_vectors = 256;
}
} // anonymous namespace.
FeatureInfo::FeatureFlags::FeatureFlags()
- : chromium_framebuffer_multisample(false),
+ : chromium_color_buffer_float_rgba(false),
+ chromium_color_buffer_float_rgb(false),
+ chromium_framebuffer_multisample(false),
+ chromium_sync_query(false),
use_core_framebuffer_multisample(false),
multisampled_render_to_texture(false),
use_img_for_multisampled_render_to_texture(false),
@@ -111,7 +119,6 @@ FeatureInfo::FeatureFlags::FeatureFlags()
npot_ok(false),
enable_texture_float_linear(false),
enable_texture_half_float_linear(false),
- chromium_stream_texture(false),
angle_translated_shader_source(false),
angle_pack_reverse_row_order(false),
arb_texture_rectangle(false),
@@ -125,6 +132,7 @@ FeatureInfo::FeatureFlags::FeatureFlags()
enable_samplers(false),
ext_draw_buffers(false),
ext_frag_depth(false),
+ ext_shader_texture_lod(false),
use_async_readpixels(false),
map_buffer_range(false),
ext_discard_framebuffer(false),
@@ -140,7 +148,10 @@ FeatureInfo::Workarounds::Workarounds() :
GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP)
#undef GPU_OP
max_texture_size(0),
- max_cube_map_texture_size(0) {
+ max_cube_map_texture_size(0),
+ max_fragment_uniform_vectors(0),
+ max_varying_vectors(0),
+ max_vertex_uniform_vectors(0) {
}
FeatureInfo::FeatureInfo() {
@@ -244,15 +255,9 @@ void FeatureInfo::InitializeFeatures() {
AddExtensionString("GL_CHROMIUM_resize");
AddExtensionString("GL_CHROMIUM_resource_safe");
AddExtensionString("GL_CHROMIUM_strict_attribs");
- AddExtensionString("GL_CHROMIUM_stream_texture");
AddExtensionString("GL_CHROMIUM_texture_mailbox");
AddExtensionString("GL_EXT_debug_marker");
- if (workarounds_.enable_chromium_fast_npot_mo8_textures)
- AddExtensionString("GL_CHROMIUM_fast_NPOT_MO8_textures");
-
- feature_flags_.chromium_stream_texture = true;
-
// OES_vertex_array_object is emulated if not present natively,
// so the extension string is always exposed.
AddExtensionString("GL_OES_vertex_array_object");
@@ -444,26 +449,28 @@ void FeatureInfo::InitializeFeatures() {
bool enable_texture_half_float = false;
bool enable_texture_half_float_linear = false;
- bool have_arb_texture_float = extensions.Contains("GL_ARB_texture_float");
+ bool may_enable_chromium_color_buffer_float = false;
- if (have_arb_texture_float) {
+ if (extensions.Contains("GL_ARB_texture_float")) {
enable_texture_float = true;
enable_texture_float_linear = true;
enable_texture_half_float = true;
enable_texture_half_float_linear = true;
+ may_enable_chromium_color_buffer_float = true;
} else {
- if (extensions.Contains("GL_OES_texture_float") || have_arb_texture_float) {
+ if (extensions.Contains("GL_OES_texture_float")) {
enable_texture_float = true;
- if (extensions.Contains("GL_OES_texture_float_linear") ||
- have_arb_texture_float) {
+ if (extensions.Contains("GL_OES_texture_float_linear")) {
enable_texture_float_linear = true;
}
+ if ((is_es3 && extensions.Contains("GL_EXT_color_buffer_float")) ||
+ feature_flags_.is_angle) {
+ may_enable_chromium_color_buffer_float = true;
+ }
}
- if (extensions.Contains("GL_OES_texture_half_float") ||
- have_arb_texture_float) {
+ if (extensions.Contains("GL_OES_texture_half_float")) {
enable_texture_half_float = true;
- if (extensions.Contains("GL_OES_texture_half_float_linear") ||
- have_arb_texture_float) {
+ if (extensions.Contains("GL_OES_texture_half_float_linear")) {
enable_texture_half_float_linear = true;
}
}
@@ -497,9 +504,64 @@ void FeatureInfo::InitializeFeatures() {
}
}
+ if (may_enable_chromium_color_buffer_float) {
+ COMPILE_ASSERT(GL_RGBA32F_ARB == GL_RGBA32F &&
+ GL_RGBA32F_EXT == GL_RGBA32F &&
+ GL_RGB32F_ARB == GL_RGB32F &&
+ GL_RGB32F_EXT == GL_RGB32F,
+ sized_float_internal_format_variations_must_match);
+ // We don't check extension support beyond ARB_texture_float on desktop GL,
+ // and format support varies between GL configurations. For example, spec
+ // prior to OpenGL 3.0 mandates framebuffer support only for one
+ // implementation-chosen format, and ES3.0 EXT_color_buffer_float does not
+ // support rendering to RGB32F. Check for framebuffer completeness with
+ // formats that the extensions expose, and only enable an extension when a
+ // framebuffer created with its texture format is reported as complete.
+ GLint fb_binding = 0;
+ GLint tex_binding = 0;
+ glGetIntegerv(GL_FRAMEBUFFER_BINDING, &fb_binding);
+ glGetIntegerv(GL_TEXTURE_BINDING_2D, &tex_binding);
+
+ GLuint tex_id = 0;
+ GLuint fb_id = 0;
+ GLsizei width = 16;
+
+ glGenTextures(1, &tex_id);
+ glGenFramebuffersEXT(1, &fb_id);
+ glBindTexture(GL_TEXTURE_2D, tex_id);
+ // Nearest filter needed for framebuffer completeness on some drivers.
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, width, 0, GL_RGBA,
+ GL_FLOAT, NULL);
+ glBindFramebufferEXT(GL_FRAMEBUFFER, fb_id);
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D, tex_id, 0);
+ GLenum statusRGBA = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, width, width, 0, GL_RGB,
+ GL_FLOAT, NULL);
+ GLenum statusRGB = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER);
+ glDeleteFramebuffersEXT(1, &fb_id);
+ glDeleteTextures(1, &tex_id);
+
+ glBindFramebufferEXT(GL_FRAMEBUFFER, static_cast<GLuint>(fb_binding));
+ glBindTexture(GL_TEXTURE_2D, static_cast<GLuint>(tex_binding));
+
+ DCHECK(glGetError() == GL_NO_ERROR);
+
+ if (statusRGBA == GL_FRAMEBUFFER_COMPLETE) {
+ validators_.texture_internal_format.AddValue(GL_RGBA32F);
+ feature_flags_.chromium_color_buffer_float_rgba = true;
+ AddExtensionString("GL_CHROMIUM_color_buffer_float_rgba");
+ }
+ if (statusRGB == GL_FRAMEBUFFER_COMPLETE) {
+ validators_.texture_internal_format.AddValue(GL_RGB32F);
+ feature_flags_.chromium_color_buffer_float_rgb = true;
+ AddExtensionString("GL_CHROMIUM_color_buffer_float_rgb");
+ }
+ }
+
// Check for multisample support
- if (!disallowed_features_.multisampling &&
- !workarounds_.disable_framebuffer_multisample) {
+ if (!workarounds_.disable_multisampling) {
bool ext_has_multisample =
extensions.Contains("GL_EXT_framebuffer_multisample") || is_es3;
if (feature_flags_.is_angle) {
@@ -515,21 +577,20 @@ void FeatureInfo::InitializeFeatures() {
validators_.g_l_state.AddValue(GL_MAX_SAMPLES_EXT);
validators_.render_buffer_parameter.AddValue(GL_RENDERBUFFER_SAMPLES_EXT);
AddExtensionString("GL_CHROMIUM_framebuffer_multisample");
- } else {
- if (extensions.Contains("GL_EXT_multisampled_render_to_texture")) {
- feature_flags_.multisampled_render_to_texture = true;
- } else if (extensions.Contains("GL_IMG_multisampled_render_to_texture")) {
- feature_flags_.multisampled_render_to_texture = true;
- feature_flags_.use_img_for_multisampled_render_to_texture = true;
- }
- if (feature_flags_.multisampled_render_to_texture) {
- validators_.render_buffer_parameter.AddValue(
- GL_RENDERBUFFER_SAMPLES_EXT);
- validators_.g_l_state.AddValue(GL_MAX_SAMPLES_EXT);
- validators_.frame_buffer_parameter.AddValue(
- GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT);
- AddExtensionString("GL_EXT_multisampled_render_to_texture");
- }
+ }
+ if (extensions.Contains("GL_EXT_multisampled_render_to_texture")) {
+ feature_flags_.multisampled_render_to_texture = true;
+ } else if (extensions.Contains("GL_IMG_multisampled_render_to_texture")) {
+ feature_flags_.multisampled_render_to_texture = true;
+ feature_flags_.use_img_for_multisampled_render_to_texture = true;
+ }
+ if (feature_flags_.multisampled_render_to_texture) {
+ validators_.render_buffer_parameter.AddValue(
+ GL_RENDERBUFFER_SAMPLES_EXT);
+ validators_.g_l_state.AddValue(GL_MAX_SAMPLES_EXT);
+ validators_.frame_buffer_parameter.AddValue(
+ GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT);
+ AddExtensionString("GL_EXT_multisampled_render_to_texture");
}
}
@@ -564,6 +625,28 @@ void FeatureInfo::InitializeFeatures() {
validators_.compressed_texture_format.AddValue(GL_ETC1_RGB8_OES);
}
+ if (extensions.Contains("GL_AMD_compressed_ATC_texture")) {
+ AddExtensionString("GL_AMD_compressed_ATC_texture");
+ validators_.compressed_texture_format.AddValue(
+ GL_ATC_RGB_AMD);
+ validators_.compressed_texture_format.AddValue(
+ GL_ATC_RGBA_EXPLICIT_ALPHA_AMD);
+ validators_.compressed_texture_format.AddValue(
+ GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD);
+ }
+
+ if (extensions.Contains("GL_IMG_texture_compression_pvrtc")) {
+ AddExtensionString("GL_IMG_texture_compression_pvrtc");
+ validators_.compressed_texture_format.AddValue(
+ GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG);
+ validators_.compressed_texture_format.AddValue(
+ GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG);
+ validators_.compressed_texture_format.AddValue(
+ GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG);
+ validators_.compressed_texture_format.AddValue(
+ GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG);
+ }
+
// Ideally we would only expose this extension on Mac OS X, to
// support GL_CHROMIUM_iosurface and the compositor. We don't want
// applications to start using it; they should use ordinary non-
@@ -583,9 +666,7 @@ void FeatureInfo::InitializeFeatures() {
}
#if defined(OS_MACOSX)
- if (IOSurfaceSupport::Initialize()) {
- AddExtensionString("GL_CHROMIUM_iosurface");
- }
+ AddExtensionString("GL_CHROMIUM_iosurface");
#endif
// TODO(gman): Add support for these extensions.
@@ -658,7 +739,8 @@ void FeatureInfo::InitializeFeatures() {
if (!workarounds_.disable_angle_instanced_arrays &&
(extensions.Contains("GL_ANGLE_instanced_arrays") ||
(extensions.Contains("GL_ARB_instanced_arrays") &&
- extensions.Contains("GL_ARB_draw_instanced")))) {
+ extensions.Contains("GL_ARB_draw_instanced")) ||
+ is_es3)) {
AddExtensionString("GL_ANGLE_instanced_arrays");
feature_flags_.angle_instanced_arrays = true;
validators_.vertex_attribute.AddValue(GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE);
@@ -689,14 +771,37 @@ void FeatureInfo::InitializeFeatures() {
}
}
+ if (extensions.Contains("GL_EXT_blend_minmax") ||
+ gfx::HasDesktopGLFeatures()) {
+ AddExtensionString("GL_EXT_blend_minmax");
+ validators_.equation.AddValue(GL_MIN_EXT);
+ validators_.equation.AddValue(GL_MAX_EXT);
+ }
+
if (extensions.Contains("GL_EXT_frag_depth") || gfx::HasDesktopGLFeatures()) {
AddExtensionString("GL_EXT_frag_depth");
feature_flags_.ext_frag_depth = true;
}
- bool ui_gl_fence_works = extensions.Contains("GL_NV_fence") ||
- extensions.Contains("GL_ARB_sync") ||
- extensions.Contains("EGL_KHR_fence_sync");
+ if (extensions.Contains("GL_EXT_shader_texture_lod") ||
+ gfx::HasDesktopGLFeatures()) {
+ AddExtensionString("GL_EXT_shader_texture_lod");
+ feature_flags_.ext_shader_texture_lod = true;
+ }
+
+ bool egl_khr_fence_sync = false;
+#if !defined(OS_MACOSX)
+ if (workarounds_.disable_egl_khr_fence_sync) {
+ gfx::g_driver_egl.ext.b_EGL_KHR_fence_sync = false;
+ }
+ egl_khr_fence_sync = gfx::g_driver_egl.ext.b_EGL_KHR_fence_sync;
+#endif
+ if (workarounds_.disable_arb_sync)
+ gfx::g_driver_gl.ext.b_GL_ARB_sync = false;
+ bool ui_gl_fence_works = is_es3 || extensions.Contains("GL_NV_fence") ||
+ gfx::g_driver_gl.ext.b_GL_ARB_sync ||
+ egl_khr_fence_sync;
+ UMA_HISTOGRAM_BOOLEAN("GPU.FenceSupport", ui_gl_fence_works);
feature_flags_.map_buffer_range =
is_es3 || extensions.Contains("GL_ARB_map_buffer_range");
@@ -724,10 +829,22 @@ void FeatureInfo::InitializeFeatures() {
AddExtensionString("GL_EXT_discard_framebuffer");
feature_flags_.ext_discard_framebuffer = true;
}
+
+ if (ui_gl_fence_works) {
+ AddExtensionString("GL_CHROMIUM_sync_query");
+ feature_flags_.chromium_sync_query = true;
+ }
}
void FeatureInfo::AddExtensionString(const std::string& str) {
- if (extensions_.find(str) == std::string::npos) {
+ size_t pos = extensions_.find(str);
+ while (pos != std::string::npos &&
+ pos + str.length() < extensions_.length() &&
+ extensions_.substr(pos + str.length(), 1) != " ") {
+ // This extension name is a substring of another.
+ pos = extensions_.find(str, pos + str.length());
+ }
+ if (pos == std::string::npos) {
extensions_ += (extensions_.empty() ? "" : " ") + str;
}
}
diff --git a/chromium/gpu/command_buffer/service/feature_info.h b/chromium/gpu/command_buffer/service/feature_info.h
index ca8c03c7328..8e9c07cac32 100644
--- a/chromium/gpu/command_buffer/service/feature_info.h
+++ b/chromium/gpu/command_buffer/service/feature_info.h
@@ -15,7 +15,9 @@
#include "gpu/config/gpu_driver_bug_workaround_type.h"
#include "gpu/gpu_export.h"
+namespace base {
class CommandLine;
+}
namespace gpu {
namespace gles2 {
@@ -26,7 +28,10 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
struct FeatureFlags {
FeatureFlags();
+ bool chromium_color_buffer_float_rgba;
+ bool chromium_color_buffer_float_rgb;
bool chromium_framebuffer_multisample;
+ bool chromium_sync_query;
// Use glBlitFramebuffer() and glRenderbufferStorageMultisample() with
// GL_EXT_framebuffer_multisample-style semantics, since they are exposed
// as core GL functions on this implementation.
@@ -42,7 +47,6 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
bool npot_ok;
bool enable_texture_float_linear;
bool enable_texture_half_float_linear;
- bool chromium_stream_texture;
bool angle_translated_shader_source;
bool angle_pack_reverse_row_order;
bool arb_texture_rectangle;
@@ -56,6 +60,7 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
bool enable_samplers;
bool ext_draw_buffers;
bool ext_frag_depth;
+ bool ext_shader_texture_lod;
bool use_async_readpixels;
bool map_buffer_range;
bool ext_discard_framebuffer;
@@ -76,13 +81,16 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
// Note: 0 here means use driver limit.
GLint max_texture_size;
GLint max_cube_map_texture_size;
+ GLint max_fragment_uniform_vectors;
+ GLint max_varying_vectors;
+ GLint max_vertex_uniform_vectors;
};
// Constructor with workarounds taken from the current process's CommandLine
FeatureInfo();
// Constructor with workarounds taken from |command_line|
- FeatureInfo(const CommandLine& command_line);
+ FeatureInfo(const base::CommandLine& command_line);
// Initializes the feature information. Needs a current GL context.
bool Initialize();
@@ -111,7 +119,6 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
private:
friend class base::RefCounted<FeatureInfo>;
friend class BufferManagerClientSideArraysTest;
- friend class GLES2DecoderTestBase;
typedef base::hash_map<GLenum, ValueValidator<GLenum> > ValidatorMap;
ValidatorMap texture_format_validators_;
@@ -119,7 +126,7 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
~FeatureInfo();
void AddExtensionString(const std::string& str);
- void InitializeBasicState(const CommandLine& command_line);
+ void InitializeBasicState(const base::CommandLine& command_line);
void InitializeFeatures();
Validators validators_;
diff --git a/chromium/gpu/command_buffer/service/feature_info_unittest.cc b/chromium/gpu/command_buffer/service/feature_info_unittest.cc
index 8164b3580ac..be3e38a6715 100644
--- a/chromium/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/chromium/gpu/command_buffer/service/feature_info_unittest.cc
@@ -7,6 +7,7 @@
#include "base/command_line.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/string_number_conversions.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "gpu/command_buffer/service/texture_manager.h"
@@ -15,7 +16,6 @@
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_mock.h"
-using ::gfx::MockGLInterface;
using ::testing::_;
using ::testing::DoAll;
using ::testing::HasSubstr;
@@ -27,7 +27,6 @@ using ::testing::Return;
using ::testing::SetArrayArgument;
using ::testing::SetArgumentPointee;
using ::testing::StrEq;
-using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
@@ -36,7 +35,7 @@ namespace {
const char kGLRendererStringANGLE[] = "ANGLE (some renderer)";
} // anonymous namespace
-class FeatureInfoTest : public testing::Test {
+class FeatureInfoTest : public GpuServiceTest {
public:
FeatureInfoTest() {
}
@@ -70,18 +69,11 @@ class FeatureInfoTest : public testing::Test {
}
protected:
- virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
- }
-
virtual void TearDown() {
info_ = NULL;
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
+ GpuServiceTest::TearDown();
}
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_refptr<FeatureInfo> info_;
};
@@ -110,7 +102,6 @@ TEST_F(FeatureInfoTest, Basic) {
EXPECT_FALSE(info_->feature_flags().oes_egl_image_external);
EXPECT_FALSE(info_->feature_flags().oes_depth24);
EXPECT_FALSE(info_->feature_flags().packed_depth24_stencil8);
- EXPECT_FALSE(info_->feature_flags().chromium_stream_texture);
EXPECT_FALSE(info_->feature_flags().angle_translated_shader_source);
EXPECT_FALSE(info_->feature_flags().angle_pack_reverse_row_order);
EXPECT_FALSE(info_->feature_flags().arb_texture_rectangle);
@@ -247,6 +238,10 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) {
Not(HasSubstr("GL_EXT_texture_storage")));
EXPECT_THAT(info_->extensions(),
Not(HasSubstr("GL_OES_compressed_ETC1_RGB8_texture")));
+ EXPECT_THAT(info_->extensions(),
+ Not(HasSubstr("GL_AMD_compressed_ATC_texture")));
+ EXPECT_THAT(info_->extensions(),
+ Not(HasSubstr("GL_IMG_texture_compression_pvrtc")));
EXPECT_FALSE(info_->feature_flags().npot_ok);
EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
GL_COMPRESSED_RGB_S3TC_DXT1_EXT));
@@ -258,6 +253,20 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) {
GL_COMPRESSED_RGBA_S3TC_DXT5_EXT));
EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
GL_ETC1_RGB8_OES));
+ EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
+ GL_ATC_RGB_AMD));
+ EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
+ GL_ATC_RGBA_EXPLICIT_ALPHA_AMD));
+ EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
+ GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD));
+ EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
+ GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
+ EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
+ GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG));
+ EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
+ GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG));
+ EXPECT_FALSE(info_->validators()->compressed_texture_format.IsValid(
+ GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG));
EXPECT_FALSE(info_->validators()->read_pixel_format.IsValid(
GL_BGRA_EXT));
EXPECT_FALSE(info_->validators()->texture_parameter.IsValid(
@@ -281,6 +290,10 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) {
GL_DEPTH24_STENCIL8));
EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
GL_DEPTH_STENCIL));
+ EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
+ GL_RGBA32F));
+ EXPECT_FALSE(info_->validators()->texture_internal_format.IsValid(
+ GL_RGB32F));
EXPECT_FALSE(info_->validators()->texture_format.IsValid(
GL_DEPTH_STENCIL));
EXPECT_FALSE(info_->validators()->pixel_type.IsValid(
@@ -295,6 +308,8 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) {
GL_DEPTH_COMPONENT32_OES));
EXPECT_FALSE(info_->validators()->texture_internal_format_storage.IsValid(
GL_DEPTH24_STENCIL8_OES));
+ EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MIN_EXT));
+ EXPECT_FALSE(info_->validators()->equation.IsValid(GL_MAX_EXT));
}
TEST_F(FeatureInfoTest, InitializeWithANGLE) {
@@ -408,6 +423,19 @@ TEST_F(FeatureInfoTest, InitializeEXT_read_format_bgra) {
GL_BGRA8_EXT));
}
+TEST_F(FeatureInfoTest, InitializeARB_texture_float) {
+ SetupInitExpectations("GL_ARB_texture_float");
+ EXPECT_TRUE(info_->feature_flags().chromium_color_buffer_float_rgba);
+ EXPECT_TRUE(info_->feature_flags().chromium_color_buffer_float_rgb);
+ std::string extensions = info_->extensions() + " ";
+ EXPECT_THAT(extensions, HasSubstr("GL_CHROMIUM_color_buffer_float_rgb "));
+ EXPECT_THAT(extensions, HasSubstr("GL_CHROMIUM_color_buffer_float_rgba"));
+ EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
+ GL_RGBA32F));
+ EXPECT_TRUE(info_->validators()->texture_internal_format.IsValid(
+ GL_RGB32F));
+}
+
TEST_F(FeatureInfoTest, InitializeOES_texture_floatGLES2) {
SetupInitExpectations("GL_OES_texture_float");
EXPECT_FALSE(info_->feature_flags().enable_texture_float_linear);
@@ -618,7 +646,7 @@ TEST_F(FeatureInfoTest, InitializeEXT_multisampled_render_to_texture) {
TEST_F(FeatureInfoTest, InitializeIMG_multisampled_render_to_texture) {
SetupInitExpectations("GL_IMG_multisampled_render_to_texture");
EXPECT_TRUE(info_->feature_flags(
- ).use_img_for_multisampled_render_to_texture);
+ ).multisampled_render_to_texture);
EXPECT_TRUE(info_->feature_flags(
).use_img_for_multisampled_render_to_texture);
EXPECT_THAT(info_->extensions(),
@@ -810,11 +838,30 @@ TEST_F(FeatureInfoTest, InitializeOES_compressed_ETC1_RGB8_texture) {
GL_ETC1_RGB8_OES));
}
-TEST_F(FeatureInfoTest, InitializeCHROMIUM_stream_texture) {
- SetupInitExpectations("GL_CHROMIUM_stream_texture");
+TEST_F(FeatureInfoTest, InitializeAMD_compressed_ATC_texture) {
+ SetupInitExpectations("GL_AMD_compressed_ATC_texture");
EXPECT_THAT(info_->extensions(),
- HasSubstr("GL_CHROMIUM_stream_texture"));
- EXPECT_TRUE(info_->feature_flags().chromium_stream_texture);
+ HasSubstr("GL_AMD_compressed_ATC_texture"));
+ EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
+ GL_ATC_RGB_AMD));
+ EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
+ GL_ATC_RGBA_EXPLICIT_ALPHA_AMD));
+ EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
+ GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD));
+}
+
+TEST_F(FeatureInfoTest, InitializeIMG_texture_compression_pvrtc) {
+ SetupInitExpectations("GL_IMG_texture_compression_pvrtc");
+ EXPECT_THAT(info_->extensions(),
+ HasSubstr("GL_IMG_texture_compression_pvrtc"));
+ EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
+ GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG));
+ EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
+ GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG));
+ EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
+ GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG));
+ EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
+ GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG));
}
TEST_F(FeatureInfoTest, InitializeEXT_occlusion_query_boolean) {
@@ -899,12 +946,25 @@ TEST_F(FeatureInfoTest, InitializeVAOsWithClientSideArrays) {
EXPECT_FALSE(info_->feature_flags().native_vertex_array_object);
}
+TEST_F(FeatureInfoTest, InitializeEXT_blend_minmax) {
+ SetupInitExpectations("GL_EXT_blend_minmax");
+ EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_blend_minmax"));
+ EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MIN_EXT));
+ EXPECT_TRUE(info_->validators()->equation.IsValid(GL_MAX_EXT));
+}
+
TEST_F(FeatureInfoTest, InitializeEXT_frag_depth) {
SetupInitExpectations("GL_EXT_frag_depth");
EXPECT_TRUE(info_->feature_flags().ext_frag_depth);
EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_frag_depth"));
}
+TEST_F(FeatureInfoTest, InitializeEXT_shader_texture_lod) {
+ SetupInitExpectations("GL_EXT_shader_texture_lod");
+ EXPECT_TRUE(info_->feature_flags().ext_shader_texture_lod);
+ EXPECT_THAT(info_->extensions(), HasSubstr("GL_EXT_shader_texture_lod"));
+}
+
TEST_F(FeatureInfoTest, InitializeEXT_discard_framebuffer) {
SetupInitExpectations("GL_EXT_discard_framebuffer");
EXPECT_TRUE(info_->feature_flags().ext_discard_framebuffer);
@@ -927,7 +987,7 @@ TEST_F(FeatureInfoTest, InitializeWithES3) {
EXPECT_TRUE(info_->feature_flags().use_core_framebuffer_multisample);
EXPECT_THAT(info_->extensions(),
HasSubstr("GL_CHROMIUM_framebuffer_multisample"));
- EXPECT_FALSE(info_->feature_flags().use_async_readpixels);
+ EXPECT_TRUE(info_->feature_flags().use_async_readpixels);
EXPECT_TRUE(info_->feature_flags().oes_depth24);
EXPECT_THAT(info_->extensions(), HasSubstr("GL_GOOGLE_depth_texture"));
EXPECT_THAT(info_->extensions(), HasSubstr("GL_CHROMIUM_depth_texture"));
diff --git a/chromium/gpu/command_buffer/service/framebuffer_manager.cc b/chromium/gpu/command_buffer/service/framebuffer_manager.cc
index 48e503cb45b..4022b3defaa 100644
--- a/chromium/gpu/command_buffer/service/framebuffer_manager.cc
+++ b/chromium/gpu/command_buffer/service/framebuffer_manager.cc
@@ -119,6 +119,9 @@ class RenderbufferAttachment
renderbuffer_->AddToSignature(signature);
}
+ virtual void OnWillRenderTo() const OVERRIDE {}
+ virtual void OnDidRenderTo() const OVERRIDE {}
+
protected:
virtual ~RenderbufferAttachment() { }
@@ -243,6 +246,14 @@ class TextureAttachment
texture_ref_.get(), target_, level_, signature);
}
+ virtual void OnWillRenderTo() const OVERRIDE {
+ texture_ref_->texture()->OnWillModifyPixels();
+ }
+
+ virtual void OnDidRenderTo() const OVERRIDE {
+ texture_ref_->texture()->OnDidModifyPixels();
+ }
+
protected:
virtual ~TextureAttachment() {}
@@ -349,6 +360,55 @@ bool Framebuffer::HasUnclearedAttachment(
return false;
}
+bool Framebuffer::HasUnclearedColorAttachments() const {
+ for (AttachmentMap::const_iterator it = attachments_.begin();
+ it != attachments_.end(); ++it) {
+ if (it->first >= GL_COLOR_ATTACHMENT0 &&
+ it->first < GL_COLOR_ATTACHMENT0 + manager_->max_draw_buffers_) {
+ const Attachment* attachment = it->second.get();
+ if (!attachment->cleared())
+ return true;
+ }
+ }
+ return false;
+}
+
+void Framebuffer::ChangeDrawBuffersHelper(bool recover) const {
+ scoped_ptr<GLenum[]> buffers(new GLenum[manager_->max_draw_buffers_]);
+ for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i)
+ buffers[i] = GL_NONE;
+ for (AttachmentMap::const_iterator it = attachments_.begin();
+ it != attachments_.end(); ++it) {
+ if (it->first >= GL_COLOR_ATTACHMENT0 &&
+ it->first < GL_COLOR_ATTACHMENT0 + manager_->max_draw_buffers_) {
+ buffers[it->first - GL_COLOR_ATTACHMENT0] = it->first;
+ }
+ }
+ bool different = false;
+ for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) {
+ if (buffers[i] != draw_buffers_[i]) {
+ different = true;
+ break;
+ }
+ }
+ if (different) {
+ if (recover)
+ glDrawBuffersARB(manager_->max_draw_buffers_, draw_buffers_.get());
+ else
+ glDrawBuffersARB(manager_->max_draw_buffers_, buffers.get());
+ }
+}
+
+void Framebuffer::PrepareDrawBuffersForClear() const {
+ bool recover = false;
+ ChangeDrawBuffersHelper(recover);
+}
+
+void Framebuffer::RestoreDrawBuffersAfterClear() const {
+ bool recover = true;
+ ChangeDrawBuffersHelper(recover);
+}
+
void Framebuffer::MarkAttachmentAsCleared(
RenderbufferManager* renderbuffer_manager,
TextureManager* texture_manager,
@@ -505,6 +565,8 @@ void Framebuffer::SetDrawBuffers(GLsizei n, const GLenum* bufs) {
draw_buffers_[i] = bufs[i];
}
+
+
bool Framebuffer::HasAlphaMRT() const {
for (uint32 i = 0; i < manager_->max_draw_buffers_; ++i) {
if (draw_buffers_[i] != GL_NONE) {
@@ -615,6 +677,20 @@ void Framebuffer::OnTextureRefDetached(TextureRef* texture) {
manager_->OnTextureRefDetached(texture);
}
+void Framebuffer::OnWillRenderTo() const {
+ for (AttachmentMap::const_iterator it = attachments_.begin();
+ it != attachments_.end(); ++it) {
+ it->second->OnWillRenderTo();
+ }
+}
+
+void Framebuffer::OnDidRenderTo() const {
+ for (AttachmentMap::const_iterator it = attachments_.begin();
+ it != attachments_.end(); ++it) {
+ it->second->OnDidRenderTo();
+ }
+}
+
bool FramebufferManager::GetClientId(
GLuint service_id, GLuint* client_id) const {
// This doesn't need to be fast. It's only used during slow queries.
diff --git a/chromium/gpu/command_buffer/service/framebuffer_manager.h b/chromium/gpu/command_buffer/service/framebuffer_manager.h
index c469bf87435..b68ab7d9f12 100644
--- a/chromium/gpu/command_buffer/service/framebuffer_manager.h
+++ b/chromium/gpu/command_buffer/service/framebuffer_manager.h
@@ -49,6 +49,8 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> {
GLenum attachment_type, uint32 max_color_attachments) = 0;
virtual void AddToSignature(
TextureManager* texture_manager, std::string* signature) const = 0;
+ virtual void OnWillRenderTo() const = 0;
+ virtual void OnDidRenderTo() const = 0;
protected:
friend class base::RefCounted<Attachment>;
@@ -62,6 +64,7 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> {
}
bool HasUnclearedAttachment(GLenum attachment) const;
+ bool HasUnclearedColorAttachments() const;
void MarkAttachmentAsCleared(
RenderbufferManager* renderbuffer_manager,
@@ -127,6 +130,14 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> {
void SetDrawBuffers(GLsizei n, const GLenum* bufs);
+ // If a color buffer is attached to GL_COLOR_ATTACHMENTi, enable that
+ // draw buffer for glClear().
+ void PrepareDrawBuffersForClear() const;
+
+ // Restore draw buffers states that have been changed in
+ // PrepareDrawBuffersForClear().
+ void RestoreDrawBuffersAfterClear() const;
+
// Return true if any draw buffers has an alpha channel.
bool HasAlphaMRT() const;
@@ -137,6 +148,8 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> {
}
void OnTextureRefDetached(TextureRef* texture);
+ void OnWillRenderTo() const;
+ void OnDidRenderTo() const;
private:
friend class FramebufferManager;
@@ -159,6 +172,10 @@ class GPU_EXPORT Framebuffer : public base::RefCounted<Framebuffer> {
return framebuffer_complete_state_count_id_;
}
+ // Helper function for PrepareDrawBuffersForClear() and
+ // RestoreDrawBuffersAfterClear().
+ void ChangeDrawBuffersHelper(bool recover) const;
+
// The managers that owns this.
FramebufferManager* manager_;
diff --git a/chromium/gpu/command_buffer/service/framebuffer_manager_unittest.cc b/chromium/gpu/command_buffer/service/framebuffer_manager_unittest.cc
index 079325807d4..1ded5585e45 100644
--- a/chromium/gpu/command_buffer/service/framebuffer_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/framebuffer_manager_unittest.cc
@@ -5,12 +5,14 @@
#include "gpu/command_buffer/service/error_state_mock.h"
#include "gpu/command_buffer/service/framebuffer_manager.h"
#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/renderbuffer_manager.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
+using ::testing::_;
using ::testing::Return;
namespace gpu {
@@ -21,20 +23,26 @@ const GLint kMaxTextureSize = 64;
const GLint kMaxCubemapSize = 64;
const GLint kMaxRenderbufferSize = 64;
const GLint kMaxSamples = 4;
+const uint32 kMaxDrawBuffers = 16;
+const uint32 kMaxColorAttachments = 16;
const bool kDepth24Supported = false;
+const bool kUseDefaultTextures = false;
} // namespace
-class FramebufferManagerTest : public testing::Test {
+class FramebufferManagerTest : public GpuServiceTest {
public:
FramebufferManagerTest()
: manager_(1, 1),
- texture_manager_(
- NULL, new FeatureInfo(), kMaxTextureSize, kMaxCubemapSize),
- renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples,
- kDepth24Supported) {
-
- }
+ texture_manager_(NULL,
+ new FeatureInfo(),
+ kMaxTextureSize,
+ kMaxCubemapSize,
+ kUseDefaultTextures),
+ renderbuffer_manager_(NULL,
+ kMaxRenderbufferSize,
+ kMaxSamples,
+ kDepth24Supported) {}
virtual ~FramebufferManagerTest() {
manager_.Destroy(false);
texture_manager_.Destroy(false);
@@ -42,18 +50,7 @@ class FramebufferManagerTest : public testing::Test {
}
protected:
- virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
- }
-
- virtual void TearDown() {
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
- }
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
FramebufferManager manager_;
TextureManager texture_manager_;
RenderbufferManager renderbuffer_manager_;
@@ -103,44 +100,48 @@ TEST_F(FramebufferManagerTest, Destroy) {
ASSERT_TRUE(framebuffer1 == NULL);
}
-class FramebufferInfoTest : public testing::Test {
+class FramebufferInfoTest : public GpuServiceTest {
public:
static const GLuint kClient1Id = 1;
static const GLuint kService1Id = 11;
FramebufferInfoTest()
- : manager_(1, 1),
- texture_manager_(
- NULL, new FeatureInfo(), kMaxTextureSize, kMaxCubemapSize),
+ : manager_(kMaxDrawBuffers, kMaxColorAttachments),
+ feature_info_(new FeatureInfo()),
renderbuffer_manager_(NULL, kMaxRenderbufferSize, kMaxSamples,
kDepth24Supported) {
+ texture_manager_.reset(new TextureManager(NULL,
+ feature_info_.get(),
+ kMaxTextureSize,
+ kMaxCubemapSize,
+ kUseDefaultTextures));
}
virtual ~FramebufferInfoTest() {
manager_.Destroy(false);
- texture_manager_.Destroy(false);
+ texture_manager_->Destroy(false);
renderbuffer_manager_.Destroy(false);
}
protected:
virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ InitializeContext("", "");
+ }
+
+ void InitializeContext(const char* gl_version, const char* extensions) {
+ GpuServiceTest::SetUp();
+ TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(gl_.get(),
+ extensions, "", gl_version);
+ feature_info_->Initialize();
manager_.CreateFramebuffer(kClient1Id, kService1Id);
error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
framebuffer_ = manager_.GetFramebuffer(kClient1Id);
ASSERT_TRUE(framebuffer_ != NULL);
}
- virtual void TearDown() {
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
- }
-
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
FramebufferManager manager_;
Framebuffer* framebuffer_;
- TextureManager texture_manager_;
+ scoped_refptr<FeatureInfo> feature_info_;
+ scoped_ptr<TextureManager> texture_manager_;
RenderbufferManager renderbuffer_manager_;
scoped_ptr<MockErrorState> error_state_;
};
@@ -268,7 +269,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
// check marking them as cleared.
manager_.MarkAttachmentsAsCleared(
- framebuffer_, &renderbuffer_manager_, &texture_manager_);
+ framebuffer_, &renderbuffer_manager_, texture_manager_.get());
EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
@@ -319,7 +320,7 @@ TEST_F(FramebufferInfoTest, AttachRenderbuffer) {
// Clear it.
manager_.MarkAttachmentsAsCleared(
- framebuffer_, &renderbuffer_manager_, &texture_manager_);
+ framebuffer_, &renderbuffer_manager_, texture_manager_.get());
EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
EXPECT_TRUE(framebuffer_->IsCleared());
@@ -419,9 +420,9 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT),
framebuffer_->IsPossiblyComplete());
- texture_manager_.CreateTexture(kTextureClient1Id, kTextureService1Id);
+ texture_manager_->CreateTexture(kTextureClient1Id, kTextureService1Id);
scoped_refptr<TextureRef> texture1(
- texture_manager_.GetTexture(kTextureClient1Id));
+ texture_manager_->GetTexture(kTextureClient1Id));
ASSERT_TRUE(texture1.get() != NULL);
// check adding one attachment
@@ -434,8 +435,8 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat());
// Try format that doesn't work with COLOR_ATTACHMENT0
- texture_manager_.SetTarget(texture1.get(), GL_TEXTURE_2D);
- texture_manager_.SetLevelInfo(texture1.get(),
+ texture_manager_->SetTarget(texture1.get(), GL_TEXTURE_2D);
+ texture_manager_->SetLevelInfo(texture1.get(),
GL_TEXTURE_2D,
kLevel1,
kBadFormat1,
@@ -450,7 +451,7 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
framebuffer_->IsPossiblyComplete());
// Try a good format.
- texture_manager_.SetLevelInfo(texture1.get(),
+ texture_manager_->SetLevelInfo(texture1.get(),
GL_TEXTURE_2D,
kLevel1,
kFormat1,
@@ -464,7 +465,7 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
framebuffer_->IsPossiblyComplete());
EXPECT_FALSE(framebuffer_->IsCleared());
- texture_manager_.SetLevelInfo(texture1.get(),
+ texture_manager_->SetLevelInfo(texture1.get(),
GL_TEXTURE_2D,
kLevel1,
kFormat1,
@@ -491,12 +492,12 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
EXPECT_TRUE(attachment->cleared());
// Check replacing an attachment
- texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id);
+ texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id);
scoped_refptr<TextureRef> texture2(
- texture_manager_.GetTexture(kTextureClient2Id));
+ texture_manager_->GetTexture(kTextureClient2Id));
ASSERT_TRUE(texture2.get() != NULL);
- texture_manager_.SetTarget(texture2.get(), GL_TEXTURE_2D);
- texture_manager_.SetLevelInfo(texture2.get(),
+ texture_manager_->SetTarget(texture2.get(), GL_TEXTURE_2D);
+ texture_manager_->SetLevelInfo(texture2.get(),
GL_TEXTURE_2D,
kLevel2,
kFormat2,
@@ -525,7 +526,7 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
EXPECT_TRUE(attachment->cleared());
// Check changing attachment
- texture_manager_.SetLevelInfo(texture2.get(),
+ texture_manager_->SetLevelInfo(texture2.get(),
GL_TEXTURE_2D,
kLevel3,
kFormat3,
@@ -550,7 +551,7 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
EXPECT_FALSE(framebuffer_->IsCleared());
// Set to size 0
- texture_manager_.SetLevelInfo(texture2.get(),
+ texture_manager_->SetLevelInfo(texture2.get(),
GL_TEXTURE_2D,
kLevel3,
kFormat3,
@@ -574,6 +575,158 @@ TEST_F(FramebufferInfoTest, AttachTexture) {
EXPECT_TRUE(framebuffer_->IsCleared());
}
+TEST_F(FramebufferInfoTest, DrawBuffers) {
+ const GLuint kTextureClientId[] = { 33, 34 };
+ const GLuint kTextureServiceId[] = { 333, 334 };
+
+ for (GLenum i = GL_COLOR_ATTACHMENT0;
+ i < GL_COLOR_ATTACHMENT0 + kMaxColorAttachments; ++i) {
+ EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(i));
+ }
+ EXPECT_FALSE(framebuffer_->HasUnclearedColorAttachments());
+
+ EXPECT_EQ(static_cast<GLenum>(GL_COLOR_ATTACHMENT0),
+ framebuffer_->GetDrawBuffer(GL_DRAW_BUFFER0_ARB));
+ for (GLenum i = GL_DRAW_BUFFER1_ARB;
+ i < GL_DRAW_BUFFER0_ARB + kMaxDrawBuffers; ++i) {
+ EXPECT_EQ(static_cast<GLenum>(GL_NONE),
+ framebuffer_->GetDrawBuffer(i));
+ }
+
+ for (size_t ii = 0; ii < arraysize(kTextureClientId); ++ii) {
+ texture_manager_->CreateTexture(
+ kTextureClientId[ii], kTextureServiceId[ii]);
+ scoped_refptr<TextureRef> texture(
+ texture_manager_->GetTexture(kTextureClientId[ii]));
+ ASSERT_TRUE(texture.get() != NULL);
+
+ framebuffer_->AttachTexture(
+ GL_COLOR_ATTACHMENT0 + ii, texture.get(), GL_TEXTURE_2D, 0, 0);
+ EXPECT_FALSE(
+ framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0 + ii));
+
+ const Framebuffer::Attachment* attachment =
+ framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT0 + ii);
+ ASSERT_TRUE(attachment != NULL);
+ EXPECT_TRUE(attachment->cleared());
+ }
+ EXPECT_TRUE(framebuffer_->IsCleared());
+ EXPECT_FALSE(framebuffer_->HasUnclearedColorAttachments());
+
+ // Set a texture as uncleared.
+ scoped_refptr<TextureRef> texture1(
+ texture_manager_->GetTexture(kTextureClientId[1]));
+ texture_manager_->SetTarget(texture1.get(), GL_TEXTURE_2D);
+ texture_manager_->SetLevelInfo(
+ texture1.get(), GL_TEXTURE_2D, 0, GL_RGBA, 4, 4,
+ 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, false);
+
+ const Framebuffer::Attachment* attachment1 =
+ framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT1);
+ ASSERT_TRUE(attachment1 != NULL);
+ EXPECT_FALSE(attachment1->cleared());
+ EXPECT_FALSE(framebuffer_->IsCleared());
+ EXPECT_TRUE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT1));
+ EXPECT_TRUE(framebuffer_->HasUnclearedColorAttachments());
+
+ GLenum buffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
+ framebuffer_->SetDrawBuffers(2, buffers);
+ EXPECT_EQ(static_cast<GLenum>(GL_COLOR_ATTACHMENT0),
+ framebuffer_->GetDrawBuffer(GL_DRAW_BUFFER0_ARB));
+ EXPECT_EQ(static_cast<GLenum>(GL_COLOR_ATTACHMENT1),
+ framebuffer_->GetDrawBuffer(GL_DRAW_BUFFER1_ARB));
+ for (GLenum i = GL_DRAW_BUFFER2_ARB;
+ i < GL_DRAW_BUFFER0_ARB + kMaxDrawBuffers; ++i) {
+ EXPECT_EQ(static_cast<GLenum>(GL_NONE),
+ framebuffer_->GetDrawBuffer(i));
+ }
+
+ // Nothing happens.
+ framebuffer_->PrepareDrawBuffersForClear();
+ framebuffer_->RestoreDrawBuffersAfterClear();
+
+ // Now we disable a draw buffer 1.
+ buffers[1] = GL_NONE;
+ framebuffer_->SetDrawBuffers(2, buffers);
+ // We will enable the disabled draw buffer for clear(), and disable it
+ // after the clear.
+ EXPECT_CALL(*gl_, DrawBuffersARB(kMaxDrawBuffers, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ framebuffer_->PrepareDrawBuffersForClear();
+ EXPECT_CALL(*gl_, DrawBuffersARB(kMaxDrawBuffers, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ framebuffer_->RestoreDrawBuffersAfterClear();
+
+ // Now remove draw buffer 1's attachment.
+ framebuffer_->AttachTexture(GL_COLOR_ATTACHMENT1, NULL, 0, 0, 0);
+ EXPECT_TRUE(framebuffer_->GetAttachment(GL_COLOR_ATTACHMENT1) == NULL);
+
+ // Nothing happens.
+ framebuffer_->PrepareDrawBuffersForClear();
+ framebuffer_->RestoreDrawBuffersAfterClear();
+}
+
+class FramebufferInfoFloatTest : public FramebufferInfoTest {
+ public:
+ FramebufferInfoFloatTest()
+ : FramebufferInfoTest() {
+ }
+ virtual ~FramebufferInfoFloatTest() {
+ }
+
+ protected:
+ virtual void SetUp() {
+ InitializeContext("OpenGL ES 3.0",
+ "GL_OES_texture_float GL_EXT_color_buffer_float");
+ }
+};
+
+TEST_F(FramebufferInfoFloatTest, AttachFloatTexture) {
+ const GLuint kTextureClientId = 33;
+ const GLuint kTextureServiceId = 333;
+ const GLint kDepth = 1;
+ const GLint kBorder = 0;
+ const GLenum kType = GL_FLOAT;
+ const GLsizei kWidth = 16;
+ const GLsizei kHeight = 32;
+ const GLint kLevel = 0;
+ const GLenum kFormat = GL_RGBA;
+ const GLenum kInternalFormat = GL_RGBA32F;
+ const GLenum kTarget = GL_TEXTURE_2D;
+ const GLsizei kSamples = 0;
+ EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0));
+ EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT));
+ EXPECT_FALSE(framebuffer_->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT));
+
+ texture_manager_->CreateTexture(kTextureClientId, kTextureServiceId);
+ scoped_refptr<TextureRef> texture(
+ texture_manager_->GetTexture(kTextureClientId));
+ ASSERT_TRUE(texture.get() != NULL);
+
+ framebuffer_->AttachTexture(
+ GL_COLOR_ATTACHMENT0, texture.get(), kTarget, kLevel, kSamples);
+ EXPECT_EQ(static_cast<GLenum>(0), framebuffer_->GetColorAttachmentFormat());
+
+ texture_manager_->SetTarget(texture.get(), GL_TEXTURE_2D);
+ texture_manager_->SetLevelInfo(texture.get(),
+ GL_TEXTURE_2D,
+ kLevel,
+ kInternalFormat,
+ kWidth,
+ kHeight,
+ kDepth,
+ kBorder,
+ kFormat,
+ kType,
+ false);
+ // Texture with a sized float internalformat is allowed as an attachment
+ // since float color attachment extension is present.
+ EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
+ framebuffer_->IsPossiblyComplete());
+}
+
TEST_F(FramebufferInfoTest, UnbindRenderbuffer) {
const GLuint kRenderbufferClient1Id = 33;
const GLuint kRenderbufferService1Id = 333;
@@ -618,13 +771,13 @@ TEST_F(FramebufferInfoTest, UnbindTexture) {
const GLint kLevel1 = 0;
const GLint kSamples1 = 0;
- texture_manager_.CreateTexture(kTextureClient1Id, kTextureService1Id);
+ texture_manager_->CreateTexture(kTextureClient1Id, kTextureService1Id);
scoped_refptr<TextureRef> texture1(
- texture_manager_.GetTexture(kTextureClient1Id));
+ texture_manager_->GetTexture(kTextureClient1Id));
ASSERT_TRUE(texture1.get() != NULL);
- texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id);
+ texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id);
scoped_refptr<TextureRef> texture2(
- texture_manager_.GetTexture(kTextureClient2Id));
+ texture_manager_->GetTexture(kTextureClient2Id));
ASSERT_TRUE(texture2.get() != NULL);
// Attach to 2 attachment points.
@@ -661,9 +814,9 @@ TEST_F(FramebufferInfoTest, IsCompleteMarkAsComplete) {
Renderbuffer* renderbuffer1 =
renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id);
ASSERT_TRUE(renderbuffer1 != NULL);
- texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id);
+ texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id);
scoped_refptr<TextureRef> texture2(
- texture_manager_.GetTexture(kTextureClient2Id));
+ texture_manager_->GetTexture(kTextureClient2Id));
ASSERT_TRUE(texture2.get() != NULL);
// Check MarkAsComlete marks as complete.
@@ -681,7 +834,7 @@ TEST_F(FramebufferInfoTest, IsCompleteMarkAsComplete) {
// Check MarkAttachmentsAsCleared marks as complete.
manager_.MarkAttachmentsAsCleared(
- framebuffer_, &renderbuffer_manager_, &texture_manager_);
+ framebuffer_, &renderbuffer_manager_, texture_manager_.get());
EXPECT_TRUE(manager_.IsComplete(framebuffer_));
// Check Unbind marks as not complete.
@@ -707,16 +860,16 @@ TEST_F(FramebufferInfoTest, GetStatus) {
Renderbuffer* renderbuffer1 =
renderbuffer_manager_.GetRenderbuffer(kRenderbufferClient1Id);
ASSERT_TRUE(renderbuffer1 != NULL);
- texture_manager_.CreateTexture(kTextureClient2Id, kTextureService2Id);
+ texture_manager_->CreateTexture(kTextureClient2Id, kTextureService2Id);
scoped_refptr<TextureRef> texture2(
- texture_manager_.GetTexture(kTextureClient2Id));
+ texture_manager_->GetTexture(kTextureClient2Id));
ASSERT_TRUE(texture2.get() != NULL);
- texture_manager_.SetTarget(texture2.get(), GL_TEXTURE_2D);
+ texture_manager_->SetTarget(texture2.get(), GL_TEXTURE_2D);
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
- framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER);
// Check a second call for the same type does not call anything
if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
@@ -724,14 +877,14 @@ TEST_F(FramebufferInfoTest, GetStatus) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
}
- framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER);
// Check changing the attachments calls CheckFramebufferStatus.
framebuffer_->AttachTexture(
GL_COLOR_ATTACHMENT0, texture2.get(), kTarget1, kLevel1, kSamples1);
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE)).RetiresOnSaturation();
- framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER);
// Check a second call for the same type does not call anything.
if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
@@ -739,13 +892,13 @@ TEST_F(FramebufferInfoTest, GetStatus) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
}
- framebuffer_->GetStatus(&texture_manager_, GL_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_FRAMEBUFFER);
// Check a second call with a different target calls CheckFramebufferStatus.
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
- framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
// Check a second call for the same type does not call anything.
if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
@@ -753,14 +906,14 @@ TEST_F(FramebufferInfoTest, GetStatus) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
}
- framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
// Check adding another attachment calls CheckFramebufferStatus.
framebuffer_->AttachRenderbuffer(GL_DEPTH_ATTACHMENT, renderbuffer1);
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
- framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
// Check a second call for the same type does not call anything.
if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
@@ -768,26 +921,26 @@ TEST_F(FramebufferInfoTest, GetStatus) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
}
- framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
// Check changing the format calls CheckFramebuffferStatus.
- TestHelper::SetTexParameterWithExpectations(gl_.get(),
- error_state_.get(),
- &texture_manager_,
- texture2.get(),
- GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE,
- GL_NO_ERROR);
+ TestHelper::SetTexParameteriWithExpectations(gl_.get(),
+ error_state_.get(),
+ texture_manager_.get(),
+ texture2.get(),
+ GL_TEXTURE_WRAP_S,
+ GL_CLAMP_TO_EDGE,
+ GL_NO_ERROR);
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
.WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT))
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
- framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
// Check since it did not return FRAMEBUFFER_COMPLETE that it calls
// CheckFramebufferStatus
- framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
// Check putting it back does not call CheckFramebufferStatus.
if (!framebuffer_->AllowFramebufferComboCompleteMapForTesting()) {
@@ -795,14 +948,14 @@ TEST_F(FramebufferInfoTest, GetStatus) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
}
- TestHelper::SetTexParameterWithExpectations(gl_.get(),
- error_state_.get(),
- &texture_manager_,
- texture2.get(),
- GL_TEXTURE_WRAP_S,
- GL_REPEAT,
- GL_NO_ERROR);
- framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER);
+ TestHelper::SetTexParameteriWithExpectations(gl_.get(),
+ error_state_.get(),
+ texture_manager_.get(),
+ texture2.get(),
+ GL_TEXTURE_WRAP_S,
+ GL_REPEAT,
+ GL_NO_ERROR);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
// Check Unbinding does not call CheckFramebufferStatus
framebuffer_->UnbindRenderbuffer(GL_RENDERBUFFER, renderbuffer1);
@@ -811,7 +964,7 @@ TEST_F(FramebufferInfoTest, GetStatus) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
}
- framebuffer_->GetStatus(&texture_manager_, GL_READ_FRAMEBUFFER);
+ framebuffer_->GetStatus(texture_manager_.get(), GL_READ_FRAMEBUFFER);
}
} // namespace gles2
diff --git a/chromium/gpu/command_buffer/service/gl_state_restorer_impl.cc b/chromium/gpu/command_buffer/service/gl_state_restorer_impl.cc
index 7b3c5ed3841..5fbd425f695 100644
--- a/chromium/gpu/command_buffer/service/gl_state_restorer_impl.cc
+++ b/chromium/gpu/command_buffer/service/gl_state_restorer_impl.cc
@@ -21,14 +21,22 @@ bool GLStateRestorerImpl::IsInitialized() {
return decoder_->initialized();
}
-void GLStateRestorerImpl::RestoreState() {
+void GLStateRestorerImpl::RestoreState(const gfx::GLStateRestorer* prev_state) {
DCHECK(decoder_.get());
- decoder_->RestoreState();
+ const GLStateRestorerImpl* restorer_impl =
+ static_cast<const GLStateRestorerImpl*>(prev_state);
+ decoder_->RestoreState(
+ restorer_impl ? restorer_impl->GetContextState() : NULL);
}
void GLStateRestorerImpl::RestoreAllTextureUnitBindings() {
DCHECK(decoder_.get());
- decoder_->RestoreAllTextureUnitBindings();
+ decoder_->RestoreAllTextureUnitBindings(NULL);
+}
+
+void GLStateRestorerImpl::RestoreActiveTextureUnitBinding(unsigned int target) {
+ DCHECK(decoder_.get());
+ decoder_->RestoreActiveTextureUnitBinding(target);
}
void GLStateRestorerImpl::RestoreFramebufferBindings() {
@@ -36,4 +44,9 @@ void GLStateRestorerImpl::RestoreFramebufferBindings() {
decoder_->RestoreFramebufferBindings();
}
+const gles2::ContextState* GLStateRestorerImpl::GetContextState() const {
+ DCHECK(decoder_.get());
+ return decoder_->GetContextState();
+}
+
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gl_state_restorer_impl.h b/chromium/gpu/command_buffer/service/gl_state_restorer_impl.h
index 032bf725186..73534b81ad3 100644
--- a/chromium/gpu/command_buffer/service/gl_state_restorer_impl.h
+++ b/chromium/gpu/command_buffer/service/gl_state_restorer_impl.h
@@ -15,6 +15,7 @@
namespace gpu {
namespace gles2 {
class GLES2Decoder;
+struct ContextState;
}
// This class implements a GLStateRestorer that forwards to a GLES2Decoder.
@@ -24,11 +25,13 @@ class GPU_EXPORT GLStateRestorerImpl : public gfx::GLStateRestorer {
virtual ~GLStateRestorerImpl();
virtual bool IsInitialized() OVERRIDE;
- virtual void RestoreState() OVERRIDE;
+ virtual void RestoreState(const gfx::GLStateRestorer* prev_state) OVERRIDE;
virtual void RestoreAllTextureUnitBindings() OVERRIDE;
+ virtual void RestoreActiveTextureUnitBinding(unsigned int target) OVERRIDE;
virtual void RestoreFramebufferBindings() OVERRIDE;
private:
+ const gles2::ContextState* GetContextState() const;
base::WeakPtr<gles2::GLES2Decoder> decoder_;
DISALLOW_COPY_AND_ASSIGN(GLStateRestorerImpl);
diff --git a/chromium/gpu/command_buffer/service/gl_surface_mock.h b/chromium/gpu/command_buffer/service/gl_surface_mock.h
index 372a9b3f41d..0652be64de3 100644
--- a/chromium/gpu/command_buffer/service/gl_surface_mock.h
+++ b/chromium/gpu/command_buffer/service/gl_surface_mock.h
@@ -20,7 +20,7 @@ class GLSurfaceMock : public gfx::GLSurface {
MOCK_METHOD0(IsOffscreen, bool());
MOCK_METHOD0(SwapBuffers, bool());
MOCK_METHOD4(PostSubBuffer, bool(int x, int y, int width, int height));
- MOCK_METHOD0(GetExtensions, std::string());
+ MOCK_METHOD0(SupportsPostSubBuffer, bool());
MOCK_METHOD0(GetSize, gfx::Size());
MOCK_METHOD0(GetHandle, void*());
MOCK_METHOD0(GetBackingFrameBufferObject, unsigned int());
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc b/chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
index 36f2b42bd6c..bda65ac6a60 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.cc
@@ -4,214 +4,186 @@
#include "gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.h"
-#include <string.h>
+#include <algorithm>
+
#include "base/basictypes.h"
-#include "gpu/command_buffer/common/types.h"
#include "gpu/command_buffer/service/gl_utils.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
-#define SHADER0(src) \
- "#ifdef GL_ES\n"\
- "precision mediump float;\n"\
- "#endif\n"\
- #src
-#define SHADER(src) { false, SHADER0(src), }
-#define SHADER_EXTERNAL_OES0(src) \
- "#extension GL_OES_EGL_image_external : require\n"\
- "#ifdef GL_ES\n"\
- "precision mediump float;\n"\
- "#endif\n"\
- #src
-#define SHADER_EXTERNAL_OES(src) { true, SHADER_EXTERNAL_OES0(src), }
+#define SHADER(src) \
+ "#ifdef GL_ES\n" \
+ "precision mediump float;\n" \
+ "#define TexCoordPrecision mediump\n" \
+ "#else\n" \
+ "#define TexCoordPrecision\n" \
+ "#endif\n" #src
+#define SHADER_2D(src) \
+ "#define SamplerType sampler2D\n" \
+ "#define TextureLookup texture2D\n" SHADER(src)
+#define SHADER_RECTANGLE_ARB(src) \
+ "#define SamplerType samplerRect\n" \
+ "#define TextureLookup textureRect\n" SHADER(src)
+#define SHADER_EXTERNAL_OES(src) \
+ "#extension GL_OES_EGL_image_external : require\n" \
+ "#define SamplerType samplerExternalOES\n" \
+ "#define TextureLookup texture2D\n" SHADER(src)
+#define FRAGMENT_SHADERS(src) \
+ SHADER_2D(src), SHADER_RECTANGLE_ARB(src), SHADER_EXTERNAL_OES(src)
namespace {
-const GLfloat kQuadVertices[] = { -1.0f, -1.0f, 0.0f, 1.0f,
- 1.0f, -1.0f, 0.0f, 1.0f,
- 1.0f, 1.0f, 0.0f, 1.0f,
- -1.0f, 1.0f, 0.0f, 1.0f };
-
-enum ProgramId {
- PROGRAM_COPY_TEXTURE,
- PROGRAM_COPY_TEXTURE_FLIP_Y,
- PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA,
- PROGRAM_COPY_TEXTURE_UNPREMULTIPLY_ALPHA,
- PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA_FLIPY,
- PROGRAM_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_FLIPY,
- PROGRAM_COPY_TEXTURE_OES,
- PROGRAM_COPY_TEXTURE_OES_FLIP_Y,
- PROGRAM_COPY_TEXTURE_OES_PREMULTIPLY_ALPHA,
- PROGRAM_COPY_TEXTURE_OES_UNPREMULTIPLY_ALPHA,
- PROGRAM_COPY_TEXTURE_OES_PREMULTIPLY_ALPHA_FLIPY,
- PROGRAM_COPY_TEXTURE_OES_UNPREMULTIPLY_ALPHA_FLIPY,
+enum VertexShaderId {
+ VERTEX_SHADER_COPY_TEXTURE,
+ VERTEX_SHADER_COPY_TEXTURE_FLIP_Y,
+ NUM_VERTEX_SHADERS,
};
-struct ShaderInfo {
- bool needs_egl_image_external;
- const char* source;
+enum FragmentShaderId {
+ FRAGMENT_SHADER_COPY_TEXTURE_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_RECTANGLE_ARB,
+ FRAGMENT_SHADER_COPY_TEXTURE_EXTERNAL_OES,
+ FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_RECTANGLE_ARB,
+ FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_EXTERNAL_OES,
+ FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_RECTANGLE_ARB,
+ FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_EXTERNAL_OES,
+ NUM_FRAGMENT_SHADERS,
};
-const ShaderInfo shader_infos[] = {
- // VERTEX_SHADER_POS_TEX
+const char* vertex_shader_source[NUM_VERTEX_SHADERS] = {
+ // VERTEX_SHADER_COPY_TEXTURE
SHADER(
uniform mat4 u_matrix;
+ uniform vec2 u_half_size;
attribute vec4 a_position;
- varying vec2 v_uv;
+ varying TexCoordPrecision vec2 v_uv;
void main(void) {
gl_Position = u_matrix * a_position;
- v_uv = a_position.xy * 0.5 + vec2(0.5, 0.5);
+ v_uv = a_position.xy * vec2(u_half_size.s, u_half_size.t) +
+ vec2(u_half_size.s, u_half_size.t);
}),
- // FRAGMENT_SHADER_TEX
+ // VERTEX_SHADER_COPY_TEXTURE_FLIP_Y
SHADER(
- uniform sampler2D u_texSampler;
- varying vec2 v_uv;
- void main(void) {
- gl_FragColor = texture2D(u_texSampler, v_uv.st);
- }),
- // FRAGMENT_SHADER_TEX_FLIP_Y
- SHADER(
- uniform sampler2D u_texSampler;
- varying vec2 v_uv;
- void main(void) {
- gl_FragColor = texture2D(u_texSampler, vec2(v_uv.s, 1.0 - v_uv.t));
- }),
- // FRAGMENT_SHADER_TEX_PREMULTIPLY_ALPHA
- SHADER(
- uniform sampler2D u_texSampler;
- varying vec2 v_uv;
+ uniform mat4 u_matrix;
+ uniform vec2 u_half_size;
+ attribute vec4 a_position;
+ varying TexCoordPrecision vec2 v_uv;
void main(void) {
- gl_FragColor = texture2D(u_texSampler, v_uv.st);
- gl_FragColor.rgb *= gl_FragColor.a;
+ gl_Position = u_matrix * a_position;
+ v_uv = a_position.xy * vec2(u_half_size.s, -u_half_size.t) +
+ vec2(u_half_size.s, u_half_size.t);
}),
- // FRAGMENT_SHADER_TEX_UNPREMULTIPLY_ALPHA
- SHADER(
- uniform sampler2D u_texSampler;
- varying vec2 v_uv;
+};
+
+const char* fragment_shader_source[NUM_FRAGMENT_SHADERS] = {
+ // FRAGMENT_SHADER_COPY_TEXTURE_*
+ FRAGMENT_SHADERS(
+ uniform SamplerType u_sampler;
+ varying TexCoordPrecision vec2 v_uv;
void main(void) {
- gl_FragColor = texture2D(u_texSampler, v_uv.st);
- if (gl_FragColor.a > 0.0)
- gl_FragColor.rgb /= gl_FragColor.a;
+ gl_FragColor = TextureLookup(u_sampler, v_uv.st);
}),
- // FRAGMENT_SHADER_TEX_PREMULTIPLY_ALPHA_FLIP_Y
- SHADER(
- uniform sampler2D u_texSampler;
- varying vec2 v_uv;
+ // FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_*
+ FRAGMENT_SHADERS(
+ uniform SamplerType u_sampler;
+ varying TexCoordPrecision vec2 v_uv;
void main(void) {
- gl_FragColor = texture2D(u_texSampler, vec2(v_uv.s, 1.0 - v_uv.t));
+ gl_FragColor = TextureLookup(u_sampler, v_uv.st);
gl_FragColor.rgb *= gl_FragColor.a;
}),
- // FRAGMENT_SHADER_TEX_UNPREMULTIPLY_ALPHA_FLIP_Y
- SHADER(
- uniform sampler2D u_texSampler;
- varying vec2 v_uv;
- void main(void) {
- gl_FragColor = texture2D(u_texSampler, vec2(v_uv.s, 1.0 - v_uv.t));
- if (gl_FragColor.a > 0.0)
- gl_FragColor.rgb /= gl_FragColor.a;
- }),
- // FRAGMENT_SHADER_TEX_OES
- SHADER_EXTERNAL_OES(
- precision mediump float;
- uniform samplerExternalOES u_texSampler;
- varying vec2 v_uv;
+ // FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_*
+ FRAGMENT_SHADERS(
+ uniform SamplerType u_sampler;
+ varying TexCoordPrecision vec2 v_uv;
void main(void) {
- gl_FragColor = texture2D(u_texSampler, v_uv.st);
- }),
- // FRAGMENT_SHADER_TEX_OES_FLIP_Y
- SHADER_EXTERNAL_OES(
- precision mediump float;
- uniform samplerExternalOES u_texSampler;
- varying vec2 v_uv;
- void main(void) {
- gl_FragColor =
- texture2D(u_texSampler, vec2(v_uv.s, 1.0 - v_uv.t));
- }),
- // FRAGMENT_SHADER_TEX_OES_PREMULTIPLY_ALPHA
- SHADER_EXTERNAL_OES(
- precision mediump float;
- uniform samplerExternalOES u_texSampler;
- varying vec2 v_uv;
- void main(void) {
- gl_FragColor = texture2D(u_texSampler, v_uv.st);
- gl_FragColor.rgb *= gl_FragColor.a;
- }),
- // FRAGMENT_SHADER_TEX_OES_UNPREMULTIPLY_ALPHA
- SHADER_EXTERNAL_OES(
- precision mediump float;
- uniform samplerExternalOES u_texSampler;
- varying vec2 v_uv;
- void main(void) {
- gl_FragColor = texture2D(u_texSampler, v_uv.st);
+ gl_FragColor = TextureLookup(u_sampler, v_uv.st);
if (gl_FragColor.a > 0.0)
gl_FragColor.rgb /= gl_FragColor.a;
}),
- // FRAGMENT_SHADER_TEX_OES_PREMULTIPLY_ALPHA_FLIP_Y
- SHADER_EXTERNAL_OES(
- precision mediump float;
- uniform samplerExternalOES u_texSampler;
- varying vec2 v_uv;
- void main(void) {
- gl_FragColor =
- texture2D(u_texSampler, vec2(v_uv.s, 1.0 - v_uv.t));
- gl_FragColor.rgb *= gl_FragColor.a;
- }),
- // FRAGMENT_SHADER_TEX_OES_UNPREMULTIPLY_ALPHA_FLIP_Y
- SHADER_EXTERNAL_OES(
- precision mediump float;
- uniform samplerExternalOES u_texSampler;
- varying vec2 v_uv;
- void main(void) {
- gl_FragColor =
- texture2D(u_texSampler, vec2(v_uv.s, 1.0 - v_uv.t));
- if (gl_FragColor.a > 0.0)
- gl_FragColor.rgb /= gl_FragColor.a;
- }),
};
-const int kNumShaders = arraysize(shader_infos);
+// Returns the correct vertex shader id to evaluate the copy operation for
+// the CHROMIUM_flipy setting.
+VertexShaderId GetVertexShaderId(bool flip_y) {
+ // bit 0: flip y
+ static VertexShaderId shader_ids[] = {
+ VERTEX_SHADER_COPY_TEXTURE,
+ VERTEX_SHADER_COPY_TEXTURE_FLIP_Y,
+ };
-// Returns the correct program to evaluate the copy operation for
-// the CHROMIUM_flipy and premultiply alpha pixel store settings.
-ProgramId GetProgram(
- bool flip_y,
- bool premultiply_alpha,
- bool unpremultiply_alpha,
- bool is_source_external_oes) {
- // If both pre-multiply and unpremultiply are requested, then perform no
- // alpha manipulation.
- if (premultiply_alpha && unpremultiply_alpha) {
- premultiply_alpha = false;
- unpremultiply_alpha = false;
- }
+ unsigned index = flip_y ? 1 : 0;
+ return shader_ids[index];
+}
- // bit 0: Flip_y
- // bit 1: Premult
- // bit 2: Unpremult
- // bit 3: External_oes
- static ProgramId program_ids[] = {
- PROGRAM_COPY_TEXTURE,
- PROGRAM_COPY_TEXTURE_FLIP_Y, // F
- PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA, // P
- PROGRAM_COPY_TEXTURE_PREMULTIPLY_ALPHA_FLIPY, // F P
- PROGRAM_COPY_TEXTURE_UNPREMULTIPLY_ALPHA, // U
- PROGRAM_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_FLIPY, // F U
- PROGRAM_COPY_TEXTURE, // P U
- PROGRAM_COPY_TEXTURE, // F P U
- PROGRAM_COPY_TEXTURE_OES, // E
- PROGRAM_COPY_TEXTURE_OES_FLIP_Y, // F E
- PROGRAM_COPY_TEXTURE_OES_PREMULTIPLY_ALPHA, // P E
- PROGRAM_COPY_TEXTURE_OES_PREMULTIPLY_ALPHA_FLIPY, // F P E
- PROGRAM_COPY_TEXTURE_OES_UNPREMULTIPLY_ALPHA, // U E
- PROGRAM_COPY_TEXTURE_OES_UNPREMULTIPLY_ALPHA_FLIPY, // F U E
- PROGRAM_COPY_TEXTURE_OES, // P U E
- PROGRAM_COPY_TEXTURE_OES, // F P U E
+// Returns the correct fragment shader id to evaluate the copy operation for
+// the premultiply alpha pixel store settings and target.
+FragmentShaderId GetFragmentShaderId(bool premultiply_alpha,
+ bool unpremultiply_alpha,
+ GLenum target) {
+ enum {
+ SAMPLER_2D,
+ SAMPLER_RECTANGLE_ARB,
+ SAMPLER_EXTERNAL_OES,
+ NUM_SAMPLERS
};
- unsigned index = (flip_y ? (1 << 0) : 0) |
- (premultiply_alpha ? (1 << 1) : 0) |
- (unpremultiply_alpha ? (1 << 2) : 0) |
- (is_source_external_oes ? (1 << 3) : 0);
- return program_ids[index];
+ // bit 0: premultiply alpha
+ // bit 1: unpremultiply alpha
+ static FragmentShaderId shader_ids[][NUM_SAMPLERS] = {
+ {
+ FRAGMENT_SHADER_COPY_TEXTURE_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_RECTANGLE_ARB,
+ FRAGMENT_SHADER_COPY_TEXTURE_EXTERNAL_OES,
+ },
+ {
+ FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_RECTANGLE_ARB,
+ FRAGMENT_SHADER_COPY_TEXTURE_PREMULTIPLY_ALPHA_EXTERNAL_OES,
+ },
+ {
+ FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_RECTANGLE_ARB,
+ FRAGMENT_SHADER_COPY_TEXTURE_UNPREMULTIPLY_ALPHA_EXTERNAL_OES,
+ },
+ {
+ FRAGMENT_SHADER_COPY_TEXTURE_2D,
+ FRAGMENT_SHADER_COPY_TEXTURE_RECTANGLE_ARB,
+ FRAGMENT_SHADER_COPY_TEXTURE_EXTERNAL_OES,
+ }};
+
+ unsigned index = (premultiply_alpha ? (1 << 0) : 0) |
+ (unpremultiply_alpha ? (1 << 1) : 0);
+
+ switch (target) {
+ case GL_TEXTURE_2D:
+ return shader_ids[index][SAMPLER_2D];
+ case GL_TEXTURE_RECTANGLE_ARB:
+ return shader_ids[index][SAMPLER_RECTANGLE_ARB];
+ case GL_TEXTURE_EXTERNAL_OES:
+ return shader_ids[index][SAMPLER_EXTERNAL_OES];
+ default:
+ break;
+ }
+
+ NOTREACHED();
+ return shader_ids[index][SAMPLER_2D];
+}
+
+void CompileShader(GLuint shader, const char* shader_source) {
+ glShaderSource(shader, 1, &shader_source, 0);
+ glCompileShader(shader);
+#ifndef NDEBUG
+ GLint compile_status;
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &compile_status);
+ if (GL_TRUE != compile_status)
+ DLOG(ERROR) << "CopyTextureCHROMIUM: shader compilation failure.";
+#endif
+}
+
+void DeleteShader(GLuint shader) {
+ if (shader)
+ glDeleteShader(shader);
}
} // namespace
@@ -219,15 +191,13 @@ ProgramId GetProgram(
namespace gpu {
CopyTextureCHROMIUMResourceManager::CopyTextureCHROMIUMResourceManager()
- : initialized_(false),
- buffer_id_(0),
- framebuffer_(0) {
- for (int i = 0; i < kNumPrograms; ++i) {
- programs_[i] = 0;
- matrix_handle_[i] = 0;
- sampler_locations_[i] = 0;
- }
-}
+ : initialized_(false),
+ vertex_shaders_(NUM_VERTEX_SHADERS, 0u),
+ fragment_shaders_(NUM_FRAGMENT_SHADERS, 0u),
+ buffer_id_(0u),
+ framebuffer_(0u) {}
+
+CopyTextureCHROMIUMResourceManager::~CopyTextureCHROMIUMResourceManager() {}
void CopyTextureCHROMIUMResourceManager::Initialize(
const gles2::GLES2Decoder* decoder) {
@@ -235,70 +205,18 @@ void CopyTextureCHROMIUMResourceManager::Initialize(
kVertexPositionAttrib == 0u,
Position_attribs_must_be_0);
- const char* extensions =
- reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS));
- bool have_egl_image_external = extensions &&
- strstr(extensions, "GL_OES_EGL_image_external");
-
// Initialize all of the GPU resources required to perform the copy.
glGenBuffersARB(1, &buffer_id_);
glBindBuffer(GL_ARRAY_BUFFER, buffer_id_);
- glBufferData(GL_ARRAY_BUFFER, sizeof(kQuadVertices), kQuadVertices,
- GL_STATIC_DRAW);
+ const GLfloat kQuadVertices[] = {-1.0f, -1.0f,
+ 1.0f, -1.0f,
+ 1.0f, 1.0f,
+ -1.0f, 1.0f};
+ glBufferData(
+ GL_ARRAY_BUFFER, sizeof(kQuadVertices), kQuadVertices, GL_STATIC_DRAW);
glGenFramebuffersEXT(1, &framebuffer_);
- // TODO(gman): Init these on demand.
- GLuint shaders[kNumShaders];
- for (int shader = 0; shader < kNumShaders; ++shader) {
- shaders[shader] = glCreateShader(
- shader == 0 ? GL_VERTEX_SHADER : GL_FRAGMENT_SHADER);
- const ShaderInfo& info = shader_infos[shader];
- if (info.needs_egl_image_external && !have_egl_image_external) {
- continue;
- }
- const char* shader_source = shader_infos[shader].source;
- glShaderSource(shaders[shader], 1, &shader_source, 0);
- glCompileShader(shaders[shader]);
-#ifndef NDEBUG
- GLint compile_status;
- glGetShaderiv(shaders[shader], GL_COMPILE_STATUS, &compile_status);
- if (GL_TRUE != compile_status)
- DLOG(ERROR) << "CopyTextureCHROMIUM: shader compilation failure.";
-#endif
- }
-
- // TODO(gman): Init these on demand.
- for (int program = 0; program < kNumPrograms; ++program) {
- const ShaderInfo& info = shader_infos[program + 1];
- if (info.needs_egl_image_external && !have_egl_image_external) {
- continue;
- }
- programs_[program] = glCreateProgram();
- glAttachShader(programs_[program], shaders[0]);
- glAttachShader(programs_[program], shaders[program + 1]);
-
- glBindAttribLocation(programs_[program], kVertexPositionAttrib,
- "a_position");
-
- glLinkProgram(programs_[program]);
-#ifndef NDEBUG
- GLint linked;
- glGetProgramiv(programs_[program], GL_LINK_STATUS, &linked);
- if (!linked)
- DLOG(ERROR) << "CopyTextureCHROMIUM: program link failure.";
-#endif
-
- sampler_locations_[program] = glGetUniformLocation(programs_[program],
- "u_texSampler");
-
- matrix_handle_[program] = glGetUniformLocation(programs_[program],
- "u_matrix");
- }
-
- for (int shader = 0; shader < kNumShaders; ++shader)
- glDeleteShader(shaders[shader]);
-
decoder->RestoreBufferBindings();
initialized_ = true;
@@ -310,9 +228,14 @@ void CopyTextureCHROMIUMResourceManager::Destroy() {
glDeleteFramebuffersEXT(1, &framebuffer_);
- for (int program = 0; program < kNumPrograms; ++program) {
- if (programs_[program])
- glDeleteProgram(programs_[program]);
+ std::for_each(vertex_shaders_.begin(), vertex_shaders_.end(), DeleteShader);
+ std::for_each(
+ fragment_shaders_.begin(), fragment_shaders_.end(), DeleteShader);
+
+ for (ProgramMap::const_iterator it = programs_.begin(); it != programs_.end();
+ ++it) {
+ const ProgramInfo& info = it->second;
+ glDeleteProgram(info.program);
}
glDeleteBuffersARB(1, &buffer_id_);
@@ -354,28 +277,66 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
bool unpremultiply_alpha,
const GLfloat transform_matrix[16]) {
DCHECK(source_target == GL_TEXTURE_2D ||
+ source_target == GL_TEXTURE_RECTANGLE_ARB ||
source_target == GL_TEXTURE_EXTERNAL_OES);
if (!initialized_) {
DLOG(ERROR) << "CopyTextureCHROMIUM: Uninitialized manager.";
return;
}
- GLuint program = GetProgram(
- flip_y, premultiply_alpha, unpremultiply_alpha,
- source_target == GL_TEXTURE_EXTERNAL_OES);
- glUseProgram(programs_[program]);
+ VertexShaderId vertex_shader_id = GetVertexShaderId(flip_y);
+ DCHECK_LT(static_cast<size_t>(vertex_shader_id), vertex_shaders_.size());
+ GLuint* vertex_shader = &vertex_shaders_[vertex_shader_id];
+ if (!*vertex_shader) {
+ *vertex_shader = glCreateShader(GL_VERTEX_SHADER);
+ CompileShader(*vertex_shader, vertex_shader_source[vertex_shader_id]);
+ }
+
+ FragmentShaderId fragment_shader_id = GetFragmentShaderId(
+ premultiply_alpha, unpremultiply_alpha, source_target);
+ DCHECK_LT(static_cast<size_t>(fragment_shader_id), fragment_shaders_.size());
+ GLuint* fragment_shader = &fragment_shaders_[fragment_shader_id];
+ if (!*fragment_shader) {
+ *fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
+ CompileShader(*fragment_shader, fragment_shader_source[fragment_shader_id]);
+ }
+ ProgramMapKey key(vertex_shader_id, fragment_shader_id);
+ ProgramInfo* info = &programs_[key];
+ // Create program if necessary.
+ if (!info->program) {
+ info->program = glCreateProgram();
+ glAttachShader(info->program, *vertex_shader);
+ glAttachShader(info->program, *fragment_shader);
+ glBindAttribLocation(info->program, kVertexPositionAttrib, "a_position");
+ glLinkProgram(info->program);
#ifndef NDEBUG
- glValidateProgram(programs_[program]);
+ GLint linked;
+ glGetProgramiv(info->program, GL_LINK_STATUS, &linked);
+ if (!linked)
+ DLOG(ERROR) << "CopyTextureCHROMIUM: program link failure.";
+#endif
+ info->matrix_handle = glGetUniformLocation(info->program, "u_matrix");
+ info->half_size_handle = glGetUniformLocation(info->program, "u_half_size");
+ info->sampler_handle = glGetUniformLocation(info->program, "u_sampler");
+ }
+ glUseProgram(info->program);
+
+#ifndef NDEBUG
+ glValidateProgram(info->program);
GLint validation_status;
- glGetProgramiv(programs_[program], GL_VALIDATE_STATUS, &validation_status);
+ glGetProgramiv(info->program, GL_VALIDATE_STATUS, &validation_status);
if (GL_TRUE != validation_status) {
DLOG(ERROR) << "CopyTextureCHROMIUM: Invalid shader.";
return;
}
#endif
- glUniformMatrix4fv(matrix_handle_[program], 1, GL_FALSE, transform_matrix);
+ glUniformMatrix4fv(info->matrix_handle, 1, GL_FALSE, transform_matrix);
+ if (source_target == GL_TEXTURE_RECTANGLE_ARB)
+ glUniform2f(info->half_size_handle, width / 2.0f, height / 2.0f);
+ else
+ glUniform2f(info->half_size_handle, 0.5f, 0.5f);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, dest_id);
// NVidia drivers require texture settings to be a certain way
@@ -395,13 +356,13 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
} else
#endif
{
+ decoder->ClearAllAttributes();
glEnableVertexAttribArray(kVertexPositionAttrib);
glBindBuffer(GL_ARRAY_BUFFER, buffer_id_);
- glVertexAttribPointer(kVertexPositionAttrib, 4, GL_FLOAT, GL_FALSE,
- 4 * sizeof(GLfloat), 0);
+ glVertexAttribPointer(kVertexPositionAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
- glUniform1i(sampler_locations_[program], 0);
+ glUniform1i(info->sampler_handle, 0);
glBindTexture(source_target, source_id);
glTexParameterf(source_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
@@ -421,7 +382,7 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
}
- decoder->RestoreAttribute(kVertexPositionAttrib);
+ decoder->RestoreAllAttributes();
decoder->RestoreTextureState(source_id);
decoder->RestoreTextureState(dest_id);
decoder->RestoreTextureUnitBindings(0);
@@ -432,5 +393,4 @@ void CopyTextureCHROMIUMResourceManager::DoCopyTextureWithTransform(
decoder->RestoreGlobalState();
}
-} // namespace
-
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.h b/chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.h
index 097eb2ce46e..17290f8ed22 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_copy_texture_chromium.h
@@ -5,6 +5,9 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
+#include <vector>
+
+#include "base/containers/hash_tables.h"
#include "gpu/command_buffer/service/gl_utils.h"
#include "gpu/gpu_export.h"
@@ -21,6 +24,7 @@ class GLES2Decoder;
class GPU_EXPORT CopyTextureCHROMIUMResourceManager {
public:
CopyTextureCHROMIUMResourceManager();
+ ~CopyTextureCHROMIUMResourceManager();
void Initialize(const gles2::GLES2Decoder* decoder);
void Destroy();
@@ -45,14 +49,28 @@ class GPU_EXPORT CopyTextureCHROMIUMResourceManager {
static const GLuint kVertexPositionAttrib = 0;
private:
- bool initialized_;
+ struct ProgramInfo {
+ ProgramInfo()
+ : program(0u),
+ matrix_handle(0u),
+ half_size_handle(0u),
+ sampler_handle(0u) {}
+
+ GLuint program;
+ GLuint matrix_handle;
+ GLuint half_size_handle;
+ GLuint sampler_handle;
+ };
- static const int kNumPrograms = 12;
- GLuint programs_[kNumPrograms];
+ bool initialized_;
+ typedef std::vector<GLuint> ShaderVector;
+ ShaderVector vertex_shaders_;
+ ShaderVector fragment_shaders_;
+ typedef std::pair<int, int> ProgramMapKey;
+ typedef base::hash_map<ProgramMapKey, ProgramInfo> ProgramMap;
+ ProgramMap programs_;
GLuint buffer_id_;
GLuint framebuffer_;
- GLuint matrix_handle_[kNumPrograms];
- GLuint sampler_locations_[kNumPrograms];
DISALLOW_COPY_AND_ASSIGN(CopyTextureCHROMIUMResourceManager);
};
@@ -60,5 +78,3 @@ class GPU_EXPORT CopyTextureCHROMIUMResourceManager {
} // namespace gpu.
#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_COPY_TEXTURE_CHROMIUM_H_
-
-
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
index c2fcee2933a..02ac2f68eff 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -15,9 +15,12 @@
#include "base/at_exit.h"
#include "base/bind.h"
+#include "base/callback_helpers.h"
#include "base/command_line.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_synthetic_delay.h"
#include "base/memory/scoped_ptr.h"
+#include "base/numerics/safe_math.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
#include "build/build_config.h"
@@ -51,11 +54,10 @@
#include "gpu/command_buffer/service/shader_manager.h"
#include "gpu/command_buffer/service/shader_translator.h"
#include "gpu/command_buffer/service/shader_translator_cache.h"
-#include "gpu/command_buffer/service/stream_texture.h"
-#include "gpu/command_buffer/service/stream_texture_manager.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "gpu/command_buffer/service/vertex_array_manager.h"
#include "gpu/command_buffer/service/vertex_attrib_manager.h"
+#include "third_party/smhasher/src/City.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_fence.h"
#include "ui/gl/gl_image.h"
@@ -63,16 +65,15 @@
#include "ui/gl/gl_surface.h"
#if defined(OS_MACOSX)
-#include "ui/gl/io_surface_support_mac.h"
+#include <IOSurface/IOSurfaceAPI.h>
+// Note that this must be included after gl_bindings.h to avoid conflicts.
+#include <OpenGL/CGLIOSurface.h>
#endif
#if defined(OS_WIN)
#include "base/win/win_util.h"
#endif
-// TODO(zmo): we can't include "City.h" due to type def conflicts.
-extern uint64 CityHash64(const char*, size_t);
-
namespace gpu {
namespace gles2 {
@@ -81,6 +82,7 @@ namespace {
static const char kOESDerivativeExtension[] = "GL_OES_standard_derivatives";
static const char kEXTFragDepthExtension[] = "GL_EXT_frag_depth";
static const char kEXTDrawBuffersExtension[] = "GL_EXT_draw_buffers";
+static const char kEXTShaderTextureLodExtension[] = "GL_EXT_shader_texture_lod";
#if !defined(ANGLE_SH_VERSION) || ANGLE_SH_VERSION < 108
khronos_uint64_t CityHashForAngle(const char* name, unsigned int len) {
@@ -229,15 +231,18 @@ bool ComputeDataSize(
// A struct to hold info about each command.
struct CommandInfo {
- int arg_flags; // How to handle the arguments for this command
- int arg_count; // How many arguments are expected for this command.
+ uint8 arg_flags; // How to handle the arguments for this command
+ uint8 cmd_flags; // How to handle this command
+ uint16 arg_count; // How many arguments are expected for this command.
};
+// cmds::name::cmd_flags,
// A table of CommandInfo for all the commands.
const CommandInfo g_command_info[] = {
#define GLES2_CMD_OP(name) { \
cmds::name::kArgFlags, \
- sizeof(cmds::name) / sizeof(CommandBufferEntry) - 1, }, /* NOLINT */ \
+ cmds::name::cmd_flags, \
+ sizeof(cmds::name) / sizeof(CommandBufferEntry) - 1, }, /* NOLINT */
GLES2_COMMAND_LIST(GLES2_CMD_OP)
@@ -275,15 +280,6 @@ static bool StringIsValidForGLES(const char* str) {
return true;
}
-// Wrapper for glEnable/glDisable that doesn't suck.
-static void EnableDisable(GLenum pname, bool enable) {
- if (enable) {
- glEnable(pname);
- } else {
- glDisable(pname);
- }
-}
-
// This class prevents any GL errors that occur when it is in scope from
// being reported to the client.
class ScopedGLErrorSuppressor {
@@ -297,24 +293,25 @@ class ScopedGLErrorSuppressor {
DISALLOW_COPY_AND_ASSIGN(ScopedGLErrorSuppressor);
};
-// Temporarily changes a decoder's bound 2D texture and restore it when this
+// Temporarily changes a decoder's bound texture and restore it when this
// object goes out of scope. Also temporarily switches to using active texture
// unit zero in case the client has changed that to something invalid.
-class ScopedTexture2DBinder {
+class ScopedTextureBinder {
public:
- ScopedTexture2DBinder(ContextState* state, GLuint id);
- ~ScopedTexture2DBinder();
+ explicit ScopedTextureBinder(ContextState* state, GLuint id, GLenum target);
+ ~ScopedTextureBinder();
private:
ContextState* state_;
- DISALLOW_COPY_AND_ASSIGN(ScopedTexture2DBinder);
+ GLenum target_;
+ DISALLOW_COPY_AND_ASSIGN(ScopedTextureBinder);
};
// Temporarily changes a decoder's bound render buffer and restore it when this
// object goes out of scope.
class ScopedRenderBufferBinder {
public:
- ScopedRenderBufferBinder(ContextState* state, GLuint id);
+ explicit ScopedRenderBufferBinder(ContextState* state, GLuint id);
~ScopedRenderBufferBinder();
private:
@@ -326,7 +323,7 @@ class ScopedRenderBufferBinder {
// object goes out of scope.
class ScopedFrameBufferBinder {
public:
- ScopedFrameBufferBinder(GLES2DecoderImpl* decoder, GLuint id);
+ explicit ScopedFrameBufferBinder(GLES2DecoderImpl* decoder, GLuint id);
~ScopedFrameBufferBinder();
private:
@@ -340,9 +337,9 @@ class ScopedFrameBufferBinder {
// true, the resolved framebuffer is not visible to the parent.
class ScopedResolvedFrameBufferBinder {
public:
- ScopedResolvedFrameBufferBinder(GLES2DecoderImpl* decoder,
- bool enforce_internal_framebuffer,
- bool internal);
+ explicit ScopedResolvedFrameBufferBinder(GLES2DecoderImpl* decoder,
+ bool enforce_internal_framebuffer,
+ bool internal);
~ScopedResolvedFrameBufferBinder();
private:
@@ -351,6 +348,45 @@ class ScopedResolvedFrameBufferBinder {
DISALLOW_COPY_AND_ASSIGN(ScopedResolvedFrameBufferBinder);
};
+class ScopedModifyPixels {
+ public:
+ explicit ScopedModifyPixels(TextureRef* ref);
+ ~ScopedModifyPixels();
+
+ private:
+ TextureRef* ref_;
+};
+
+ScopedModifyPixels::ScopedModifyPixels(TextureRef* ref) : ref_(ref) {
+ if (ref_)
+ ref_->texture()->OnWillModifyPixels();
+}
+
+ScopedModifyPixels::~ScopedModifyPixels() {
+ if (ref_)
+ ref_->texture()->OnDidModifyPixels();
+}
+
+class ScopedRenderTo {
+ public:
+ explicit ScopedRenderTo(Framebuffer* framebuffer);
+ ~ScopedRenderTo();
+
+ private:
+ const Framebuffer* framebuffer_;
+};
+
+ScopedRenderTo::ScopedRenderTo(Framebuffer* framebuffer)
+ : framebuffer_(framebuffer) {
+ if (framebuffer)
+ framebuffer_->OnWillRenderTo();
+}
+
+ScopedRenderTo::~ScopedRenderTo() {
+ if (framebuffer_)
+ framebuffer_->OnDidRenderTo();
+}
+
// Encapsulates an OpenGL texture.
class BackTexture {
public:
@@ -382,10 +418,6 @@ class BackTexture {
return size_;
}
- size_t estimated_size() const {
- return memory_tracker_.GetMemRepresented();
- }
-
private:
MemoryTypeTracker memory_tracker_;
ContextState* state_;
@@ -425,10 +457,6 @@ class BackRenderbuffer {
return id_;
}
- size_t estimated_size() const {
- return memory_tracker_.GetMemRepresented();
- }
-
private:
RenderbufferManager* renderbuffer_manager_;
MemoryTypeTracker memory_tracker_;
@@ -480,13 +508,32 @@ struct FenceCallback {
: fence(gfx::GLFence::Create()) {
DCHECK(fence);
}
- void AddCallback(base::Closure cb) {
- callbacks.push_back(cb);
- }
std::vector<base::Closure> callbacks;
scoped_ptr<gfx::GLFence> fence;
};
+class AsyncUploadTokenCompletionObserver
+ : public AsyncPixelTransferCompletionObserver {
+ public:
+ explicit AsyncUploadTokenCompletionObserver(uint32 async_upload_token)
+ : async_upload_token_(async_upload_token) {
+ }
+
+ virtual void DidComplete(const AsyncMemoryParams& mem_params) OVERRIDE {
+ DCHECK(mem_params.buffer());
+ void* data = mem_params.GetDataAddress();
+ AsyncUploadSync* sync = static_cast<AsyncUploadSync*>(data);
+ sync->SetAsyncUploadToken(async_upload_token_);
+ }
+
+ private:
+ virtual ~AsyncUploadTokenCompletionObserver() {
+ }
+
+ uint32 async_upload_token_;
+
+ DISALLOW_COPY_AND_ASSIGN(AsyncUploadTokenCompletionObserver);
+};
// } // anonymous namespace.
@@ -504,17 +551,16 @@ GLES2Decoder::GLES2Decoder()
GLES2Decoder::~GLES2Decoder() {
}
+void GLES2Decoder::BeginDecoding() {}
+
+void GLES2Decoder::EndDecoding() {}
+
// This class implements GLES2Decoder so we don't have to expose all the GLES2
// cmd stuff to outside this class.
class GLES2DecoderImpl : public GLES2Decoder,
- public FramebufferManager::TextureDetachObserver {
+ public FramebufferManager::TextureDetachObserver,
+ public ErrorStateClient {
public:
- // Used by PrepForSetUniformByLocation to validate types.
- struct BaseUniformInfo {
- const GLenum* const valid_types;
- size_t num_valid_types;
- };
-
explicit GLES2DecoderImpl(ContextGroup* group);
virtual ~GLES2DecoderImpl();
@@ -536,44 +582,45 @@ class GLES2DecoderImpl : public GLES2Decoder,
virtual void Destroy(bool have_context) OVERRIDE;
virtual void SetSurface(
const scoped_refptr<gfx::GLSurface>& surface) OVERRIDE;
- virtual bool ProduceFrontBuffer(const Mailbox& mailbox) OVERRIDE;
+ virtual void ProduceFrontBuffer(const Mailbox& mailbox) OVERRIDE;
virtual bool ResizeOffscreenFrameBuffer(const gfx::Size& size) OVERRIDE;
void UpdateParentTextureInfo();
virtual bool MakeCurrent() OVERRIDE;
- virtual void ReleaseCurrent() OVERRIDE;
virtual GLES2Util* GetGLES2Util() OVERRIDE { return &util_; }
virtual gfx::GLContext* GetGLContext() OVERRIDE { return context_.get(); }
virtual ContextGroup* GetContextGroup() OVERRIDE { return group_.get(); }
virtual Capabilities GetCapabilities() OVERRIDE;
- virtual void RestoreState() const OVERRIDE;
+ virtual void RestoreState(const ContextState* prev_state) const OVERRIDE;
virtual void RestoreActiveTexture() const OVERRIDE {
state_.RestoreActiveTexture();
}
- virtual void RestoreAllTextureUnitBindings() const OVERRIDE {
- state_.RestoreAllTextureUnitBindings();
+ virtual void RestoreAllTextureUnitBindings(
+ const ContextState* prev_state) const OVERRIDE {
+ state_.RestoreAllTextureUnitBindings(prev_state);
}
- virtual void RestoreAttribute(unsigned index) const OVERRIDE {
- state_.RestoreAttribute(index);
+ virtual void RestoreActiveTextureUnitBinding(
+ unsigned int target) const OVERRIDE {
+ state_.RestoreActiveTextureUnitBinding(target);
}
virtual void RestoreBufferBindings() const OVERRIDE {
state_.RestoreBufferBindings();
}
virtual void RestoreGlobalState() const OVERRIDE {
- state_.RestoreGlobalState();
+ state_.RestoreGlobalState(NULL);
}
virtual void RestoreProgramBindings() const OVERRIDE {
state_.RestoreProgramBindings();
}
- virtual void RestoreRenderbufferBindings() const OVERRIDE {
- state_.RestoreRenderbufferBindings();
- }
virtual void RestoreTextureUnitBindings(unsigned unit) const OVERRIDE {
- state_.RestoreTextureUnitBindings(unit);
+ state_.RestoreTextureUnitBindings(unit, NULL);
}
virtual void RestoreFramebufferBindings() const OVERRIDE;
virtual void RestoreTextureState(unsigned service_id) const OVERRIDE;
+ virtual void ClearAllAttributes() const OVERRIDE;
+ virtual void RestoreAllAttributes() const OVERRIDE;
+
virtual QueryManager* GetQueryManager() OVERRIDE {
return query_manager_.get();
}
@@ -590,7 +637,12 @@ class GLES2DecoderImpl : public GLES2Decoder,
const base::Callback<void(gfx::Size, float)>& callback) OVERRIDE;
virtual Logger* GetLogger() OVERRIDE;
+
+ virtual void BeginDecoding() OVERRIDE;
+ virtual void EndDecoding() OVERRIDE;
+
virtual ErrorState* GetErrorState() OVERRIDE;
+ virtual const ContextState* GetContextState() OVERRIDE { return &state_; }
virtual void SetShaderCacheCallback(
const ShaderCacheCallback& callback) OVERRIDE;
@@ -602,6 +654,7 @@ class GLES2DecoderImpl : public GLES2Decoder,
virtual void ResetAsyncPixelTransferManagerForTest() OVERRIDE;
virtual void SetAsyncPixelTransferManagerForTest(
AsyncPixelTransferManager* manager) OVERRIDE;
+ virtual void SetIgnoreCachedStateForTest(bool ignore) OVERRIDE;
void ProcessFinishedAsyncTransfers();
virtual bool GetServiceTextureId(uint32 client_texture_id,
@@ -632,6 +685,9 @@ class GLES2DecoderImpl : public GLES2Decoder,
virtual void OnTextureRefDetachedFromFramebuffer(
TextureRef* texture) OVERRIDE;
+ // Overriden from ErrorStateClient.
+ virtual void OnOutOfMemoryError() OVERRIDE;
+
// Helpers to facilitate calling into compatible extensions.
static void RenderbufferStorageMultisampleHelper(
const FeatureInfo* feature_info,
@@ -676,6 +732,13 @@ class GLES2DecoderImpl : public GLES2Decoder,
bool GenVertexArraysOESHelper(GLsizei n, const GLuint* client_ids);
void DeleteVertexArraysOESHelper(GLsizei n, const GLuint* client_ids);
+ // Helper for async upload token completion notification callback.
+ base::Closure AsyncUploadTokenCompletionClosure(uint32 async_upload_token,
+ uint32 sync_data_shm_id,
+ uint32 sync_data_shm_offset);
+
+
+
// Workarounds
void OnFboChanged() const;
void OnUseFramebuffer() const;
@@ -701,6 +764,10 @@ class GLES2DecoderImpl : public GLES2Decoder,
return group_->shader_manager();
}
+ ShaderTranslatorCache* shader_translator_cache() {
+ return group_->shader_translator_cache();
+ }
+
const TextureManager* texture_manager() const {
return group_->texture_manager();
}
@@ -725,10 +792,6 @@ class GLES2DecoderImpl : public GLES2Decoder,
return group_->memory_tracker();
}
- StreamTextureManager* stream_texture_manager() const {
- return group_->stream_texture_manager();
- }
-
bool EnsureGPUMemoryAvailable(size_t estimated_size) {
MemoryTracker* tracker = memory_tracker();
if (tracker) {
@@ -874,7 +937,14 @@ class GLES2DecoderImpl : public GLES2Decoder,
GLsizei height);
void DoProduceTextureCHROMIUM(GLenum target, const GLbyte* key);
+ void DoProduceTextureDirectCHROMIUM(GLuint texture, GLenum target,
+ const GLbyte* key);
+ void ProduceTextureRef(std::string func_name, TextureRef* texture_ref,
+ GLenum target, const GLbyte* data);
+
void DoConsumeTextureCHROMIUM(GLenum target, const GLbyte* key);
+ void DoCreateAndConsumeTextureCHROMIUM(GLenum target, const GLbyte* key,
+ GLuint client_id);
void DoBindTexImage2DCHROMIUM(
GLenum target,
@@ -887,6 +957,8 @@ class GLES2DecoderImpl : public GLES2Decoder,
void DoDrawBuffersEXT(GLsizei count, const GLenum* bufs);
+ void DoLoseContextCHROMIUM(GLenum current, GLenum other);
+
// Creates a Program for the given program.
Program* CreateProgram(
GLuint client_id, GLuint service_id) {
@@ -1036,9 +1108,12 @@ class GLES2DecoderImpl : public GLES2Decoder,
}
// Creates a vertex attrib manager for the given vertex array.
- void CreateVertexAttribManager(GLuint client_id, GLuint service_id) {
+ scoped_refptr<VertexAttribManager> CreateVertexAttribManager(
+ GLuint client_id,
+ GLuint service_id,
+ bool client_visible) {
return vertex_array_manager()->CreateVertexAttribManager(
- client_id, service_id, group_->max_vertex_attribs());
+ client_id, service_id, group_->max_vertex_attribs(), client_visible);
}
void DoBindAttribLocation(GLuint client_id, GLuint index, const char* name);
@@ -1060,10 +1135,6 @@ class GLES2DecoderImpl : public GLES2Decoder,
// Clear any textures used by the current program.
bool ClearUnclearedTextures();
- // Clear any uncleared level in texture.
- // Returns false if there was a generated GL error.
- bool ClearTexture(Texture* texture);
-
// Clears any uncleared attachments attached to the given frame buffer.
// Returns false if there was a generated GL error.
void ClearUnclearedAttachments(GLenum target, Framebuffer* framebuffer);
@@ -1073,6 +1144,7 @@ class GLES2DecoderImpl : public GLES2Decoder,
unsigned bind_target,
unsigned target,
int level,
+ unsigned internal_format,
unsigned format,
unsigned type,
int width,
@@ -1111,10 +1183,12 @@ class GLES2DecoderImpl : public GLES2Decoder,
// errors if the current program is not valid. Returns true if the current
// program is valid and the location exists. Adjusts count so it
// does not overflow the uniform.
- bool PrepForSetUniformByLocation(
- GLint fake_location, const char* function_name,
- const BaseUniformInfo& base_info,
- GLint* real_location, GLenum* type, GLsizei* count);
+ bool PrepForSetUniformByLocation(GLint fake_location,
+ const char* function_name,
+ Program::UniformApiType api_type,
+ GLint* real_location,
+ GLenum* type,
+ GLsizei* count);
// Gets the service id for any simulated backbuffer fbo.
GLuint GetBackbufferServiceId() const;
@@ -1272,6 +1346,11 @@ class GLES2DecoderImpl : public GLES2Decoder,
// Wrapper for glGetShaderiv
void DoGetShaderiv(GLuint shader, GLenum pname, GLint* params);
+ // Wrappers for glGetTexParameter.
+ void DoGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params);
+ void DoGetTexParameteriv(GLenum target, GLenum pname, GLint* params);
+ void InitTextureMaxAnisotropyIfNeeded(GLenum target, GLenum pname);
+
// Wrappers for glGetVertexAttrib.
void DoGetVertexAttribfv(GLuint index, GLenum pname, GLfloat *params);
void DoGetVertexAttribiv(GLuint index, GLenum pname, GLint *params);
@@ -1393,11 +1472,7 @@ class GLES2DecoderImpl : public GLES2Decoder,
// simulated.
bool SimulateAttrib0(
const char* function_name, GLuint max_vertex_accessed, bool* simulated);
- void RestoreStateForAttrib(GLuint attrib);
-
- // If texture is a stream texture, this will update the stream to the newest
- // buffer and bind the texture implicitly.
- void UpdateStreamTextureIfNeeded(Texture* texture, GLuint texture_unit_index);
+ void RestoreStateForAttrib(GLuint attrib, bool restore_array_binding);
// If an image is bound to texture, this will call Will/DidUseTexImage
// if needed.
@@ -1484,10 +1559,6 @@ class GLES2DecoderImpl : public GLES2Decoder,
error::Error* error, GLint* real_location, GLuint* service_id,
void** result, GLenum* result_type);
- // Computes the estimated memory used for the backbuffer and passes it to
- // the tracing system.
- size_t GetBackbufferMemoryTotal();
-
virtual bool WasContextLost() OVERRIDE;
virtual bool WasContextLostByRobustnessExtension() OVERRIDE;
virtual void LoseContext(uint32 reset_status) OVERRIDE;
@@ -1496,13 +1567,6 @@ class GLES2DecoderImpl : public GLES2Decoder,
void ReleaseIOSurfaceForTexture(GLuint texture_id);
#endif
- // Validates the combination of texture parameters. For example validates that
- // for a given format the specific type, level and targets are valid.
- // Synthesizes the correct GL error if invalid. Returns true if valid.
- bool ValidateTextureParameters(
- const char* function_name,
- GLenum target, GLenum format, GLenum type, GLint level);
-
bool ValidateCompressedTexDimensions(
const char* function_name,
GLint level, GLsizei width, GLsizei height, GLenum format);
@@ -1599,9 +1663,6 @@ class GLES2DecoderImpl : public GLES2Decoder,
bool unpack_premultiply_alpha_;
bool unpack_unpremultiply_alpha_;
- // Default vertex attribs manager, used when no VAOs are bound.
- scoped_refptr<VertexAttribManager> default_vertex_attrib_manager_;
-
// The buffer we bind to attrib 0 since OpenGL requires it (ES does not).
GLuint attrib_0_buffer_id_;
@@ -1666,7 +1727,9 @@ class GLES2DecoderImpl : public GLES2Decoder,
// Backbuffer attachments that are currently undefined.
uint32 backbuffer_needs_clear_bits_;
- // The current decoder error.
+ // The current decoder error communicates the decoder error through command
+ // processing functions that do not return the error value. Should be set only
+ // if not returning an error.
error::Error current_decoder_error_;
bool use_shader_translator_;
@@ -1684,6 +1747,7 @@ class GLES2DecoderImpl : public GLES2Decoder,
bool has_robustness_extension_;
GLenum reset_status_;
bool reset_by_robustness_extension_;
+ bool supports_post_sub_buffer_;
// These flags are used to override the state of the shared feature_info_
// member. Because the same FeatureInfo instance may be shared among many
@@ -1694,14 +1758,18 @@ class GLES2DecoderImpl : public GLES2Decoder,
bool derivatives_explicitly_enabled_;
bool frag_depth_explicitly_enabled_;
bool draw_buffers_explicitly_enabled_;
+ bool shader_texture_lod_explicitly_enabled_;
bool compile_shader_always_succeeds_;
+ // An optional behaviour to lose the context and group when OOM.
+ bool lose_context_when_out_of_memory_;
+
// Log extra info.
bool service_logging_;
#if defined(OS_MACOSX)
- typedef std::map<GLuint, CFTypeRef> TextureToIOSurfaceMap;
+ typedef std::map<GLuint, IOSurfaceRef> TextureToIOSurfaceMap;
TextureToIOSurfaceMap texture_to_io_surface_map_;
#endif
@@ -1720,6 +1788,8 @@ class GLES2DecoderImpl : public GLES2Decoder,
scoped_ptr<GPUTracer> gpu_tracer_;
scoped_ptr<GPUStateTracer> gpu_state_tracer_;
+ int gpu_trace_level_;
+ bool gpu_trace_commands_;
std::queue<linked_ptr<FenceCallback> > pending_readpixel_fences_;
@@ -1742,35 +1812,55 @@ ScopedGLErrorSuppressor::~ScopedGLErrorSuppressor() {
ERRORSTATE_CLEAR_REAL_GL_ERRORS(error_state_, function_name_);
}
-static void RestoreCurrentTexture2DBindings(ContextState* state) {
+static void RestoreCurrentTextureBindings(ContextState* state, GLenum target) {
TextureUnit& info = state->texture_units[0];
GLuint last_id;
- if (info.bound_texture_2d.get()) {
- last_id = info.bound_texture_2d->service_id();
+ scoped_refptr<TextureRef> texture_ref;
+ switch (target) {
+ case GL_TEXTURE_2D:
+ texture_ref = info.bound_texture_2d;
+ break;
+ case GL_TEXTURE_CUBE_MAP:
+ texture_ref = info.bound_texture_cube_map;
+ break;
+ case GL_TEXTURE_EXTERNAL_OES:
+ texture_ref = info.bound_texture_external_oes;
+ break;
+ case GL_TEXTURE_RECTANGLE_ARB:
+ texture_ref = info.bound_texture_rectangle_arb;
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+ if (texture_ref.get()) {
+ last_id = texture_ref->service_id();
} else {
last_id = 0;
}
- glBindTexture(GL_TEXTURE_2D, last_id);
+ glBindTexture(target, last_id);
glActiveTexture(GL_TEXTURE0 + state->active_texture_unit);
}
-ScopedTexture2DBinder::ScopedTexture2DBinder(ContextState* state,
- GLuint id)
- : state_(state) {
+ScopedTextureBinder::ScopedTextureBinder(ContextState* state,
+ GLuint id,
+ GLenum target)
+ : state_(state),
+ target_(target) {
ScopedGLErrorSuppressor suppressor(
- "ScopedTexture2DBinder::ctor", state_->GetErrorState());
+ "ScopedTextureBinder::ctor", state_->GetErrorState());
// TODO(apatrick): Check if there are any other states that need to be reset
// before binding a new texture.
glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, id);
+ glBindTexture(target, id);
}
-ScopedTexture2DBinder::~ScopedTexture2DBinder() {
+ScopedTextureBinder::~ScopedTextureBinder() {
ScopedGLErrorSuppressor suppressor(
- "ScopedTexture2DBinder::dtor", state_->GetErrorState());
- RestoreCurrentTexture2DBindings(state_);
+ "ScopedTextureBinder::dtor", state_->GetErrorState());
+ RestoreCurrentTextureBindings(state_, target_);
}
ScopedRenderBufferBinder::ScopedRenderBufferBinder(ContextState* state,
@@ -1847,7 +1937,7 @@ ScopedResolvedFrameBufferBinder::ScopedResolvedFrameBufferBinder(
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, targetid);
const int width = decoder_->offscreen_size_.width();
const int height = decoder_->offscreen_size_.height();
- glDisable(GL_SCISSOR_TEST);
+ decoder->state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false);
decoder->BlitFramebufferHelper(0,
0,
width,
@@ -1869,7 +1959,7 @@ ScopedResolvedFrameBufferBinder::~ScopedResolvedFrameBufferBinder() {
"ScopedResolvedFrameBufferBinder::dtor", decoder_->GetErrorState());
decoder_->RestoreCurrentFramebufferBindings();
if (decoder_->state_.enable_flags.scissor_test) {
- glEnable(GL_SCISSOR_TEST);
+ decoder_->state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, true);
}
}
@@ -1894,7 +1984,7 @@ void BackTexture::Create() {
state_->GetErrorState());
Destroy();
glGenTextures(1, &id_);
- ScopedTexture2DBinder binder(state_, id_);
+ ScopedTextureBinder binder(state_, id_, GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
@@ -1918,7 +2008,7 @@ bool BackTexture::AllocateStorage(
DCHECK_NE(id_, 0u);
ScopedGLErrorSuppressor suppressor("BackTexture::AllocateStorage",
state_->GetErrorState());
- ScopedTexture2DBinder binder(state_, id_);
+ ScopedTextureBinder binder(state_, id_, GL_TEXTURE_2D);
uint32 image_size = 0;
GLES2Util::ComputeImageDataSizes(
size.width(), size.height(), format, GL_UNSIGNED_BYTE, 8, &image_size,
@@ -1959,7 +2049,7 @@ void BackTexture::Copy(const gfx::Size& size, GLenum format) {
DCHECK_NE(id_, 0u);
ScopedGLErrorSuppressor suppressor("BackTexture::Copy",
state_->GetErrorState());
- ScopedTexture2DBinder binder(state_, id_);
+ ScopedTextureBinder binder(state_, id_, GL_TEXTURE_2D);
glCopyTexImage2D(GL_TEXTURE_2D,
0, // level
format,
@@ -2140,7 +2230,7 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group)
: GLES2Decoder(),
group_(group),
logger_(&debug_marker_manager_),
- state_(group_->feature_info(), &logger_),
+ state_(group_->feature_info(), this, &logger_),
unpack_flip_y_(false),
unpack_premultiply_alpha_(false),
unpack_unpremultiply_alpha_(false),
@@ -2167,11 +2257,14 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group)
has_robustness_extension_(false),
reset_status_(GL_NO_ERROR),
reset_by_robustness_extension_(false),
+ supports_post_sub_buffer_(false),
force_webgl_glsl_validation_(false),
derivatives_explicitly_enabled_(false),
frag_depth_explicitly_enabled_(false),
draw_buffers_explicitly_enabled_(false),
+ shader_texture_lod_explicitly_enabled_(false),
compile_shader_always_succeeds_(false),
+ lose_context_when_out_of_memory_(false),
service_logging_(CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableGPUServiceLoggingGPU)),
viewport_max_width_(0),
@@ -2216,8 +2309,11 @@ bool GLES2DecoderImpl::Initialize(
DCHECK(!context_.get());
set_initialized();
- gpu_tracer_ = GPUTracer::Create();
+ gpu_tracer_ = GPUTracer::Create(this);
gpu_state_tracer_ = GPUStateTracer::Create(&state_);
+ // TODO(vmiura): Enable changing gpu_trace_level_ at runtime
+ gpu_trace_level_ = 2;
+ gpu_trace_commands_ = false;
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableGPUDebugging)) {
@@ -2242,6 +2338,10 @@ bool GLES2DecoderImpl::Initialize(
if (!attrib_parser.Parse(attribs))
return false;
+ // Save the loseContextWhenOutOfMemory context creation attribute.
+ lose_context_when_out_of_memory_ =
+ attrib_parser.lose_context_when_out_of_memory_;
+
// If the failIfMajorPerformanceCaveat context creation attribute was true
// and we are using a software renderer, fail.
if (attrib_parser.fail_if_major_perf_caveat_ &&
@@ -2263,14 +2363,25 @@ bool GLES2DecoderImpl::Initialize(
disallowed_features_ = disallowed_features;
state_.attrib_values.resize(group_->max_vertex_attribs());
- default_vertex_attrib_manager_ = new VertexAttribManager();
- default_vertex_attrib_manager_->Initialize(group_->max_vertex_attribs());
+ vertex_array_manager_.reset(new VertexArrayManager());
- // vertex_attrib_manager is set to default_vertex_attrib_manager_ by this call
+ GLuint default_vertex_attrib_service_id = 0;
+ if (features().native_vertex_array_object) {
+ glGenVertexArraysOES(1, &default_vertex_attrib_service_id);
+ glBindVertexArrayOES(default_vertex_attrib_service_id);
+ }
+
+ state_.default_vertex_attrib_manager =
+ CreateVertexAttribManager(0, default_vertex_attrib_service_id, false);
+
+ state_.default_vertex_attrib_manager->Initialize(
+ group_->max_vertex_attribs(),
+ feature_info_->workarounds().init_vertex_attributes);
+
+ // vertex_attrib_manager is set to default_vertex_attrib_manager by this call
DoBindVertexArrayOES(0);
query_manager_.reset(new QueryManager(this, feature_info_.get()));
- vertex_array_manager_.reset(new VertexArrayManager());
util_.set_num_compressed_texture_formats(
validators_->compressed_texture_format.GetValues().size());
@@ -2295,20 +2406,20 @@ bool GLES2DecoderImpl::Initialize(
ref = texture_manager()->GetDefaultTextureInfo(
GL_TEXTURE_EXTERNAL_OES);
state_.texture_units[tt].bound_texture_external_oes = ref;
- glBindTexture(GL_TEXTURE_EXTERNAL_OES, ref->service_id());
+ glBindTexture(GL_TEXTURE_EXTERNAL_OES, ref ? ref->service_id() : 0);
}
if (features().arb_texture_rectangle) {
ref = texture_manager()->GetDefaultTextureInfo(
GL_TEXTURE_RECTANGLE_ARB);
state_.texture_units[tt].bound_texture_rectangle_arb = ref;
- glBindTexture(GL_TEXTURE_RECTANGLE_ARB, ref->service_id());
+ glBindTexture(GL_TEXTURE_RECTANGLE_ARB, ref ? ref->service_id() : 0);
}
ref = texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP);
state_.texture_units[tt].bound_texture_cube_map = ref;
- glBindTexture(GL_TEXTURE_CUBE_MAP, ref->service_id());
+ glBindTexture(GL_TEXTURE_CUBE_MAP, ref ? ref->service_id() : 0);
ref = texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_2D);
state_.texture_units[tt].bound_texture_2d = ref;
- glBindTexture(GL_TEXTURE_2D, ref->service_id());
+ glBindTexture(GL_TEXTURE_2D, ref ? ref->service_id() : 0);
}
glActiveTexture(GL_TEXTURE0);
CHECK_GL_ERROR();
@@ -2499,8 +2610,8 @@ bool GLES2DecoderImpl::Initialize(
state_.scissor_height = state_.viewport_height;
// Set all the default state because some GL drivers get it wrong.
- state_.InitCapabilities();
- state_.InitState();
+ state_.InitCapabilities(NULL);
+ state_.InitState(NULL);
glActiveTexture(GL_TEXTURE0 + state_.active_texture_unit);
DoBindBuffer(GL_ARRAY_BUFFER, 0);
@@ -2522,6 +2633,12 @@ bool GLES2DecoderImpl::Initialize(
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
}
+ supports_post_sub_buffer_ = surface->SupportsPostSubBuffer();
+ if (feature_info_->workarounds()
+ .disable_post_sub_buffers_for_onscreen_surfaces &&
+ !surface->IsOffscreen())
+ supports_post_sub_buffer_ = false;
+
if (feature_info_->workarounds().reverse_point_sprite_coord_origin) {
glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN, GL_LOWER_LEFT);
}
@@ -2568,19 +2685,15 @@ Capabilities GLES2DecoderImpl::GetCapabilities() {
caps.texture_storage = feature_info_->feature_flags().ext_texture_storage;
caps.discard_framebuffer =
feature_info_->feature_flags().ext_discard_framebuffer;
+ caps.sync_query = feature_info_->feature_flags().chromium_sync_query;
#if defined(OS_MACOSX)
// This is unconditionally true on mac, no need to test for it at runtime.
caps.iosurface = true;
#endif
- // TODO(boliu): Expose this directly from GLSurface.
- std::vector<std::string> extension_list;
- base::SplitString(surface_->GetExtensions(), ' ', &extension_list);
- std::set<std::string> extension_set(extension_list.begin(),
- extension_list.end());
- caps.post_sub_buffer =
- extension_set.count("GL_CHROMIUM_post_sub_buffer") > 0;
+ caps.post_sub_buffer = supports_post_sub_buffer_;
+ caps.map_image = !!image_manager();
return caps;
}
@@ -2629,6 +2742,9 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() {
resources.EXT_draw_buffers = draw_buffers_explicitly_enabled_;
if (!draw_buffers_explicitly_enabled_)
resources.MaxDrawBuffers = 1;
+#if (ANGLE_SH_VERSION >= 123)
+ resources.EXT_shader_texture_lod = shader_texture_lod_explicitly_enabled_;
+#endif
} else {
resources.OES_standard_derivatives =
features().oes_standard_derivatives ? 1 : 0;
@@ -2640,6 +2756,10 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() {
features().ext_draw_buffers ? 1 : 0;
resources.EXT_frag_depth =
features().ext_frag_depth ? 1 : 0;
+#if (ANGLE_SH_VERSION >= 123)
+ resources.EXT_shader_texture_lod =
+ features().ext_shader_texture_lod ? 1 : 0;
+#endif
}
ShShaderSpec shader_spec = force_webgl_glsl_validation_ ? SH_WEBGL_SPEC
@@ -2662,10 +2782,15 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() {
driver_bug_workarounds |= SH_INIT_GL_POSITION;
if (workarounds().unfold_short_circuit_as_ternary_operation)
driver_bug_workarounds |= SH_UNFOLD_SHORT_CIRCUIT;
-
- ShaderTranslatorCache* cache = ShaderTranslatorCache::GetInstance();
- vertex_translator_ = cache->GetTranslator(
- SH_VERTEX_SHADER, shader_spec, &resources,
+ if (workarounds().init_varyings_without_static_use)
+ driver_bug_workarounds |= SH_INIT_VARYINGS_WITHOUT_STATIC_USE;
+ if (workarounds().unroll_for_loop_with_sampler_array_index)
+ driver_bug_workarounds |= SH_UNROLL_FOR_LOOP_WITH_SAMPLER_ARRAY_INDEX;
+
+ vertex_translator_ = shader_translator_cache()->GetTranslator(
+ SH_VERTEX_SHADER,
+ shader_spec,
+ &resources,
implementation_type,
static_cast<ShCompileOptions>(driver_bug_workarounds));
if (!vertex_translator_.get()) {
@@ -2674,8 +2799,10 @@ bool GLES2DecoderImpl::InitializeShaderTranslator() {
return false;
}
- fragment_translator_ = cache->GetTranslator(
- SH_FRAGMENT_SHADER, shader_spec, &resources,
+ fragment_translator_ = shader_translator_cache()->GetTranslator(
+ SH_FRAGMENT_SHADER,
+ shader_spec,
+ &resources,
implementation_type,
static_cast<ShCompileOptions>(driver_bug_workarounds));
if (!fragment_translator_.get()) {
@@ -2908,11 +3035,6 @@ void GLES2DecoderImpl::ProcessFinishedAsyncTransfers() {
async_pixel_transfer_manager_->BindCompletedAsyncTransfers();
}
-void GLES2DecoderImpl::ReleaseCurrent() {
- if (context_.get())
- context_->ReleaseCurrent(surface_.get());
-}
-
static void RebindCurrentFramebuffer(
GLenum target,
Framebuffer* framebuffer,
@@ -2954,13 +3076,27 @@ bool GLES2DecoderImpl::CheckFramebufferValid(
if (backbuffer_needs_clear_bits_) {
glClearColor(0, 0, 0, (GLES2Util::GetChannelsForFormat(
offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearStencil(0);
- glStencilMask(-1);
+ state_.SetDeviceStencilMaskSeparate(GL_FRONT, -1);
+ state_.SetDeviceStencilMaskSeparate(GL_BACK, -1);
glClearDepth(1.0f);
- glDepthMask(true);
- glDisable(GL_SCISSOR_TEST);
+ state_.SetDeviceDepthMask(GL_TRUE);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false);
+ bool reset_draw_buffer = false;
+ if ((backbuffer_needs_clear_bits_ | GL_COLOR_BUFFER_BIT) != 0 &&
+ group_->draw_buffer() == GL_NONE) {
+ reset_draw_buffer = true;
+ GLenum buf = GL_BACK;
+ if (GetBackbufferServiceId() != 0) // emulated backbuffer
+ buf = GL_COLOR_ATTACHMENT0;
+ glDrawBuffersARB(1, &buf);
+ }
glClear(backbuffer_needs_clear_bits_);
+ if (reset_draw_buffer) {
+ GLenum buf = GL_NONE;
+ glDrawBuffersARB(1, &buf);
+ }
backbuffer_needs_clear_bits_ = 0;
RestoreClearState();
}
@@ -3097,25 +3233,25 @@ void GLES2DecoderImpl::UpdateParentTextureInfo() {
GL_RGBA,
GL_UNSIGNED_BYTE,
true);
- texture_manager()->SetParameter(
+ texture_manager()->SetParameteri(
"UpdateParentTextureInfo",
GetErrorState(),
offscreen_saved_color_texture_info_.get(),
GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
- texture_manager()->SetParameter(
+ texture_manager()->SetParameteri(
"UpdateParentTextureInfo",
GetErrorState(),
offscreen_saved_color_texture_info_.get(),
GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
- texture_manager()->SetParameter(
+ texture_manager()->SetParameteri(
"UpdateParentTextureInfo",
GetErrorState(),
offscreen_saved_color_texture_info_.get(),
GL_TEXTURE_WRAP_S,
GL_CLAMP_TO_EDGE);
- texture_manager()->SetParameter(
+ texture_manager()->SetParameteri(
"UpdateParentTextureInfo",
GetErrorState(),
offscreen_saved_color_texture_info_.get(),
@@ -3135,6 +3271,15 @@ Logger* GLES2DecoderImpl::GetLogger() {
return &logger_;
}
+void GLES2DecoderImpl::BeginDecoding() {
+ gpu_tracer_->BeginDecoding();
+ gpu_trace_commands_ = gpu_tracer_->IsTracing();
+}
+
+void GLES2DecoderImpl::EndDecoding() {
+ gpu_tracer_->EndDecoding();
+}
+
ErrorState* GLES2DecoderImpl::GetErrorState() {
return state_.GetErrorState();
}
@@ -3199,10 +3344,10 @@ void GLES2DecoderImpl::Destroy(bool have_context) {
// Unbind everything.
state_.vertex_attrib_manager = NULL;
- default_vertex_attrib_manager_ = NULL;
+ state_.default_vertex_attrib_manager = NULL;
state_.texture_units.clear();
state_.bound_array_buffer = NULL;
- state_.current_query = NULL;
+ state_.current_queries.clear();
framebuffer_state_.bound_read_framebuffer = NULL;
framebuffer_state_.bound_draw_framebuffer = NULL;
state_.bound_renderbuffer = NULL;
@@ -3306,6 +3451,11 @@ void GLES2DecoderImpl::Destroy(bool have_context) {
offscreen_resolved_frame_buffer_.reset();
offscreen_resolved_color_texture_.reset();
+ // Need to release these before releasing |group_| which may own the
+ // ShaderTranslatorCache.
+ fragment_translator_ = NULL;
+ vertex_translator_ = NULL;
+
// Should destroy the transfer manager before the texture manager held
// by the context group.
async_pixel_transfer_manager_.reset();
@@ -3338,9 +3488,11 @@ void GLES2DecoderImpl::SetSurface(
RestoreCurrentFramebufferBindings();
}
-bool GLES2DecoderImpl::ProduceFrontBuffer(const Mailbox& mailbox) {
- if (!offscreen_saved_color_texture_.get())
- return false;
+void GLES2DecoderImpl::ProduceFrontBuffer(const Mailbox& mailbox) {
+ if (!offscreen_saved_color_texture_.get()) {
+ LOG(ERROR) << "Called ProduceFrontBuffer on a non-offscreen context";
+ return;
+ }
if (!offscreen_saved_color_texture_info_.get()) {
GLuint service_id = offscreen_saved_color_texture_->id();
offscreen_saved_color_texture_info_ = TextureRef::Create(
@@ -3349,39 +3501,8 @@ bool GLES2DecoderImpl::ProduceFrontBuffer(const Mailbox& mailbox) {
GL_TEXTURE_2D);
UpdateParentTextureInfo();
}
- gpu::gles2::MailboxName name;
- memcpy(name.key, mailbox.name, sizeof(mailbox.name));
- return mailbox_manager()->ProduceTexture(
- GL_TEXTURE_2D, name, offscreen_saved_color_texture_info_->texture());
-}
-
-size_t GLES2DecoderImpl::GetBackbufferMemoryTotal() {
- size_t total = 0;
- if (offscreen_target_frame_buffer_.get()) {
- if (offscreen_target_color_texture_.get()) {
- total += offscreen_target_color_texture_->estimated_size();
- }
- if (offscreen_target_color_render_buffer_.get()) {
- total += offscreen_target_color_render_buffer_->estimated_size();
- }
- if (offscreen_target_depth_render_buffer_.get()) {
- total += offscreen_target_depth_render_buffer_->estimated_size();
- }
- if (offscreen_target_stencil_render_buffer_.get()) {
- total += offscreen_target_stencil_render_buffer_->estimated_size();
- }
- if (offscreen_saved_color_texture_.get()) {
- total += offscreen_saved_color_texture_->estimated_size();
- }
- if (offscreen_resolved_color_texture_.get()) {
- total += offscreen_resolved_color_texture_->estimated_size();
- }
- } else {
- gfx::Size size = surface_->GetSize();
- total += size.width() * size.height() *
- GLES2Util::RenderbufferBytesPerPixel(back_buffer_color_format_);
- }
- return total;
+ mailbox_manager()->ProduceTexture(
+ GL_TEXTURE_2D, mailbox, offscreen_saved_color_texture_info_->texture());
}
bool GLES2DecoderImpl::ResizeOffscreenFrameBuffer(const gfx::Size& size) {
@@ -3477,13 +3598,13 @@ bool GLES2DecoderImpl::ResizeOffscreenFrameBuffer(const gfx::Size& size) {
ScopedFrameBufferBinder binder(this, offscreen_target_frame_buffer_->id());
glClearColor(0, 0, 0, (GLES2Util::GetChannelsForFormat(
offscreen_target_color_format_) & 0x0008) != 0 ? 0 : 1);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glClearStencil(0);
- glStencilMaskSeparate(GL_FRONT, -1);
- glStencilMaskSeparate(GL_BACK, -1);
+ state_.SetDeviceStencilMaskSeparate(GL_FRONT, -1);
+ state_.SetDeviceStencilMaskSeparate(GL_BACK, -1);
glClearDepth(0);
- glDepthMask(GL_TRUE);
- glDisable(GL_SCISSOR_TEST);
+ state_.SetDeviceDepthMask(GL_TRUE);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
RestoreClearState();
}
@@ -3567,6 +3688,14 @@ error::Error GLES2DecoderImpl::DoCommand(
unsigned int info_arg_count = static_cast<unsigned int>(info.arg_count);
if ((info.arg_flags == cmd::kFixed && arg_count == info_arg_count) ||
(info.arg_flags == cmd::kAtLeastN && arg_count >= info_arg_count)) {
+ bool doing_gpu_trace = false;
+ if (gpu_trace_commands_) {
+ if (CMD_FLAG_GET_TRACE_LEVEL(info.cmd_flags) <= gpu_trace_level_) {
+ doing_gpu_trace = true;
+ gpu_tracer_->Begin(GetCommandName(command), kTraceDecoder);
+ }
+ }
+
uint32 immediate_data_size =
(arg_count - info_arg_count) * sizeof(CommandBufferEntry); // NOLINT
switch (command) {
@@ -3580,6 +3709,10 @@ error::Error GLES2DecoderImpl::DoCommand(
GLES2_COMMAND_LIST(GLES2_CMD_OP)
#undef GLES2_CMD_OP
}
+
+ if (doing_gpu_trace)
+ gpu_tracer_->End(kTraceDecoder);
+
if (debug()) {
GLenum error;
while ((error = glGetError()) != GL_NO_ERROR) {
@@ -3657,8 +3790,9 @@ void GLES2DecoderImpl::DoBindBuffer(GLenum target, GLuint client_id) {
buffer = GetBuffer(client_id);
if (!buffer) {
if (!group_->bind_generates_resource()) {
- LOG(ERROR) << "glBindBuffer: id not generated by glGenBuffers";
- current_decoder_error_ = error::kGenericError;
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glBindBuffer",
+ "id not generated by glGenBuffers");
return;
}
@@ -3733,23 +3867,25 @@ bool GLES2DecoderImpl::BoundFramebufferHasStencilAttachment() {
void GLES2DecoderImpl::ApplyDirtyState() {
if (framebuffer_state_.clear_state_dirty) {
- glColorMask(
- state_.color_mask_red, state_.color_mask_green, state_.color_mask_blue,
- state_.color_mask_alpha &&
- BoundFramebufferHasColorAttachmentWithAlpha(true));
+ bool have_alpha = BoundFramebufferHasColorAttachmentWithAlpha(true);
+ state_.SetDeviceColorMask(state_.color_mask_red,
+ state_.color_mask_green,
+ state_.color_mask_blue,
+ state_.color_mask_alpha && have_alpha);
+
bool have_depth = BoundFramebufferHasDepthAttachment();
- glDepthMask(state_.depth_mask && have_depth);
- EnableDisable(GL_DEPTH_TEST, state_.enable_flags.depth_test && have_depth);
+ state_.SetDeviceDepthMask(state_.depth_mask && have_depth);
+
bool have_stencil = BoundFramebufferHasStencilAttachment();
- glStencilMaskSeparate(
+ state_.SetDeviceStencilMaskSeparate(
GL_FRONT, have_stencil ? state_.stencil_front_writemask : 0);
- glStencilMaskSeparate(
+ state_.SetDeviceStencilMaskSeparate(
GL_BACK, have_stencil ? state_.stencil_back_writemask : 0);
- EnableDisable(
+
+ state_.SetDeviceCapabilityState(
+ GL_DEPTH_TEST, state_.enable_flags.depth_test && have_depth);
+ state_.SetDeviceCapabilityState(
GL_STENCIL_TEST, state_.enable_flags.stencil_test && have_stencil);
- EnableDisable(GL_CULL_FACE, state_.enable_flags.cull_face);
- EnableDisable(GL_SCISSOR_TEST, state_.enable_flags.scissor_test);
- EnableDisable(GL_BLEND, state_.enable_flags.blend);
framebuffer_state_.clear_state_dirty = false;
}
}
@@ -3760,14 +3896,14 @@ GLuint GLES2DecoderImpl::GetBackbufferServiceId() const {
: (surface_.get() ? surface_->GetBackingFrameBufferObject() : 0);
}
-void GLES2DecoderImpl::RestoreState() const {
+void GLES2DecoderImpl::RestoreState(const ContextState* prev_state) const {
TRACE_EVENT1("gpu", "GLES2DecoderImpl::RestoreState",
"context", logger_.GetLogPrefix());
// Restore the Framebuffer first because of bugs in Intel drivers.
// Intel drivers incorrectly clip the viewport settings to
// the size of the current framebuffer object.
RestoreFramebufferBindings();
- state_.RestoreState();
+ state_.RestoreState(prev_state);
}
void GLES2DecoderImpl::RestoreFramebufferBindings() const {
@@ -3804,6 +3940,28 @@ void GLES2DecoderImpl::RestoreTextureState(unsigned service_id) const {
}
}
+void GLES2DecoderImpl::ClearAllAttributes() const {
+ // Must use native VAO 0, as RestoreAllAttributes can't fully restore
+ // other VAOs.
+ if (feature_info_->feature_flags().native_vertex_array_object)
+ glBindVertexArrayOES(0);
+
+ for (uint32 i = 0; i < group_->max_vertex_attribs(); ++i) {
+ if (i != 0) // Never disable attribute 0
+ glDisableVertexAttribArray(i);
+ if(features().angle_instanced_arrays)
+ glVertexAttribDivisorANGLE(i, 0);
+ }
+}
+
+void GLES2DecoderImpl::RestoreAllAttributes() const {
+ state_.RestoreVertexAttribs();
+}
+
+void GLES2DecoderImpl::SetIgnoreCachedStateForTest(bool ignore) {
+ state_.SetIgnoreCachedStateForTest(ignore);
+}
+
void GLES2DecoderImpl::OnFboChanged() const {
if (workarounds().restore_scissor_on_fbo_change)
state_.fbo_binding_for_scissor_workaround_dirty_ = true;
@@ -3832,10 +3990,10 @@ void GLES2DecoderImpl::DoBindFramebuffer(GLenum target, GLuint client_id) {
framebuffer = GetFramebuffer(client_id);
if (!framebuffer) {
if (!group_->bind_generates_resource()) {
- LOG(ERROR)
- << "glBindFramebuffer: id not generated by glGenFramebuffers";
- current_decoder_error_ = error::kGenericError;
- return;
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glBindFramebuffer",
+ "id not generated by glGenFramebuffers");
+ return;
}
// It's a new id so make a framebuffer framebuffer for it.
@@ -3855,6 +4013,8 @@ void GLES2DecoderImpl::DoBindFramebuffer(GLenum target, GLuint client_id) {
if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) {
framebuffer_state_.bound_draw_framebuffer = framebuffer;
}
+
+ // vmiura: This looks like dup code
if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) {
framebuffer_state_.bound_read_framebuffer = framebuffer;
}
@@ -3878,9 +4038,9 @@ void GLES2DecoderImpl::DoBindRenderbuffer(GLenum target, GLuint client_id) {
renderbuffer = GetRenderbuffer(client_id);
if (!renderbuffer) {
if (!group_->bind_generates_resource()) {
- LOG(ERROR)
- << "glBindRenderbuffer: id not generated by glGenRenderbuffers";
- current_decoder_error_ = error::kGenericError;
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glBindRenderbuffer",
+ "id not generated by glGenRenderbuffers");
return;
}
@@ -3896,7 +4056,7 @@ void GLES2DecoderImpl::DoBindRenderbuffer(GLenum target, GLuint client_id) {
}
renderbuffer->MarkAsValid();
}
- LogClientServiceForInfo(renderbuffer, client_id, "glBindRenerbuffer");
+ LogClientServiceForInfo(renderbuffer, client_id, "glBindRenderbuffer");
state_.bound_renderbuffer = renderbuffer;
glBindRenderbufferEXT(target, service_id);
}
@@ -3908,9 +4068,10 @@ void GLES2DecoderImpl::DoBindTexture(GLenum target, GLuint client_id) {
texture_ref = GetTexture(client_id);
if (!texture_ref) {
if (!group_->bind_generates_resource()) {
- LOG(ERROR) << "glBindTexture: id not generated by glGenTextures";
- current_decoder_error_ = error::kGenericError;
- return;
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glBindTexture",
+ "id not generated by glGenTextures");
+ return;
}
// It's a new id so make a texture texture for it.
@@ -3925,27 +4086,25 @@ void GLES2DecoderImpl::DoBindTexture(GLenum target, GLuint client_id) {
} else {
texture_ref = texture_manager()->GetDefaultTextureInfo(target);
}
- Texture* texture = texture_ref->texture();
// Check the texture exists
- // Check that we are not trying to bind it to a different target.
- if (texture->target() != 0 && texture->target() != target) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glBindTexture", "texture bound to more than 1 target.");
- return;
- }
- if (texture->IsStreamTexture() && target != GL_TEXTURE_EXTERNAL_OES) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glBindTexture", "illegal target for stream texture.");
- return;
- }
- LogClientServiceForInfo(texture, client_id, "glBindTexture");
- if (texture->target() == 0) {
- texture_manager()->SetTarget(texture_ref, target);
+ if (texture_ref) {
+ Texture* texture = texture_ref->texture();
+ // Check that we are not trying to bind it to a different target.
+ if (texture->target() != 0 && texture->target() != target) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glBindTexture",
+ "texture bound to more than 1 target.");
+ return;
+ }
+ LogClientServiceForInfo(texture, client_id, "glBindTexture");
+ if (texture->target() == 0) {
+ texture_manager()->SetTarget(texture_ref, target);
+ }
+ glBindTexture(target, texture->service_id());
+ } else {
+ glBindTexture(target, 0);
}
- glBindTexture(target, texture->service_id());
TextureUnit& unit = state_.texture_units[state_.active_texture_unit];
unit.bind_target = target;
@@ -3984,13 +4143,6 @@ void GLES2DecoderImpl::DoDisableVertexAttribArray(GLuint index) {
void GLES2DecoderImpl::DoDiscardFramebufferEXT(GLenum target,
GLsizei numAttachments,
const GLenum* attachments) {
- if (!features().ext_discard_framebuffer) {
- LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
- "glDiscardFramebufferEXT",
- "function not available");
- return;
- }
-
Framebuffer* framebuffer =
GetFramebufferInfoForTarget(GL_FRAMEBUFFER);
@@ -4123,7 +4275,25 @@ bool GLES2DecoderImpl::GetHelper(
switch (pname) {
case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
*num_written = 1;
+ // Return the GL implementation's preferred format and (see below type)
+ // if we have the GL extension that exposes this. This allows the GPU
+ // client to use the implementation's preferred format for glReadPixels
+ // for optimisation.
+ //
+ // A conflicting extension (GL_ARB_ES2_compatibility) specifies an error
+ // case when requested on integer/floating point buffers but which is
+ // acceptable on GLES2 and with the GL_OES_read_format extension.
+ //
+ // Therefore if an error occurs we swallow the error and use the
+ // internal implementation.
if (params) {
+ if (context_->HasExtension("GL_OES_read_format")) {
+ ScopedGLErrorSuppressor suppressor("GLES2DecoderImpl::GetHelper",
+ GetErrorState());
+ glGetIntegerv(pname, params);
+ if (glGetError() == GL_NO_ERROR)
+ return true;
+ }
*params = GLES2Util::GetPreferredGLReadPixelsFormat(
GetBoundReadFrameBufferInternalFormat());
}
@@ -4131,6 +4301,13 @@ bool GLES2DecoderImpl::GetHelper(
case GL_IMPLEMENTATION_COLOR_READ_TYPE:
*num_written = 1;
if (params) {
+ if (context_->HasExtension("GL_OES_read_format")) {
+ ScopedGLErrorSuppressor suppressor("GLES2DecoderImpl::GetHelper",
+ GetErrorState());
+ glGetIntegerv(pname, params);
+ if (glGetError() == GL_NO_ERROR)
+ return true;
+ }
*params = GLES2Util::GetPreferredGLReadPixelsType(
GetBoundReadFrameBufferInternalFormat(),
GetBoundReadFrameBufferTextureType());
@@ -4348,7 +4525,7 @@ bool GLES2DecoderImpl::GetHelper(
*num_written = 1;
if (params) {
if (state_.vertex_attrib_manager.get() !=
- default_vertex_attrib_manager_.get()) {
+ state_.default_vertex_attrib_manager.get()) {
GLuint client_id = 0;
vertex_array_manager_->GetClientId(
state_.vertex_attrib_manager->service_id(), &client_id);
@@ -4420,6 +4597,12 @@ bool GLES2DecoderImpl::GetHelper(
params[0] = unpack_unpremultiply_alpha_;
}
return true;
+ case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
+ *num_written = 1;
+ if (params) {
+ params[0] = group_->bind_generates_resource() ? 1 : 0;
+ }
+ return true;
default:
if (pname >= GL_DRAW_BUFFER0_ARB &&
pname < GL_DRAW_BUFFER0_ARB + group_->max_draw_buffers()) {
@@ -4545,21 +4728,6 @@ void GLES2DecoderImpl::DoBindAttribLocation(
glBindAttribLocation(program->service_id(), index, name);
}
-error::Error GLES2DecoderImpl::HandleBindAttribLocation(
- uint32 immediate_data_size, const cmds::BindAttribLocation& c) {
- GLuint program = static_cast<GLuint>(c.program);
- GLuint index = static_cast<GLuint>(c.index);
- uint32 name_size = c.data_size;
- const char* name = GetSharedMemoryAs<const char*>(
- c.name_shm_id, c.name_shm_offset, name_size);
- if (name == NULL) {
- return error::kOutOfBounds;
- }
- String name_str(name, name_size);
- DoBindAttribLocation(program, index, name_str.c_str());
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleBindAttribLocationBucket(
uint32 immediate_data_size, const cmds::BindAttribLocationBucket& c) {
GLuint program = static_cast<GLuint>(c.program);
@@ -4610,21 +4778,6 @@ void GLES2DecoderImpl::DoBindUniformLocationCHROMIUM(
}
}
-error::Error GLES2DecoderImpl::HandleBindUniformLocationCHROMIUM(
- uint32 immediate_data_size, const cmds::BindUniformLocationCHROMIUM& c) {
- GLuint program = static_cast<GLuint>(c.program);
- GLint location = static_cast<GLint>(c.location);
- uint32 name_size = c.data_size;
- const char* name = GetSharedMemoryAs<const char*>(
- c.name_shm_id, c.name_shm_offset, name_size);
- if (name == NULL) {
- return error::kOutOfBounds;
- }
- String name_str(name, name_size);
- DoBindUniformLocationCHROMIUM(program, location, name_str.c_str());
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleBindUniformLocationCHROMIUMBucket(
uint32 immediate_data_size,
const cmds::BindUniformLocationCHROMIUMBucket& c) {
@@ -4859,33 +5012,38 @@ void GLES2DecoderImpl::ClearUnclearedAttachments(
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, framebuffer->service_id());
}
GLbitfield clear_bits = 0;
- if (framebuffer->HasUnclearedAttachment(GL_COLOR_ATTACHMENT0)) {
+ if (framebuffer->HasUnclearedColorAttachments()) {
glClearColor(
0.0f, 0.0f, 0.0f,
(GLES2Util::GetChannelsForFormat(
framebuffer->GetColorAttachmentFormat()) & 0x0008) != 0 ? 0.0f :
1.0f);
- glColorMask(true, true, true, true);
+ state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
clear_bits |= GL_COLOR_BUFFER_BIT;
+ framebuffer->PrepareDrawBuffersForClear();
}
if (framebuffer->HasUnclearedAttachment(GL_STENCIL_ATTACHMENT) ||
framebuffer->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)) {
glClearStencil(0);
- glStencilMask(-1);
+ state_.SetDeviceStencilMaskSeparate(GL_FRONT, -1);
+ state_.SetDeviceStencilMaskSeparate(GL_BACK, -1);
clear_bits |= GL_STENCIL_BUFFER_BIT;
}
if (framebuffer->HasUnclearedAttachment(GL_DEPTH_ATTACHMENT) ||
framebuffer->HasUnclearedAttachment(GL_DEPTH_STENCIL_ATTACHMENT)) {
glClearDepth(1.0f);
- glDepthMask(true);
+ state_.SetDeviceDepthMask(GL_TRUE);
clear_bits |= GL_DEPTH_BUFFER_BIT;
}
- glDisable(GL_SCISSOR_TEST);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false);
glClear(clear_bits);
+ if ((clear_bits | GL_COLOR_BUFFER_BIT) != 0)
+ framebuffer->RestoreDrawBuffersAfterClear();
+
framebuffer_manager()->MarkAttachmentsAsCleared(
framebuffer, renderbuffer_manager(), texture_manager());
@@ -4909,7 +5067,7 @@ void GLES2DecoderImpl::RestoreClearState() {
glClearStencil(state_.stencil_clear);
glClearDepth(state_.depth_clear);
if (state_.enable_flags.scissor_test) {
- glEnable(GL_SCISSOR_TEST);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, true);
}
}
@@ -4937,12 +5095,6 @@ void GLES2DecoderImpl::DoFramebufferTexture2D(
void GLES2DecoderImpl::DoFramebufferTexture2DMultisample(
GLenum target, GLenum attachment, GLenum textarget,
GLuint client_texture_id, GLint level, GLsizei samples) {
- if (!features().multisampled_render_to_texture) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glFramebufferTexture2DMultisample", "function not available");
- return;
- }
DoFramebufferTexture2DCommon(
"glFramebufferTexture2DMultisample", target, attachment,
textarget, client_texture_id, level, samples);
@@ -5020,7 +5172,7 @@ void GLES2DecoderImpl::DoGetFramebufferAttachmentParameteriv(
if (!framebuffer) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
- "glFramebufferAttachmentParameteriv", "no framebuffer bound");
+ "glGetFramebufferAttachmentParameteriv", "no framebuffer bound");
return;
}
if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) {
@@ -5075,21 +5227,16 @@ void GLES2DecoderImpl::DoBlitFramebufferCHROMIUM(
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
GLbitfield mask, GLenum filter) {
DCHECK(!ShouldDeferReads() && !ShouldDeferDraws());
- if (!features().chromium_framebuffer_multisample) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glBlitFramebufferCHROMIUM", "function not available");
- return;
- }
if (!CheckBoundFramebuffersValid("glBlitFramebufferCHROMIUM")) {
return;
}
- glDisable(GL_SCISSOR_TEST);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false);
BlitFramebufferHelper(
srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
- EnableDisable(GL_SCISSOR_TEST, state_.enable_flags.scissor_test);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST,
+ state_.enable_flags.scissor_test);
}
void GLES2DecoderImpl::RenderbufferStorageMultisampleHelper(
@@ -5162,14 +5309,14 @@ bool GLES2DecoderImpl::ValidateRenderbufferStorageMultisample(
width, height, samples, internalformat, &estimated_size)) {
LOCAL_SET_GL_ERROR(
GL_OUT_OF_MEMORY,
- "glRenderbufferStorageMultsample", "dimensions too large");
+ "glRenderbufferStorageMultisample", "dimensions too large");
return false;
}
if (!EnsureGPUMemoryAvailable(estimated_size)) {
LOCAL_SET_GL_ERROR(
GL_OUT_OF_MEMORY,
- "glRenderbufferStorageMultsample", "out of memory");
+ "glRenderbufferStorageMultisample", "out of memory");
return false;
}
@@ -5179,13 +5326,6 @@ bool GLES2DecoderImpl::ValidateRenderbufferStorageMultisample(
void GLES2DecoderImpl::DoRenderbufferStorageMultisampleCHROMIUM(
GLenum target, GLsizei samples, GLenum internalformat,
GLsizei width, GLsizei height) {
- if (!features().chromium_framebuffer_multisample) {
- LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
- "glRenderbufferStorageMultisampleCHROMIUM",
- "function not available");
- return;
- }
-
Renderbuffer* renderbuffer = GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
if (!renderbuffer) {
LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
@@ -5232,13 +5372,6 @@ void GLES2DecoderImpl::DoRenderbufferStorageMultisampleCHROMIUM(
void GLES2DecoderImpl::DoRenderbufferStorageMultisampleEXT(
GLenum target, GLsizei samples, GLenum internalformat,
GLsizei width, GLsizei height) {
- if (!features().multisampled_render_to_texture) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glRenderbufferStorageMultisampleEXT", "function not available");
- return;
- }
-
Renderbuffer* renderbuffer = GetRenderbufferInfoForTarget(GL_RENDERBUFFER);
if (!renderbuffer) {
LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
@@ -5328,11 +5461,11 @@ bool GLES2DecoderImpl::VerifyMultisampleRenderbufferIntegrity(
GLboolean scissor_enabled = false;
glGetBooleanv(GL_SCISSOR_TEST, &scissor_enabled);
if (scissor_enabled)
- glDisable(GL_SCISSOR_TEST);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false);
- GLboolean color_mask[4] = {true, true, true, true};
+ GLboolean color_mask[4] = {GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE};
glGetBooleanv(GL_COLOR_WRITEMASK, color_mask);
- glColorMask(true, true, true, true);
+ state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
GLfloat clear_color[4] = {0.0f, 0.0f, 0.0f, 0.0f};
glGetFloatv(GL_COLOR_CLEAR_VALUE, clear_color);
@@ -5361,9 +5494,10 @@ bool GLES2DecoderImpl::VerifyMultisampleRenderbufferIntegrity(
// Restore cached state.
if (scissor_enabled)
- glEnable(GL_SCISSOR_TEST);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, true);
- glColorMask(color_mask[0], color_mask[1], color_mask[2], color_mask[3]);
+ state_.SetDeviceColorMask(
+ color_mask[0], color_mask[1], color_mask[2], color_mask[3]);
glClearColor(clear_color[0], clear_color[1], clear_color[2], clear_color[3]);
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, draw_framebuffer);
glBindFramebufferEXT(GL_READ_FRAMEBUFFER, read_framebuffer);
@@ -5462,9 +5596,8 @@ void GLES2DecoderImpl::DoTexParameterf(
return;
}
- texture_manager()->SetParameter(
- "glTexParameterf", GetErrorState(), texture, pname,
- static_cast<GLint>(param));
+ texture_manager()->SetParameterf(
+ "glTexParameterf", GetErrorState(), texture, pname, param);
}
void GLES2DecoderImpl::DoTexParameteri(
@@ -5476,7 +5609,7 @@ void GLES2DecoderImpl::DoTexParameteri(
return;
}
- texture_manager()->SetParameter(
+ texture_manager()->SetParameteri(
"glTexParameteri", GetErrorState(), texture, pname, param);
}
@@ -5489,9 +5622,8 @@ void GLES2DecoderImpl::DoTexParameterfv(
return;
}
- texture_manager()->SetParameter(
- "glTexParameterfv", GetErrorState(), texture, pname,
- static_cast<GLint>(params[0]));
+ texture_manager()->SetParameterf(
+ "glTexParameterfv", GetErrorState(), texture, pname, *params);
}
void GLES2DecoderImpl::DoTexParameteriv(
@@ -5504,7 +5636,7 @@ void GLES2DecoderImpl::DoTexParameteriv(
return;
}
- texture_manager()->SetParameter(
+ texture_manager()->SetParameteri(
"glTexParameteriv", GetErrorState(), texture, pname, *params);
}
@@ -5531,125 +5663,13 @@ bool GLES2DecoderImpl::CheckCurrentProgramForUniform(
return location != -1;
}
-namespace {
-
-static const GLenum valid_int_vec1_types_list[] = {
- GL_INT,
- GL_BOOL,
- GL_SAMPLER_2D,
- GL_SAMPLER_2D_RECT_ARB,
- GL_SAMPLER_CUBE,
- GL_SAMPLER_EXTERNAL_OES,
-};
-
-static const GLenum valid_int_vec2_types_list[] = {
- GL_INT_VEC2,
- GL_BOOL_VEC2,
-};
-
-static const GLenum valid_int_vec3_types_list[] = {
- GL_INT_VEC3,
- GL_BOOL_VEC3,
-};
-
-static const GLenum valid_int_vec4_types_list[] = {
- GL_INT_VEC4,
- GL_BOOL_VEC4,
-};
-
-static const GLenum valid_float_vec1_types_list[] = {
- GL_FLOAT,
- GL_BOOL,
-};
-
-static const GLenum valid_float_vec2_types_list[] = {
- GL_FLOAT_VEC2,
- GL_BOOL_VEC2,
-};
-
-static const GLenum valid_float_vec3_types_list[] = {
- GL_FLOAT_VEC3,
- GL_BOOL_VEC3,
-};
-
-static const GLenum valid_float_vec4_types_list[] = {
- GL_FLOAT_VEC4,
- GL_BOOL_VEC4,
-};
-
-static const GLenum valid_float_mat2_types_list[] = {
- GL_FLOAT_MAT2,
-};
-
-static const GLenum valid_float_mat3_types_list[] = {
- GL_FLOAT_MAT3,
-};
-
-static const GLenum valid_float_mat4_types_list[] = {
- GL_FLOAT_MAT4,
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_int_vec1_base_info = {
- valid_int_vec1_types_list,
- arraysize(valid_int_vec1_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_int_vec2_base_info = {
- valid_int_vec2_types_list,
- arraysize(valid_int_vec2_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_int_vec3_base_info = {
- valid_int_vec3_types_list,
- arraysize(valid_int_vec3_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_int_vec4_base_info = {
- valid_int_vec4_types_list,
- arraysize(valid_int_vec4_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_float_vec1_base_info = {
- valid_float_vec1_types_list,
- arraysize(valid_float_vec1_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_float_vec2_base_info = {
- valid_float_vec2_types_list,
- arraysize(valid_float_vec2_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_float_vec3_base_info = {
- valid_float_vec3_types_list,
- arraysize(valid_float_vec3_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_float_vec4_base_info = {
- valid_float_vec4_types_list,
- arraysize(valid_float_vec4_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_float_mat2_base_info = {
- valid_float_mat2_types_list,
- arraysize(valid_float_mat2_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_float_mat3_base_info = {
- valid_float_mat3_types_list,
- arraysize(valid_float_mat3_types_list),
-};
-
-static const GLES2DecoderImpl::BaseUniformInfo valid_float_mat4_base_info = {
- valid_float_mat4_types_list,
- arraysize(valid_float_mat4_types_list),
-};
-
-} // anonymous namespace.
-
bool GLES2DecoderImpl::PrepForSetUniformByLocation(
- GLint fake_location, const char* function_name,
- const GLES2DecoderImpl::BaseUniformInfo& base_info,
- GLint* real_location, GLenum* type, GLsizei* count) {
+ GLint fake_location,
+ const char* function_name,
+ Program::UniformApiType api_type,
+ GLint* real_location,
+ GLenum* type,
+ GLsizei* count) {
DCHECK(type);
DCHECK(count);
DCHECK(real_location);
@@ -5666,14 +5686,8 @@ bool GLES2DecoderImpl::PrepForSetUniformByLocation(
GL_INVALID_OPERATION, function_name, "unknown location");
return false;
}
- bool okay = false;
- for (size_t ii = 0; ii < base_info.num_valid_types; ++ii) {
- if (base_info.valid_types[ii] == info->type) {
- okay = true;
- break;
- }
- }
- if (!okay) {
+
+ if ((api_type & info->accepts_api_type) == 0) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, function_name,
"wrong uniform function for type");
@@ -5696,9 +5710,12 @@ void GLES2DecoderImpl::DoUniform1i(GLint fake_location, GLint v0) {
GLenum type = 0;
GLsizei count = 1;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform1iv", valid_int_vec1_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform1i",
+ Program::kUniform1i,
+ &real_location,
+ &type,
+ &count)) {
return;
}
if (!state_.current_program->SetSamplers(
@@ -5714,9 +5731,12 @@ void GLES2DecoderImpl::DoUniform1iv(
GLint fake_location, GLsizei count, const GLint *value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform1iv", valid_int_vec1_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform1iv",
+ Program::kUniform1i,
+ &real_location,
+ &type,
+ &count)) {
return;
}
if (type == GL_SAMPLER_2D || type == GL_SAMPLER_2D_RECT_ARB ||
@@ -5735,9 +5755,12 @@ void GLES2DecoderImpl::DoUniform1fv(
GLint fake_location, GLsizei count, const GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform1fv", valid_float_vec1_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform1fv",
+ Program::kUniform1f,
+ &real_location,
+ &type,
+ &count)) {
return;
}
if (type == GL_BOOL) {
@@ -5755,9 +5778,12 @@ void GLES2DecoderImpl::DoUniform2fv(
GLint fake_location, GLsizei count, const GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform2fv", valid_float_vec2_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform2fv",
+ Program::kUniform2f,
+ &real_location,
+ &type,
+ &count)) {
return;
}
if (type == GL_BOOL_VEC2) {
@@ -5776,9 +5802,12 @@ void GLES2DecoderImpl::DoUniform3fv(
GLint fake_location, GLsizei count, const GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform3fv", valid_float_vec3_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform3fv",
+ Program::kUniform3f,
+ &real_location,
+ &type,
+ &count)) {
return;
}
if (type == GL_BOOL_VEC3) {
@@ -5797,9 +5826,12 @@ void GLES2DecoderImpl::DoUniform4fv(
GLint fake_location, GLsizei count, const GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform4fv", valid_float_vec4_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform4fv",
+ Program::kUniform4f,
+ &real_location,
+ &type,
+ &count)) {
return;
}
if (type == GL_BOOL_VEC4) {
@@ -5818,9 +5850,12 @@ void GLES2DecoderImpl::DoUniform2iv(
GLint fake_location, GLsizei count, const GLint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform2iv", valid_int_vec2_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform2iv",
+ Program::kUniform2i,
+ &real_location,
+ &type,
+ &count)) {
return;
}
glUniform2iv(real_location, count, value);
@@ -5830,9 +5865,12 @@ void GLES2DecoderImpl::DoUniform3iv(
GLint fake_location, GLsizei count, const GLint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform3iv", valid_int_vec3_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform3iv",
+ Program::kUniform3i,
+ &real_location,
+ &type,
+ &count)) {
return;
}
glUniform3iv(real_location, count, value);
@@ -5842,9 +5880,12 @@ void GLES2DecoderImpl::DoUniform4iv(
GLint fake_location, GLsizei count, const GLint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniform4iv", valid_int_vec4_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniform4iv",
+ Program::kUniform4i,
+ &real_location,
+ &type,
+ &count)) {
return;
}
glUniform4iv(real_location, count, value);
@@ -5855,9 +5896,12 @@ void GLES2DecoderImpl::DoUniformMatrix2fv(
const GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniformMatrix2fv", valid_float_mat2_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniformMatrix2fv",
+ Program::kUniformMatrix2f,
+ &real_location,
+ &type,
+ &count)) {
return;
}
glUniformMatrix2fv(real_location, count, transpose, value);
@@ -5868,9 +5912,12 @@ void GLES2DecoderImpl::DoUniformMatrix3fv(
const GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniformMatrix3fv", valid_float_mat3_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniformMatrix3fv",
+ Program::kUniformMatrix3f,
+ &real_location,
+ &type,
+ &count)) {
return;
}
glUniformMatrix3fv(real_location, count, transpose, value);
@@ -5881,9 +5928,12 @@ void GLES2DecoderImpl::DoUniformMatrix4fv(
const GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(
- fake_location, "glUniformMatrix4fv", valid_float_mat4_base_info,
- &real_location, &type, &count)) {
+ if (!PrepForSetUniformByLocation(fake_location,
+ "glUniformMatrix4fv",
+ Program::kUniformMatrix4f,
+ &real_location,
+ &type,
+ &count)) {
return;
}
glUniformMatrix4fv(real_location, count, transpose, value);
@@ -5930,24 +5980,8 @@ void GLES2DecoderImpl::PerformanceWarning(
std::string("PERFORMANCE WARNING: ") + msg);
}
-void GLES2DecoderImpl::UpdateStreamTextureIfNeeded(Texture* texture,
- GLuint texture_unit_index) {
- if (texture && texture->IsStreamTexture()) {
- DCHECK(stream_texture_manager());
- StreamTexture* stream_tex =
- stream_texture_manager()->LookupStreamTexture(texture->service_id());
- if (stream_tex) {
- glActiveTexture(GL_TEXTURE0 + texture_unit_index);
- stream_tex->Update();
- }
- }
-}
-
void GLES2DecoderImpl::DoWillUseTexImageIfNeeded(
Texture* texture, GLenum textarget) {
- // This might be supported in the future.
- if (textarget != GL_TEXTURE_2D)
- return;
// Image is already in use if texture is attached to a framebuffer.
if (texture && !texture->IsAttachedToFramebuffer()) {
gfx::GLImage* image = texture->GetLevelImage(textarget, 0);
@@ -5957,16 +5991,13 @@ void GLES2DecoderImpl::DoWillUseTexImageIfNeeded(
GetErrorState());
glBindTexture(textarget, texture->service_id());
image->WillUseTexImage();
- RestoreCurrentTexture2DBindings(&state_);
+ RestoreCurrentTextureBindings(&state_, textarget);
}
}
}
void GLES2DecoderImpl::DoDidUseTexImageIfNeeded(
Texture* texture, GLenum textarget) {
- // This might be supported in the future.
- if (textarget != GL_TEXTURE_2D)
- return;
// Image is still in use if texture is attached to a framebuffer.
if (texture && !texture->IsAttachedToFramebuffer()) {
gfx::GLImage* image = texture->GetLevelImage(textarget, 0);
@@ -5976,7 +6007,7 @@ void GLES2DecoderImpl::DoDidUseTexImageIfNeeded(
GetErrorState());
glBindTexture(textarget, texture->service_id());
image->DidUseTexImage();
- RestoreCurrentTexture2DBindings(&state_);
+ RestoreCurrentTextureBindings(&state_, textarget);
}
}
}
@@ -5984,8 +6015,7 @@ void GLES2DecoderImpl::DoDidUseTexImageIfNeeded(
bool GLES2DecoderImpl::PrepareTexturesForRender() {
DCHECK(state_.current_program.get());
if (!texture_manager()->HaveUnrenderableTextures() &&
- !texture_manager()->HaveImages() &&
- !features().oes_egl_image_external) {
+ !texture_manager()->HaveImages()) {
return true;
}
@@ -6018,8 +6048,8 @@ bool GLES2DecoderImpl::PrepareTexturesForRender() {
continue;
}
- Texture* texture = texture_ref->texture();
- if (textarget == GL_TEXTURE_2D) {
+ if (textarget != GL_TEXTURE_CUBE_MAP) {
+ Texture* texture = texture_ref->texture();
gfx::GLImage* image = texture->GetLevelImage(textarget, 0);
if (image && !texture->IsAttachedToFramebuffer()) {
ScopedGLErrorSuppressor suppressor(
@@ -6030,8 +6060,6 @@ bool GLES2DecoderImpl::PrepareTexturesForRender() {
continue;
}
}
-
- UpdateStreamTextureIfNeeded(texture, texture_unit_index);
}
// else: should this be an error?
}
@@ -6064,10 +6092,10 @@ void GLES2DecoderImpl::RestoreStateForTextures() {
continue;
}
- Texture* texture = texture_ref->texture();
- if (texture_unit.bind_target == GL_TEXTURE_2D) {
- gfx::GLImage* image = texture->GetLevelImage(
- texture_unit.bind_target, 0);
+ if (texture_unit.bind_target != GL_TEXTURE_CUBE_MAP) {
+ Texture* texture = texture_ref->texture();
+ gfx::GLImage* image =
+ texture->GetLevelImage(texture_unit.bind_target, 0);
if (image && !texture->IsAttachedToFramebuffer()) {
ScopedGLErrorSuppressor suppressor(
"GLES2DecoderImpl::RestoreStateForTextures", GetErrorState());
@@ -6208,21 +6236,23 @@ bool GLES2DecoderImpl::SimulateAttrib0(
return true;
}
-void GLES2DecoderImpl::RestoreStateForAttrib(GLuint attrib_index) {
+void GLES2DecoderImpl::RestoreStateForAttrib(
+ GLuint attrib_index, bool restore_array_binding) {
const VertexAttrib* attrib =
state_.vertex_attrib_manager->GetVertexAttrib(attrib_index);
- const void* ptr = reinterpret_cast<const void*>(attrib->offset());
- Buffer* buffer = attrib->buffer();
- glBindBuffer(GL_ARRAY_BUFFER, buffer ? buffer->service_id() : 0);
- glVertexAttribPointer(
- attrib_index, attrib->size(), attrib->type(), attrib->normalized(),
- attrib->gl_stride(), ptr);
+ if (restore_array_binding) {
+ const void* ptr = reinterpret_cast<const void*>(attrib->offset());
+ Buffer* buffer = attrib->buffer();
+ glBindBuffer(GL_ARRAY_BUFFER, buffer ? buffer->service_id() : 0);
+ glVertexAttribPointer(
+ attrib_index, attrib->size(), attrib->type(), attrib->normalized(),
+ attrib->gl_stride(), ptr);
+ }
if (attrib->divisor())
glVertexAttribDivisorANGLE(attrib_index, attrib->divisor());
glBindBuffer(
- GL_ARRAY_BUFFER,
- state_.bound_array_buffer.get() ? state_.bound_array_buffer->service_id()
- : 0);
+ GL_ARRAY_BUFFER, state_.bound_array_buffer.get() ?
+ state_.bound_array_buffer->service_id() : 0);
// Never touch vertex attribute 0's state (in particular, never
// disable it) when running on desktop GL because it will never be
@@ -6411,12 +6441,12 @@ error::Error GLES2DecoderImpl::DoDrawArrays(
primcount)) {
bool textures_set = !PrepareTexturesForRender();
ApplyDirtyState();
+ ScopedRenderTo do_render(framebuffer_state_.bound_draw_framebuffer.get());
if (!instanced) {
glDrawArrays(mode, first, count);
} else {
glDrawArraysInstancedANGLE(mode, first, count, primcount);
}
- ProcessPendingQueries();
if (textures_set) {
RestoreStateForTextures();
}
@@ -6425,7 +6455,11 @@ error::Error GLES2DecoderImpl::DoDrawArrays(
}
}
if (simulated_attrib_0) {
- RestoreStateForAttrib(0);
+ // We don't have to restore attrib 0 generic data at the end of this
+ // function even if it is simulated. This is because we will simulate
+ // it in each draw call, and attrib 0 generic data queries use cached
+ // values instead of passing down to the underlying driver.
+ RestoreStateForAttrib(0, false);
}
}
return error::kNoError;
@@ -6540,6 +6574,7 @@ error::Error GLES2DecoderImpl::DoDrawElements(
indices = element_array_buffer->GetRange(offset, 0);
}
+ ScopedRenderTo do_render(framebuffer_state_.bound_draw_framebuffer.get());
if (!instanced) {
glDrawElements(mode, count, type, indices);
} else {
@@ -6551,7 +6586,6 @@ error::Error GLES2DecoderImpl::DoDrawElements(
element_array_buffer->service_id());
}
- ProcessPendingQueries();
if (textures_set) {
RestoreStateForTextures();
}
@@ -6560,7 +6594,11 @@ error::Error GLES2DecoderImpl::DoDrawElements(
}
}
if (simulated_attrib_0) {
- RestoreStateForAttrib(0);
+ // We don't have to restore attrib 0 generic data at the end of this
+ // function even if it is simulated. This is because we will simulate
+ // it in each draw call, and attrib 0 generic data queries use cached
+ // values instead of passing down to the underlying driver.
+ RestoreStateForAttrib(0, false);
}
}
return error::kNoError;
@@ -6631,17 +6669,6 @@ error::Error GLES2DecoderImpl::ShaderSourceHelper(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleShaderSource(
- uint32 immediate_data_size, const cmds::ShaderSource& c) {
- uint32 data_size = c.data_size;
- const char* data = GetSharedMemoryAs<const char*>(
- c.data_shm_id, c.data_shm_offset, data_size);
- if (!data) {
- return error::kOutOfBounds;
- }
- return ShaderSourceHelper(c.shader, data, data_size);
-}
-
error::Error GLES2DecoderImpl::HandleShaderSourceBucket(
uint32 immediate_data_size, const cmds::ShaderSourceBucket& c) {
Bucket* bucket = GetBucket(c.data_bucket_id);
@@ -6719,7 +6746,7 @@ error::Error GLES2DecoderImpl::HandleGetTranslatedShaderSourceANGLE(
uint32 bucket_id = static_cast<uint32>(c.bucket_id);
Bucket* bucket = CreateBucket(bucket_id);
Shader* shader = GetShaderInfoNotProgram(
- shader_id, "glTranslatedGetShaderSourceANGLE");
+ shader_id, "glGetTranslatedShaderSourceANGLE");
if (!shader) {
bucket->SetSize(0);
return error::kNoError;
@@ -6885,6 +6912,39 @@ void GLES2DecoderImpl::GetVertexAttribHelper(
}
}
+void GLES2DecoderImpl::DoGetTexParameterfv(
+ GLenum target, GLenum pname, GLfloat* params) {
+ InitTextureMaxAnisotropyIfNeeded(target, pname);
+ glGetTexParameterfv(target, pname, params);
+}
+
+void GLES2DecoderImpl::DoGetTexParameteriv(
+ GLenum target, GLenum pname, GLint* params) {
+ InitTextureMaxAnisotropyIfNeeded(target, pname);
+ glGetTexParameteriv(target, pname, params);
+}
+
+void GLES2DecoderImpl::InitTextureMaxAnisotropyIfNeeded(
+ GLenum target, GLenum pname) {
+ if (!workarounds().init_texture_max_anisotropy)
+ return;
+ if (pname != GL_TEXTURE_MAX_ANISOTROPY_EXT ||
+ !validators_->texture_parameter.IsValid(pname)) {
+ return;
+ }
+
+ TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget(
+ &state_, target);
+ if (!texture_ref) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION,
+ "glGetTexParamter{fi}v", "unknown texture for target");
+ return;
+ }
+ Texture* texture = texture_ref->texture();
+ texture->InitTextureMaxAnisotropyIfNeeded(target);
+}
+
void GLES2DecoderImpl::DoGetVertexAttribfv(
GLuint index, GLenum pname, GLfloat* params) {
VertexAttrib* attrib = state_.vertex_attrib_manager->GetVertexAttrib(index);
@@ -7011,7 +7071,7 @@ error::Error GLES2DecoderImpl::HandleVertexAttribPointer(
if (!state_.bound_array_buffer.get() ||
state_.bound_array_buffer->IsDeleted()) {
if (state_.vertex_attrib_manager.get() ==
- default_vertex_attrib_manager_.get()) {
+ state_.default_vertex_attrib_manager.get()) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE, "glVertexAttribPointer", "no array buffer bound");
return error::kNoError;
@@ -7103,6 +7163,7 @@ error::Error GLES2DecoderImpl::HandleVertexAttribDivisorANGLE(
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
"glVertexAttribDivisorANGLE", "function not available");
+ return error::kNoError;
}
GLuint index = c.index;
GLuint divisor = c.divisor;
@@ -7251,6 +7312,7 @@ void GLES2DecoderImpl::FinishReadPixels(
error::Error GLES2DecoderImpl::HandleReadPixels(
uint32 immediate_data_size, const cmds::ReadPixels& c) {
+ TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleReadPixels");
error::Error fbo_error = WillAccessBoundFramebufferForRead();
if (fbo_error != error::kNoError)
return fbo_error;
@@ -7329,7 +7391,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(
return error::kNoError;
}
- LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glReadPixel");
+ LOCAL_COPY_REAL_GL_ERRORS_TO_WRAPPER("glReadPixels");
ScopedResolvedFrameBufferBinder binder(this, false, true);
@@ -7393,6 +7455,9 @@ error::Error GLES2DecoderImpl::HandleReadPixels(
c, buffer));
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 0);
return error::kNoError;
+ } else {
+ // On error, unbind pack buffer and fall through to sync readpixels
+ glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 0);
}
}
glReadPixels(x, y, width, height, format, type, pixels);
@@ -7421,7 +7486,7 @@ error::Error GLES2DecoderImpl::HandlePixelStorei(
case GL_UNPACK_ALIGNMENT:
if (!validators_->pixel_store_alignment.IsValid(param)) {
LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glPixelStore", "param GL_INVALID_VALUE");
+ GL_INVALID_VALUE, "glPixelStorei", "param GL_INVALID_VALUE");
return error::kNoError;
}
break;
@@ -7459,7 +7524,10 @@ error::Error GLES2DecoderImpl::HandlePixelStorei(
error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM(
uint32 immediate_data_size, const cmds::PostSubBufferCHROMIUM& c) {
TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandlePostSubBufferCHROMIUM");
- if (!surface_->HasExtension("GL_CHROMIUM_post_sub_buffer")) {
+ {
+ TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame");
+ }
+ if (!supports_post_sub_buffer_) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
"glPostSubBufferCHROMIUM", "command not supported by surface");
@@ -7482,6 +7550,16 @@ error::Error GLES2DecoderImpl::HandlePostSubBufferCHROMIUM(
}
}
+error::Error GLES2DecoderImpl::HandleScheduleOverlayPlaneCHROMIUM(
+ uint32 immediate_data_size,
+ const cmds::ScheduleOverlayPlaneCHROMIUM& c) {
+ NOTIMPLEMENTED() << "Overlay supported isn't finished.";
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glScheduleOverlayPlaneCHROMIUM",
+ "function not implemented");
+ return error::kNoError;
+}
+
error::Error GLES2DecoderImpl::GetAttribLocationHelper(
GLuint client_id, uint32 location_shm_id, uint32 location_shm_offset,
const std::string& name_str) {
@@ -7516,19 +7594,6 @@ error::Error GLES2DecoderImpl::GetAttribLocationHelper(
error::Error GLES2DecoderImpl::HandleGetAttribLocation(
uint32 immediate_data_size, const cmds::GetAttribLocation& c) {
- uint32 name_size = c.data_size;
- const char* name = GetSharedMemoryAs<const char*>(
- c.name_shm_id, c.name_shm_offset, name_size);
- if (!name) {
- return error::kOutOfBounds;
- }
- String name_str(name, name_size);
- return GetAttribLocationHelper(
- c.program, c.location_shm_id, c.location_shm_offset, name_str);
-}
-
-error::Error GLES2DecoderImpl::HandleGetAttribLocationBucket(
- uint32 immediate_data_size, const cmds::GetAttribLocationBucket& c) {
Bucket* bucket = GetBucket(c.name_bucket_id);
if (!bucket) {
return error::kInvalidArguments;
@@ -7550,7 +7615,7 @@ error::Error GLES2DecoderImpl::GetUniformLocationHelper(
return error::kNoError;
}
Program* program = GetProgramInfoNotShader(
- client_id, "glUniformLocation");
+ client_id, "glGetUniformLocation");
if (!program) {
return error::kNoError;
}
@@ -7575,19 +7640,6 @@ error::Error GLES2DecoderImpl::GetUniformLocationHelper(
error::Error GLES2DecoderImpl::HandleGetUniformLocation(
uint32 immediate_data_size, const cmds::GetUniformLocation& c) {
- uint32 name_size = c.data_size;
- const char* name = GetSharedMemoryAs<const char*>(
- c.name_shm_id, c.name_shm_offset, name_size);
- if (!name) {
- return error::kOutOfBounds;
- }
- String name_str(name, name_size);
- return GetUniformLocationHelper(
- c.program, c.location_shm_id, c.location_shm_offset, name_str);
-}
-
-error::Error GLES2DecoderImpl::HandleGetUniformLocationBucket(
- uint32 immediate_data_size, const cmds::GetUniformLocationBucket& c) {
Bucket* bucket = GetBucket(c.name_bucket_id);
if (!bucket) {
return error::kInvalidArguments;
@@ -7650,12 +7702,19 @@ error::Error GLES2DecoderImpl::HandleGetString(
std::string());
}
}
+ if (!shader_texture_lod_explicitly_enabled_) {
+ size_t offset = extensions.find(kEXTShaderTextureLodExtension);
+ if (std::string::npos != offset) {
+ extensions.replace(offset,
+ arraysize(kEXTShaderTextureLodExtension),
+ std::string());
+ }
+ }
} else {
extensions = feature_info_->extensions().c_str();
}
- std::string surface_extensions = surface_->GetExtensions();
- if (!surface_extensions.empty())
- extensions += " " + surface_extensions;
+ if (supports_post_sub_buffer_)
+ extensions += " GL_CHROMIUM_post_sub_buffer";
str = extensions.c_str();
}
break;
@@ -7697,6 +7756,7 @@ bool GLES2DecoderImpl::ClearLevel(
unsigned bind_target,
unsigned target,
int level,
+ unsigned internal_format,
unsigned format,
unsigned type,
int width,
@@ -7723,10 +7783,11 @@ bool GLES2DecoderImpl::ClearLevel(
return false;
}
glClearStencil(0);
- glStencilMask(-1);
+ state_.SetDeviceStencilMaskSeparate(GL_FRONT, -1);
+ state_.SetDeviceStencilMaskSeparate(GL_BACK, -1);
glClearDepth(1.0f);
- glDepthMask(true);
- glDisable(GL_SCISSOR_TEST);
+ state_.SetDeviceDepthMask(GL_TRUE);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false);
glClear(GL_DEPTH_BUFFER_BIT | (have_stencil ? GL_STENCIL_BUFFER_BIT : 0));
RestoreClearState();
@@ -7783,7 +7844,8 @@ bool GLES2DecoderImpl::ClearLevel(
glTexSubImage2D(target, level, 0, y, width, h, format, type, zero.get());
} else {
glTexImage2D(
- target, level, format, width, h, 0, format, type, zero.get());
+ target, level, internal_format, width, h, 0, format, type,
+ zero.get());
}
y += tile_height;
}
@@ -7799,15 +7861,17 @@ const int kS3TCBlockWidth = 4;
const int kS3TCBlockHeight = 4;
const int kS3TCDXT1BlockSize = 8;
const int kS3TCDXT3AndDXT5BlockSize = 16;
-const int kETC1BlockWidth = 4;
-const int kETC1BlockHeight = 4;
-const int kETC1BlockSize = 8;
bool IsValidDXTSize(GLint level, GLsizei size) {
return (size == 1) ||
(size == 2) || !(size % kS3TCBlockWidth);
}
+bool IsValidPVRTCSize(GLint level, GLsizei size) {
+ // Ensure that the size is a power of two
+ return (size & (size - 1)) == 0;
+}
+
} // anonymous namespace.
bool GLES2DecoderImpl::ValidateCompressedTexFuncData(
@@ -7816,8 +7880,10 @@ bool GLES2DecoderImpl::ValidateCompressedTexFuncData(
unsigned int bytes_required = 0;
switch (format) {
+ case GL_ATC_RGB_AMD:
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
- case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: {
+ case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
+ case GL_ETC1_RGB8_OES: {
int num_blocks_across =
(width + kS3TCBlockWidth - 1) / kS3TCBlockWidth;
int num_blocks_down =
@@ -7826,6 +7892,8 @@ bool GLES2DecoderImpl::ValidateCompressedTexFuncData(
bytes_required = num_blocks * kS3TCDXT1BlockSize;
break;
}
+ case GL_ATC_RGBA_EXPLICIT_ALPHA_AMD:
+ case GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD:
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: {
int num_blocks_across =
@@ -7836,13 +7904,14 @@ bool GLES2DecoderImpl::ValidateCompressedTexFuncData(
bytes_required = num_blocks * kS3TCDXT3AndDXT5BlockSize;
break;
}
- case GL_ETC1_RGB8_OES: {
- int num_blocks_across =
- (width + kETC1BlockWidth - 1) / kETC1BlockWidth;
- int num_blocks_down =
- (height + kETC1BlockHeight - 1) / kETC1BlockHeight;
- int num_blocks = num_blocks_across * num_blocks_down;
- bytes_required = num_blocks * kETC1BlockSize;
+ case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
+ case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: {
+ bytes_required = (std::max(width, 8) * std::max(height, 8) * 4 + 7)/8;
+ break;
+ }
+ case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
+ case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: {
+ bytes_required = (std::max(width, 16) * std::max(height, 8) * 2 + 7)/8;
break;
}
default:
@@ -7875,7 +7944,10 @@ bool GLES2DecoderImpl::ValidateCompressedTexDimensions(
}
return true;
}
- case GL_ETC1_RGB8_OES:
+ case GL_ATC_RGB_AMD:
+ case GL_ATC_RGBA_EXPLICIT_ALPHA_AMD:
+ case GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD:
+ case GL_ETC1_RGB8_OES: {
if (width <= 0 || height <= 0) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, function_name,
@@ -7883,6 +7955,20 @@ bool GLES2DecoderImpl::ValidateCompressedTexDimensions(
return false;
}
return true;
+ }
+ case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
+ case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
+ case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
+ case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: {
+ if (!IsValidPVRTCSize(level, width) ||
+ !IsValidPVRTCSize(level, height)) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION, function_name,
+ "width or height invalid for level");
+ return false;
+ }
+ return true;
+ }
default:
return false;
}
@@ -7924,12 +8010,43 @@ bool GLES2DecoderImpl::ValidateCompressedTexSubDimensions(
return ValidateCompressedTexDimensions(
function_name, level, width, height, format);
}
+ case GL_ATC_RGB_AMD:
+ case GL_ATC_RGBA_EXPLICIT_ALPHA_AMD:
+ case GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD: {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION, function_name,
+ "not supported for ATC textures");
+ return false;
+ }
case GL_ETC1_RGB8_OES: {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, function_name,
- "TexsubImage2d not supported for ECT1_RGB8_OES textures");
+ "not supported for ECT1_RGB8_OES textures");
return false;
}
+ case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
+ case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
+ case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
+ case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: {
+ if ((xoffset != 0) || (yoffset != 0)) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION, function_name,
+ "xoffset and yoffset must be zero");
+ return false;
+ }
+ GLsizei tex_width = 0;
+ GLsizei tex_height = 0;
+ if (!texture->GetLevelSize(target, level, &tex_width, &tex_height) ||
+ width != tex_width ||
+ height != tex_height) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION, function_name,
+ "dimensions must match existing texture level dimensions");
+ return false;
+ }
+ return ValidateCompressedTexDimensions(
+ function_name, level, width, height, format);
+ }
default:
return false;
}
@@ -8112,7 +8229,8 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket(
error::Error GLES2DecoderImpl::HandleTexImage2D(
uint32 immediate_data_size, const cmds::TexImage2D& c) {
- TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleTexImage2D");
+ TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexImage2D",
+ "width", c.width, "height", c.height);
// Set as failed for now, but if it successed, this will be set to not failed.
texture_state_.tex_image_2d_failed = true;
GLenum target = static_cast<GLenum>(c.target);
@@ -8184,7 +8302,7 @@ void GLES2DecoderImpl::DoCompressedTexSubImage2D(
return;
}
if (!texture->ValidForTexture(
- target, level, xoffset, yoffset, width, height, format, type)) {
+ target, level, xoffset, yoffset, width, height, type)) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE, "glCompressedTexSubImage2D", "bad dimensions.");
return;
@@ -8246,6 +8364,7 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
if (texture->IsImmutable()) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, "glCopyTexImage2D", "texture is immutable");
+ return;
}
if (!texture_manager()->ValidForTarget(target, level, width, height, 1) ||
border != 0) {
@@ -8253,9 +8372,9 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
GL_INVALID_VALUE, "glCopyTexImage2D", "dimensions out of range");
return;
}
- if (!texture_manager()->ValidateTextureParameters(
- state_.GetErrorState(), "glCopyTexImage2D", target, internal_format,
- GL_UNSIGNED_BYTE, level)) {
+ if (!texture_manager()->ValidateFormatAndTypeCombination(
+ state_.GetErrorState(), "glCopyTexImage2D", internal_format,
+ GL_UNSIGNED_BYTE)) {
return;
}
@@ -8318,8 +8437,8 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
// some part was clipped so clear the texture.
if (!ClearLevel(
texture->service_id(), texture->target(),
- target, level, internal_format, GL_UNSIGNED_BYTE, width, height,
- texture->IsImmutable())) {
+ target, level, internal_format, internal_format, GL_UNSIGNED_BYTE,
+ width, height, texture->IsImmutable())) {
LOCAL_SET_GL_ERROR(
GL_OUT_OF_MEMORY, "glCopyTexImage2D", "dimensions too big");
return;
@@ -8329,11 +8448,13 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
GLint dy = copyY - y;
GLint destX = dx;
GLint destY = dy;
+ ScopedModifyPixels modify(texture_ref);
glCopyTexSubImage2D(target, level,
destX, destY, copyX, copyY,
copyWidth, copyHeight);
}
} else {
+ ScopedModifyPixels modify(texture_ref);
glCopyTexImage2D(target, level, internal_format,
copyX, copyY, copyWidth, copyHeight, border);
}
@@ -8368,7 +8489,7 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
GLenum format = 0;
if (!texture->GetLevelType(target, level, &type, &format) ||
!texture->ValidForTexture(
- target, level, xoffset, yoffset, width, height, format, type)) {
+ target, level, xoffset, yoffset, width, height, type)) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE, "glCopyTexSubImage2D", "bad dimensions.");
return;
@@ -8433,6 +8554,7 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
}
scoped_ptr<char[]> zero(new char[pixels_size]);
memset(zero.get(), 0, pixels_size);
+ ScopedModifyPixels modify(texture_ref);
glTexSubImage2D(
target, level, xoffset, yoffset, width, height,
format, type, zero.get());
@@ -8443,6 +8565,7 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D(
GLint dy = copyY - y;
GLint destX = xoffset + dx;
GLint destY = yoffset + dy;
+ ScopedModifyPixels modify(texture_ref);
glCopyTexSubImage2D(target, level,
destX, destY, copyX, copyY,
copyWidth, copyHeight);
@@ -8474,14 +8597,6 @@ bool GLES2DecoderImpl::ValidateTexSubImage2D(
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "height < 0");
return false;
}
- if (!validators_->texture_format.IsValid(format)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM(function_name, format, "format");
- return false;
- }
- if (!validators_->pixel_type.IsValid(type)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM(function_name, type, "type");
- return false;
- }
TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget(
&state_, target);
if (!texture_ref) {
@@ -8498,10 +8613,8 @@ bool GLES2DecoderImpl::ValidateTexSubImage2D(
GL_INVALID_OPERATION, function_name, "level does not exist.");
return false;
}
- if (format != internal_format) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- function_name, "format does not match internal format.");
+ if (!texture_manager()->ValidateTextureParameters(state_.GetErrorState(),
+ function_name, format, type, internal_format, level)) {
return false;
}
if (type != current_type) {
@@ -8517,7 +8630,7 @@ bool GLES2DecoderImpl::ValidateTexSubImage2D(
return false;
}
if (!texture->ValidForTexture(
- target, level, xoffset, yoffset, width, height, format, type)) {
+ target, level, xoffset, yoffset, width, height, type)) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, function_name, "bad dimensions.");
return false;
}
@@ -8574,10 +8687,13 @@ error::Error GLES2DecoderImpl::DoTexSubImage2D(
if (!texture_state_.texsubimage2d_faster_than_teximage2d &&
!texture->IsImmutable()) {
ScopedTextureUploadTimer timer(&texture_state_);
- // NOTE: In OpenGL ES 2.0 border is always zero and format is always the
- // same as internal_foramt. If that changes we'll need to look them up.
+ GLenum internal_format;
+ GLenum tex_type;
+ texture->GetLevelType(target, level, &tex_type, &internal_format);
+ // NOTE: In OpenGL ES 2.0 border is always zero. If that changes we'll need
+ // to look it up.
glTexImage2D(
- target, level, format, width, height, 0, format, type, data);
+ target, level, internal_format, width, height, 0, format, type, data);
} else {
ScopedTextureUploadTimer timer(&texture_state_);
glTexSubImage2D(
@@ -8589,7 +8705,8 @@ error::Error GLES2DecoderImpl::DoTexSubImage2D(
error::Error GLES2DecoderImpl::HandleTexSubImage2D(
uint32 immediate_data_size, const cmds::TexSubImage2D& c) {
- TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleTexSubImage2D");
+ TRACE_EVENT2("gpu", "GLES2DecoderImpl::HandleTexSubImage2D",
+ "width", c.width, "height", c.height);
GLboolean internal = static_cast<GLboolean>(c.internal);
if (internal == GL_TRUE && texture_state_.tex_image_2d_failed)
return error::kNoError;
@@ -8923,7 +9040,7 @@ error::Error GLES2DecoderImpl::HandleShaderBinary(
if (shaders == NULL || binary == NULL) {
return error::kOutOfBounds;
}
- scoped_array<GLuint> service_ids(new GLuint[n]);
+ scoped_ptr<GLuint[]> service_ids(new GLuint[n]);
for (GLsizei ii = 0; ii < n; ++ii) {
Shader* shader = GetShader(shaders[ii]);
if (!shader) {
@@ -8950,6 +9067,10 @@ void GLES2DecoderImpl::DoSwapBuffers() {
TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoSwapBuffers",
"offscreen", is_offscreen,
"frame", this_frame_number);
+ {
+ TRACE_EVENT_SYNTHETIC_DELAY("gpu.PresentingFrame");
+ }
+
bool is_tracing;
TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("gpu.debug"),
&is_tracing);
@@ -8995,8 +9116,8 @@ void GLES2DecoderImpl::DoSwapBuffers() {
ScopedFrameBufferBinder binder(this,
offscreen_saved_frame_buffer_->id());
glClearColor(0, 0, 0, 0);
- glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
- glDisable(GL_SCISSOR_TEST);
+ state_.SetDeviceColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+ state_.SetDeviceCapabilityState(GL_SCISSOR_TEST, false);
glClear(GL_COLOR_BUFFER_BIT);
RestoreClearState();
}
@@ -9040,9 +9161,6 @@ void GLES2DecoderImpl::DoSwapBuffers() {
glFlush();
}
} else {
- TRACE_EVENT2("gpu", "Onscreen",
- "width", surface_->GetSize().width(),
- "height", surface_->GetSize().height());
if (!surface_->SwapBuffers()) {
LOG(ERROR) << "Context lost because SwapBuffers failed.";
LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB);
@@ -9123,6 +9241,7 @@ error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM(
bool desire_standard_derivatives = false;
bool desire_frag_depth = false;
bool desire_draw_buffers = false;
+ bool desire_shader_texture_lod = false;
if (force_webgl_glsl_validation_) {
desire_standard_derivatives =
feature_str.find("GL_OES_standard_derivatives") != std::string::npos;
@@ -9130,6 +9249,8 @@ error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM(
feature_str.find("GL_EXT_frag_depth") != std::string::npos;
desire_draw_buffers =
feature_str.find("GL_EXT_draw_buffers") != std::string::npos;
+ desire_shader_texture_lod =
+ feature_str.find("GL_EXT_shader_texture_lod") != std::string::npos;
}
if (desire_webgl_glsl_validation != force_webgl_glsl_validation_ ||
@@ -9140,6 +9261,7 @@ error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM(
derivatives_explicitly_enabled_ |= desire_standard_derivatives;
frag_depth_explicitly_enabled_ |= desire_frag_depth;
draw_buffers_explicitly_enabled_ |= desire_draw_buffers;
+ shader_texture_lod_explicitly_enabled_ |= desire_shader_texture_lod;
InitializeShaderTranslator();
}
@@ -9173,7 +9295,7 @@ error::Error GLES2DecoderImpl::HandleGetMultipleIntegervCHROMIUM(
uint32 num = util_.GLGetNumValuesReturned(enums[ii]);
if (num == 0) {
LOCAL_SET_GL_ERROR_INVALID_ENUM(
- "glGetMulitpleCHROMIUM", enums[ii], "pname");
+ "glGetMultipleCHROMIUM", enums[ii], "pname");
return error::kNoError;
}
// Num will never be more than 4.
@@ -9191,7 +9313,7 @@ error::Error GLES2DecoderImpl::HandleGetMultipleIntegervCHROMIUM(
if (result_size != static_cast<uint32>(c.size)) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE,
- "glGetMulitpleCHROMIUM", "bad size GL_INVALID_VALUE");
+ "glGetMultipleCHROMIUM", "bad size GL_INVALID_VALUE");
return error::kNoError;
}
@@ -9296,23 +9418,6 @@ void GLES2DecoderImpl::LoseContext(uint32 reset_status) {
current_decoder_error_ = error::kLostContext;
}
-error::Error GLES2DecoderImpl::HandleLoseContextCHROMIUM(
- uint32 immediate_data_size, const cmds::LoseContextCHROMIUM& c) {
- GLenum current = static_cast<GLenum>(c.current);
- GLenum other = static_cast<GLenum>(c.other);
- if (!validators_->reset_status.IsValid(current)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM(
- "glLoseContextCHROMIUM", current, "current");
- }
- if (!validators_->reset_status.IsValid(other)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", other, "other");
- }
- group_->LoseContexts(other);
- reset_status_ = current;
- current_decoder_error_ = error::kLostContext;
- return error::kLostContext;
-}
-
error::Error GLES2DecoderImpl::HandleInsertSyncPointCHROMIUM(
uint32 immediate_data_size, const cmds::InsertSyncPointCHROMIUM& c) {
return error::kUnknownCommand;
@@ -9320,6 +9425,7 @@ error::Error GLES2DecoderImpl::HandleInsertSyncPointCHROMIUM(
error::Error GLES2DecoderImpl::HandleWaitSyncPointCHROMIUM(
uint32 immediate_data_size, const cmds::WaitSyncPointCHROMIUM& c) {
+ group_->mailbox_manager()->PullTextureUpdates();
if (wait_sync_point_callback_.is_null())
return error::kNoError;
@@ -9346,7 +9452,7 @@ bool GLES2DecoderImpl::GenQueriesEXTHelper(
return false;
}
}
- // NOTE: We don't generate Query objects here. Only in BeginQueryEXT
+ query_manager_->GenQueries(n, client_ids);
return true;
}
@@ -9355,12 +9461,14 @@ void GLES2DecoderImpl::DeleteQueriesEXTHelper(
for (GLsizei ii = 0; ii < n; ++ii) {
QueryManager::Query* query = query_manager_->GetQuery(client_ids[ii]);
if (query && !query->IsDeleted()) {
- if (query == state_.current_query.get()) {
- state_.current_query = NULL;
- }
+ ContextState::QueryMap::iterator it =
+ state_.current_queries.find(query->target());
+ if (it != state_.current_queries.end())
+ state_.current_queries.erase(it);
+
query->Destroy(true);
- query_manager_->RemoveQuery(client_ids[ii]);
}
+ query_manager_->RemoveQuery(client_ids[ii]);
}
}
@@ -9423,6 +9531,14 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
case GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM:
case GL_GET_ERROR_QUERY_CHROMIUM:
break;
+ case GL_COMMANDS_COMPLETED_CHROMIUM:
+ if (!features().chromium_sync_query) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION, "glBeginQueryEXT",
+ "not enabled for commands completed queries");
+ return error::kNoError;
+ }
+ break;
default:
if (!features().occlusion_query_boolean) {
LOCAL_SET_GL_ERROR(
@@ -9433,9 +9549,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
break;
}
- // TODO(hubbe): Make it possible to have one query per type running at the
- // same time.
- if (state_.current_query.get()) {
+ if (state_.current_queries.find(target) != state_.current_queries.end()) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, "glBeginQueryEXT", "query already in progress");
return error::kNoError;
@@ -9448,24 +9562,12 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
QueryManager::Query* query = query_manager_->GetQuery(client_id);
if (!query) {
- // TODO(gman): Decide if we need this check.
- //
- // Checks id was made by glGenQueries
- //
- // From the POV of OpenGL ES 2.0 you need to call glGenQueriesEXT
- // for all Query ids but from the POV of the command buffer service maybe
- // you don't.
- //
- // The client can enforce this. I don't think the service cares.
- //
- // IdAllocatorInterface* id_allocator =
- // group_->GetIdAllocator(id_namespaces::kQueries);
- // if (!id_allocator->InUse(client_id)) {
- // LOCAL_SET_GL_ERROR(
- // GL_INVALID_OPERATION,
- // "glBeginQueryEXT", "id not made by glGenQueriesEXT");
- // return error::kNoError;
- // }
+ if (!query_manager_->IsValidQuery(client_id)) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glBeginQueryEXT",
+ "id not made by glGenQueriesEXT");
+ return error::kNoError;
+ }
query = query_manager_->CreateQuery(
target, client_id, sync_shm_id, sync_shm_offset);
}
@@ -9484,7 +9586,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(
return error::kOutOfBounds;
}
- state_.current_query = query;
+ state_.current_queries[target] = query;
return error::kNoError;
}
@@ -9492,26 +9594,22 @@ error::Error GLES2DecoderImpl::HandleEndQueryEXT(
uint32 immediate_data_size, const cmds::EndQueryEXT& c) {
GLenum target = static_cast<GLenum>(c.target);
uint32 submit_count = static_cast<GLuint>(c.submit_count);
+ ContextState::QueryMap::iterator it = state_.current_queries.find(target);
- if (!state_.current_query.get()) {
+ if (it == state_.current_queries.end()) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, "glEndQueryEXT", "No active query");
return error::kNoError;
}
- if (state_.current_query->target() != target) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glEndQueryEXT", "target does not match active query");
- return error::kNoError;
- }
- if (!query_manager_->EndQuery(state_.current_query.get(), submit_count)) {
+ QueryManager::Query* query = it->second.get();
+ if (!query_manager_->EndQuery(query, submit_count)) {
return error::kOutOfBounds;
}
query_manager_->ProcessPendingTransferQueries();
- state_.current_query = NULL;
+ state_.current_queries.erase(it);
return error::kNoError;
}
@@ -9526,14 +9624,14 @@ bool GLES2DecoderImpl::GenVertexArraysOESHelper(
if (!features().native_vertex_array_object) {
// Emulated VAO
for (GLsizei ii = 0; ii < n; ++ii) {
- CreateVertexAttribManager(client_ids[ii], 0);
+ CreateVertexAttribManager(client_ids[ii], 0, true);
}
} else {
scoped_ptr<GLuint[]> service_ids(new GLuint[n]);
glGenVertexArraysOES(n, service_ids.get());
for (GLsizei ii = 0; ii < n; ++ii) {
- CreateVertexAttribManager(client_ids[ii], service_ids[ii]);
+ CreateVertexAttribManager(client_ids[ii], service_ids[ii], true);
}
}
@@ -9547,7 +9645,7 @@ void GLES2DecoderImpl::DeleteVertexArraysOESHelper(
GetVertexAttribManager(client_ids[ii]);
if (vao && !vao->IsDeleted()) {
if (state_.vertex_attrib_manager.get() == vao) {
- state_.vertex_attrib_manager = default_vertex_attrib_manager_;
+ DoBindVertexArrayOES(0);
}
RemoveVertexAttribManager(client_ids[ii]);
}
@@ -9556,7 +9654,6 @@ void GLES2DecoderImpl::DeleteVertexArraysOESHelper(
void GLES2DecoderImpl::DoBindVertexArrayOES(GLuint client_id) {
VertexAttribManager* vao = NULL;
- GLuint service_id = 0;
if (client_id != 0) {
vao = GetVertexAttribManager(client_id);
if (!vao) {
@@ -9568,11 +9665,9 @@ void GLES2DecoderImpl::DoBindVertexArrayOES(GLuint client_id) {
"glBindVertexArrayOES", "bad vertex array id.");
current_decoder_error_ = error::kNoError;
return;
- } else {
- service_id = vao->service_id();
}
} else {
- vao = default_vertex_attrib_manager_.get();
+ vao = state_.default_vertex_attrib_manager.get();
}
// Only set the VAO state if it's changed
@@ -9581,6 +9676,7 @@ void GLES2DecoderImpl::DoBindVertexArrayOES(GLuint client_id) {
if (!features().native_vertex_array_object) {
EmulateVertexArrayState();
} else {
+ GLuint service_id = vao->service_id();
glBindVertexArrayOES(service_id);
}
}
@@ -9590,7 +9686,7 @@ void GLES2DecoderImpl::DoBindVertexArrayOES(GLuint client_id) {
void GLES2DecoderImpl::EmulateVertexArrayState() {
// Setup the Vertex attribute state
for (uint32 vv = 0; vv < group_->max_vertex_attribs(); ++vv) {
- RestoreStateForAttrib(vv);
+ RestoreStateForAttrib(vv, true);
}
// Setup the element buffer
@@ -9606,93 +9702,13 @@ bool GLES2DecoderImpl::DoIsVertexArrayOES(GLuint client_id) {
return vao && vao->IsValid() && !vao->IsDeleted();
}
-error::Error GLES2DecoderImpl::HandleCreateStreamTextureCHROMIUM(
- uint32 immediate_data_size,
- const cmds::CreateStreamTextureCHROMIUM& c) {
- if (!features().chromium_stream_texture) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glOpenStreamTextureCHROMIUM", "not supported.");
- return error::kNoError;
- }
-
- uint32 client_id = c.client_id;
- typedef cmds::CreateStreamTextureCHROMIUM::Result Result;
- Result* result = GetSharedMemoryAs<Result*>(
- c.result_shm_id, c.result_shm_offset, sizeof(*result));
-
- if (!result)
- return error::kOutOfBounds;
- *result = GL_ZERO;
- TextureRef* texture_ref = texture_manager()->GetTexture(client_id);
- if (!texture_ref) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE,
- "glCreateStreamTextureCHROMIUM", "bad texture id.");
- return error::kNoError;
- }
-
- Texture* texture = texture_ref->texture();
- if (texture->IsStreamTexture()) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glCreateStreamTextureCHROMIUM", "is already a stream texture.");
- return error::kNoError;
- }
-
- if (texture->target() && texture->target() != GL_TEXTURE_EXTERNAL_OES) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glCreateStreamTextureCHROMIUM",
- "is already bound to incompatible target.");
- return error::kNoError;
- }
-
- if (!stream_texture_manager())
- return error::kInvalidArguments;
-
- GLuint object_id = stream_texture_manager()->CreateStreamTexture(
- texture->service_id(), client_id);
-
- if (object_id) {
- texture_manager()->SetStreamTexture(texture_ref, true);
- } else {
- LOCAL_SET_GL_ERROR(
- GL_OUT_OF_MEMORY,
- "glCreateStreamTextureCHROMIUM", "failed to create platform texture.");
- }
-
- *result = object_id;
- return error::kNoError;
-}
-
-error::Error GLES2DecoderImpl::HandleDestroyStreamTextureCHROMIUM(
- uint32 immediate_data_size,
- const cmds::DestroyStreamTextureCHROMIUM& c) {
- GLuint client_id = c.texture;
- TextureRef* texture_ref = texture_manager()->GetTexture(client_id);
- if (texture_ref && texture_manager()->IsStreamTextureOwner(texture_ref)) {
- if (!stream_texture_manager())
- return error::kInvalidArguments;
-
- stream_texture_manager()->DestroyStreamTexture(texture_ref->service_id());
- texture_manager()->SetStreamTexture(texture_ref, false);
- } else {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE,
- "glDestroyStreamTextureCHROMIUM", "bad texture id.");
- }
-
- return error::kNoError;
-}
-
#if defined(OS_MACOSX)
void GLES2DecoderImpl::ReleaseIOSurfaceForTexture(GLuint texture_id) {
TextureToIOSurfaceMap::iterator it = texture_to_io_surface_map_.find(
texture_id);
if (it != texture_to_io_surface_map_.end()) {
// Found a previous IOSurface bound to this texture; release it.
- CFTypeRef surface = it->second;
+ IOSurfaceRef surface = it->second;
CFRelease(surface);
texture_to_io_surface_map_.erase(it);
}
@@ -9710,14 +9726,6 @@ void GLES2DecoderImpl::DoTexImageIOSurface2DCHROMIUM(
return;
}
- IOSurfaceSupport* surface_support = IOSurfaceSupport::Initialize();
- if (!surface_support) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glTexImageIOSurface2DCHROMIUM", "only supported on 10.6.");
- return;
- }
-
if (target != GL_TEXTURE_RECTANGLE_ARB) {
// This might be supported in the future, and if we could require
// support for binding an IOSurface to a NPOT TEXTURE_2D texture, we
@@ -9746,7 +9754,7 @@ void GLES2DecoderImpl::DoTexImageIOSurface2DCHROMIUM(
// plugin process might allocate and release an IOSurface before
// this process gets a chance to look it up. Hold on to any old
// IOSurface in this case.
- CFTypeRef surface = surface_support->IOSurfaceLookup(io_surface_id);
+ IOSurfaceRef surface = IOSurfaceLookup(io_surface_id);
if (!surface) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
@@ -9764,7 +9772,7 @@ void GLES2DecoderImpl::DoTexImageIOSurface2DCHROMIUM(
CGLContextObj context =
static_cast<CGLContextObj>(context_->GetHandle());
- CGLError err = surface_support->CGLTexImageIOSurface2D(
+ CGLError err = CGLTexImageIOSurface2D(
context,
target,
GL_RGBA,
@@ -9840,6 +9848,8 @@ static GLenum ExtractFormatFromStorageFormat(GLenum internalformat) {
void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
GLenum target, GLuint source_id, GLuint dest_id, GLint level,
GLenum internal_format, GLenum dest_type) {
+ TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoCopyTextureCHROMIUM");
+
TextureRef* dest_texture_ref = GetTexture(dest_id);
TextureRef* source_texture_ref = GetTexture(source_id);
@@ -9859,7 +9869,8 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
Texture* dest_texture = dest_texture_ref->texture();
if (dest_texture->target() != GL_TEXTURE_2D ||
(source_texture->target() != GL_TEXTURE_2D &&
- source_texture->target() != GL_TEXTURE_EXTERNAL_OES)) {
+ source_texture->target() != GL_TEXTURE_RECTANGLE_ARB &&
+ source_texture->target() != GL_TEXTURE_EXTERNAL_OES)) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
"glCopyTextureCHROMIUM",
"invalid texture target binding");
@@ -9868,26 +9879,16 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
int source_width, source_height, dest_width, dest_height;
- if (source_texture->IsStreamTexture()) {
- DCHECK_EQ(source_texture->target(),
- static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES));
- DCHECK(stream_texture_manager());
- StreamTexture* stream_tex =
- stream_texture_manager()->LookupStreamTexture(
- source_texture->service_id());
- if (!stream_tex) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE,
- "glCopyTextureChromium", "Stream texture lookup failed");
- return;
- }
- gfx::Size size = stream_tex->GetSize();
+ gfx::GLImage* image =
+ source_texture->GetLevelImage(source_texture->target(), 0);
+ if (image) {
+ gfx::Size size = image->GetSize();
source_width = size.width();
source_height = size.height();
if (source_width <= 0 || source_height <= 0) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE,
- "glCopyTextureChromium", "invalid streamtexture size");
+ "glCopyTextureChromium", "invalid image size");
return;
}
} else {
@@ -9950,7 +9951,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
0, internal_format, dest_type, NULL);
GLenum error = LOCAL_PEEK_GL_ERROR("glCopyTextureCHROMIUM");
if (error != GL_NO_ERROR) {
- RestoreCurrentTexture2DBindings(&state_);
+ RestoreCurrentTextureBindings(&state_, GL_TEXTURE_2D);
return;
}
@@ -9963,6 +9964,7 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
}
DoWillUseTexImageIfNeeded(source_texture, source_texture->target());
+ ScopedModifyPixels modify(dest_texture_ref);
// GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix
// before presenting.
@@ -10051,7 +10053,8 @@ void GLES2DecoderImpl::DoTexStorage2DEXT(
GLenum internal_format,
GLsizei width,
GLsizei height) {
- TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoTexStorage2DEXT");
+ TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoTexStorage2DEXT",
+ "width", width, "height", height);
if (!texture_manager()->ValidForTarget(target, 0, width, height, 1) ||
TextureManager::ComputeMipMapCount(target, width, height, 1) < levels) {
LOCAL_SET_GL_ERROR(
@@ -10127,44 +10130,64 @@ error::Error GLES2DecoderImpl::HandleGenMailboxCHROMIUM(
}
void GLES2DecoderImpl::DoProduceTextureCHROMIUM(GLenum target,
- const GLbyte* mailbox) {
+ const GLbyte* data) {
TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoProduceTextureCHROMIUM",
"context", logger_.GetLogPrefix(),
- "mailbox[0]", static_cast<unsigned char>(mailbox[0]));
+ "mailbox[0]", static_cast<unsigned char>(data[0]));
TextureRef* texture_ref = texture_manager()->GetTextureInfoForTarget(
&state_, target);
+ ProduceTextureRef("glProduceTextureCHROMIUM", texture_ref, target, data);
+}
+
+void GLES2DecoderImpl::DoProduceTextureDirectCHROMIUM(GLuint client_id,
+ GLenum target, const GLbyte* data) {
+ TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoProduceTextureDirectCHROMIUM",
+ "context", logger_.GetLogPrefix(),
+ "mailbox[0]", static_cast<unsigned char>(data[0]));
+
+ ProduceTextureRef("glProduceTextureDirectCHROMIUM", GetTexture(client_id),
+ target, data);
+}
+
+void GLES2DecoderImpl::ProduceTextureRef(std::string func_name,
+ TextureRef* texture_ref, GLenum target, const GLbyte* data) {
+ const Mailbox& mailbox = *reinterpret_cast<const Mailbox*>(data);
+ DLOG_IF(ERROR, !mailbox.Verify()) << func_name << " was passed a "
+ "mailbox that was not generated by "
+ "GenMailboxCHROMIUM.";
+
if (!texture_ref) {
LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glProduceTextureCHROMIUM", "unknown texture for target");
+ GL_INVALID_OPERATION, func_name.c_str(), "unknown texture for target");
return;
}
Texture* produced = texture_manager()->Produce(texture_ref);
if (!produced) {
LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glProduceTextureCHROMIUM", "invalid texture");
+ GL_INVALID_OPERATION, func_name.c_str(), "invalid texture");
return;
}
- if (!group_->mailbox_manager()->ProduceTexture(
- target,
- *reinterpret_cast<const MailboxName*>(mailbox),
- produced)) {
+ if (produced->target() != target) {
LOCAL_SET_GL_ERROR(
- GL_INVALID_OPERATION,
- "glProduceTextureCHROMIUM", "invalid mailbox name");
+ GL_INVALID_OPERATION, func_name.c_str(), "invalid target");
return;
}
+
+ group_->mailbox_manager()->ProduceTexture(target, mailbox, produced);
}
void GLES2DecoderImpl::DoConsumeTextureCHROMIUM(GLenum target,
- const GLbyte* mailbox) {
+ const GLbyte* data) {
TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoConsumeTextureCHROMIUM",
"context", logger_.GetLogPrefix(),
- "mailbox[0]", static_cast<unsigned char>(mailbox[0]));
+ "mailbox[0]", static_cast<unsigned char>(data[0]));
+ const Mailbox& mailbox = *reinterpret_cast<const Mailbox*>(data);
+ DLOG_IF(ERROR, !mailbox.Verify()) << "ConsumeTextureCHROMIUM was passed a "
+ "mailbox that was not generated by "
+ "GenMailboxCHROMIUM.";
scoped_refptr<TextureRef> texture_ref =
texture_manager()->GetTextureInfoForTargetUnlessDefault(&state_, target);
@@ -10181,10 +10204,7 @@ void GLES2DecoderImpl::DoConsumeTextureCHROMIUM(GLenum target,
"glConsumeTextureCHROMIUM", "unknown texture for target");
return;
}
- Texture* texture =
- group_->mailbox_manager()->ConsumeTexture(
- target,
- *reinterpret_cast<const MailboxName*>(mailbox));
+ Texture* texture = group_->mailbox_manager()->ConsumeTexture(target, mailbox);
if (!texture) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
@@ -10223,6 +10243,70 @@ void GLES2DecoderImpl::DoConsumeTextureCHROMIUM(GLenum target,
}
}
+error::Error GLES2DecoderImpl::HandleCreateAndConsumeTextureCHROMIUMImmediate(
+ uint32_t immediate_data_size,
+ const gles2::cmds::CreateAndConsumeTextureCHROMIUMImmediate& c) {
+ GLenum target = static_cast<GLenum>(c.target);
+ uint32_t data_size;
+ if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
+ return error::kOutOfBounds;
+ }
+ if (data_size > immediate_data_size) {
+ return error::kOutOfBounds;
+ }
+ const GLbyte* mailbox =
+ GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size);
+ if (!validators_->texture_bind_target.IsValid(target)) {
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glCreateAndConsumeTextureCHROMIUM", target, "target");
+ return error::kNoError;
+ }
+ if (mailbox == NULL) {
+ return error::kOutOfBounds;
+ }
+ uint32_t client_id = c.client_id;
+ DoCreateAndConsumeTextureCHROMIUM(target, mailbox, client_id);
+ return error::kNoError;
+}
+
+void GLES2DecoderImpl::DoCreateAndConsumeTextureCHROMIUM(GLenum target,
+ const GLbyte* data, GLuint client_id) {
+ TRACE_EVENT2("gpu", "GLES2DecoderImpl::DoCreateAndConsumeTextureCHROMIUM",
+ "context", logger_.GetLogPrefix(),
+ "mailbox[0]", static_cast<unsigned char>(data[0]));
+ const Mailbox& mailbox = *reinterpret_cast<const Mailbox*>(data);
+ DLOG_IF(ERROR, !mailbox.Verify()) << "CreateAndConsumeTextureCHROMIUM was "
+ "passed a mailbox that was not "
+ "generated by GenMailboxCHROMIUM.";
+
+ TextureRef* texture_ref = GetTexture(client_id);
+ if (texture_ref) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION,
+ "glCreateAndConsumeTextureCHROMIUM", "client id already in use");
+ return;
+ }
+ Texture* texture = group_->mailbox_manager()->ConsumeTexture(target, mailbox);
+ if (!texture) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION,
+ "glCreateAndConsumeTextureCHROMIUM", "invalid mailbox name");
+ return;
+ }
+ if (texture->target() != target) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_OPERATION,
+ "glCreateAndConsumeTextureCHROMIUM", "invalid target");
+ return;
+ }
+
+ IdAllocatorInterface* id_allocator =
+ group_->GetIdAllocator(id_namespaces::kTextures);
+ id_allocator->MarkAsUsed(client_id);
+
+ texture_ref = texture_manager()->Consume(client_id, texture);
+}
+
void GLES2DecoderImpl::DoInsertEventMarkerEXT(
GLsizei length, const GLchar* marker) {
if (!marker) {
@@ -10237,18 +10321,27 @@ void GLES2DecoderImpl::DoPushGroupMarkerEXT(
if (!marker) {
marker = "";
}
- debug_marker_manager_.PushGroup(
- length ? std::string(marker, length) : std::string(marker));
+ std::string name = length ? std::string(marker, length) : std::string(marker);
+ debug_marker_manager_.PushGroup(name);
+ gpu_tracer_->Begin(name, kTraceGroupMarker);
}
void GLES2DecoderImpl::DoPopGroupMarkerEXT(void) {
debug_marker_manager_.PopGroup();
+ gpu_tracer_->End(kTraceGroupMarker);
}
void GLES2DecoderImpl::DoBindTexImage2DCHROMIUM(
GLenum target, GLint image_id) {
TRACE_EVENT0("gpu", "GLES2DecoderImpl::DoBindTexImage2DCHROMIUM");
+ if (target == GL_TEXTURE_CUBE_MAP) {
+ LOCAL_SET_GL_ERROR(
+ GL_INVALID_ENUM,
+ "glBindTexImage2DCHROMIUM", "invalid target");
+ return;
+ }
+
// Default target might be conceptually valid, but disallow it to avoid
// accidents.
TextureRef* texture_ref =
@@ -10335,7 +10428,7 @@ error::Error GLES2DecoderImpl::HandleTraceBeginCHROMIUM(
return error::kInvalidArguments;
}
TRACE_EVENT_COPY_ASYNC_BEGIN0("gpu", command_name.c_str(), this);
- if (!gpu_tracer_->Begin(command_name)) {
+ if (!gpu_tracer_->Begin(command_name, kTraceCHROMIUM)) {
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION,
"glTraceBeginCHROMIUM", "unable to create begin trace");
@@ -10352,7 +10445,7 @@ void GLES2DecoderImpl::DoTraceEndCHROMIUM() {
return;
}
TRACE_EVENT_COPY_ASYNC_END0("gpu", gpu_tracer_->CurrentName().c_str(), this);
- gpu_tracer_->End();
+ gpu_tracer_->End(kTraceCHROMIUM);
}
void GLES2DecoderImpl::DoDrawBuffersEXT(
@@ -10397,6 +10490,12 @@ void GLES2DecoderImpl::DoDrawBuffersEXT(
}
}
+void GLES2DecoderImpl::DoLoseContextCHROMIUM(GLenum current, GLenum other) {
+ group_->LoseContexts(other);
+ reset_status_ = current;
+ current_decoder_error_ = error::kLostContext;
+}
+
bool GLES2DecoderImpl::ValidateAsyncTransfer(
const char* function_name,
TextureRef* texture_ref,
@@ -10429,13 +10528,34 @@ bool GLES2DecoderImpl::ValidateAsyncTransfer(
return true;
}
+base::Closure GLES2DecoderImpl::AsyncUploadTokenCompletionClosure(
+ uint32 async_upload_token,
+ uint32 sync_data_shm_id,
+ uint32 sync_data_shm_offset) {
+ scoped_refptr<gpu::Buffer> buffer = GetSharedMemoryBuffer(sync_data_shm_id);
+ if (!buffer || !buffer->GetDataAddress(sync_data_shm_offset,
+ sizeof(AsyncUploadSync)))
+ return base::Closure();
+
+ AsyncMemoryParams mem_params(buffer,
+ sync_data_shm_offset,
+ sizeof(AsyncUploadSync));
+
+ scoped_refptr<AsyncUploadTokenCompletionObserver> observer(
+ new AsyncUploadTokenCompletionObserver(async_upload_token));
+
+ return base::Bind(
+ &AsyncPixelTransferManager::AsyncNotifyCompletion,
+ base::Unretained(GetAsyncPixelTransferManager()),
+ mem_params,
+ observer);
+}
+
error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM(
uint32 immediate_data_size, const cmds::AsyncTexImage2DCHROMIUM& c) {
TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM");
GLenum target = static_cast<GLenum>(c.target);
GLint level = static_cast<GLint>(c.level);
- // TODO(kloveless): Change HandleAsyncTexImage2DCHROMIUM command to use
- // unsigned integer for internalformat.
GLenum internal_format = static_cast<GLenum>(c.internalformat);
GLsizei width = static_cast<GLsizei>(c.width);
GLsizei height = static_cast<GLsizei>(c.height);
@@ -10445,6 +10565,21 @@ error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM(
uint32 pixels_shm_id = static_cast<uint32>(c.pixels_shm_id);
uint32 pixels_shm_offset = static_cast<uint32>(c.pixels_shm_offset);
uint32 pixels_size;
+ uint32 async_upload_token = static_cast<uint32>(c.async_upload_token);
+ uint32 sync_data_shm_id = static_cast<uint32>(c.sync_data_shm_id);
+ uint32 sync_data_shm_offset = static_cast<uint32>(c.sync_data_shm_offset);
+
+ base::ScopedClosureRunner scoped_completion_callback;
+ if (async_upload_token) {
+ base::Closure completion_closure =
+ AsyncUploadTokenCompletionClosure(async_upload_token,
+ sync_data_shm_id,
+ sync_data_shm_offset);
+ if (completion_closure.is_null())
+ return error::kInvalidArguments;
+
+ scoped_completion_callback.Reset(completion_closure);
+ }
// TODO(epenner): Move this and copies of this memory validation
// into ValidateTexImage2D step.
@@ -10492,20 +10627,12 @@ error::Error GLES2DecoderImpl::HandleAsyncTexImage2DCHROMIUM(
return error::kNoError;
}
- // We know the memory/size is safe, so get the real shared memory since
- // it might need to be duped to prevent use-after-free of the memory.
- gpu::Buffer buffer = GetSharedMemoryBuffer(c.pixels_shm_id);
- base::SharedMemory* shared_memory = buffer.shared_memory;
- uint32 shm_size = buffer.size;
- uint32 shm_data_offset = c.pixels_shm_offset;
- uint32 shm_data_size = pixels_size;
-
// Setup the parameters.
AsyncTexImage2DParams tex_params = {
target, level, static_cast<GLenum>(internal_format),
width, height, border, format, type};
- AsyncMemoryParams mem_params = {
- shared_memory, shm_size, shm_data_offset, shm_data_size};
+ AsyncMemoryParams mem_params(
+ GetSharedMemoryBuffer(c.pixels_shm_id), c.pixels_shm_offset, pixels_size);
// Set up the async state if needed, and make the texture
// immutable so the async state stays valid. The level info
@@ -10539,6 +10666,21 @@ error::Error GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM(
GLsizei height = static_cast<GLsizei>(c.height);
GLenum format = static_cast<GLenum>(c.format);
GLenum type = static_cast<GLenum>(c.type);
+ uint32 async_upload_token = static_cast<uint32>(c.async_upload_token);
+ uint32 sync_data_shm_id = static_cast<uint32>(c.sync_data_shm_id);
+ uint32 sync_data_shm_offset = static_cast<uint32>(c.sync_data_shm_offset);
+
+ base::ScopedClosureRunner scoped_completion_callback;
+ if (async_upload_token) {
+ base::Closure completion_closure =
+ AsyncUploadTokenCompletionClosure(async_upload_token,
+ sync_data_shm_id,
+ sync_data_shm_offset);
+ if (completion_closure.is_null())
+ return error::kInvalidArguments;
+
+ scoped_completion_callback.Reset(completion_closure);
+ }
// TODO(epenner): Move this and copies of this memory validation
// into ValidateTexSubImage2D step.
@@ -10582,19 +10724,11 @@ error::Error GLES2DecoderImpl::HandleAsyncTexSubImage2DCHROMIUM(
}
}
- // We know the memory/size is safe, so get the real shared memory since
- // it might need to be duped to prevent use-after-free of the memory.
- gpu::Buffer buffer = GetSharedMemoryBuffer(c.data_shm_id);
- base::SharedMemory* shared_memory = buffer.shared_memory;
- uint32 shm_size = buffer.size;
- uint32 shm_data_offset = c.data_shm_offset;
- uint32 shm_data_size = data_size;
-
// Setup the parameters.
AsyncTexSubImage2DParams tex_params = {target, level, xoffset, yoffset,
width, height, format, type};
- AsyncMemoryParams mem_params = {shared_memory, shm_size,
- shm_data_offset, shm_data_size};
+ AsyncMemoryParams mem_params(
+ GetSharedMemoryBuffer(c.data_shm_id), c.data_shm_offset, data_size);
AsyncPixelTransferDelegate* delegate =
async_pixel_transfer_manager_->GetPixelTransferDelegate(texture_ref);
if (!delegate) {
@@ -10649,12 +10783,28 @@ error::Error GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM(
return error::kNoError;
}
+error::Error GLES2DecoderImpl::HandleWaitAllAsyncTexImage2DCHROMIUM(
+ uint32 immediate_data_size, const cmds::WaitAllAsyncTexImage2DCHROMIUM& c) {
+ TRACE_EVENT0("gpu", "GLES2DecoderImpl::HandleWaitAsyncTexImage2DCHROMIUM");
+
+ GetAsyncPixelTransferManager()->WaitAllAsyncTexImage2D();
+ ProcessFinishedAsyncTransfers();
+ return error::kNoError;
+}
+
void GLES2DecoderImpl::OnTextureRefDetachedFromFramebuffer(
TextureRef* texture_ref) {
Texture* texture = texture_ref->texture();
DoDidUseTexImageIfNeeded(texture, texture->target());
}
+void GLES2DecoderImpl::OnOutOfMemoryError() {
+ if (lose_context_when_out_of_memory_) {
+ group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB);
+ LoseContext(GL_GUILTY_CONTEXT_RESET_ARB);
+ }
+}
+
// Include the auto-generated part of this file. We split this because it means
// we can easily edit the non-auto generated parts right here in this file
// instead of having to edit some template or the code generator.
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.h
index 87c93350415..ad06a6e95bf 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.h
@@ -28,7 +28,6 @@ namespace gpu {
class AsyncPixelTransferDelegate;
class AsyncPixelTransferManager;
-class StreamTextureManager;
struct Mailbox;
namespace gles2 {
@@ -39,14 +38,13 @@ class GLES2Util;
class Logger;
class QueryManager;
class VertexArrayManager;
+struct ContextState;
struct DisallowedFeatures {
DisallowedFeatures()
- : multisampling(false),
- gpu_memory_manager(false) {
+ : gpu_memory_manager(false) {
}
- bool multisampling;
bool gpu_memory_manager;
};
@@ -117,7 +115,7 @@ class GPU_EXPORT GLES2Decoder : public base::SupportsWeakPtr<GLES2Decoder>,
// Set the surface associated with the default FBO.
virtual void SetSurface(const scoped_refptr<gfx::GLSurface>& surface) = 0;
- virtual bool ProduceFrontBuffer(const Mailbox& mailbox) = 0;
+ virtual void ProduceFrontBuffer(const Mailbox& mailbox) = 0;
// Resize an offscreen frame buffer.
virtual bool ResizeOffscreenFrameBuffer(const gfx::Size& size) = 0;
@@ -125,9 +123,6 @@ class GPU_EXPORT GLES2Decoder : public base::SupportsWeakPtr<GLES2Decoder>,
// Make this decoder's GL context current.
virtual bool MakeCurrent() = 0;
- // Have the decoder release the context.
- virtual void ReleaseCurrent() = 0;
-
// Gets the GLES2 Util which holds info.
virtual GLES2Util* GetGLES2Util() = 0;
@@ -140,20 +135,25 @@ class GPU_EXPORT GLES2Decoder : public base::SupportsWeakPtr<GLES2Decoder>,
virtual Capabilities GetCapabilities() = 0;
// Restores all of the decoder GL state.
- virtual void RestoreState() const = 0;
+ virtual void RestoreState(const ContextState* prev_state) const = 0;
// Restore States.
virtual void RestoreActiveTexture() const = 0;
- virtual void RestoreAllTextureUnitBindings() const = 0;
- virtual void RestoreAttribute(unsigned index) const = 0;
+ virtual void RestoreAllTextureUnitBindings(
+ const ContextState* prev_state) const = 0;
+ virtual void RestoreActiveTextureUnitBinding(unsigned int target) const = 0;
virtual void RestoreBufferBindings() const = 0;
virtual void RestoreFramebufferBindings() const = 0;
virtual void RestoreGlobalState() const = 0;
virtual void RestoreProgramBindings() const = 0;
- virtual void RestoreRenderbufferBindings() const = 0;
virtual void RestoreTextureState(unsigned service_id) const = 0;
virtual void RestoreTextureUnitBindings(unsigned unit) const = 0;
+ virtual void ClearAllAttributes() const = 0;
+ virtual void RestoreAllAttributes() const = 0;
+
+ virtual void SetIgnoreCachedStateForTest(bool ignore) = 0;
+
// Gets the QueryManager for this context.
virtual QueryManager* GetQueryManager() = 0;
@@ -194,6 +194,7 @@ class GPU_EXPORT GLES2Decoder : public base::SupportsWeakPtr<GLES2Decoder>,
unsigned bind_target,
unsigned target,
int level,
+ unsigned internal_format,
unsigned format,
unsigned type,
int width,
@@ -228,6 +229,11 @@ class GPU_EXPORT GLES2Decoder : public base::SupportsWeakPtr<GLES2Decoder>,
virtual Logger* GetLogger() = 0;
+ virtual void BeginDecoding();
+ virtual void EndDecoding();
+
+ virtual const ContextState* GetContextState() = 0;
+
protected:
GLES2Decoder();
@@ -241,4 +247,5 @@ class GPU_EXPORT GLES2Decoder : public base::SupportsWeakPtr<GLES2Decoder>,
} // namespace gles2
} // namespace gpu
+
#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_H_
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
index ddc00fcc4fb..8011ab19990 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by gles2_cmd_decoder.cc
@@ -11,14 +13,16 @@
#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
error::Error GLES2DecoderImpl::HandleActiveTexture(
- uint32 immediate_data_size, const gles2::cmds::ActiveTexture& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::ActiveTexture& c) {
GLenum texture = static_cast<GLenum>(c.texture);
DoActiveTexture(texture);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleAttachShader(
- uint32 immediate_data_size, const gles2::cmds::AttachShader& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::AttachShader& c) {
GLuint program = c.program;
GLuint shader = c.shader;
DoAttachShader(program, shader);
@@ -26,7 +30,8 @@ error::Error GLES2DecoderImpl::HandleAttachShader(
}
error::Error GLES2DecoderImpl::HandleBindBuffer(
- uint32 immediate_data_size, const gles2::cmds::BindBuffer& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BindBuffer& c) {
GLenum target = static_cast<GLenum>(c.target);
GLuint buffer = c.buffer;
if (!validators_->buffer_target.IsValid(target)) {
@@ -38,7 +43,8 @@ error::Error GLES2DecoderImpl::HandleBindBuffer(
}
error::Error GLES2DecoderImpl::HandleBindFramebuffer(
- uint32 immediate_data_size, const gles2::cmds::BindFramebuffer& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BindFramebuffer& c) {
GLenum target = static_cast<GLenum>(c.target);
GLuint framebuffer = c.framebuffer;
if (!validators_->frame_buffer_target.IsValid(target)) {
@@ -50,7 +56,8 @@ error::Error GLES2DecoderImpl::HandleBindFramebuffer(
}
error::Error GLES2DecoderImpl::HandleBindRenderbuffer(
- uint32 immediate_data_size, const gles2::cmds::BindRenderbuffer& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BindRenderbuffer& c) {
GLenum target = static_cast<GLenum>(c.target);
GLuint renderbuffer = c.renderbuffer;
if (!validators_->render_buffer_target.IsValid(target)) {
@@ -62,7 +69,8 @@ error::Error GLES2DecoderImpl::HandleBindRenderbuffer(
}
error::Error GLES2DecoderImpl::HandleBindTexture(
- uint32 immediate_data_size, const gles2::cmds::BindTexture& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BindTexture& c) {
GLenum target = static_cast<GLenum>(c.target);
GLuint texture = c.texture;
if (!validators_->texture_bind_target.IsValid(target)) {
@@ -74,15 +82,14 @@ error::Error GLES2DecoderImpl::HandleBindTexture(
}
error::Error GLES2DecoderImpl::HandleBlendColor(
- uint32 immediate_data_size, const gles2::cmds::BlendColor& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BlendColor& c) {
GLclampf red = static_cast<GLclampf>(c.red);
GLclampf green = static_cast<GLclampf>(c.green);
GLclampf blue = static_cast<GLclampf>(c.blue);
GLclampf alpha = static_cast<GLclampf>(c.alpha);
- if (state_.blend_color_red != red ||
- state_.blend_color_green != green ||
- state_.blend_color_blue != blue ||
- state_.blend_color_alpha != alpha) {
+ if (state_.blend_color_red != red || state_.blend_color_green != green ||
+ state_.blend_color_blue != blue || state_.blend_color_alpha != alpha) {
state_.blend_color_red = red;
state_.blend_color_green = green;
state_.blend_color_blue = blue;
@@ -93,7 +100,8 @@ error::Error GLES2DecoderImpl::HandleBlendColor(
}
error::Error GLES2DecoderImpl::HandleBlendEquation(
- uint32 immediate_data_size, const gles2::cmds::BlendEquation& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BlendEquation& c) {
GLenum mode = static_cast<GLenum>(c.mode);
if (!validators_->equation.IsValid(mode)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquation", mode, "mode");
@@ -109,17 +117,18 @@ error::Error GLES2DecoderImpl::HandleBlendEquation(
}
error::Error GLES2DecoderImpl::HandleBlendEquationSeparate(
- uint32 immediate_data_size, const gles2::cmds::BlendEquationSeparate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BlendEquationSeparate& c) {
GLenum modeRGB = static_cast<GLenum>(c.modeRGB);
GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha);
if (!validators_->equation.IsValid(modeRGB)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeRGB,
- "modeRGB");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glBlendEquationSeparate", modeRGB, "modeRGB");
return error::kNoError;
}
if (!validators_->equation.IsValid(modeAlpha)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendEquationSeparate", modeAlpha,
- "modeAlpha");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glBlendEquationSeparate", modeAlpha, "modeAlpha");
return error::kNoError;
}
if (state_.blend_equation_rgb != modeRGB ||
@@ -132,7 +141,8 @@ error::Error GLES2DecoderImpl::HandleBlendEquationSeparate(
}
error::Error GLES2DecoderImpl::HandleBlendFunc(
- uint32 immediate_data_size, const gles2::cmds::BlendFunc& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BlendFunc& c) {
GLenum sfactor = static_cast<GLenum>(c.sfactor);
GLenum dfactor = static_cast<GLenum>(c.dfactor);
if (!validators_->src_blend_factor.IsValid(sfactor)) {
@@ -143,8 +153,7 @@ error::Error GLES2DecoderImpl::HandleBlendFunc(
LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFunc", dfactor, "dfactor");
return error::kNoError;
}
- if (state_.blend_source_rgb != sfactor ||
- state_.blend_dest_rgb != dfactor ||
+ if (state_.blend_source_rgb != sfactor || state_.blend_dest_rgb != dfactor ||
state_.blend_source_alpha != sfactor ||
state_.blend_dest_alpha != dfactor) {
state_.blend_source_rgb = sfactor;
@@ -157,7 +166,8 @@ error::Error GLES2DecoderImpl::HandleBlendFunc(
}
error::Error GLES2DecoderImpl::HandleBlendFuncSeparate(
- uint32 immediate_data_size, const gles2::cmds::BlendFuncSeparate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BlendFuncSeparate& c) {
GLenum srcRGB = static_cast<GLenum>(c.srcRGB);
GLenum dstRGB = static_cast<GLenum>(c.dstRGB);
GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha);
@@ -171,17 +181,16 @@ error::Error GLES2DecoderImpl::HandleBlendFuncSeparate(
return error::kNoError;
}
if (!validators_->src_blend_factor.IsValid(srcAlpha)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", srcAlpha,
- "srcAlpha");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glBlendFuncSeparate", srcAlpha, "srcAlpha");
return error::kNoError;
}
if (!validators_->dst_blend_factor.IsValid(dstAlpha)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlendFuncSeparate", dstAlpha,
- "dstAlpha");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glBlendFuncSeparate", dstAlpha, "dstAlpha");
return error::kNoError;
}
- if (state_.blend_source_rgb != srcRGB ||
- state_.blend_dest_rgb != dstRGB ||
+ if (state_.blend_source_rgb != srcRGB || state_.blend_dest_rgb != dstRGB ||
state_.blend_source_alpha != srcAlpha ||
state_.blend_dest_alpha != dstAlpha) {
state_.blend_source_rgb = srcRGB;
@@ -194,11 +203,12 @@ error::Error GLES2DecoderImpl::HandleBlendFuncSeparate(
}
error::Error GLES2DecoderImpl::HandleBufferSubData(
- uint32 immediate_data_size, const gles2::cmds::BufferSubData& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BufferSubData& c) {
GLenum target = static_cast<GLenum>(c.target);
GLintptr offset = static_cast<GLintptr>(c.offset);
GLsizeiptr size = static_cast<GLsizeiptr>(c.size);
- uint32 data_size = size;
+ uint32_t data_size = size;
const void* data = GetSharedMemoryAs<const void*>(
c.data_shm_id, c.data_shm_offset, data_size);
if (!validators_->buffer_target.IsValid(target)) {
@@ -217,7 +227,8 @@ error::Error GLES2DecoderImpl::HandleBufferSubData(
}
error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus(
- uint32 immediate_data_size, const gles2::cmds::CheckFramebufferStatus& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::CheckFramebufferStatus& c) {
GLenum target = static_cast<GLenum>(c.target);
typedef cmds::CheckFramebufferStatus::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -226,16 +237,16 @@ error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus(
return error::kOutOfBounds;
}
if (!validators_->frame_buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glCheckFramebufferStatus", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glCheckFramebufferStatus", target, "target");
return error::kNoError;
}
*result_dst = DoCheckFramebufferStatus(target);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleClear(
- uint32 immediate_data_size, const gles2::cmds::Clear& c) {
+error::Error GLES2DecoderImpl::HandleClear(uint32_t immediate_data_size,
+ const gles2::cmds::Clear& c) {
error::Error error;
error = WillAccessBoundFramebufferForDraw();
if (error != error::kNoError)
@@ -246,15 +257,14 @@ error::Error GLES2DecoderImpl::HandleClear(
}
error::Error GLES2DecoderImpl::HandleClearColor(
- uint32 immediate_data_size, const gles2::cmds::ClearColor& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::ClearColor& c) {
GLclampf red = static_cast<GLclampf>(c.red);
GLclampf green = static_cast<GLclampf>(c.green);
GLclampf blue = static_cast<GLclampf>(c.blue);
GLclampf alpha = static_cast<GLclampf>(c.alpha);
- if (state_.color_clear_red != red ||
- state_.color_clear_green != green ||
- state_.color_clear_blue != blue ||
- state_.color_clear_alpha != alpha) {
+ if (state_.color_clear_red != red || state_.color_clear_green != green ||
+ state_.color_clear_blue != blue || state_.color_clear_alpha != alpha) {
state_.color_clear_red = red;
state_.color_clear_green = green;
state_.color_clear_blue = blue;
@@ -265,7 +275,8 @@ error::Error GLES2DecoderImpl::HandleClearColor(
}
error::Error GLES2DecoderImpl::HandleClearDepthf(
- uint32 immediate_data_size, const gles2::cmds::ClearDepthf& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::ClearDepthf& c) {
GLclampf depth = static_cast<GLclampf>(c.depth);
if (state_.depth_clear != depth) {
state_.depth_clear = depth;
@@ -275,7 +286,8 @@ error::Error GLES2DecoderImpl::HandleClearDepthf(
}
error::Error GLES2DecoderImpl::HandleClearStencil(
- uint32 immediate_data_size, const gles2::cmds::ClearStencil& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::ClearStencil& c) {
GLint s = static_cast<GLint>(c.s);
if (state_.stencil_clear != s) {
state_.stencil_clear = s;
@@ -285,15 +297,14 @@ error::Error GLES2DecoderImpl::HandleClearStencil(
}
error::Error GLES2DecoderImpl::HandleColorMask(
- uint32 immediate_data_size, const gles2::cmds::ColorMask& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::ColorMask& c) {
GLboolean red = static_cast<GLboolean>(c.red);
GLboolean green = static_cast<GLboolean>(c.green);
GLboolean blue = static_cast<GLboolean>(c.blue);
GLboolean alpha = static_cast<GLboolean>(c.alpha);
- if (state_.color_mask_red != red ||
- state_.color_mask_green != green ||
- state_.color_mask_blue != blue ||
- state_.color_mask_alpha != alpha) {
+ if (state_.color_mask_red != red || state_.color_mask_green != green ||
+ state_.color_mask_blue != blue || state_.color_mask_alpha != alpha) {
state_.color_mask_red = red;
state_.color_mask_green = green;
state_.color_mask_blue = blue;
@@ -304,14 +315,15 @@ error::Error GLES2DecoderImpl::HandleColorMask(
}
error::Error GLES2DecoderImpl::HandleCompileShader(
- uint32 immediate_data_size, const gles2::cmds::CompileShader& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::CompileShader& c) {
GLuint shader = c.shader;
DoCompileShader(shader);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::CompressedTexSubImage2D& c) {
GLenum target = static_cast<GLenum>(c.target);
GLint level = static_cast<GLint>(c.level);
@@ -321,12 +333,12 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D(
GLsizei height = static_cast<GLsizei>(c.height);
GLenum format = static_cast<GLenum>(c.format);
GLsizei imageSize = static_cast<GLsizei>(c.imageSize);
- uint32 data_size = imageSize;
+ uint32_t data_size = imageSize;
const void* data = GetSharedMemoryAs<const void*>(
c.data_shm_id, c.data_shm_offset, data_size);
if (!validators_->texture_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glCompressedTexSubImage2D", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glCompressedTexSubImage2D", target, "target");
return error::kNoError;
}
if (width < 0) {
@@ -340,8 +352,8 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D(
return error::kNoError;
}
if (!validators_->compressed_texture_format.IsValid(format)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glCompressedTexSubImage2D", format,
- "format");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glCompressedTexSubImage2D", format, "format");
return error::kNoError;
}
if (imageSize < 0) {
@@ -358,7 +370,8 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D(
}
error::Error GLES2DecoderImpl::HandleCopyTexImage2D(
- uint32 immediate_data_size, const gles2::cmds::CopyTexImage2D& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::CopyTexImage2D& c) {
error::Error error;
error = WillAccessBoundFramebufferForRead();
if (error != error::kNoError)
@@ -376,8 +389,8 @@ error::Error GLES2DecoderImpl::HandleCopyTexImage2D(
return error::kNoError;
}
if (!validators_->texture_internal_format.IsValid(internalformat)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyTexImage2D", internalformat,
- "internalformat");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glCopyTexImage2D", internalformat, "internalformat");
return error::kNoError;
}
if (width < 0) {
@@ -388,17 +401,13 @@ error::Error GLES2DecoderImpl::HandleCopyTexImage2D(
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glCopyTexImage2D", "height < 0");
return error::kNoError;
}
- if (!validators_->texture_border.IsValid(border)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glCopyTexImage2D", "border GL_INVALID_VALUE");
- return error::kNoError;
- }
DoCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D(
- uint32 immediate_data_size, const gles2::cmds::CopyTexSubImage2D& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::CopyTexSubImage2D& c) {
error::Error error;
error = WillAccessBoundFramebufferForRead();
if (error != error::kNoError)
@@ -428,8 +437,9 @@ error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D(
}
error::Error GLES2DecoderImpl::HandleCreateProgram(
- uint32 immediate_data_size, const gles2::cmds::CreateProgram& c) {
- uint32 client_id = c.client_id;
+ uint32_t immediate_data_size,
+ const gles2::cmds::CreateProgram& c) {
+ uint32_t client_id = c.client_id;
if (!CreateProgramHelper(client_id)) {
return error::kInvalidArguments;
}
@@ -437,21 +447,22 @@ error::Error GLES2DecoderImpl::HandleCreateProgram(
}
error::Error GLES2DecoderImpl::HandleCreateShader(
- uint32 immediate_data_size, const gles2::cmds::CreateShader& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::CreateShader& c) {
GLenum type = static_cast<GLenum>(c.type);
if (!validators_->shader_type.IsValid(type)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glCreateShader", type, "type");
return error::kNoError;
}
- uint32 client_id = c.client_id;
+ uint32_t client_id = c.client_id;
if (!CreateShaderHelper(type, client_id)) {
return error::kInvalidArguments;
}
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleCullFace(
- uint32 immediate_data_size, const gles2::cmds::CullFace& c) {
+error::Error GLES2DecoderImpl::HandleCullFace(uint32_t immediate_data_size,
+ const gles2::cmds::CullFace& c) {
GLenum mode = static_cast<GLenum>(c.mode);
if (!validators_->face_type.IsValid(mode)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glCullFace", mode, "mode");
@@ -464,31 +475,16 @@ error::Error GLES2DecoderImpl::HandleCullFace(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDeleteBuffers(
- uint32 immediate_data_size, const gles2::cmds::DeleteBuffers& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- const GLuint* buffers = GetSharedMemoryAs<const GLuint*>(
- c.buffers_shm_id, c.buffers_shm_offset, data_size);
- if (buffers == NULL) {
- return error::kOutOfBounds;
- }
- DeleteBuffersHelper(n, buffers);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleDeleteBuffersImmediate(
- uint32 immediate_data_size, const gles2::cmds::DeleteBuffersImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::DeleteBuffersImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- const GLuint* buffers = GetImmediateDataAs<const GLuint*>(
- c, data_size, immediate_data_size);
+ const GLuint* buffers =
+ GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size);
if (buffers == NULL) {
return error::kOutOfBounds;
}
@@ -496,32 +492,16 @@ error::Error GLES2DecoderImpl::HandleDeleteBuffersImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDeleteFramebuffers(
- uint32 immediate_data_size, const gles2::cmds::DeleteFramebuffers& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- const GLuint* framebuffers = GetSharedMemoryAs<const GLuint*>(
- c.framebuffers_shm_id, c.framebuffers_shm_offset, data_size);
- if (framebuffers == NULL) {
- return error::kOutOfBounds;
- }
- DeleteFramebuffersHelper(n, framebuffers);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleDeleteFramebuffersImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::DeleteFramebuffersImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- const GLuint* framebuffers = GetImmediateDataAs<const GLuint*>(
- c, data_size, immediate_data_size);
+ const GLuint* framebuffers =
+ GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size);
if (framebuffers == NULL) {
return error::kOutOfBounds;
}
@@ -529,32 +509,16 @@ error::Error GLES2DecoderImpl::HandleDeleteFramebuffersImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDeleteRenderbuffers(
- uint32 immediate_data_size, const gles2::cmds::DeleteRenderbuffers& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- const GLuint* renderbuffers = GetSharedMemoryAs<const GLuint*>(
- c.renderbuffers_shm_id, c.renderbuffers_shm_offset, data_size);
- if (renderbuffers == NULL) {
- return error::kOutOfBounds;
- }
- DeleteRenderbuffersHelper(n, renderbuffers);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::DeleteRenderbuffersImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- const GLuint* renderbuffers = GetImmediateDataAs<const GLuint*>(
- c, data_size, immediate_data_size);
+ const GLuint* renderbuffers =
+ GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size);
if (renderbuffers == NULL) {
return error::kOutOfBounds;
}
@@ -562,32 +526,16 @@ error::Error GLES2DecoderImpl::HandleDeleteRenderbuffersImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDeleteTextures(
- uint32 immediate_data_size, const gles2::cmds::DeleteTextures& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- const GLuint* textures = GetSharedMemoryAs<const GLuint*>(
- c.textures_shm_id, c.textures_shm_offset, data_size);
- if (textures == NULL) {
- return error::kOutOfBounds;
- }
- DeleteTexturesHelper(n, textures);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::DeleteTexturesImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- const GLuint* textures = GetImmediateDataAs<const GLuint*>(
- c, data_size, immediate_data_size);
+ const GLuint* textures =
+ GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size);
if (textures == NULL) {
return error::kOutOfBounds;
}
@@ -596,7 +544,8 @@ error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate(
}
error::Error GLES2DecoderImpl::HandleDepthFunc(
- uint32 immediate_data_size, const gles2::cmds::DepthFunc& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::DepthFunc& c) {
GLenum func = static_cast<GLenum>(c.func);
if (!validators_->cmp_function.IsValid(func)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glDepthFunc", func, "func");
@@ -610,7 +559,8 @@ error::Error GLES2DecoderImpl::HandleDepthFunc(
}
error::Error GLES2DecoderImpl::HandleDepthMask(
- uint32 immediate_data_size, const gles2::cmds::DepthMask& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::DepthMask& c) {
GLboolean flag = static_cast<GLboolean>(c.flag);
if (state_.depth_mask != flag) {
state_.depth_mask = flag;
@@ -620,7 +570,8 @@ error::Error GLES2DecoderImpl::HandleDepthMask(
}
error::Error GLES2DecoderImpl::HandleDepthRangef(
- uint32 immediate_data_size, const gles2::cmds::DepthRangef& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::DepthRangef& c) {
GLclampf zNear = static_cast<GLclampf>(c.zNear);
GLclampf zFar = static_cast<GLclampf>(c.zFar);
DoDepthRangef(zNear, zFar);
@@ -628,15 +579,16 @@ error::Error GLES2DecoderImpl::HandleDepthRangef(
}
error::Error GLES2DecoderImpl::HandleDetachShader(
- uint32 immediate_data_size, const gles2::cmds::DetachShader& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::DetachShader& c) {
GLuint program = c.program;
GLuint shader = c.shader;
DoDetachShader(program, shader);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDisable(
- uint32 immediate_data_size, const gles2::cmds::Disable& c) {
+error::Error GLES2DecoderImpl::HandleDisable(uint32_t immediate_data_size,
+ const gles2::cmds::Disable& c) {
GLenum cap = static_cast<GLenum>(c.cap);
if (!validators_->capability.IsValid(cap)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glDisable", cap, "cap");
@@ -647,15 +599,15 @@ error::Error GLES2DecoderImpl::HandleDisable(
}
error::Error GLES2DecoderImpl::HandleDisableVertexAttribArray(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::DisableVertexAttribArray& c) {
GLuint index = static_cast<GLuint>(c.index);
DoDisableVertexAttribArray(index);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleEnable(
- uint32 immediate_data_size, const gles2::cmds::Enable& c) {
+error::Error GLES2DecoderImpl::HandleEnable(uint32_t immediate_data_size,
+ const gles2::cmds::Enable& c) {
GLenum cap = static_cast<GLenum>(c.cap);
if (!validators_->capability.IsValid(cap)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glEnable", cap, "cap");
@@ -666,15 +618,15 @@ error::Error GLES2DecoderImpl::HandleEnable(
}
error::Error GLES2DecoderImpl::HandleEnableVertexAttribArray(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::EnableVertexAttribArray& c) {
GLuint index = static_cast<GLuint>(c.index);
DoEnableVertexAttribArray(index);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleFinish(
- uint32 immediate_data_size, const gles2::cmds::Finish& c) {
+error::Error GLES2DecoderImpl::HandleFinish(uint32_t immediate_data_size,
+ const gles2::cmds::Finish& c) {
error::Error error;
error = WillAccessBoundFramebufferForRead();
if (error != error::kNoError)
@@ -683,31 +635,32 @@ error::Error GLES2DecoderImpl::HandleFinish(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleFlush(
- uint32 immediate_data_size, const gles2::cmds::Flush& c) {
+error::Error GLES2DecoderImpl::HandleFlush(uint32_t immediate_data_size,
+ const gles2::cmds::Flush& c) {
DoFlush();
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::FramebufferRenderbuffer& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum attachment = static_cast<GLenum>(c.attachment);
GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget);
GLuint renderbuffer = c.renderbuffer;
if (!validators_->frame_buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glFramebufferRenderbuffer", target, "target");
return error::kNoError;
}
if (!validators_->attachment.IsValid(attachment)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", attachment,
- "attachment");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glFramebufferRenderbuffer", attachment, "attachment");
return error::kNoError;
}
if (!validators_->render_buffer_target.IsValid(renderbuffertarget)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferRenderbuffer", renderbuffertarget, "renderbuffertarget"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glFramebufferRenderbuffer", renderbuffertarget, "renderbuffertarget");
return error::kNoError;
}
DoFramebufferRenderbuffer(
@@ -716,30 +669,25 @@ error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer(
}
error::Error GLES2DecoderImpl::HandleFramebufferTexture2D(
- uint32 immediate_data_size, const gles2::cmds::FramebufferTexture2D& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::FramebufferTexture2D& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum attachment = static_cast<GLenum>(c.attachment);
GLenum textarget = static_cast<GLenum>(c.textarget);
GLuint texture = c.texture;
GLint level = static_cast<GLint>(c.level);
if (!validators_->frame_buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", target, "target");
return error::kNoError;
}
if (!validators_->attachment.IsValid(attachment)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", attachment,
- "attachment");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glFramebufferTexture2D", attachment, "attachment");
return error::kNoError;
}
if (!validators_->texture_target.IsValid(textarget)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2D", textarget,
- "textarget");
- return error::kNoError;
- }
- if (!validators_->zero_only.IsValid(level)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glFramebufferTexture2D", "level GL_INVALID_VALUE");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glFramebufferTexture2D", textarget, "textarget");
return error::kNoError;
}
DoFramebufferTexture2D(target, attachment, textarget, texture, level);
@@ -747,7 +695,8 @@ error::Error GLES2DecoderImpl::HandleFramebufferTexture2D(
}
error::Error GLES2DecoderImpl::HandleFrontFace(
- uint32 immediate_data_size, const gles2::cmds::FrontFace& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::FrontFace& c) {
GLenum mode = static_cast<GLenum>(c.mode);
if (!validators_->face_mode.IsValid(mode)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glFrontFace", mode, "mode");
@@ -760,33 +709,16 @@ error::Error GLES2DecoderImpl::HandleFrontFace(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleGenBuffers(
- uint32 immediate_data_size, const gles2::cmds::GenBuffers& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- GLuint* buffers = GetSharedMemoryAs<GLuint*>(
- c.buffers_shm_id, c.buffers_shm_offset, data_size);
- if (buffers == NULL) {
- return error::kOutOfBounds;
- }
- if (!GenBuffersHelper(n, buffers)) {
- return error::kInvalidArguments;
- }
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleGenBuffersImmediate(
- uint32 immediate_data_size, const gles2::cmds::GenBuffersImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GenBuffersImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- GLuint* buffers = GetImmediateDataAs<GLuint*>(
- c, data_size, immediate_data_size);
+ GLuint* buffers =
+ GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size);
if (buffers == NULL) {
return error::kOutOfBounds;
}
@@ -797,7 +729,8 @@ error::Error GLES2DecoderImpl::HandleGenBuffersImmediate(
}
error::Error GLES2DecoderImpl::HandleGenerateMipmap(
- uint32 immediate_data_size, const gles2::cmds::GenerateMipmap& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GenerateMipmap& c) {
GLenum target = static_cast<GLenum>(c.target);
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glGenerateMipmap", target, "target");
@@ -807,34 +740,16 @@ error::Error GLES2DecoderImpl::HandleGenerateMipmap(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleGenFramebuffers(
- uint32 immediate_data_size, const gles2::cmds::GenFramebuffers& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- GLuint* framebuffers = GetSharedMemoryAs<GLuint*>(
- c.framebuffers_shm_id, c.framebuffers_shm_offset, data_size);
- if (framebuffers == NULL) {
- return error::kOutOfBounds;
- }
- if (!GenFramebuffersHelper(n, framebuffers)) {
- return error::kInvalidArguments;
- }
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleGenFramebuffersImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::GenFramebuffersImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- GLuint* framebuffers = GetImmediateDataAs<GLuint*>(
- c, data_size, immediate_data_size);
+ GLuint* framebuffers =
+ GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size);
if (framebuffers == NULL) {
return error::kOutOfBounds;
}
@@ -844,34 +759,16 @@ error::Error GLES2DecoderImpl::HandleGenFramebuffersImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleGenRenderbuffers(
- uint32 immediate_data_size, const gles2::cmds::GenRenderbuffers& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- GLuint* renderbuffers = GetSharedMemoryAs<GLuint*>(
- c.renderbuffers_shm_id, c.renderbuffers_shm_offset, data_size);
- if (renderbuffers == NULL) {
- return error::kOutOfBounds;
- }
- if (!GenRenderbuffersHelper(n, renderbuffers)) {
- return error::kInvalidArguments;
- }
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleGenRenderbuffersImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::GenRenderbuffersImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- GLuint* renderbuffers = GetImmediateDataAs<GLuint*>(
- c, data_size, immediate_data_size);
+ GLuint* renderbuffers =
+ GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size);
if (renderbuffers == NULL) {
return error::kOutOfBounds;
}
@@ -881,33 +778,16 @@ error::Error GLES2DecoderImpl::HandleGenRenderbuffersImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleGenTextures(
- uint32 immediate_data_size, const gles2::cmds::GenTextures& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- GLuint* textures = GetSharedMemoryAs<GLuint*>(
- c.textures_shm_id, c.textures_shm_offset, data_size);
- if (textures == NULL) {
- return error::kOutOfBounds;
- }
- if (!GenTexturesHelper(n, textures)) {
- return error::kInvalidArguments;
- }
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleGenTexturesImmediate(
- uint32 immediate_data_size, const gles2::cmds::GenTexturesImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GenTexturesImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- GLuint* textures = GetImmediateDataAs<GLuint*>(
- c, data_size, immediate_data_size);
+ GLuint* textures =
+ GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size);
if (textures == NULL) {
return error::kOutOfBounds;
}
@@ -918,7 +798,8 @@ error::Error GLES2DecoderImpl::HandleGenTexturesImmediate(
}
error::Error GLES2DecoderImpl::HandleGetBooleanv(
- uint32 immediate_data_size, const gles2::cmds::GetBooleanv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetBooleanv& c) {
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetBooleanv::Result Result;
GLsizei num_values = 0;
@@ -949,7 +830,8 @@ error::Error GLES2DecoderImpl::HandleGetBooleanv(
}
error::Error GLES2DecoderImpl::HandleGetBufferParameteriv(
- uint32 immediate_data_size, const gles2::cmds::GetBufferParameteriv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetBufferParameteriv& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetBufferParameteriv::Result Result;
@@ -959,8 +841,7 @@ error::Error GLES2DecoderImpl::HandleGetBufferParameteriv(
c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
GLint* params = result ? result->GetData() : NULL;
if (!validators_->buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetBufferParameteriv", target, "target");
return error::kNoError;
}
if (!validators_->buffer_parameter.IsValid(pname)) {
@@ -978,8 +859,8 @@ error::Error GLES2DecoderImpl::HandleGetBufferParameteriv(
result->SetNumResults(num_values);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleGetError(
- uint32 immediate_data_size, const gles2::cmds::GetError& c) {
+error::Error GLES2DecoderImpl::HandleGetError(uint32_t immediate_data_size,
+ const gles2::cmds::GetError& c) {
typedef cmds::GetError::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
@@ -991,7 +872,8 @@ error::Error GLES2DecoderImpl::HandleGetError(
}
error::Error GLES2DecoderImpl::HandleGetFloatv(
- uint32 immediate_data_size, const gles2::cmds::GetFloatv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetFloatv& c) {
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetFloatv::Result Result;
GLsizei num_values = 0;
@@ -1022,7 +904,7 @@ error::Error GLES2DecoderImpl::HandleGetFloatv(
}
error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::GetFramebufferAttachmentParameteriv& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum attachment = static_cast<GLenum>(c.attachment);
@@ -1034,15 +916,18 @@ error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv(
c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
GLint* params = result ? result->GetData() : NULL;
if (!validators_->frame_buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetFramebufferAttachmentParameteriv", target, "target"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glGetFramebufferAttachmentParameteriv", target, "target");
return error::kNoError;
}
if (!validators_->attachment.IsValid(attachment)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetFramebufferAttachmentParameteriv", attachment, "attachment"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glGetFramebufferAttachmentParameteriv", attachment, "attachment");
return error::kNoError;
}
if (!validators_->frame_buffer_parameter.IsValid(pname)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetFramebufferAttachmentParameteriv", pname, "pname"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glGetFramebufferAttachmentParameteriv", pname, "pname");
return error::kNoError;
}
if (params == NULL) {
@@ -1064,7 +949,8 @@ error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv(
}
error::Error GLES2DecoderImpl::HandleGetIntegerv(
- uint32 immediate_data_size, const gles2::cmds::GetIntegerv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetIntegerv& c) {
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetIntegerv::Result Result;
GLsizei num_values = 0;
@@ -1095,7 +981,8 @@ error::Error GLES2DecoderImpl::HandleGetIntegerv(
}
error::Error GLES2DecoderImpl::HandleGetProgramiv(
- uint32 immediate_data_size, const gles2::cmds::GetProgramiv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetProgramiv& c) {
GLuint program = c.program;
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetProgramiv::Result Result;
@@ -1127,7 +1014,7 @@ error::Error GLES2DecoderImpl::HandleGetProgramiv(
}
error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::GetRenderbufferParameteriv& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
@@ -1138,13 +1025,13 @@ error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv(
c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values));
GLint* params = result ? result->GetData() : NULL;
if (!validators_->render_buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetRenderbufferParameteriv", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glGetRenderbufferParameteriv", target, "target");
return error::kNoError;
}
if (!validators_->render_buffer_parameter.IsValid(pname)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetRenderbufferParameteriv", pname,
- "pname");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glGetRenderbufferParameteriv", pname, "pname");
return error::kNoError;
}
if (params == NULL) {
@@ -1166,7 +1053,8 @@ error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv(
}
error::Error GLES2DecoderImpl::HandleGetShaderiv(
- uint32 immediate_data_size, const gles2::cmds::GetShaderiv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetShaderiv& c) {
GLuint shader = c.shader;
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetShaderiv::Result Result;
@@ -1198,7 +1086,8 @@ error::Error GLES2DecoderImpl::HandleGetShaderiv(
}
error::Error GLES2DecoderImpl::HandleGetTexParameterfv(
- uint32 immediate_data_size, const gles2::cmds::GetTexParameterfv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetTexParameterfv& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetTexParameterfv::Result Result;
@@ -1223,7 +1112,7 @@ error::Error GLES2DecoderImpl::HandleGetTexParameterfv(
if (result->size != 0) {
return error::kInvalidArguments;
}
- glGetTexParameterfv(target, pname, params);
+ DoGetTexParameterfv(target, pname, params);
GLenum error = glGetError();
if (error == GL_NO_ERROR) {
result->SetNumResults(num_values);
@@ -1234,7 +1123,8 @@ error::Error GLES2DecoderImpl::HandleGetTexParameterfv(
}
error::Error GLES2DecoderImpl::HandleGetTexParameteriv(
- uint32 immediate_data_size, const gles2::cmds::GetTexParameteriv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetTexParameteriv& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetTexParameteriv::Result Result;
@@ -1259,7 +1149,7 @@ error::Error GLES2DecoderImpl::HandleGetTexParameteriv(
if (result->size != 0) {
return error::kInvalidArguments;
}
- glGetTexParameteriv(target, pname, params);
+ DoGetTexParameteriv(target, pname, params);
GLenum error = glGetError();
if (error == GL_NO_ERROR) {
result->SetNumResults(num_values);
@@ -1270,7 +1160,8 @@ error::Error GLES2DecoderImpl::HandleGetTexParameteriv(
}
error::Error GLES2DecoderImpl::HandleGetVertexAttribfv(
- uint32 immediate_data_size, const gles2::cmds::GetVertexAttribfv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetVertexAttribfv& c) {
GLuint index = static_cast<GLuint>(c.index);
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetVertexAttribfv::Result Result;
@@ -1302,7 +1193,8 @@ error::Error GLES2DecoderImpl::HandleGetVertexAttribfv(
}
error::Error GLES2DecoderImpl::HandleGetVertexAttribiv(
- uint32 immediate_data_size, const gles2::cmds::GetVertexAttribiv& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GetVertexAttribiv& c) {
GLuint index = static_cast<GLuint>(c.index);
GLenum pname = static_cast<GLenum>(c.pname);
typedef cmds::GetVertexAttribiv::Result Result;
@@ -1333,8 +1225,8 @@ error::Error GLES2DecoderImpl::HandleGetVertexAttribiv(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleHint(
- uint32 immediate_data_size, const gles2::cmds::Hint& c) {
+error::Error GLES2DecoderImpl::HandleHint(uint32_t immediate_data_size,
+ const gles2::cmds::Hint& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum mode = static_cast<GLenum>(c.mode);
if (!validators_->hint_target.IsValid(target)) {
@@ -1364,8 +1256,8 @@ error::Error GLES2DecoderImpl::HandleHint(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleIsBuffer(
- uint32 immediate_data_size, const gles2::cmds::IsBuffer& c) {
+error::Error GLES2DecoderImpl::HandleIsBuffer(uint32_t immediate_data_size,
+ const gles2::cmds::IsBuffer& c) {
GLuint buffer = c.buffer;
typedef cmds::IsBuffer::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -1378,7 +1270,8 @@ error::Error GLES2DecoderImpl::HandleIsBuffer(
}
error::Error GLES2DecoderImpl::HandleIsEnabled(
- uint32 immediate_data_size, const gles2::cmds::IsEnabled& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::IsEnabled& c) {
GLenum cap = static_cast<GLenum>(c.cap);
typedef cmds::IsEnabled::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -1395,7 +1288,8 @@ error::Error GLES2DecoderImpl::HandleIsEnabled(
}
error::Error GLES2DecoderImpl::HandleIsFramebuffer(
- uint32 immediate_data_size, const gles2::cmds::IsFramebuffer& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::IsFramebuffer& c) {
GLuint framebuffer = c.framebuffer;
typedef cmds::IsFramebuffer::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -1408,7 +1302,8 @@ error::Error GLES2DecoderImpl::HandleIsFramebuffer(
}
error::Error GLES2DecoderImpl::HandleIsProgram(
- uint32 immediate_data_size, const gles2::cmds::IsProgram& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::IsProgram& c) {
GLuint program = c.program;
typedef cmds::IsProgram::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -1421,7 +1316,8 @@ error::Error GLES2DecoderImpl::HandleIsProgram(
}
error::Error GLES2DecoderImpl::HandleIsRenderbuffer(
- uint32 immediate_data_size, const gles2::cmds::IsRenderbuffer& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::IsRenderbuffer& c) {
GLuint renderbuffer = c.renderbuffer;
typedef cmds::IsRenderbuffer::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -1433,8 +1329,8 @@ error::Error GLES2DecoderImpl::HandleIsRenderbuffer(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleIsShader(
- uint32 immediate_data_size, const gles2::cmds::IsShader& c) {
+error::Error GLES2DecoderImpl::HandleIsShader(uint32_t immediate_data_size,
+ const gles2::cmds::IsShader& c) {
GLuint shader = c.shader;
typedef cmds::IsShader::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -1447,7 +1343,8 @@ error::Error GLES2DecoderImpl::HandleIsShader(
}
error::Error GLES2DecoderImpl::HandleIsTexture(
- uint32 immediate_data_size, const gles2::cmds::IsTexture& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::IsTexture& c) {
GLuint texture = c.texture;
typedef cmds::IsTexture::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -1460,7 +1357,8 @@ error::Error GLES2DecoderImpl::HandleIsTexture(
}
error::Error GLES2DecoderImpl::HandleLineWidth(
- uint32 immediate_data_size, const gles2::cmds::LineWidth& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::LineWidth& c) {
GLfloat width = static_cast<GLfloat>(c.width);
if (width <= 0.0f) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "LineWidth", "width out of range");
@@ -1474,14 +1372,16 @@ error::Error GLES2DecoderImpl::HandleLineWidth(
}
error::Error GLES2DecoderImpl::HandleLinkProgram(
- uint32 immediate_data_size, const gles2::cmds::LinkProgram& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::LinkProgram& c) {
GLuint program = c.program;
DoLinkProgram(program);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandlePolygonOffset(
- uint32 immediate_data_size, const gles2::cmds::PolygonOffset& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::PolygonOffset& c) {
GLfloat factor = static_cast<GLfloat>(c.factor);
GLfloat units = static_cast<GLfloat>(c.units);
if (state_.polygon_offset_factor != factor ||
@@ -1494,13 +1394,15 @@ error::Error GLES2DecoderImpl::HandlePolygonOffset(
}
error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler(
- uint32 immediate_data_size, const gles2::cmds::ReleaseShaderCompiler& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::ReleaseShaderCompiler& c) {
DoReleaseShaderCompiler();
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleRenderbufferStorage(
- uint32 immediate_data_size, const gles2::cmds::RenderbufferStorage& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::RenderbufferStorage& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum internalformat = static_cast<GLenum>(c.internalformat);
GLsizei width = static_cast<GLsizei>(c.width);
@@ -1510,8 +1412,8 @@ error::Error GLES2DecoderImpl::HandleRenderbufferStorage(
return error::kNoError;
}
if (!validators_->render_buffer_format.IsValid(internalformat)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorage", internalformat,
- "internalformat");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glRenderbufferStorage", internalformat, "internalformat");
return error::kNoError;
}
if (width < 0) {
@@ -1519,8 +1421,7 @@ error::Error GLES2DecoderImpl::HandleRenderbufferStorage(
return error::kNoError;
}
if (height < 0) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glRenderbufferStorage", "height < 0");
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glRenderbufferStorage", "height < 0");
return error::kNoError;
}
DoRenderbufferStorage(target, internalformat, width, height);
@@ -1528,15 +1429,16 @@ error::Error GLES2DecoderImpl::HandleRenderbufferStorage(
}
error::Error GLES2DecoderImpl::HandleSampleCoverage(
- uint32 immediate_data_size, const gles2::cmds::SampleCoverage& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::SampleCoverage& c) {
GLclampf value = static_cast<GLclampf>(c.value);
GLboolean invert = static_cast<GLboolean>(c.invert);
DoSampleCoverage(value, invert);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleScissor(
- uint32 immediate_data_size, const gles2::cmds::Scissor& c) {
+error::Error GLES2DecoderImpl::HandleScissor(uint32_t immediate_data_size,
+ const gles2::cmds::Scissor& c) {
GLint x = static_cast<GLint>(c.x);
GLint y = static_cast<GLint>(c.y);
GLsizei width = static_cast<GLsizei>(c.width);
@@ -1549,10 +1451,8 @@ error::Error GLES2DecoderImpl::HandleScissor(
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glScissor", "height < 0");
return error::kNoError;
}
- if (state_.scissor_x != x ||
- state_.scissor_y != y ||
- state_.scissor_width != width ||
- state_.scissor_height != height) {
+ if (state_.scissor_x != x || state_.scissor_y != y ||
+ state_.scissor_width != width || state_.scissor_height != height) {
state_.scissor_x = x;
state_.scissor_y = y;
state_.scissor_width = width;
@@ -1563,7 +1463,8 @@ error::Error GLES2DecoderImpl::HandleScissor(
}
error::Error GLES2DecoderImpl::HandleStencilFunc(
- uint32 immediate_data_size, const gles2::cmds::StencilFunc& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::StencilFunc& c) {
GLenum func = static_cast<GLenum>(c.func);
GLint ref = static_cast<GLint>(c.ref);
GLuint mask = static_cast<GLuint>(c.mask);
@@ -1571,12 +1472,9 @@ error::Error GLES2DecoderImpl::HandleStencilFunc(
LOCAL_SET_GL_ERROR_INVALID_ENUM("glStencilFunc", func, "func");
return error::kNoError;
}
- if (state_.stencil_front_func != func ||
- state_.stencil_front_ref != ref ||
- state_.stencil_front_mask != mask ||
- state_.stencil_back_func != func ||
- state_.stencil_back_ref != ref ||
- state_.stencil_back_mask != mask) {
+ if (state_.stencil_front_func != func || state_.stencil_front_ref != ref ||
+ state_.stencil_front_mask != mask || state_.stencil_back_func != func ||
+ state_.stencil_back_ref != ref || state_.stencil_back_mask != mask) {
state_.stencil_front_func = func;
state_.stencil_front_ref = ref;
state_.stencil_front_mask = mask;
@@ -1589,7 +1487,8 @@ error::Error GLES2DecoderImpl::HandleStencilFunc(
}
error::Error GLES2DecoderImpl::HandleStencilFuncSeparate(
- uint32 immediate_data_size, const gles2::cmds::StencilFuncSeparate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::StencilFuncSeparate& c) {
GLenum face = static_cast<GLenum>(c.face);
GLenum func = static_cast<GLenum>(c.func);
GLint ref = static_cast<GLint>(c.ref);
@@ -1605,13 +1504,13 @@ error::Error GLES2DecoderImpl::HandleStencilFuncSeparate(
bool changed = false;
if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
changed |= state_.stencil_front_func != func ||
- state_.stencil_front_ref != ref ||
- state_.stencil_front_mask != mask;
+ state_.stencil_front_ref != ref ||
+ state_.stencil_front_mask != mask;
}
if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
changed |= state_.stencil_back_func != func ||
- state_.stencil_back_ref != ref ||
- state_.stencil_back_mask != mask;
+ state_.stencil_back_ref != ref ||
+ state_.stencil_back_mask != mask;
}
if (changed) {
if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
@@ -1630,7 +1529,8 @@ error::Error GLES2DecoderImpl::HandleStencilFuncSeparate(
}
error::Error GLES2DecoderImpl::HandleStencilMask(
- uint32 immediate_data_size, const gles2::cmds::StencilMask& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::StencilMask& c) {
GLuint mask = static_cast<GLuint>(c.mask);
if (state_.stencil_front_writemask != mask ||
state_.stencil_back_writemask != mask) {
@@ -1642,7 +1542,8 @@ error::Error GLES2DecoderImpl::HandleStencilMask(
}
error::Error GLES2DecoderImpl::HandleStencilMaskSeparate(
- uint32 immediate_data_size, const gles2::cmds::StencilMaskSeparate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::StencilMaskSeparate& c) {
GLenum face = static_cast<GLenum>(c.face);
GLuint mask = static_cast<GLuint>(c.mask);
if (!validators_->face_type.IsValid(face)) {
@@ -1669,7 +1570,8 @@ error::Error GLES2DecoderImpl::HandleStencilMaskSeparate(
}
error::Error GLES2DecoderImpl::HandleStencilOp(
- uint32 immediate_data_size, const gles2::cmds::StencilOp& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::StencilOp& c) {
GLenum fail = static_cast<GLenum>(c.fail);
GLenum zfail = static_cast<GLenum>(c.zfail);
GLenum zpass = static_cast<GLenum>(c.zpass);
@@ -1703,7 +1605,8 @@ error::Error GLES2DecoderImpl::HandleStencilOp(
}
error::Error GLES2DecoderImpl::HandleStencilOpSeparate(
- uint32 immediate_data_size, const gles2::cmds::StencilOpSeparate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::StencilOpSeparate& c) {
GLenum face = static_cast<GLenum>(c.face);
GLenum fail = static_cast<GLenum>(c.fail);
GLenum zfail = static_cast<GLenum>(c.zfail);
@@ -1727,13 +1630,13 @@ error::Error GLES2DecoderImpl::HandleStencilOpSeparate(
bool changed = false;
if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
changed |= state_.stencil_front_fail_op != fail ||
- state_.stencil_front_z_fail_op != zfail ||
- state_.stencil_front_z_pass_op != zpass;
+ state_.stencil_front_z_fail_op != zfail ||
+ state_.stencil_front_z_pass_op != zpass;
}
if (face == GL_BACK || face == GL_FRONT_AND_BACK) {
changed |= state_.stencil_back_fail_op != fail ||
- state_.stencil_back_z_fail_op != zfail ||
- state_.stencil_back_z_pass_op != zpass;
+ state_.stencil_back_z_fail_op != zfail ||
+ state_.stencil_back_z_pass_op != zpass;
}
if (changed) {
if (face == GL_FRONT || face == GL_FRONT_AND_BACK) {
@@ -1752,7 +1655,8 @@ error::Error GLES2DecoderImpl::HandleStencilOpSeparate(
}
error::Error GLES2DecoderImpl::HandleTexParameterf(
- uint32 immediate_data_size, const gles2::cmds::TexParameterf& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::TexParameterf& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
GLfloat param = static_cast<GLfloat>(c.param);
@@ -1768,45 +1672,20 @@ error::Error GLES2DecoderImpl::HandleTexParameterf(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleTexParameterfv(
- uint32 immediate_data_size, const gles2::cmds::TexParameterfv& c) {
- GLenum target = static_cast<GLenum>(c.target);
- GLenum pname = static_cast<GLenum>(c.pname);
- uint32 data_size;
- if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* params = GetSharedMemoryAs<const GLfloat*>(
- c.params_shm_id, c.params_shm_offset, data_size);
- if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", target, "target");
- return error::kNoError;
- }
- if (!validators_->texture_parameter.IsValid(pname)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", pname, "pname");
- return error::kNoError;
- }
- if (params == NULL) {
- return error::kOutOfBounds;
- }
- DoTexParameterfv(target, pname, params);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::TexParameterfvImmediate& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* params = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* params =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameterfv", target, "target");
return error::kNoError;
@@ -1823,7 +1702,8 @@ error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate(
}
error::Error GLES2DecoderImpl::HandleTexParameteri(
- uint32 immediate_data_size, const gles2::cmds::TexParameteri& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::TexParameteri& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
GLint param = static_cast<GLint>(c.param);
@@ -1839,45 +1719,20 @@ error::Error GLES2DecoderImpl::HandleTexParameteri(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleTexParameteriv(
- uint32 immediate_data_size, const gles2::cmds::TexParameteriv& c) {
- GLenum target = static_cast<GLenum>(c.target);
- GLenum pname = static_cast<GLenum>(c.pname);
- uint32 data_size;
- if (!ComputeDataSize(1, sizeof(GLint), 1, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLint* params = GetSharedMemoryAs<const GLint*>(
- c.params_shm_id, c.params_shm_offset, data_size);
- if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", target, "target");
- return error::kNoError;
- }
- if (!validators_->texture_parameter.IsValid(pname)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", pname, "pname");
- return error::kNoError;
- }
- if (params == NULL) {
- return error::kOutOfBounds;
- }
- DoTexParameteriv(target, pname, params);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleTexParameterivImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::TexParameterivImmediate& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum pname = static_cast<GLenum>(c.pname);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLint), 1, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLint* params = GetImmediateDataAs<const GLint*>(
- c, data_size, immediate_data_size);
+ const GLint* params =
+ GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size);
if (!validators_->texture_bind_target.IsValid(target)) {
LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexParameteriv", target, "target");
return error::kNoError;
@@ -1894,44 +1749,31 @@ error::Error GLES2DecoderImpl::HandleTexParameterivImmediate(
}
error::Error GLES2DecoderImpl::HandleUniform1f(
- uint32 immediate_data_size, const gles2::cmds::Uniform1f& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform1f& c) {
GLint location = static_cast<GLint>(c.location);
GLfloat x = static_cast<GLfloat>(c.x);
- GLfloat temp[1] = { x, };
+ GLfloat temp[1] = {
+ x,
+ };
DoUniform1fv(location, 1, &temp[0]);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniform1fv(
- uint32 immediate_data_size, const gles2::cmds::Uniform1fv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLfloat), 1, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* v = GetSharedMemoryAs<const GLfloat*>(
- c.v_shm_id, c.v_shm_offset, data_size);
- if (v == NULL) {
- return error::kOutOfBounds;
- }
- DoUniform1fv(location, count, v);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniform1fvImmediate(
- uint32 immediate_data_size, const gles2::cmds::Uniform1fvImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform1fvImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLfloat), 1, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* v = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* v =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (v == NULL) {
return error::kOutOfBounds;
}
@@ -1940,43 +1782,28 @@ error::Error GLES2DecoderImpl::HandleUniform1fvImmediate(
}
error::Error GLES2DecoderImpl::HandleUniform1i(
- uint32 immediate_data_size, const gles2::cmds::Uniform1i& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform1i& c) {
GLint location = static_cast<GLint>(c.location);
GLint x = static_cast<GLint>(c.x);
DoUniform1i(location, x);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniform1iv(
- uint32 immediate_data_size, const gles2::cmds::Uniform1iv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLint), 1, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLint* v = GetSharedMemoryAs<const GLint*>(
- c.v_shm_id, c.v_shm_offset, data_size);
- if (v == NULL) {
- return error::kOutOfBounds;
- }
- DoUniform1iv(location, count, v);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniform1ivImmediate(
- uint32 immediate_data_size, const gles2::cmds::Uniform1ivImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform1ivImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLint), 1, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLint* v = GetImmediateDataAs<const GLint*>(
- c, data_size, immediate_data_size);
+ const GLint* v =
+ GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size);
if (v == NULL) {
return error::kOutOfBounds;
}
@@ -1985,45 +1812,32 @@ error::Error GLES2DecoderImpl::HandleUniform1ivImmediate(
}
error::Error GLES2DecoderImpl::HandleUniform2f(
- uint32 immediate_data_size, const gles2::cmds::Uniform2f& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform2f& c) {
GLint location = static_cast<GLint>(c.location);
GLfloat x = static_cast<GLfloat>(c.x);
GLfloat y = static_cast<GLfloat>(c.y);
- GLfloat temp[2] = { x, y, };
+ GLfloat temp[2] = {
+ x, y,
+ };
DoUniform2fv(location, 1, &temp[0]);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniform2fv(
- uint32 immediate_data_size, const gles2::cmds::Uniform2fv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLfloat), 2, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* v = GetSharedMemoryAs<const GLfloat*>(
- c.v_shm_id, c.v_shm_offset, data_size);
- if (v == NULL) {
- return error::kOutOfBounds;
- }
- DoUniform2fv(location, count, v);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniform2fvImmediate(
- uint32 immediate_data_size, const gles2::cmds::Uniform2fvImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform2fvImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLfloat), 2, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* v = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* v =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (v == NULL) {
return error::kOutOfBounds;
}
@@ -2032,45 +1846,32 @@ error::Error GLES2DecoderImpl::HandleUniform2fvImmediate(
}
error::Error GLES2DecoderImpl::HandleUniform2i(
- uint32 immediate_data_size, const gles2::cmds::Uniform2i& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform2i& c) {
GLint location = static_cast<GLint>(c.location);
GLint x = static_cast<GLint>(c.x);
GLint y = static_cast<GLint>(c.y);
- GLint temp[2] = { x, y, };
+ GLint temp[2] = {
+ x, y,
+ };
DoUniform2iv(location, 1, &temp[0]);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniform2iv(
- uint32 immediate_data_size, const gles2::cmds::Uniform2iv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLint), 2, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLint* v = GetSharedMemoryAs<const GLint*>(
- c.v_shm_id, c.v_shm_offset, data_size);
- if (v == NULL) {
- return error::kOutOfBounds;
- }
- DoUniform2iv(location, count, v);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniform2ivImmediate(
- uint32 immediate_data_size, const gles2::cmds::Uniform2ivImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform2ivImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLint), 2, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLint* v = GetImmediateDataAs<const GLint*>(
- c, data_size, immediate_data_size);
+ const GLint* v =
+ GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size);
if (v == NULL) {
return error::kOutOfBounds;
}
@@ -2079,46 +1880,33 @@ error::Error GLES2DecoderImpl::HandleUniform2ivImmediate(
}
error::Error GLES2DecoderImpl::HandleUniform3f(
- uint32 immediate_data_size, const gles2::cmds::Uniform3f& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform3f& c) {
GLint location = static_cast<GLint>(c.location);
GLfloat x = static_cast<GLfloat>(c.x);
GLfloat y = static_cast<GLfloat>(c.y);
GLfloat z = static_cast<GLfloat>(c.z);
- GLfloat temp[3] = { x, y, z, };
+ GLfloat temp[3] = {
+ x, y, z,
+ };
DoUniform3fv(location, 1, &temp[0]);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniform3fv(
- uint32 immediate_data_size, const gles2::cmds::Uniform3fv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLfloat), 3, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* v = GetSharedMemoryAs<const GLfloat*>(
- c.v_shm_id, c.v_shm_offset, data_size);
- if (v == NULL) {
- return error::kOutOfBounds;
- }
- DoUniform3fv(location, count, v);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniform3fvImmediate(
- uint32 immediate_data_size, const gles2::cmds::Uniform3fvImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform3fvImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLfloat), 3, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* v = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* v =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (v == NULL) {
return error::kOutOfBounds;
}
@@ -2127,46 +1915,33 @@ error::Error GLES2DecoderImpl::HandleUniform3fvImmediate(
}
error::Error GLES2DecoderImpl::HandleUniform3i(
- uint32 immediate_data_size, const gles2::cmds::Uniform3i& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform3i& c) {
GLint location = static_cast<GLint>(c.location);
GLint x = static_cast<GLint>(c.x);
GLint y = static_cast<GLint>(c.y);
GLint z = static_cast<GLint>(c.z);
- GLint temp[3] = { x, y, z, };
+ GLint temp[3] = {
+ x, y, z,
+ };
DoUniform3iv(location, 1, &temp[0]);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniform3iv(
- uint32 immediate_data_size, const gles2::cmds::Uniform3iv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLint), 3, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLint* v = GetSharedMemoryAs<const GLint*>(
- c.v_shm_id, c.v_shm_offset, data_size);
- if (v == NULL) {
- return error::kOutOfBounds;
- }
- DoUniform3iv(location, count, v);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniform3ivImmediate(
- uint32 immediate_data_size, const gles2::cmds::Uniform3ivImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform3ivImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLint), 3, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLint* v = GetImmediateDataAs<const GLint*>(
- c, data_size, immediate_data_size);
+ const GLint* v =
+ GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size);
if (v == NULL) {
return error::kOutOfBounds;
}
@@ -2175,47 +1950,34 @@ error::Error GLES2DecoderImpl::HandleUniform3ivImmediate(
}
error::Error GLES2DecoderImpl::HandleUniform4f(
- uint32 immediate_data_size, const gles2::cmds::Uniform4f& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform4f& c) {
GLint location = static_cast<GLint>(c.location);
GLfloat x = static_cast<GLfloat>(c.x);
GLfloat y = static_cast<GLfloat>(c.y);
GLfloat z = static_cast<GLfloat>(c.z);
GLfloat w = static_cast<GLfloat>(c.w);
- GLfloat temp[4] = { x, y, z, w, };
+ GLfloat temp[4] = {
+ x, y, z, w,
+ };
DoUniform4fv(location, 1, &temp[0]);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniform4fv(
- uint32 immediate_data_size, const gles2::cmds::Uniform4fv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* v = GetSharedMemoryAs<const GLfloat*>(
- c.v_shm_id, c.v_shm_offset, data_size);
- if (v == NULL) {
- return error::kOutOfBounds;
- }
- DoUniform4fv(location, count, v);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniform4fvImmediate(
- uint32 immediate_data_size, const gles2::cmds::Uniform4fvImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform4fvImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* v = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* v =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (v == NULL) {
return error::kOutOfBounds;
}
@@ -2224,47 +1986,34 @@ error::Error GLES2DecoderImpl::HandleUniform4fvImmediate(
}
error::Error GLES2DecoderImpl::HandleUniform4i(
- uint32 immediate_data_size, const gles2::cmds::Uniform4i& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform4i& c) {
GLint location = static_cast<GLint>(c.location);
GLint x = static_cast<GLint>(c.x);
GLint y = static_cast<GLint>(c.y);
GLint z = static_cast<GLint>(c.z);
GLint w = static_cast<GLint>(c.w);
- GLint temp[4] = { x, y, z, w, };
+ GLint temp[4] = {
+ x, y, z, w,
+ };
DoUniform4iv(location, 1, &temp[0]);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniform4iv(
- uint32 immediate_data_size, const gles2::cmds::Uniform4iv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLint), 4, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLint* v = GetSharedMemoryAs<const GLint*>(
- c.v_shm_id, c.v_shm_offset, data_size);
- if (v == NULL) {
- return error::kOutOfBounds;
- }
- DoUniform4iv(location, count, v);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniform4ivImmediate(
- uint32 immediate_data_size, const gles2::cmds::Uniform4ivImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::Uniform4ivImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLint), 4, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLint* v = GetImmediateDataAs<const GLint*>(
- c, data_size, immediate_data_size);
+ const GLint* v =
+ GetImmediateDataAs<const GLint*>(c, data_size, immediate_data_size);
if (v == NULL) {
return error::kOutOfBounds;
}
@@ -2272,49 +2021,21 @@ error::Error GLES2DecoderImpl::HandleUniform4ivImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniformMatrix2fv(
- uint32 immediate_data_size, const gles2::cmds::UniformMatrix2fv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- GLboolean transpose = static_cast<GLboolean>(c.transpose);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* value = GetSharedMemoryAs<const GLfloat*>(
- c.value_shm_id, c.value_shm_offset, data_size);
- if (!validators_->false_only.IsValid(transpose)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glUniformMatrix2fv", "transpose GL_INVALID_VALUE");
- return error::kNoError;
- }
- if (value == NULL) {
- return error::kOutOfBounds;
- }
- DoUniformMatrix2fv(location, count, transpose, value);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::UniformMatrix2fvImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
GLboolean transpose = static_cast<GLboolean>(c.transpose);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLfloat), 4, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* value = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
- if (!validators_->false_only.IsValid(transpose)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glUniformMatrix2fv", "transpose GL_INVALID_VALUE");
- return error::kNoError;
- }
+ const GLfloat* value =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (value == NULL) {
return error::kOutOfBounds;
}
@@ -2322,49 +2043,21 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniformMatrix3fv(
- uint32 immediate_data_size, const gles2::cmds::UniformMatrix3fv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- GLboolean transpose = static_cast<GLboolean>(c.transpose);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLfloat), 9, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* value = GetSharedMemoryAs<const GLfloat*>(
- c.value_shm_id, c.value_shm_offset, data_size);
- if (!validators_->false_only.IsValid(transpose)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glUniformMatrix3fv", "transpose GL_INVALID_VALUE");
- return error::kNoError;
- }
- if (value == NULL) {
- return error::kOutOfBounds;
- }
- DoUniformMatrix3fv(location, count, transpose, value);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::UniformMatrix3fvImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
GLboolean transpose = static_cast<GLboolean>(c.transpose);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLfloat), 9, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* value = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
- if (!validators_->false_only.IsValid(transpose)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glUniformMatrix3fv", "transpose GL_INVALID_VALUE");
- return error::kNoError;
- }
+ const GLfloat* value =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (value == NULL) {
return error::kOutOfBounds;
}
@@ -2372,49 +2065,21 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleUniformMatrix4fv(
- uint32 immediate_data_size, const gles2::cmds::UniformMatrix4fv& c) {
- GLint location = static_cast<GLint>(c.location);
- GLsizei count = static_cast<GLsizei>(c.count);
- GLboolean transpose = static_cast<GLboolean>(c.transpose);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLfloat), 16, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* value = GetSharedMemoryAs<const GLfloat*>(
- c.value_shm_id, c.value_shm_offset, data_size);
- if (!validators_->false_only.IsValid(transpose)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glUniformMatrix4fv", "transpose GL_INVALID_VALUE");
- return error::kNoError;
- }
- if (value == NULL) {
- return error::kOutOfBounds;
- }
- DoUniformMatrix4fv(location, count, transpose, value);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::UniformMatrix4fvImmediate& c) {
GLint location = static_cast<GLint>(c.location);
GLsizei count = static_cast<GLsizei>(c.count);
GLboolean transpose = static_cast<GLboolean>(c.transpose);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLfloat), 16, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* value = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
- if (!validators_->false_only.IsValid(transpose)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glUniformMatrix4fv", "transpose GL_INVALID_VALUE");
- return error::kNoError;
- }
+ const GLfloat* value =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (value == NULL) {
return error::kOutOfBounds;
}
@@ -2423,56 +2088,43 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate(
}
error::Error GLES2DecoderImpl::HandleUseProgram(
- uint32 immediate_data_size, const gles2::cmds::UseProgram& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::UseProgram& c) {
GLuint program = c.program;
DoUseProgram(program);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleValidateProgram(
- uint32 immediate_data_size, const gles2::cmds::ValidateProgram& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::ValidateProgram& c) {
GLuint program = c.program;
DoValidateProgram(program);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleVertexAttrib1f(
- uint32 immediate_data_size, const gles2::cmds::VertexAttrib1f& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::VertexAttrib1f& c) {
GLuint indx = static_cast<GLuint>(c.indx);
GLfloat x = static_cast<GLfloat>(c.x);
DoVertexAttrib1f(indx, x);
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleVertexAttrib1fv(
- uint32 immediate_data_size, const gles2::cmds::VertexAttrib1fv& c) {
- GLuint indx = static_cast<GLuint>(c.indx);
- uint32 data_size;
- if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* values = GetSharedMemoryAs<const GLfloat*>(
- c.values_shm_id, c.values_shm_offset, data_size);
- if (values == NULL) {
- return error::kOutOfBounds;
- }
- DoVertexAttrib1fv(indx, values);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleVertexAttrib1fvImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::VertexAttrib1fvImmediate& c) {
GLuint indx = static_cast<GLuint>(c.indx);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLfloat), 1, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* values = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* values =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (values == NULL) {
return error::kOutOfBounds;
}
@@ -2481,7 +2133,8 @@ error::Error GLES2DecoderImpl::HandleVertexAttrib1fvImmediate(
}
error::Error GLES2DecoderImpl::HandleVertexAttrib2f(
- uint32 immediate_data_size, const gles2::cmds::VertexAttrib2f& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::VertexAttrib2f& c) {
GLuint indx = static_cast<GLuint>(c.indx);
GLfloat x = static_cast<GLfloat>(c.x);
GLfloat y = static_cast<GLfloat>(c.y);
@@ -2489,35 +2142,19 @@ error::Error GLES2DecoderImpl::HandleVertexAttrib2f(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleVertexAttrib2fv(
- uint32 immediate_data_size, const gles2::cmds::VertexAttrib2fv& c) {
- GLuint indx = static_cast<GLuint>(c.indx);
- uint32 data_size;
- if (!ComputeDataSize(1, sizeof(GLfloat), 2, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* values = GetSharedMemoryAs<const GLfloat*>(
- c.values_shm_id, c.values_shm_offset, data_size);
- if (values == NULL) {
- return error::kOutOfBounds;
- }
- DoVertexAttrib2fv(indx, values);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleVertexAttrib2fvImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::VertexAttrib2fvImmediate& c) {
GLuint indx = static_cast<GLuint>(c.indx);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLfloat), 2, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* values = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* values =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (values == NULL) {
return error::kOutOfBounds;
}
@@ -2526,7 +2163,8 @@ error::Error GLES2DecoderImpl::HandleVertexAttrib2fvImmediate(
}
error::Error GLES2DecoderImpl::HandleVertexAttrib3f(
- uint32 immediate_data_size, const gles2::cmds::VertexAttrib3f& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::VertexAttrib3f& c) {
GLuint indx = static_cast<GLuint>(c.indx);
GLfloat x = static_cast<GLfloat>(c.x);
GLfloat y = static_cast<GLfloat>(c.y);
@@ -2535,35 +2173,19 @@ error::Error GLES2DecoderImpl::HandleVertexAttrib3f(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleVertexAttrib3fv(
- uint32 immediate_data_size, const gles2::cmds::VertexAttrib3fv& c) {
- GLuint indx = static_cast<GLuint>(c.indx);
- uint32 data_size;
- if (!ComputeDataSize(1, sizeof(GLfloat), 3, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* values = GetSharedMemoryAs<const GLfloat*>(
- c.values_shm_id, c.values_shm_offset, data_size);
- if (values == NULL) {
- return error::kOutOfBounds;
- }
- DoVertexAttrib3fv(indx, values);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleVertexAttrib3fvImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::VertexAttrib3fvImmediate& c) {
GLuint indx = static_cast<GLuint>(c.indx);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLfloat), 3, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* values = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* values =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (values == NULL) {
return error::kOutOfBounds;
}
@@ -2572,7 +2194,8 @@ error::Error GLES2DecoderImpl::HandleVertexAttrib3fvImmediate(
}
error::Error GLES2DecoderImpl::HandleVertexAttrib4f(
- uint32 immediate_data_size, const gles2::cmds::VertexAttrib4f& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::VertexAttrib4f& c) {
GLuint indx = static_cast<GLuint>(c.indx);
GLfloat x = static_cast<GLfloat>(c.x);
GLfloat y = static_cast<GLfloat>(c.y);
@@ -2582,35 +2205,19 @@ error::Error GLES2DecoderImpl::HandleVertexAttrib4f(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleVertexAttrib4fv(
- uint32 immediate_data_size, const gles2::cmds::VertexAttrib4fv& c) {
- GLuint indx = static_cast<GLuint>(c.indx);
- uint32 data_size;
- if (!ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLfloat* values = GetSharedMemoryAs<const GLfloat*>(
- c.values_shm_id, c.values_shm_offset, data_size);
- if (values == NULL) {
- return error::kOutOfBounds;
- }
- DoVertexAttrib4fv(indx, values);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleVertexAttrib4fvImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::VertexAttrib4fvImmediate& c) {
GLuint indx = static_cast<GLuint>(c.indx);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLfloat), 4, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLfloat* values = GetImmediateDataAs<const GLfloat*>(
- c, data_size, immediate_data_size);
+ const GLfloat* values =
+ GetImmediateDataAs<const GLfloat*>(c, data_size, immediate_data_size);
if (values == NULL) {
return error::kOutOfBounds;
}
@@ -2618,8 +2225,8 @@ error::Error GLES2DecoderImpl::HandleVertexAttrib4fvImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleViewport(
- uint32 immediate_data_size, const gles2::cmds::Viewport& c) {
+error::Error GLES2DecoderImpl::HandleViewport(uint32_t immediate_data_size,
+ const gles2::cmds::Viewport& c) {
GLint x = static_cast<GLint>(c.x);
GLint y = static_cast<GLint>(c.y);
GLsizei width = static_cast<GLsizei>(c.width);
@@ -2637,8 +2244,15 @@ error::Error GLES2DecoderImpl::HandleViewport(
}
error::Error GLES2DecoderImpl::HandleBlitFramebufferCHROMIUM(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::BlitFramebufferCHROMIUM& c) {
+ if (!features().chromium_framebuffer_multisample) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glBlitFramebufferCHROMIUM",
+ "function not available");
+ return error::kNoError;
+ }
+
error::Error error;
error = WillAccessBoundFramebufferForDraw();
if (error != error::kNoError)
@@ -2657,8 +2271,8 @@ error::Error GLES2DecoderImpl::HandleBlitFramebufferCHROMIUM(
GLbitfield mask = static_cast<GLbitfield>(c.mask);
GLenum filter = static_cast<GLenum>(c.filter);
if (!validators_->blit_filter.IsValid(filter)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glBlitFramebufferCHROMIUM", filter,
- "filter");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glBlitFramebufferCHROMIUM", filter, "filter");
return error::kNoError;
}
DoBlitFramebufferCHROMIUM(
@@ -2667,34 +2281,47 @@ error::Error GLES2DecoderImpl::HandleBlitFramebufferCHROMIUM(
}
error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleCHROMIUM(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::RenderbufferStorageMultisampleCHROMIUM& c) {
+ if (!features().chromium_framebuffer_multisample) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glRenderbufferStorageMultisampleCHROMIUM",
+ "function not available");
+ return error::kNoError;
+ }
+
GLenum target = static_cast<GLenum>(c.target);
GLsizei samples = static_cast<GLsizei>(c.samples);
GLenum internalformat = static_cast<GLenum>(c.internalformat);
GLsizei width = static_cast<GLsizei>(c.width);
GLsizei height = static_cast<GLsizei>(c.height);
if (!validators_->render_buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorageMultisampleCHROMIUM", target, "target"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glRenderbufferStorageMultisampleCHROMIUM", target, "target");
return error::kNoError;
}
if (samples < 0) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glRenderbufferStorageMultisampleCHROMIUM", "samples < 0"); // NOLINT
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
+ "glRenderbufferStorageMultisampleCHROMIUM",
+ "samples < 0");
return error::kNoError;
}
if (!validators_->render_buffer_format.IsValid(internalformat)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorageMultisampleCHROMIUM", internalformat, "internalformat"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorageMultisampleCHROMIUM",
+ internalformat,
+ "internalformat");
return error::kNoError;
}
if (width < 0) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glRenderbufferStorageMultisampleCHROMIUM", "width < 0"); // NOLINT
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
+ "glRenderbufferStorageMultisampleCHROMIUM",
+ "width < 0");
return error::kNoError;
}
if (height < 0) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glRenderbufferStorageMultisampleCHROMIUM", "height < 0"); // NOLINT
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
+ "glRenderbufferStorageMultisampleCHROMIUM",
+ "height < 0");
return error::kNoError;
}
DoRenderbufferStorageMultisampleCHROMIUM(
@@ -2703,15 +2330,23 @@ error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleCHROMIUM(
}
error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleEXT(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::RenderbufferStorageMultisampleEXT& c) {
+ if (!features().multisampled_render_to_texture) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glRenderbufferStorageMultisampleEXT",
+ "function not available");
+ return error::kNoError;
+ }
+
GLenum target = static_cast<GLenum>(c.target);
GLsizei samples = static_cast<GLsizei>(c.samples);
GLenum internalformat = static_cast<GLenum>(c.internalformat);
GLsizei width = static_cast<GLsizei>(c.width);
GLsizei height = static_cast<GLsizei>(c.height);
if (!validators_->render_buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorageMultisampleEXT", target, "target"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glRenderbufferStorageMultisampleEXT", target, "target");
return error::kNoError;
}
if (samples < 0) {
@@ -2720,7 +2355,9 @@ error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleEXT(
return error::kNoError;
}
if (!validators_->render_buffer_format.IsValid(internalformat)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorageMultisampleEXT", internalformat, "internalformat"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM("glRenderbufferStorageMultisampleEXT",
+ internalformat,
+ "internalformat");
return error::kNoError;
}
if (width < 0) {
@@ -2739,8 +2376,15 @@ error::Error GLES2DecoderImpl::HandleRenderbufferStorageMultisampleEXT(
}
error::Error GLES2DecoderImpl::HandleFramebufferTexture2DMultisampleEXT(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::FramebufferTexture2DMultisampleEXT& c) {
+ if (!features().multisampled_render_to_texture) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glFramebufferTexture2DMultisampleEXT",
+ "function not available");
+ return error::kNoError;
+ }
+
GLenum target = static_cast<GLenum>(c.target);
GLenum attachment = static_cast<GLenum>(c.attachment);
GLenum textarget = static_cast<GLenum>(c.textarget);
@@ -2748,25 +2392,24 @@ error::Error GLES2DecoderImpl::HandleFramebufferTexture2DMultisampleEXT(
GLint level = static_cast<GLint>(c.level);
GLsizei samples = static_cast<GLsizei>(c.samples);
if (!validators_->frame_buffer_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2DMultisampleEXT", target, "target"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glFramebufferTexture2DMultisampleEXT", target, "target");
return error::kNoError;
}
if (!validators_->attachment.IsValid(attachment)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2DMultisampleEXT", attachment, "attachment"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glFramebufferTexture2DMultisampleEXT", attachment, "attachment");
return error::kNoError;
}
if (!validators_->texture_target.IsValid(textarget)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferTexture2DMultisampleEXT", textarget, "textarget"); // NOLINT
- return error::kNoError;
- }
- if (!validators_->zero_only.IsValid(level)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glFramebufferTexture2DMultisampleEXT", "level GL_INVALID_VALUE"); // NOLINT
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glFramebufferTexture2DMultisampleEXT", textarget, "textarget");
return error::kNoError;
}
if (samples < 0) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glFramebufferTexture2DMultisampleEXT", "samples < 0"); // NOLINT
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
+ "glFramebufferTexture2DMultisampleEXT",
+ "samples < 0");
return error::kNoError;
}
DoFramebufferTexture2DMultisample(
@@ -2775,7 +2418,8 @@ error::Error GLES2DecoderImpl::HandleFramebufferTexture2DMultisampleEXT(
}
error::Error GLES2DecoderImpl::HandleTexStorage2DEXT(
- uint32 immediate_data_size, const gles2::cmds::TexStorage2DEXT& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::TexStorage2DEXT& c) {
GLenum target = static_cast<GLenum>(c.target);
GLsizei levels = static_cast<GLsizei>(c.levels);
GLenum internalFormat = static_cast<GLenum>(c.internalFormat);
@@ -2790,8 +2434,8 @@ error::Error GLES2DecoderImpl::HandleTexStorage2DEXT(
return error::kNoError;
}
if (!validators_->texture_internal_format_storage.IsValid(internalFormat)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexStorage2DEXT", internalFormat,
- "internalFormat");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glTexStorage2DEXT", internalFormat, "internalFormat");
return error::kNoError;
}
if (width < 0) {
@@ -2806,33 +2450,16 @@ error::Error GLES2DecoderImpl::HandleTexStorage2DEXT(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleGenQueriesEXT(
- uint32 immediate_data_size, const gles2::cmds::GenQueriesEXT& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- GLuint* queries = GetSharedMemoryAs<GLuint*>(
- c.queries_shm_id, c.queries_shm_offset, data_size);
- if (queries == NULL) {
- return error::kOutOfBounds;
- }
- if (!GenQueriesEXTHelper(n, queries)) {
- return error::kInvalidArguments;
- }
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleGenQueriesEXTImmediate(
- uint32 immediate_data_size, const gles2::cmds::GenQueriesEXTImmediate& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::GenQueriesEXTImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- GLuint* queries = GetImmediateDataAs<GLuint*>(
- c, data_size, immediate_data_size);
+ GLuint* queries =
+ GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size);
if (queries == NULL) {
return error::kOutOfBounds;
}
@@ -2842,32 +2469,16 @@ error::Error GLES2DecoderImpl::HandleGenQueriesEXTImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDeleteQueriesEXT(
- uint32 immediate_data_size, const gles2::cmds::DeleteQueriesEXT& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- const GLuint* queries = GetSharedMemoryAs<const GLuint*>(
- c.queries_shm_id, c.queries_shm_offset, data_size);
- if (queries == NULL) {
- return error::kOutOfBounds;
- }
- DeleteQueriesEXTHelper(n, queries);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleDeleteQueriesEXTImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::DeleteQueriesEXTImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- const GLuint* queries = GetImmediateDataAs<const GLuint*>(
- c, data_size, immediate_data_size);
+ const GLuint* queries =
+ GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size);
if (queries == NULL) {
return error::kOutOfBounds;
}
@@ -2876,7 +2487,8 @@ error::Error GLES2DecoderImpl::HandleDeleteQueriesEXTImmediate(
}
error::Error GLES2DecoderImpl::HandleInsertEventMarkerEXT(
- uint32 immediate_data_size, const gles2::cmds::InsertEventMarkerEXT& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::InsertEventMarkerEXT& c) {
GLuint bucket_id = static_cast<GLuint>(c.bucket_id);
Bucket* bucket = GetBucket(bucket_id);
if (!bucket || bucket->size() == 0) {
@@ -2891,7 +2503,8 @@ error::Error GLES2DecoderImpl::HandleInsertEventMarkerEXT(
}
error::Error GLES2DecoderImpl::HandlePushGroupMarkerEXT(
- uint32 immediate_data_size, const gles2::cmds::PushGroupMarkerEXT& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::PushGroupMarkerEXT& c) {
GLuint bucket_id = static_cast<GLuint>(c.bucket_id);
Bucket* bucket = GetBucket(bucket_id);
if (!bucket || bucket->size() == 0) {
@@ -2906,39 +2519,22 @@ error::Error GLES2DecoderImpl::HandlePushGroupMarkerEXT(
}
error::Error GLES2DecoderImpl::HandlePopGroupMarkerEXT(
- uint32 immediate_data_size, const gles2::cmds::PopGroupMarkerEXT& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::PopGroupMarkerEXT& c) {
DoPopGroupMarkerEXT();
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleGenVertexArraysOES(
- uint32 immediate_data_size, const gles2::cmds::GenVertexArraysOES& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- GLuint* arrays = GetSharedMemoryAs<GLuint*>(
- c.arrays_shm_id, c.arrays_shm_offset, data_size);
- if (arrays == NULL) {
- return error::kOutOfBounds;
- }
- if (!GenVertexArraysOESHelper(n, arrays)) {
- return error::kInvalidArguments;
- }
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleGenVertexArraysOESImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::GenVertexArraysOESImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- GLuint* arrays = GetImmediateDataAs<GLuint*>(
- c, data_size, immediate_data_size);
+ GLuint* arrays =
+ GetImmediateDataAs<GLuint*>(c, data_size, immediate_data_size);
if (arrays == NULL) {
return error::kOutOfBounds;
}
@@ -2948,32 +2544,16 @@ error::Error GLES2DecoderImpl::HandleGenVertexArraysOESImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDeleteVertexArraysOES(
- uint32 immediate_data_size, const gles2::cmds::DeleteVertexArraysOES& c) {
- GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
- if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
- return error::kOutOfBounds;
- }
- const GLuint* arrays = GetSharedMemoryAs<const GLuint*>(
- c.arrays_shm_id, c.arrays_shm_offset, data_size);
- if (arrays == NULL) {
- return error::kOutOfBounds;
- }
- DeleteVertexArraysOESHelper(n, arrays);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleDeleteVertexArraysOESImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::DeleteVertexArraysOESImmediate& c) {
GLsizei n = static_cast<GLsizei>(c.n);
- uint32 data_size;
+ uint32_t data_size;
if (!SafeMultiplyUint32(n, sizeof(GLuint), &data_size)) {
return error::kOutOfBounds;
}
- const GLuint* arrays = GetImmediateDataAs<const GLuint*>(
- c, data_size, immediate_data_size);
+ const GLuint* arrays =
+ GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size);
if (arrays == NULL) {
return error::kOutOfBounds;
}
@@ -2982,7 +2562,8 @@ error::Error GLES2DecoderImpl::HandleDeleteVertexArraysOESImmediate(
}
error::Error GLES2DecoderImpl::HandleIsVertexArrayOES(
- uint32 immediate_data_size, const gles2::cmds::IsVertexArrayOES& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::IsVertexArrayOES& c) {
GLuint array = c.array;
typedef cmds::IsVertexArrayOES::Result Result;
Result* result_dst = GetSharedMemoryAs<Result*>(
@@ -2995,20 +2576,22 @@ error::Error GLES2DecoderImpl::HandleIsVertexArrayOES(
}
error::Error GLES2DecoderImpl::HandleBindVertexArrayOES(
- uint32 immediate_data_size, const gles2::cmds::BindVertexArrayOES& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BindVertexArrayOES& c) {
GLuint array = c.array;
DoBindVertexArrayOES(array);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleSwapBuffers(
- uint32 immediate_data_size, const gles2::cmds::SwapBuffers& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::SwapBuffers& c) {
DoSwapBuffers();
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::GetMaxValueInBufferCHROMIUM& c) {
GLuint buffer_id = c.buffer_id;
GLsizei count = static_cast<GLsizei>(c.count);
@@ -3026,8 +2609,8 @@ error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM(
return error::kNoError;
}
if (!validators_->get_max_index_type.IsValid(type)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glGetMaxValueInBufferCHROMIUM", type,
- "type");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glGetMaxValueInBufferCHROMIUM", type, "type");
return error::kNoError;
}
*result_dst = DoGetMaxValueInBufferCHROMIUM(buffer_id, count, type, offset);
@@ -3035,7 +2618,7 @@ error::Error GLES2DecoderImpl::HandleGetMaxValueInBufferCHROMIUM(
}
error::Error GLES2DecoderImpl::HandleTexImageIOSurface2DCHROMIUM(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::TexImageIOSurface2DCHROMIUM& c) {
GLenum target = static_cast<GLenum>(c.target);
GLsizei width = static_cast<GLsizei>(c.width);
@@ -3043,8 +2626,8 @@ error::Error GLES2DecoderImpl::HandleTexImageIOSurface2DCHROMIUM(
GLuint ioSurfaceId = static_cast<GLuint>(c.ioSurfaceId);
GLuint plane = static_cast<GLuint>(c.plane);
if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glTexImageIOSurface2DCHROMIUM", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glTexImageIOSurface2DCHROMIUM", target, "target");
return error::kNoError;
}
if (width < 0) {
@@ -3062,7 +2645,8 @@ error::Error GLES2DecoderImpl::HandleTexImageIOSurface2DCHROMIUM(
}
error::Error GLES2DecoderImpl::HandleCopyTextureCHROMIUM(
- uint32 immediate_data_size, const gles2::cmds::CopyTextureCHROMIUM& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::CopyTextureCHROMIUM& c) {
GLenum target = static_cast<GLenum>(c.target);
GLenum source_id = static_cast<GLenum>(c.source_id);
GLenum dest_id = static_cast<GLenum>(c.dest_id);
@@ -3070,13 +2654,14 @@ error::Error GLES2DecoderImpl::HandleCopyTextureCHROMIUM(
GLint internalformat = static_cast<GLint>(c.internalformat);
GLenum dest_type = static_cast<GLenum>(c.dest_type);
if (!validators_->texture_internal_format.IsValid(internalformat)) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glCopyTextureCHROMIUM", "internalformat GL_INVALID_VALUE"); // NOLINT
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE,
+ "glCopyTextureCHROMIUM",
+ "internalformat GL_INVALID_VALUE");
return error::kNoError;
}
if (!validators_->pixel_type.IsValid(dest_type)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glCopyTextureCHROMIUM", dest_type,
- "dest_type");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glCopyTextureCHROMIUM", dest_type, "dest_type");
return error::kNoError;
}
DoCopyTextureCHROMIUM(
@@ -3084,43 +2669,22 @@ error::Error GLES2DecoderImpl::HandleCopyTextureCHROMIUM(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleProduceTextureCHROMIUM(
- uint32 immediate_data_size, const gles2::cmds::ProduceTextureCHROMIUM& c) {
- GLenum target = static_cast<GLenum>(c.target);
- uint32 data_size;
- if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLbyte* mailbox = GetSharedMemoryAs<const GLbyte*>(
- c.mailbox_shm_id, c.mailbox_shm_offset, data_size);
- if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureCHROMIUM", target,
- "target");
- return error::kNoError;
- }
- if (mailbox == NULL) {
- return error::kOutOfBounds;
- }
- DoProduceTextureCHROMIUM(target, mailbox);
- return error::kNoError;
-}
-
error::Error GLES2DecoderImpl::HandleProduceTextureCHROMIUMImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::ProduceTextureCHROMIUMImmediate& c) {
GLenum target = static_cast<GLenum>(c.target);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLbyte* mailbox = GetImmediateDataAs<const GLbyte*>(
- c, data_size, immediate_data_size);
+ const GLbyte* mailbox =
+ GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size);
if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glProduceTextureCHROMIUM", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glProduceTextureCHROMIUM", target, "target");
return error::kNoError;
}
if (mailbox == NULL) {
@@ -3130,43 +2694,48 @@ error::Error GLES2DecoderImpl::HandleProduceTextureCHROMIUMImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleConsumeTextureCHROMIUM(
- uint32 immediate_data_size, const gles2::cmds::ConsumeTextureCHROMIUM& c) {
+error::Error GLES2DecoderImpl::HandleProduceTextureDirectCHROMIUMImmediate(
+ uint32_t immediate_data_size,
+ const gles2::cmds::ProduceTextureDirectCHROMIUMImmediate& c) {
+ GLuint texture = c.texture;
GLenum target = static_cast<GLenum>(c.target);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
return error::kOutOfBounds;
}
- const GLbyte* mailbox = GetSharedMemoryAs<const GLbyte*>(
- c.mailbox_shm_id, c.mailbox_shm_offset, data_size);
+ if (data_size > immediate_data_size) {
+ return error::kOutOfBounds;
+ }
+ const GLbyte* mailbox =
+ GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size);
if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glConsumeTextureCHROMIUM", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glProduceTextureDirectCHROMIUM", target, "target");
return error::kNoError;
}
if (mailbox == NULL) {
return error::kOutOfBounds;
}
- DoConsumeTextureCHROMIUM(target, mailbox);
+ DoProduceTextureDirectCHROMIUM(texture, target, mailbox);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleConsumeTextureCHROMIUMImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::ConsumeTextureCHROMIUMImmediate& c) {
GLenum target = static_cast<GLenum>(c.target);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(1, sizeof(GLbyte), 64, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLbyte* mailbox = GetImmediateDataAs<const GLbyte*>(
- c, data_size, immediate_data_size);
+ const GLbyte* mailbox =
+ GetImmediateDataAs<const GLbyte*>(c, data_size, immediate_data_size);
if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glConsumeTextureCHROMIUM", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glConsumeTextureCHROMIUM", target, "target");
return error::kNoError;
}
if (mailbox == NULL) {
@@ -3177,12 +2746,13 @@ error::Error GLES2DecoderImpl::HandleConsumeTextureCHROMIUMImmediate(
}
error::Error GLES2DecoderImpl::HandleBindTexImage2DCHROMIUM(
- uint32 immediate_data_size, const gles2::cmds::BindTexImage2DCHROMIUM& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::BindTexImage2DCHROMIUM& c) {
GLenum target = static_cast<GLenum>(c.target);
GLint imageId = static_cast<GLint>(c.imageId);
if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glBindTexImage2DCHROMIUM", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glBindTexImage2DCHROMIUM", target, "target");
return error::kNoError;
}
DoBindTexImage2DCHROMIUM(target, imageId);
@@ -3190,13 +2760,13 @@ error::Error GLES2DecoderImpl::HandleBindTexImage2DCHROMIUM(
}
error::Error GLES2DecoderImpl::HandleReleaseTexImage2DCHROMIUM(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::ReleaseTexImage2DCHROMIUM& c) {
GLenum target = static_cast<GLenum>(c.target);
GLint imageId = static_cast<GLint>(c.imageId);
if (!validators_->texture_bind_target.IsValid(target)) {
- LOCAL_SET_GL_ERROR_INVALID_ENUM("glReleaseTexImage2DCHROMIUM", target,
- "target");
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glReleaseTexImage2DCHROMIUM", target, "target");
return error::kNoError;
}
DoReleaseTexImage2DCHROMIUM(target, imageId);
@@ -3204,47 +2774,33 @@ error::Error GLES2DecoderImpl::HandleReleaseTexImage2DCHROMIUM(
}
error::Error GLES2DecoderImpl::HandleTraceEndCHROMIUM(
- uint32 immediate_data_size, const gles2::cmds::TraceEndCHROMIUM& c) {
+ uint32_t immediate_data_size,
+ const gles2::cmds::TraceEndCHROMIUM& c) {
DoTraceEndCHROMIUM();
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXT(
- uint32 immediate_data_size, const gles2::cmds::DiscardFramebufferEXT& c) {
- GLenum target = static_cast<GLenum>(c.target);
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLenum* attachments = GetSharedMemoryAs<const GLenum*>(
- c.attachments_shm_id, c.attachments_shm_offset, data_size);
- if (count < 0) {
- LOCAL_SET_GL_ERROR(
- GL_INVALID_VALUE, "glDiscardFramebufferEXT", "count < 0");
+error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXTImmediate(
+ uint32_t immediate_data_size,
+ const gles2::cmds::DiscardFramebufferEXTImmediate& c) {
+ if (!features().ext_discard_framebuffer) {
+ LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
+ "glDiscardFramebufferEXT",
+ "function not available");
return error::kNoError;
}
- if (attachments == NULL) {
- return error::kOutOfBounds;
- }
- DoDiscardFramebufferEXT(target, count, attachments);
- return error::kNoError;
-}
-error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXTImmediate(
- uint32 immediate_data_size,
- const gles2::cmds::DiscardFramebufferEXTImmediate& c) {
GLenum target = static_cast<GLenum>(c.target);
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLenum* attachments = GetImmediateDataAs<const GLenum*>(
- c, data_size, immediate_data_size);
+ const GLenum* attachments =
+ GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size);
if (count < 0) {
LOCAL_SET_GL_ERROR(
GL_INVALID_VALUE, "glDiscardFramebufferEXT", "count < 0");
@@ -3257,39 +2813,37 @@ error::Error GLES2DecoderImpl::HandleDiscardFramebufferEXTImmediate(
return error::kNoError;
}
-error::Error GLES2DecoderImpl::HandleDrawBuffersEXT(
- uint32 immediate_data_size, const gles2::cmds::DrawBuffersEXT& c) {
- GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
- if (!ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) {
- return error::kOutOfBounds;
- }
- const GLenum* bufs = GetSharedMemoryAs<const GLenum*>(
- c.bufs_shm_id, c.bufs_shm_offset, data_size);
- if (count < 0) {
- LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDrawBuffersEXT", "count < 0");
+error::Error GLES2DecoderImpl::HandleLoseContextCHROMIUM(
+ uint32_t immediate_data_size,
+ const gles2::cmds::LoseContextCHROMIUM& c) {
+ GLenum current = static_cast<GLenum>(c.current);
+ GLenum other = static_cast<GLenum>(c.other);
+ if (!validators_->reset_status.IsValid(current)) {
+ LOCAL_SET_GL_ERROR_INVALID_ENUM(
+ "glLoseContextCHROMIUM", current, "current");
return error::kNoError;
}
- if (bufs == NULL) {
- return error::kOutOfBounds;
+ if (!validators_->reset_status.IsValid(other)) {
+ LOCAL_SET_GL_ERROR_INVALID_ENUM("glLoseContextCHROMIUM", other, "other");
+ return error::kNoError;
}
- DoDrawBuffersEXT(count, bufs);
+ DoLoseContextCHROMIUM(current, other);
return error::kNoError;
}
error::Error GLES2DecoderImpl::HandleDrawBuffersEXTImmediate(
- uint32 immediate_data_size,
+ uint32_t immediate_data_size,
const gles2::cmds::DrawBuffersEXTImmediate& c) {
GLsizei count = static_cast<GLsizei>(c.count);
- uint32 data_size;
+ uint32_t data_size;
if (!ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) {
return error::kOutOfBounds;
}
if (data_size > immediate_data_size) {
return error::kOutOfBounds;
}
- const GLenum* bufs = GetImmediateDataAs<const GLenum*>(
- c, data_size, immediate_data_size);
+ const GLenum* bufs =
+ GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size);
if (count < 0) {
LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glDrawBuffersEXT", "count < 0");
return error::kNoError;
@@ -3301,42 +2855,75 @@ error::Error GLES2DecoderImpl::HandleDrawBuffersEXTImmediate(
return error::kNoError;
}
-
bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) {
switch (cap) {
case GL_BLEND:
state_.enable_flags.blend = enabled;
- return true;
+ if (state_.enable_flags.cached_blend != enabled ||
+ state_.ignore_cached_state) {
+ state_.enable_flags.cached_blend = enabled;
+ return true;
+ }
+ return false;
case GL_CULL_FACE:
state_.enable_flags.cull_face = enabled;
- return true;
+ if (state_.enable_flags.cached_cull_face != enabled ||
+ state_.ignore_cached_state) {
+ state_.enable_flags.cached_cull_face = enabled;
+ return true;
+ }
+ return false;
case GL_DEPTH_TEST:
- if (state_.enable_flags.depth_test != enabled) {
- state_.enable_flags.depth_test = enabled;
+ state_.enable_flags.depth_test = enabled;
+ if (state_.enable_flags.cached_depth_test != enabled ||
+ state_.ignore_cached_state) {
framebuffer_state_.clear_state_dirty = true;
}
return false;
case GL_DITHER:
state_.enable_flags.dither = enabled;
- return true;
+ if (state_.enable_flags.cached_dither != enabled ||
+ state_.ignore_cached_state) {
+ state_.enable_flags.cached_dither = enabled;
+ return true;
+ }
+ return false;
case GL_POLYGON_OFFSET_FILL:
state_.enable_flags.polygon_offset_fill = enabled;
- return true;
+ if (state_.enable_flags.cached_polygon_offset_fill != enabled ||
+ state_.ignore_cached_state) {
+ state_.enable_flags.cached_polygon_offset_fill = enabled;
+ return true;
+ }
+ return false;
case GL_SAMPLE_ALPHA_TO_COVERAGE:
state_.enable_flags.sample_alpha_to_coverage = enabled;
- return true;
+ if (state_.enable_flags.cached_sample_alpha_to_coverage != enabled ||
+ state_.ignore_cached_state) {
+ state_.enable_flags.cached_sample_alpha_to_coverage = enabled;
+ return true;
+ }
+ return false;
case GL_SAMPLE_COVERAGE:
state_.enable_flags.sample_coverage = enabled;
- return true;
+ if (state_.enable_flags.cached_sample_coverage != enabled ||
+ state_.ignore_cached_state) {
+ state_.enable_flags.cached_sample_coverage = enabled;
+ return true;
+ }
+ return false;
case GL_SCISSOR_TEST:
- if (state_.enable_flags.scissor_test != enabled) {
- state_.enable_flags.scissor_test = enabled;
- framebuffer_state_.clear_state_dirty = true;
+ state_.enable_flags.scissor_test = enabled;
+ if (state_.enable_flags.cached_scissor_test != enabled ||
+ state_.ignore_cached_state) {
+ state_.enable_flags.cached_scissor_test = enabled;
+ return true;
}
return false;
case GL_STENCIL_TEST:
- if (state_.enable_flags.stencil_test != enabled) {
- state_.enable_flags.stencil_test = enabled;
+ state_.enable_flags.stencil_test = enabled;
+ if (state_.enable_flags.cached_stencil_test != enabled ||
+ state_.ignore_cached_state) {
framebuffer_state_.clear_state_dirty = true;
}
return false;
@@ -3346,4 +2933,3 @@ bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) {
}
}
#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_mock.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
index f52c2217040..94bf3aa27f8 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_mock.h
@@ -21,13 +21,12 @@ class GLSurface;
}
namespace gpu {
-class StreamTextureManager;
-
namespace gles2 {
class ContextGroup;
class ErrorState;
class QueryManager;
+struct ContextState;
class MockGLES2Decoder : public GLES2Decoder {
public:
@@ -43,23 +42,25 @@ class MockGLES2Decoder : public GLES2Decoder {
const std::vector<int32>& attribs));
MOCK_METHOD1(Destroy, void(bool have_context));
MOCK_METHOD1(SetSurface, void(const scoped_refptr<gfx::GLSurface>& surface));
- MOCK_METHOD1(ProduceFrontBuffer, bool(const Mailbox& mailbox));
+ MOCK_METHOD1(ProduceFrontBuffer, void(const Mailbox& mailbox));
MOCK_METHOD1(ResizeOffscreenFrameBuffer, bool(const gfx::Size& size));
MOCK_METHOD0(MakeCurrent, bool());
- MOCK_METHOD0(ReleaseCurrent, void());
MOCK_METHOD1(GetServiceIdForTesting, uint32(uint32 client_id));
MOCK_METHOD0(GetGLES2Util, GLES2Util*());
MOCK_METHOD0(GetGLSurface, gfx::GLSurface*());
MOCK_METHOD0(GetGLContext, gfx::GLContext*());
MOCK_METHOD0(GetContextGroup, ContextGroup*());
+ MOCK_METHOD0(GetContextState, const ContextState*());
MOCK_METHOD0(GetCapabilities, Capabilities());
MOCK_METHOD0(ProcessPendingQueries, bool());
MOCK_METHOD0(HasMoreIdleWork, bool());
MOCK_METHOD0(PerformIdleWork, void());
- MOCK_CONST_METHOD0(RestoreState, void());
+ MOCK_CONST_METHOD1(RestoreState, void(const ContextState* prev_state));
MOCK_CONST_METHOD0(RestoreActiveTexture, void());
- MOCK_CONST_METHOD0(RestoreAllTextureUnitBindings, void());
- MOCK_CONST_METHOD1(RestoreAttribute, void(unsigned index));
+ MOCK_CONST_METHOD1(
+ RestoreAllTextureUnitBindings, void(const ContextState* state));
+ MOCK_CONST_METHOD1(
+ RestoreActiveTextureUnitBinding, void(unsigned int target));
MOCK_CONST_METHOD0(RestoreBufferBindings, void());
MOCK_CONST_METHOD0(RestoreFramebufferBindings, void());
MOCK_CONST_METHOD0(RestoreGlobalState, void());
@@ -67,6 +68,8 @@ class MockGLES2Decoder : public GLES2Decoder {
MOCK_CONST_METHOD0(RestoreRenderbufferBindings, void());
MOCK_CONST_METHOD1(RestoreTextureState, void(unsigned service_id));
MOCK_CONST_METHOD1(RestoreTextureUnitBindings, void(unsigned unit));
+ MOCK_CONST_METHOD0(ClearAllAttributes, void());
+ MOCK_CONST_METHOD0(RestoreAllAttributes, void());
MOCK_METHOD0(GetQueryManager, gpu::gles2::QueryManager*());
MOCK_METHOD0(GetVertexArrayManager, gpu::gles2::VertexArrayManager*());
MOCK_METHOD1(
@@ -78,6 +81,7 @@ class MockGLES2Decoder : public GLES2Decoder {
MOCK_METHOD0(ResetAsyncPixelTransferManagerForTest, void());
MOCK_METHOD1(SetAsyncPixelTransferManagerForTest,
void(AsyncPixelTransferManager*));
+ MOCK_METHOD1(SetIgnoreCachedStateForTest, void(bool ignore));
MOCK_METHOD3(DoCommand, error::Error(unsigned int command,
unsigned int arg_count,
const void* cmd_data));
@@ -85,11 +89,12 @@ class MockGLES2Decoder : public GLES2Decoder {
uint32* service_texture_id));
MOCK_METHOD0(GetContextLostReason, error::ContextLostReason());
MOCK_CONST_METHOD1(GetCommandName, const char*(unsigned int command_id));
- MOCK_METHOD9(ClearLevel, bool(
+ MOCK_METHOD10(ClearLevel, bool(
unsigned service_id,
unsigned bind_target,
unsigned target,
int level,
+ unsigned internal_format,
unsigned format,
unsigned type,
int width,
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
index ec8ff6ccb2f..f97a6dc5b95 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
#include "base/command_line.h"
#include "base/strings/string_number_conversions.h"
@@ -14,15 +14,14 @@
#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
#include "gpu/command_buffer/service/cmd_buffer_engine.h"
#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/context_state.h"
#include "gpu/command_buffer/service/gl_surface_mock.h"
-#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
#include "gpu/command_buffer/service/gpu_switches.h"
#include "gpu/command_buffer/service/image_manager.h"
#include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/mocks.h"
#include "gpu/command_buffer/service/program_manager.h"
-#include "gpu/command_buffer/service/stream_texture_manager_mock.h"
-#include "gpu/command_buffer/service/stream_texture_mock.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_implementation.h"
@@ -36,10 +35,12 @@
using ::gfx::MockGLInterface;
using ::testing::_;
+using ::testing::AtLeast;
using ::testing::DoAll;
using ::testing::InSequence;
using ::testing::Invoke;
using ::testing::MatcherCast;
+using ::testing::Mock;
using ::testing::Pointee;
using ::testing::Return;
using ::testing::SaveArg;
@@ -54,1592 +55,58 @@ namespace gles2 {
using namespace cmds;
-class GLES2DecoderTest : public GLES2DecoderTestBase {
- public:
- GLES2DecoderTest() { }
-
- protected:
- void CheckReadPixelsOutOfRange(
- GLint in_read_x, GLint in_read_y,
- GLsizei in_read_width, GLsizei in_read_height,
- bool init);
-};
-
-class GLES2DecoderTestWithExtensions
- : public GLES2DecoderTest,
- public ::testing::WithParamInterface<const char*> {
- public:
- GLES2DecoderTestWithExtensions() {}
-
- virtual void SetUp() {
- InitDecoder(GetParam(), // extensions
- true, // has alpha
- true, // has depth
- false, // has stencil
- true, // request alpha
- true, // request depth
- false, // request stencil
- false); // bind generates resource
- }
-};
-
-class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase {
- public:
- GLES2DecoderWithShaderTest()
- : GLES2DecoderWithShaderTestBase() {
- }
-
- void CheckTextureChangesMarkFBOAsNotComplete(bool bound_fbo);
- void CheckRenderbufferChangesMarkFBOAsNotComplete(bool bound_fbo);
-};
-
-class GLES2DecoderGeometryInstancingTest : public GLES2DecoderWithShaderTest {
- public:
- GLES2DecoderGeometryInstancingTest()
- : GLES2DecoderWithShaderTest() {
- }
-
- virtual void SetUp() {
- InitDecoder(
- "GL_ANGLE_instanced_arrays", // extensions
- true, // has alpha
- true, // has depth
- false, // has stencil
- true, // request alpha
- true, // request depth
- false, // request stencil
- true); // bind generates resource
- SetupDefaultProgram();
- }
-};
-
-class GLES2DecoderRGBBackbufferTest : public GLES2DecoderWithShaderTest {
- public:
- GLES2DecoderRGBBackbufferTest() { }
-
- virtual void SetUp() {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- SetupDefaultProgram();
- }
-};
-
-class GLES2DecoderManualInitTest : public GLES2DecoderWithShaderTest {
- public:
- GLES2DecoderManualInitTest() { }
-
- // Override default setup so nothing gets setup.
- virtual void SetUp() {
- }
-};
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysNoAttributesSucceeds) {
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-// Tests when the math overflows (0x40000000 * sizeof GLfloat)
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OverflowFails) {
- const GLsizei kLargeCount = 0x40000000;
- SetupTexture();
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kLargeCount);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
-}
-
-// Tests when the math overflows (0x7FFFFFFF + 1 = 0x8000000 verts)
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0PosToNegFails) {
- const GLsizei kLargeCount = 0x7FFFFFFF;
- SetupTexture();
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kLargeCount);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+void GLES2DecoderRGBBackbufferTest::SetUp() {
+ // Test codepath with workaround clear_alpha_in_readpixels because
+ // ReadPixelsEmulator emulates the incorrect driver behavior.
+ CommandLine command_line(0, NULL);
+ command_line.AppendSwitchASCII(
+ switches::kGpuDriverBugWorkarounds,
+ base::IntToString(gpu::CLEAR_ALPHA_IN_READPIXELS));
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoderWithCommandLine(init, &command_line);
+ SetupDefaultProgram();
}
-// Tests when the driver returns an error
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OOMFails) {
- const GLsizei kFakeLargeCount = 0x1234;
- SetupTexture();
- AddExpectationsForSimulatedAttrib0WithError(
- kFakeLargeCount, 0, GL_OUT_OF_MEMORY);
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+// Override default setup so nothing gets setup.
+void GLES2DecoderManualInitTest::SetUp() {
}
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysBadTextureUsesBlack) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- // This is an NPOT texture. As the default filtering requires mips
- // this should trigger replacing with black textures before rendering.
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- {
- InSequence sequence;
- EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindTexture(
- GL_TEXTURE_2D, TestHelper::kServiceBlackTexture2dId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
- .Times(1)
- .RetiresOnSaturation();
+void GLES2DecoderManualInitTest::EnableDisableTest(GLenum cap,
+ bool enable,
+ bool expect_set) {
+ if (expect_set) {
+ SetupExpectationsForEnableDisable(cap, enable);
+ }
+ if (enable) {
+ Enable cmd;
+ cmd.Init(cap);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ } else {
+ Disable cmd;
+ cmd.Init(cap);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
- SetupExpectationsForApplyingDefaultDirtyState();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysMissingAttributesFails) {
- DoEnableVertexAttribArray(1);
-
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(0);
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest,
- DrawArraysMissingAttributesZeroCountSucceeds) {
- DoEnableVertexAttribArray(1);
-
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(0);
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysValidAttributesSucceeds) {
- SetupTexture();
- SetupVertexBuffer();
- DoEnableVertexAttribArray(1);
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
- AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedBufferFails) {
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
- DeleteVertexBuffer();
-
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(0);
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysDeletedProgramSucceeds) {
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
- DoDeleteProgram(client_program_id_, kServiceProgramId);
-
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId))
- .Times(1);
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysWithInvalidModeFails) {
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(0);
- DrawArrays cmd;
- cmd.Init(GL_QUADS, 0, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(GL_POLYGON, 0, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysInvalidCountFails) {
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- // Try start > 0
- EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 1, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Try with count > size
- cmd.Init(GL_TRIANGLES, 0, kNumVertices + 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Try with attrib offset > 0
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 4);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Try with size > 2 (ie, vec3 instead of vec2)
- DoVertexAttribPointer(1, 3, GL_FLOAT, 0, 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Try with stride > 8 (vec2 + vec2 byte)
- DoVertexAttribPointer(1, 2, GL_FLOAT, sizeof(GLfloat) * 3, 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysInstancedANGLEFails) {
- SetupTexture();
- SetupVertexBuffer();
- DoEnableVertexAttribArray(1);
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLENoAttributesFails) {
- SetupTexture();
-
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLESimulatedAttrib0) {
- SetupTexture();
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, 3))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 1))
- .Times(1)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, 3);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLEMissingAttributesFails) {
- DoEnableVertexAttribArray(1);
-
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0);
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLEMissingAttributesZeroCountSucceeds) {
- DoEnableVertexAttribArray(1);
-
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0);
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, 0, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLEValidAttributesSucceeds) {
- SetupTexture();
- SetupVertexBuffer();
- DoEnableVertexAttribArray(1);
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
- AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, 1))
- .Times(1)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLEWithInvalidModeFails) {
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0);
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_QUADS, 0, 1, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(GL_POLYGON, 0, 1, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLEInvalidPrimcountFails) {
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0);
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, 1, -1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-// Per-instance data is twice as large, but number of instances is half
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLELargeInstanceSucceeds) {
- SetupTexture();
- SetupVertexBuffer();
- SetupExpectationsForApplyingDefaultDirtyState();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 4, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices,
- kNumVertices / 2))
- .Times(1)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices / 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-// Per-instance data is twice as large, but divisor is twice
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLELargeDivisorSucceeds) {
- SetupTexture();
- SetupVertexBuffer();
- SetupExpectationsForApplyingDefaultDirtyState();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 4, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 2);
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices,
- kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest, DrawArraysInstancedANGLELargeFails) {
- SetupTexture();
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices + 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- cmd.Init(GL_TRIANGLES, 0, kNumVertices + 1, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-// Per-index data is twice as large, but number of indices is half
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLELargeIndexSucceeds) {
- SetupTexture();
- SetupVertexBuffer();
- SetupExpectationsForApplyingDefaultDirtyState();
- DoVertexAttribPointer(1, 4, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices / 2,
- kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices / 2, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawArraysInstancedANGLENoDivisor0Fails) {
- SetupTexture();
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- DoVertexAttribDivisorANGLE(1, 1);
- EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsNoAttributesSucceeds) {
- SetupTexture();
- SetupIndexBuffer();
- AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
- EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2)))
- .Times(1)
- .RetiresOnSaturation();
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsMissingAttributesFails) {
- SetupIndexBuffer();
- DoEnableVertexAttribArray(1);
-
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
- .Times(0);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest,
- DrawElementsMissingAttributesZeroCountSucceeds) {
- SetupIndexBuffer();
- DoEnableVertexAttribArray(1);
-
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
- .Times(0);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, 0, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsExtraAttributesFails) {
- SetupIndexBuffer();
- DoEnableVertexAttribArray(6);
-
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
- .Times(0);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsValidAttributesSucceeds) {
- SetupTexture();
- SetupVertexBuffer();
- SetupIndexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
- AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2)))
- .Times(1)
- .RetiresOnSaturation();
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsDeletedBufferFails) {
- SetupVertexBuffer();
- SetupIndexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
- DeleteIndexBuffer();
-
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
- .Times(0);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsDeletedProgramSucceeds) {
- SetupTexture();
- SetupIndexBuffer();
- AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
- DoDeleteProgram(client_program_id_, kServiceProgramId);
-
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
- .Times(1);
- EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId))
- .Times(1);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsWithInvalidModeFails) {
- SetupVertexBuffer();
- SetupIndexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
- .Times(0);
- DrawElements cmd;
- cmd.Init(GL_QUADS, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(GL_POLYGON, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsInvalidCountFails) {
- SetupVertexBuffer();
- SetupIndexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- // Try start > 0
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kNumIndices, GL_UNSIGNED_SHORT, 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Try with count > size
- cmd.Init(GL_TRIANGLES, kNumIndices + 1, GL_UNSIGNED_SHORT, 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsOutOfRangeIndicesFails) {
- SetupVertexBuffer();
- SetupIndexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kInvalidIndexRangeCount, GL_UNSIGNED_SHORT,
- kInvalidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsOddOffsetForUint16Fails) {
- SetupVertexBuffer();
- SetupIndexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kInvalidIndexRangeCount, GL_UNSIGNED_SHORT, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsInstancedANGLEFails) {
- SetupTexture();
- SetupVertexBuffer();
- SetupIndexBuffer();
- DoEnableVertexAttribArray(1);
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLENoAttributesFails) {
- SetupTexture();
- SetupIndexBuffer();
-
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLESimulatedAttrib0) {
- SetupTexture();
- SetupVertexBuffer();
- SetupIndexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(
- GL_TRIANGLES,
- kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2),
- 3))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 1))
- .Times(1)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, 3);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLEMissingAttributesFails) {
- SetupIndexBuffer();
- DoEnableVertexAttribArray(1);
-
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0);
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLEMissingAttributesZeroCountSucceeds) {
- SetupIndexBuffer();
- DoEnableVertexAttribArray(1);
-
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0);
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, 0, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLEValidAttributesSucceeds) {
- SetupIndexBuffer();
- SetupTexture();
- SetupVertexBuffer();
- DoEnableVertexAttribArray(1);
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
- AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(
- GL_TRIANGLES,
- kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2),
- 1))
- .Times(1)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLEWithInvalidModeFails) {
- SetupIndexBuffer();
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0);
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_QUADS, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(GL_INVALID_ENUM, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-// Per-instance data is twice as large, but number of instances is half
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLELargeInstanceSucceeds) {
- SetupTexture();
- SetupIndexBuffer();
- SetupVertexBuffer();
- SetupExpectationsForApplyingDefaultDirtyState();
- //Add offset so we're sure we're accessing data near the end of the buffer.
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0,
- (kNumVertices - kMaxValidIndex - 1) * 2 *
- sizeof(GLfloat));
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 4, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(
- GL_TRIANGLES,
- kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2),
- kNumVertices / 2))
- .Times(1)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kNumVertices / 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-// Per-instance data is twice as large, but divisor is twice
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLELargeDivisorSucceeds) {
- SetupTexture();
- SetupIndexBuffer();
- SetupVertexBuffer();
- SetupExpectationsForApplyingDefaultDirtyState();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 4, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 2);
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(
- GL_TRIANGLES,
- kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2),
- kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLELargeFails) {
- SetupTexture();
- SetupIndexBuffer();
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kNumVertices + 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- cmd.Init(GL_TRIANGLES, kInvalidIndexRangeCount, GL_UNSIGNED_SHORT,
- kInvalidIndexRangeStart * 2, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLEInvalidPrimcountFails) {
- SetupTexture();
- SetupIndexBuffer();
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, -1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-// Per-index data is twice as large, but values of indices are smaller
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLELargeIndexSucceeds) {
- SetupTexture();
- SetupIndexBuffer();
- SetupVertexBuffer();
- SetupExpectationsForApplyingDefaultDirtyState();
- DoVertexAttribPointer(1, 4, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(
- GL_TRIANGLES,
- kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2),
- kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderGeometryInstancingTest,
- DrawElementsInstancedANGLENoDivisor0Fails) {
- SetupTexture();
- SetupIndexBuffer();
- SetupVertexBuffer();
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
-
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoVertexAttribDivisorANGLE(0, 1);
- DoVertexAttribDivisorANGLE(1, 1);
- EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetVertexAttribPointervSucceeds) {
- const float dummy = 0;
- const GLuint kOffsetToTestFor = sizeof(dummy) * 4;
- const GLuint kIndexToTest = 1;
- GetVertexAttribPointerv::Result* result =
- static_cast<GetVertexAttribPointerv::Result*>(shared_memory_address_);
- result->size = 0;
- const GLuint* result_value = result->GetData();
- // Test that initial value is 0.
- GetVertexAttribPointerv cmd;
- cmd.Init(kIndexToTest, GL_VERTEX_ATTRIB_ARRAY_POINTER,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(sizeof(*result_value), result->size);
- EXPECT_EQ(0u, *result_value);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Set the value and see that we get it.
- SetupVertexBuffer();
- DoVertexAttribPointer(kIndexToTest, 2, GL_FLOAT, 0, kOffsetToTestFor);
- result->size = 0;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(sizeof(*result_value), result->size);
- EXPECT_EQ(kOffsetToTestFor, *result_value);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetVertexAttribPointervBadArgsFails) {
- const GLuint kIndexToTest = 1;
- GetVertexAttribPointerv::Result* result =
- static_cast<GetVertexAttribPointerv::Result*>(shared_memory_address_);
- result->size = 0;
- const GLuint* result_value = result->GetData();
- // Test pname invalid fails.
- GetVertexAttribPointerv cmd;
- cmd.Init(kIndexToTest, GL_VERTEX_ATTRIB_ARRAY_POINTER + 1,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0u, result->size);
- EXPECT_EQ(kInitialResult, *result_value);
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
- // Test index out of range fails.
- result->size = 0;
- cmd.Init(kNumVertexAttribs, GL_VERTEX_ATTRIB_ARRAY_POINTER,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0u, result->size);
- EXPECT_EQ(kInitialResult, *result_value);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
- // Test memory id bad fails.
- cmd.Init(kIndexToTest, GL_VERTEX_ATTRIB_ARRAY_POINTER,
- kInvalidSharedMemoryId, shared_memory_offset_);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-
- // Test memory offset bad fails.
- cmd.Init(kIndexToTest, GL_VERTEX_ATTRIB_ARRAY_POINTER,
- shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformivSucceeds) {
- GetUniformiv::Result* result =
- static_cast<GetUniformiv::Result*>(shared_memory_address_);
- result->size = 0;
- GetUniformiv cmd;
- cmd.Init(client_program_id_,
- kUniform2FakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, GetUniformiv(kServiceProgramId, kUniform2RealLocation, _))
- .Times(1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GLES2Util::GetGLDataTypeSizeForUniforms(kUniform2Type),
- result->size);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformivArrayElementSucceeds) {
- GetUniformiv::Result* result =
- static_cast<GetUniformiv::Result*>(shared_memory_address_);
- result->size = 0;
- GetUniformiv cmd;
- cmd.Init(client_program_id_,
- kUniform2ElementFakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_,
- GetUniformiv(kServiceProgramId, kUniform2ElementRealLocation, _))
- .Times(1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GLES2Util::GetGLDataTypeSizeForUniforms(kUniform2Type),
- result->size);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformivBadProgramFails) {
- GetUniformiv::Result* result =
- static_cast<GetUniformiv::Result*>(shared_memory_address_);
- result->size = 0;
- GetUniformiv cmd;
- // non-existant program
- cmd.Init(kInvalidClientId,
- kUniform2FakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, GetUniformiv(_, _, _))
- .Times(0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- // Valid id that is not a program. The GL spec requires a different error for
- // this case.
-#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
- result->size = kInitialResult;
- cmd.Init(client_shader_id_,
- kUniform2FakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
- // Unlinked program
- EXPECT_CALL(*gl_, CreateProgram())
- .Times(1)
- .WillOnce(Return(kNewServiceId))
- .RetiresOnSaturation();
- CreateProgram cmd2;
- cmd2.Init(kNewClientId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- result->size = kInitialResult;
- cmd.Init(kNewClientId,
- kUniform2FakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformivBadLocationFails) {
- GetUniformiv::Result* result =
- static_cast<GetUniformiv::Result*>(shared_memory_address_);
- result->size = 0;
- GetUniformiv cmd;
- // invalid location
- cmd.Init(client_program_id_, kInvalidUniformLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, GetUniformiv(_, _, _))
- .Times(0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformivBadSharedMemoryFails) {
- GetUniformiv cmd;
- cmd.Init(client_program_id_,
- kUniform2FakeLocation,
- kInvalidSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, GetUniformiv(_, _, _))
- .Times(0);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, kUniform2FakeLocation,
- kSharedMemoryId, kInvalidSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-};
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformfvSucceeds) {
- GetUniformfv::Result* result =
- static_cast<GetUniformfv::Result*>(shared_memory_address_);
- result->size = 0;
- GetUniformfv cmd;
- cmd.Init(client_program_id_,
- kUniform2FakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, GetUniformfv(kServiceProgramId, kUniform2RealLocation, _))
- .Times(1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GLES2Util::GetGLDataTypeSizeForUniforms(kUniform2Type),
- result->size);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformfvArrayElementSucceeds) {
- GetUniformfv::Result* result =
- static_cast<GetUniformfv::Result*>(shared_memory_address_);
- result->size = 0;
- GetUniformfv cmd;
- cmd.Init(client_program_id_,
- kUniform2ElementFakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_,
- GetUniformfv(kServiceProgramId, kUniform2ElementRealLocation, _))
- .Times(1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GLES2Util::GetGLDataTypeSizeForUniforms(kUniform2Type),
- result->size);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformfvBadProgramFails) {
- GetUniformfv::Result* result =
- static_cast<GetUniformfv::Result*>(shared_memory_address_);
- result->size = 0;
- GetUniformfv cmd;
- // non-existant program
- cmd.Init(kInvalidClientId,
- kUniform2FakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, GetUniformfv(_, _, _))
- .Times(0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- // Valid id that is not a program. The GL spec requires a different error for
- // this case.
-#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
- result->size = kInitialResult;
- cmd.Init(client_shader_id_,
- kUniform2FakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
- // Unlinked program
- EXPECT_CALL(*gl_, CreateProgram())
- .Times(1)
- .WillOnce(Return(kNewServiceId))
- .RetiresOnSaturation();
- CreateProgram cmd2;
- cmd2.Init(kNewClientId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- result->size = kInitialResult;
- cmd.Init(kNewClientId,
- kUniform2FakeLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformfvBadLocationFails) {
- GetUniformfv::Result* result =
- static_cast<GetUniformfv::Result*>(shared_memory_address_);
- result->size = 0;
- GetUniformfv cmd;
- // invalid location
- cmd.Init(client_program_id_, kInvalidUniformLocation,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, GetUniformfv(_, _, _))
- .Times(0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformfvBadSharedMemoryFails) {
- GetUniformfv cmd;
- cmd.Init(client_program_id_,
- kUniform2FakeLocation,
- kInvalidSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, GetUniformfv(_, _, _))
- .Times(0);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, kUniform2FakeLocation,
- kSharedMemoryId, kInvalidSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-};
-
-TEST_F(GLES2DecoderWithShaderTest, GetAttachedShadersSucceeds) {
- GetAttachedShaders cmd;
- typedef GetAttachedShaders::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->size = 0;
- EXPECT_CALL(*gl_, GetAttachedShaders(kServiceProgramId, 1, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(1),
- SetArgumentPointee<3>(kServiceShaderId)));
- cmd.Init(client_program_id_, shared_memory_id_, shared_memory_offset_,
- Result::ComputeSize(1));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(1, result->GetNumResults());
- EXPECT_EQ(client_shader_id_, result->GetData()[0]);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetAttachedShadersResultNotInitFail) {
- GetAttachedShaders cmd;
- typedef GetAttachedShaders::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->size = 1;
- EXPECT_CALL(*gl_, GetAttachedShaders(_, _, _, _))
- .Times(0);
- cmd.Init(client_program_id_, shared_memory_id_, shared_memory_offset_,
- Result::ComputeSize(1));
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetAttachedShadersBadProgramFails) {
- GetAttachedShaders cmd;
- typedef GetAttachedShaders::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->size = 0;
- EXPECT_CALL(*gl_, GetAttachedShaders(_, _, _, _))
- .Times(0);
- cmd.Init(kInvalidClientId, shared_memory_id_, shared_memory_offset_,
- Result::ComputeSize(1));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0U, result->size);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetAttachedShadersBadSharedMemoryFails) {
- GetAttachedShaders cmd;
- typedef GetAttachedShaders::Result Result;
- cmd.Init(client_program_id_, kInvalidSharedMemoryId, shared_memory_offset_,
- Result::ComputeSize(1));
- EXPECT_CALL(*gl_, GetAttachedShaders(_, _, _, _))
- .Times(0);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, shared_memory_id_, kInvalidSharedMemoryOffset,
- Result::ComputeSize(1));
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatSucceeds) {
- ScopedGLImplementationSetter gl_impl(::gfx::kGLImplementationEGLGLES2);
- GetShaderPrecisionFormat cmd;
- typedef GetShaderPrecisionFormat::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 0;
- const GLint range[2] = { 62, 62 };
- const GLint precision = 16;
- EXPECT_CALL(*gl_,GetShaderPrecisionFormat(_, _, _, _))
- .WillOnce(DoAll(SetArrayArgument<2>(range,range+2),
- SetArgumentPointee<3>(precision)))
- .RetiresOnSaturation();
- cmd.Init(GL_VERTEX_SHADER, GL_HIGH_FLOAT,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_NE(0, result->success);
- EXPECT_EQ(range[0], result->min_range);
- EXPECT_EQ(range[1], result->max_range);
- EXPECT_EQ(precision, result->precision);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatResultNotInitFails) {
- GetShaderPrecisionFormat cmd;
- typedef GetShaderPrecisionFormat::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 1;
- // NOTE: GL might not be called. There is no Desktop OpenGL equivalent
- cmd.Init(GL_VERTEX_SHADER, GL_HIGH_FLOAT,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatBadArgsFails) {
- typedef GetShaderPrecisionFormat::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 0;
- GetShaderPrecisionFormat cmd;
- cmd.Init(GL_TEXTURE_2D, GL_HIGH_FLOAT,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- result->success = 0;
- cmd.Init(GL_VERTEX_SHADER, GL_TEXTURE_2D,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest,
- GetShaderPrecisionFormatBadSharedMemoryFails) {
- GetShaderPrecisionFormat cmd;
- cmd.Init(GL_VERTEX_SHADER, GL_HIGH_FLOAT,
- kInvalidSharedMemoryId, shared_memory_offset_);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(GL_VERTEX_SHADER, GL_TEXTURE_2D,
- shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveUniformSucceeds) {
- const GLuint kUniformIndex = 1;
- const uint32 kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 0;
- cmd.Init(client_program_id_, kUniformIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_NE(0, result->success);
- EXPECT_EQ(kUniform2Size, result->size);
- EXPECT_EQ(kUniform2Type, result->type);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
- ASSERT_TRUE(bucket != NULL);
- EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kUniform2Name,
- bucket->size()));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveUniformResultNotInitFails) {
- const GLuint kUniformIndex = 1;
- const uint32 kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 1;
- cmd.Init(client_program_id_, kUniformIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveUniformBadProgramFails) {
- const GLuint kUniformIndex = 1;
- const uint32 kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 0;
- cmd.Init(kInvalidClientId, kUniformIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0, result->success);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
- result->success = 0;
- cmd.Init(client_shader_id_, kUniformIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0, result->success);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveUniformBadIndexFails) {
- const uint32 kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 0;
- cmd.Init(client_program_id_, kBadUniformIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0, result->success);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveUniformBadSharedMemoryFails) {
- const GLuint kUniformIndex = 1;
- const uint32 kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- cmd.Init(client_program_id_, kUniformIndex, kBucketId,
- kInvalidSharedMemoryId, shared_memory_offset_);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, kUniformIndex, kBucketId,
- shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveAttribSucceeds) {
- const GLuint kAttribIndex = 1;
- const uint32 kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 0;
- cmd.Init(client_program_id_, kAttribIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_NE(0, result->success);
- EXPECT_EQ(kAttrib2Size, result->size);
- EXPECT_EQ(kAttrib2Type, result->type);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
- ASSERT_TRUE(bucket != NULL);
- EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kAttrib2Name,
- bucket->size()));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveAttribResultNotInitFails) {
- const GLuint kAttribIndex = 1;
- const uint32 kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 1;
- cmd.Init(client_program_id_, kAttribIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveAttribBadProgramFails) {
- const GLuint kAttribIndex = 1;
- const uint32 kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 0;
- cmd.Init(kInvalidClientId, kAttribIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0, result->success);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
- result->success = 0;
- cmd.Init(client_shader_id_, kAttribIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0, result->success);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveAttribBadIndexFails) {
- const uint32 kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->success = 0;
- cmd.Init(client_program_id_, kBadAttribIndex, kBucketId,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(0, result->success);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetActiveAttribBadSharedMemoryFails) {
- const GLuint kAttribIndex = 1;
- const uint32 kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- cmd.Init(client_program_id_, kAttribIndex, kBucketId,
- kInvalidSharedMemoryId, shared_memory_offset_);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, kAttribIndex, kBucketId,
- shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetShaderInfoLogValidArgs) {
- const char* kInfo = "hello";
- const uint32 kBucketId = 123;
- CompileShader compile_cmd;
- GetShaderInfoLog cmd;
- EXPECT_CALL(*gl_, ShaderSource(kServiceShaderId, 1, _, _));
- EXPECT_CALL(*gl_, CompileShader(kServiceShaderId));
- EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_COMPILE_STATUS, _))
- .WillOnce(SetArgumentPointee<2>(GL_FALSE))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_INFO_LOG_LENGTH, _))
- .WillOnce(SetArgumentPointee<2>(strlen(kInfo) + 1))
- .RetiresOnSaturation();
- EXPECT_CALL(
- *gl_, GetShaderInfoLog(kServiceShaderId, strlen(kInfo) + 1, _, _))
- .WillOnce(DoAll(SetArgumentPointee<2>(strlen(kInfo)),
- SetArrayArgument<3>(kInfo, kInfo + strlen(kInfo) + 1)));
- compile_cmd.Init(client_shader_id_);
- cmd.Init(client_shader_id_, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(compile_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
- ASSERT_TRUE(bucket != NULL);
- EXPECT_EQ(strlen(kInfo) + 1, bucket->size());
- EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kInfo,
- bucket->size()));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetShaderInfoLogInvalidArgs) {
- const uint32 kBucketId = 123;
- GetShaderInfoLog cmd;
- cmd.Init(kInvalidClientId, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderTest, GetIntegervCached) {
+TEST_P(GLES2DecoderTest, GetIntegervCached) {
struct TestInfo {
GLenum pname;
GLint expected;
};
TestInfo tests[] = {
- { GL_MAX_TEXTURE_SIZE, TestHelper::kMaxTextureSize, },
- { GL_MAX_CUBE_MAP_TEXTURE_SIZE, TestHelper::kMaxCubeMapTextureSize, },
- { GL_MAX_RENDERBUFFER_SIZE, TestHelper::kMaxRenderbufferSize, },
+ {
+ GL_MAX_TEXTURE_SIZE, TestHelper::kMaxTextureSize,
+ },
+ {
+ GL_MAX_CUBE_MAP_TEXTURE_SIZE, TestHelper::kMaxCubeMapTextureSize,
+ },
+ {
+ GL_MAX_RENDERBUFFER_SIZE, TestHelper::kMaxRenderbufferSize,
+ },
};
typedef GetIntegerv::Result Result;
for (size_t ii = 0; ii < sizeof(tests) / sizeof(tests[0]); ++ii) {
@@ -1649,1243 +116,100 @@ TEST_F(GLES2DecoderTest, GetIntegervCached) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetIntegerv(test.pname, _))
- .Times(0);
+ EXPECT_CALL(*gl_, GetIntegerv(test.pname, _)).Times(0);
result->size = 0;
GetIntegerv cmd2;
cmd2.Init(test.pname, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(test.pname),
- result->GetNumResults());
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(test.pname),
+ result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_EQ(test.expected, result->GetData()[0]);
}
}
-TEST_F(GLES2DecoderTest, CompileShaderValidArgs) {
- EXPECT_CALL(*gl_, ShaderSource(kServiceShaderId, 1, _, _));
- EXPECT_CALL(*gl_, CompileShader(kServiceShaderId));
- EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_COMPILE_STATUS, _))
- .WillOnce(SetArgumentPointee<2>(GL_TRUE))
- .RetiresOnSaturation();
- CompileShader cmd;
- cmd.Init(client_shader_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, CompileShaderInvalidArgs) {
- CompileShader cmd;
- cmd.Init(kInvalidClientId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
- cmd.Init(client_program_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
-}
-
-TEST_F(GLES2DecoderTest, ShaderSourceAndGetShaderSourceValidArgs) {
- const uint32 kBucketId = 123;
- const char kSource[] = "hello";
- const uint32 kSourceSize = sizeof(kSource) - 1;
- memcpy(shared_memory_address_, kSource, kSourceSize);
- ShaderSource cmd;
- cmd.Init(client_shader_id_,
- kSharedMemoryId, kSharedMemoryOffset, kSourceSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- memset(shared_memory_address_, 0, kSourceSize);
- GetShaderSource get_cmd;
- get_cmd.Init(client_shader_id_, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd));
- CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
- ASSERT_TRUE(bucket != NULL);
- EXPECT_EQ(kSourceSize + 1, bucket->size());
- EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kSource,
- bucket->size()));
-}
-
-TEST_F(GLES2DecoderTest, ShaderSourceInvalidArgs) {
- const char kSource[] = "hello";
- const uint32 kSourceSize = sizeof(kSource) - 1;
- memcpy(shared_memory_address_, kSource, kSourceSize);
- ShaderSource cmd;
- cmd.Init(kInvalidClientId,
- kSharedMemoryId, kSharedMemoryOffset, kSourceSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
- cmd.Init(client_program_id_,
- kSharedMemoryId, kSharedMemoryOffset, kSourceSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
- cmd.Init(client_shader_id_,
- kInvalidSharedMemoryId, kSharedMemoryOffset, kSourceSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_shader_id_,
- kSharedMemoryId, kInvalidSharedMemoryOffset, kSourceSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_shader_id_,
- kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, ShaderSourceBucketAndGetShaderSourceValidArgs) {
- const uint32 kInBucketId = 123;
- const uint32 kOutBucketId = 125;
- const char kSource[] = "hello";
- const uint32 kSourceSize = sizeof(kSource) - 1;
- SetBucketAsCString(kInBucketId, kSource);
- ShaderSourceBucket cmd;
- cmd.Init(client_shader_id_, kInBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- ClearSharedMemory();
- GetShaderSource get_cmd;
- get_cmd.Init(client_shader_id_, kOutBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd));
- CommonDecoder::Bucket* bucket = decoder_->GetBucket(kOutBucketId);
- ASSERT_TRUE(bucket != NULL);
- EXPECT_EQ(kSourceSize + 1, bucket->size());
- EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kSource,
- bucket->size()));
-}
-
-TEST_F(GLES2DecoderTest, ShaderSourceBucketInvalidArgs) {
- const uint32 kBucketId = 123;
- const char kSource[] = "hello";
- const uint32 kSourceSize = sizeof(kSource) - 1;
- memcpy(shared_memory_address_, kSource, kSourceSize);
- ShaderSourceBucket cmd;
- // Test no bucket.
- cmd.Init(client_texture_id_, kBucketId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- // Test invalid client.
- SetBucketAsCString(kBucketId, kSource);
- cmd.Init(kInvalidClientId, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, ShaderSourceStripComments) {
- const uint32 kInBucketId = 123;
- const char kSource[] = "hello/*te\ast*/world//a\ab";
- SetBucketAsCString(kInBucketId, kSource);
- ShaderSourceBucket cmd;
- cmd.Init(client_shader_id_, kInBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, GenerateMipmapWrongFormatsFails) {
- EXPECT_CALL(*gl_, GenerateMipmapEXT(_))
- .Times(0);
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- GenerateMipmap cmd;
- cmd.Init(GL_TEXTURE_2D);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, GenerateMipmapHandlesOutOfMemory) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- TextureManager* manager = group().texture_manager();
- TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- GLint width = 0;
- GLint height = 0;
- EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height));
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, TexParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D))
- .Times(1);
- EXPECT_CALL(*gl_, TexParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- GenerateMipmap cmd;
- cmd.Init(GL_TEXTURE_2D);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
- EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height));
-}
-
-TEST_F(GLES2DecoderTest, GenerateMipmapClearsUnclearedTexture) {
- EXPECT_CALL(*gl_, GenerateMipmapEXT(_))
- .Times(0);
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
- EXPECT_CALL(*gl_, TexParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
- EXPECT_CALL(*gl_, TexParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- GenerateMipmap cmd;
- cmd.Init(GL_TEXTURE_2D);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1iValidArgs) {
- EXPECT_CALL(*gl_, Uniform1i(kUniform1RealLocation, 2));
- Uniform1i cmd;
- cmd.Init(kUniform1FakeLocation, 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1ivValidArgs) {
- EXPECT_CALL(
- *gl_, Uniform1iv(kUniform1RealLocation, 1,
- reinterpret_cast<const GLint*>(shared_memory_address_)));
- Uniform1iv cmd;
- cmd.Init(kUniform1FakeLocation,
- 1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1ivInvalidArgs2_0) {
- EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
- Uniform1iv cmd;
- cmd.Init(kUniform1FakeLocation,
- 1, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1ivInvalidArgs2_1) {
- EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
- Uniform1iv cmd;
- cmd.Init(kUniform1FakeLocation,
- 1, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1ivImmediateValidArgs) {
- Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
- EXPECT_CALL(
- *gl_,
- Uniform1iv(kUniform1RealLocation, 1,
- reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
- GLint temp[1 * 2] = { 0, };
- cmd.Init(kUniform1FakeLocation, 1,
- &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1ivInvalidValidArgs) {
- EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
- Uniform1iv cmd;
- cmd.Init(kUniform1FakeLocation,
- 2, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1ivZeroCount) {
- EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
- Uniform1iv cmd;
- cmd.Init(kUniform1FakeLocation,
- 0, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1iSamplerIsLmited) {
- EXPECT_CALL(*gl_, Uniform1i(_, _)).Times(0);
- Uniform1i cmd;
- cmd.Init(
- kUniform1FakeLocation,
- kNumTextureUnits);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, Uniform1ivSamplerIsLimited) {
- EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
- Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
- GLint temp[] = { kNumTextureUnits };
- cmd.Init(kUniform1FakeLocation, 1,
- &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, BindBufferToDifferentTargetFails) {
- // Bind the buffer to GL_ARRAY_BUFFER
- DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
- // Attempt to rebind to GL_ELEMENT_ARRAY_BUFFER
- // NOTE: Real GLES2 does not have this restriction but WebGL and we do.
- // This can be restriction can be removed at runtime.
- EXPECT_CALL(*gl_, BindBuffer(_, _))
- .Times(0);
- BindBuffer cmd;
- cmd.Init(GL_ELEMENT_ARRAY_BUFFER, client_buffer_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, ActiveTextureValidArgs) {
- EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
- SpecializedSetup<ActiveTexture, 0>(true);
- ActiveTexture cmd;
- cmd.Init(GL_TEXTURE1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, ActiveTextureInvalidArgs) {
- EXPECT_CALL(*gl_, ActiveTexture(_)).Times(0);
- SpecializedSetup<ActiveTexture, 0>(false);
- ActiveTexture cmd;
- cmd.Init(GL_TEXTURE0 - 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(kNumTextureUnits);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, CheckFramebufferStatusWithNoBoundTarget) {
- EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_))
- .Times(0);
- CheckFramebufferStatus::Result* result =
- static_cast<CheckFramebufferStatus::Result*>(shared_memory_address_);
- *result = 0;
- CheckFramebufferStatus cmd;
- cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), *result);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, BindAndDeleteFramebuffer) {
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- DoDeleteFramebuffer(
- client_framebuffer_id_, kServiceFramebufferId,
- true, GL_FRAMEBUFFER, 0,
- true, GL_FRAMEBUFFER, 0);
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, FramebufferRenderbufferWithNoBoundTarget) {
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _))
- .Times(0);
- FramebufferRenderbuffer cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, FramebufferTexture2DWithNoBoundTarget) {
- EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _))
- .Times(0);
- FramebufferTexture2D cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
- 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithNoBoundTarget) {
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
- .Times(0);
- GetFramebufferAttachmentParameteriv cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
- shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithRenderbuffer) {
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- GetFramebufferAttachmentParameteriv::Result* result =
- static_cast<GetFramebufferAttachmentParameteriv::Result*>(
- shared_memory_address_);
- result->size = 0;
- const GLint* result_value = result->GetData();
- FramebufferRenderbuffer fbrb_cmd;
- GetFramebufferAttachmentParameteriv cmd;
- fbrb_cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, shared_memory_id_,
- shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(static_cast<GLuint>(*result_value), client_renderbuffer_id_);
-}
-
-TEST_F(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithTexture) {
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferTexture2DEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kServiceTextureId, 0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- GetFramebufferAttachmentParameteriv::Result* result =
- static_cast<GetFramebufferAttachmentParameteriv::Result*>(
- shared_memory_address_);
- result->SetNumResults(0);
- const GLint* result_value = result->GetData();
- FramebufferTexture2D fbtex_cmd;
- GetFramebufferAttachmentParameteriv cmd;
- fbtex_cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
- 0);
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, shared_memory_id_,
- shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(static_cast<GLuint>(*result_value), client_texture_id_);
-}
-
-TEST_F(GLES2DecoderTest, GetRenderbufferParameterivWithNoBoundTarget) {
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _))
- .Times(0);
- GetRenderbufferParameteriv cmd;
- cmd.Init(
- GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, shared_memory_id_,
- shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, RenderbufferStorageWithNoBoundTarget) {
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _))
- .Times(0);
- RenderbufferStorage cmd;
- cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-namespace {
-
-// A class to emulate glReadPixels
-class ReadPixelsEmulator {
- public:
- // pack_alignment is the alignment you want ReadPixels to use
- // when copying. The actual data passed in pixels should be contiguous.
- ReadPixelsEmulator(GLsizei width, GLsizei height, GLint bytes_per_pixel,
- const void* src_pixels, const void* expected_pixels,
- GLint pack_alignment)
- : width_(width),
- height_(height),
- pack_alignment_(pack_alignment),
- bytes_per_pixel_(bytes_per_pixel),
- src_pixels_(reinterpret_cast<const int8*>(src_pixels)),
- expected_pixels_(reinterpret_cast<const int8*>(expected_pixels)) {
- }
-
- void ReadPixels(
- GLint x, GLint y, GLsizei width, GLsizei height,
- GLenum format, GLenum type, void* pixels) const {
- DCHECK_GE(x, 0);
- DCHECK_GE(y, 0);
- DCHECK_LE(x + width, width_);
- DCHECK_LE(y + height, height_);
- for (GLint yy = 0; yy < height; ++yy) {
- const int8* src = GetPixelAddress(src_pixels_, x, y + yy);
- const void* dst = ComputePackAlignmentAddress(0, yy, width, pixels);
- memcpy(const_cast<void*>(dst), src, width * bytes_per_pixel_);
- }
- }
-
- bool CompareRowSegment(
- GLint x, GLint y, GLsizei width, const void* data) const {
- DCHECK(x + width <= width_ || width == 0);
- return memcmp(data, GetPixelAddress(expected_pixels_, x, y),
- width * bytes_per_pixel_) == 0;
- }
-
- // Helper to compute address of pixel in pack aligned data.
- const void* ComputePackAlignmentAddress(
- GLint x, GLint y, GLsizei width, const void* address) const {
- GLint unpadded_row_size = ComputeImageDataSize(width, 1);
- GLint two_rows_size = ComputeImageDataSize(width, 2);
- GLsizei padded_row_size = two_rows_size - unpadded_row_size;
- GLint offset = y * padded_row_size + x * bytes_per_pixel_;
- return static_cast<const int8*>(address) + offset;
- }
-
- GLint ComputeImageDataSize(GLint width, GLint height) const {
- GLint row_size = width * bytes_per_pixel_;
- if (height > 1) {
- GLint temp = row_size + pack_alignment_ - 1;
- GLint padded_row_size = (temp / pack_alignment_) * pack_alignment_;
- GLint size_of_all_but_last_row = (height - 1) * padded_row_size;
- return size_of_all_but_last_row + row_size;
- } else {
- return height * row_size;
- }
- }
-
- private:
- const int8* GetPixelAddress(const int8* base, GLint x, GLint y) const {
- return base + (width_ * y + x) * bytes_per_pixel_;
- }
-
- GLsizei width_;
- GLsizei height_;
- GLint pack_alignment_;
- GLint bytes_per_pixel_;
- const int8* src_pixels_;
- const int8* expected_pixels_;
-};
-
-} // anonymous namespace
-
-void GLES2DecoderTest::CheckReadPixelsOutOfRange(
- GLint in_read_x, GLint in_read_y,
- GLsizei in_read_width, GLsizei in_read_height,
- bool init) {
- const GLsizei kWidth = 5;
- const GLsizei kHeight = 3;
- const GLint kBytesPerPixel = 3;
- const GLint kPackAlignment = 4;
- const GLenum kFormat = GL_RGB;
- static const int8 kSrcPixels[kWidth * kHeight * kBytesPerPixel] = {
- 12, 13, 14, 18, 19, 18, 19, 12, 13, 14, 18, 19, 18, 19, 13,
- 29, 28, 23, 22, 21, 22, 21, 29, 28, 23, 22, 21, 22, 21, 28,
- 31, 34, 39, 37, 32, 37, 32, 31, 34, 39, 37, 32, 37, 32, 34,
- };
-
- ClearSharedMemory();
-
- // We need to setup an FBO so we can know the max size that ReadPixels will
- // access
- if (init) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, kFormat, kWidth, kHeight, 0,
- kFormat, GL_UNSIGNED_BYTE, kSharedMemoryId,
- kSharedMemoryOffset);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- client_texture_id_, kServiceTextureId, 0, GL_NO_ERROR);
- EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
- .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
- .RetiresOnSaturation();
- }
-
- ReadPixelsEmulator emu(
- kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment);
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- uint32 result_shm_id = kSharedMemoryId;
- uint32 result_shm_offset = kSharedMemoryOffset;
- uint32 pixels_shm_id = kSharedMemoryId;
- uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
- void* dest = &result[1];
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- // ReadPixels will be called for valid size only even though the command
- // is requesting a larger size.
- GLint read_x = std::max(0, in_read_x);
- GLint read_y = std::max(0, in_read_y);
- GLint read_end_x = std::max(0, std::min(kWidth, in_read_x + in_read_width));
- GLint read_end_y = std::max(0, std::min(kHeight, in_read_y + in_read_height));
- GLint read_width = read_end_x - read_x;
- GLint read_height = read_end_y - read_y;
- if (read_width > 0 && read_height > 0) {
- for (GLint yy = read_y; yy < read_end_y; ++yy) {
- EXPECT_CALL(
- *gl_, ReadPixels(read_x, yy, read_width, 1,
- kFormat, GL_UNSIGNED_BYTE, _))
- .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels))
- .RetiresOnSaturation();
- }
- }
- ReadPixels cmd;
- cmd.Init(in_read_x, in_read_y, in_read_width, in_read_height,
- kFormat, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-
- GLint unpadded_row_size = emu.ComputeImageDataSize(in_read_width, 1);
- scoped_ptr<int8[]> zero(new int8[unpadded_row_size]);
- scoped_ptr<int8[]> pack(new int8[kPackAlignment]);
- memset(zero.get(), 0, unpadded_row_size);
- memset(pack.get(), kInitialMemoryValue, kPackAlignment);
- for (GLint yy = 0; yy < in_read_height; ++yy) {
- const int8* row = static_cast<const int8*>(
- emu.ComputePackAlignmentAddress(0, yy, in_read_width, dest));
- GLint y = in_read_y + yy;
- if (y < 0 || y >= kHeight) {
- EXPECT_EQ(0, memcmp(zero.get(), row, unpadded_row_size));
- } else {
- // check off left.
- GLint num_left_pixels = std::max(-in_read_x, 0);
- GLint num_left_bytes = num_left_pixels * kBytesPerPixel;
- EXPECT_EQ(0, memcmp(zero.get(), row, num_left_bytes));
-
- // check off right.
- GLint num_right_pixels = std::max(in_read_x + in_read_width - kWidth, 0);
- GLint num_right_bytes = num_right_pixels * kBytesPerPixel;
- EXPECT_EQ(0, memcmp(zero.get(),
- row + unpadded_row_size - num_right_bytes,
- num_right_bytes));
-
- // check middle.
- GLint x = std::max(in_read_x, 0);
- GLint num_middle_pixels =
- std::max(in_read_width - num_left_pixels - num_right_pixels, 0);
- EXPECT_TRUE(emu.CompareRowSegment(
- x, y, num_middle_pixels, row + num_left_bytes));
- }
-
- // check padding
- if (yy != in_read_height - 1) {
- GLint num_padding_bytes =
- (kPackAlignment - 1) - (unpadded_row_size % kPackAlignment);
- EXPECT_EQ(0,
- memcmp(pack.get(), row + unpadded_row_size, num_padding_bytes));
- }
- }
-}
-
-TEST_F(GLES2DecoderTest, ReadPixels) {
- const GLsizei kWidth = 5;
- const GLsizei kHeight = 3;
- const GLint kBytesPerPixel = 3;
- const GLint kPackAlignment = 4;
- static const int8 kSrcPixels[kWidth * kHeight * kBytesPerPixel] = {
- 12, 13, 14, 18, 19, 18, 19, 12, 13, 14, 18, 19, 18, 19, 13,
- 29, 28, 23, 22, 21, 22, 21, 29, 28, 23, 22, 21, 22, 21, 28,
- 31, 34, 39, 37, 32, 37, 32, 31, 34, 39, 37, 32, 37, 32, 34,
- };
-
- surface_->SetSize(gfx::Size(INT_MAX, INT_MAX));
-
- ReadPixelsEmulator emu(
- kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment);
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- uint32 result_shm_id = kSharedMemoryId;
- uint32 result_shm_offset = kSharedMemoryOffset;
- uint32 pixels_shm_id = kSharedMemoryId;
- uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
- void* dest = &result[1];
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(
- *gl_, ReadPixels(0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, _))
- .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels));
- ReadPixels cmd;
- cmd.Init(0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- for (GLint yy = 0; yy < kHeight; ++yy) {
- EXPECT_TRUE(emu.CompareRowSegment(
- 0, yy, kWidth,
- emu.ComputePackAlignmentAddress(0, yy, kWidth, dest)));
- }
-}
-
-TEST_F(GLES2DecoderRGBBackbufferTest, ReadPixelsNoAlphaBackbuffer) {
- const GLsizei kWidth = 3;
- const GLsizei kHeight = 3;
- const GLint kBytesPerPixel = 4;
- const GLint kPackAlignment = 4;
- static const uint8 kExpectedPixels[kWidth * kHeight * kBytesPerPixel] = {
- 12, 13, 14, 255, 19, 18, 19, 255, 13, 14, 18, 255,
- 29, 28, 23, 255, 21, 22, 21, 255, 28, 23, 22, 255,
- 31, 34, 39, 255, 32, 37, 32, 255, 34, 39, 37, 255,
- };
- static const uint8 kSrcPixels[kWidth * kHeight * kBytesPerPixel] = {
- 12, 13, 14, 18, 19, 18, 19, 12, 13, 14, 18, 19,
- 29, 28, 23, 22, 21, 22, 21, 29, 28, 23, 22, 21,
- 31, 34, 39, 37, 32, 37, 32, 31, 34, 39, 37, 32,
- };
-
- surface_->SetSize(gfx::Size(INT_MAX, INT_MAX));
-
- ReadPixelsEmulator emu(
- kWidth, kHeight, kBytesPerPixel, kSrcPixels, kExpectedPixels,
- kPackAlignment);
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- uint32 result_shm_id = kSharedMemoryId;
- uint32 result_shm_offset = kSharedMemoryOffset;
- uint32 pixels_shm_id = kSharedMemoryId;
- uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
- void* dest = &result[1];
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(
- *gl_, ReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, _))
- .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels));
- ReadPixels cmd;
- cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- for (GLint yy = 0; yy < kHeight; ++yy) {
- EXPECT_TRUE(emu.CompareRowSegment(
- 0, yy, kWidth,
- emu.ComputePackAlignmentAddress(0, yy, kWidth, dest)));
- }
-}
-
-TEST_F(GLES2DecoderTest, ReadPixelsOutOfRange) {
- static GLint tests[][4] = {
- { -2, -1, 9, 5, }, // out of range on all sides
- { 2, 1, 9, 5, }, // out of range on right, bottom
- { -7, -4, 9, 5, }, // out of range on left, top
- { 0, -5, 9, 5, }, // completely off top
- { 0, 3, 9, 5, }, // completely off bottom
- { -9, 0, 9, 5, }, // completely off left
- { 5, 0, 9, 5, }, // completely off right
- };
-
- for (size_t tt = 0; tt < arraysize(tests); ++tt) {
- CheckReadPixelsOutOfRange(
- tests[tt][0], tests[tt][1], tests[tt][2], tests[tt][3], tt == 0);
- }
-}
-
-TEST_F(GLES2DecoderTest, ReadPixelsInvalidArgs) {
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- uint32 result_shm_id = kSharedMemoryId;
- uint32 result_shm_offset = kSharedMemoryOffset;
- uint32 pixels_shm_id = kSharedMemoryId;
- uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
- EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0);
- ReadPixels cmd;
- cmd.Init(0, 0, -1, 1, GL_RGB, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(0, 0, 1, -1, GL_RGB, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(0, 0, 1, 1, GL_RGB, GL_INT,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
- kInvalidSharedMemoryId, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
- pixels_shm_id, kInvalidSharedMemoryOffset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- kInvalidSharedMemoryId, result_shm_offset,
- false);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(0, 0, 1, 1, GL_RGB, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, kInvalidSharedMemoryOffset,
- false);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, BindAttribLocation) {
- const GLint kLocation = 2;
- const char* kName = "testing";
- const uint32 kNameSize = strlen(kName);
- EXPECT_CALL(
- *gl_, BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName)))
- .Times(1);
- memcpy(shared_memory_address_, kName, kNameSize);
- BindAttribLocation cmd;
- cmd.Init(client_program_id_, kLocation, kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, BindAttribLocationInvalidArgs) {
- const GLint kLocation = 2;
- const char* kName = "testing";
- const char* kBadName = "test\aing";
- const uint32 kNameSize = strlen(kName);
- const uint32 kBadNameSize = strlen(kBadName);
- EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0);
- memcpy(shared_memory_address_, kName, kNameSize);
- BindAttribLocation cmd;
- cmd.Init(kInvalidClientId, kLocation,
- kSharedMemoryId, kSharedMemoryOffset, kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(client_program_id_, kLocation,
- kInvalidSharedMemoryId, kSharedMemoryOffset, kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, kLocation,
- kSharedMemoryId, kInvalidSharedMemoryOffset, kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, kLocation,
- kSharedMemoryId, kSharedMemoryOffset, kSharedBufferSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- memcpy(shared_memory_address_, kBadName, kBadNameSize);
- cmd.Init(client_program_id_, kLocation,
- kSharedMemoryId, kSharedMemoryOffset, kBadNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, BindAttribLocationBucket) {
- const uint32 kBucketId = 123;
- const GLint kLocation = 2;
- const char* kName = "testing";
- EXPECT_CALL(
- *gl_, BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName)))
- .Times(1);
- SetBucketAsCString(kBucketId, kName);
- BindAttribLocationBucket cmd;
- cmd.Init(client_program_id_, kLocation, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, BindAttribLocationBucketInvalidArgs) {
- const uint32 kBucketId = 123;
- const GLint kLocation = 2;
- const char* kName = "testing";
- EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0);
- BindAttribLocationBucket cmd;
- // check bucket does not exist.
- cmd.Init(client_program_id_, kLocation, kBucketId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- // check bucket is empty.
- SetBucketAsCString(kBucketId, NULL);
- cmd.Init(client_program_id_, kLocation, kBucketId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- // Check bad program id
- SetBucketAsCString(kBucketId, kName);
- cmd.Init(kInvalidClientId, kLocation, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetAttribLocation) {
- const uint32 kNameSize = strlen(kAttrib2Name);
- const char* kNonExistentName = "foobar";
- const uint32 kNonExistentNameSize = strlen(kNonExistentName);
- typedef GetAttribLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- *result = -1;
- char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result));
- const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result);
- memcpy(name, kAttrib2Name, kNameSize);
- GetAttribLocation cmd;
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(kAttrib2Location, *result);
- *result = -1;
- memcpy(name, kNonExistentName, kNonExistentNameSize);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNonExistentNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) {
- const uint32 kNameSize = strlen(kAttrib2Name);
- const char* kBadName = "foo\abar";
- const uint32 kBadNameSize = strlen(kBadName);
- typedef GetAttribLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- *result = -1;
- char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result));
- const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result);
- memcpy(name, kAttrib2Name, kNameSize);
- GetAttribLocation cmd;
- cmd.Init(kInvalidClientId,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- *result = -1;
- cmd.Init(client_program_id_,
- kInvalidSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kInvalidSharedMemoryOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kInvalidSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kInvalidSharedMemoryOffset,
- kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kSharedBufferSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- memcpy(name, kBadName, kBadNameSize);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kBadNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationBucket) {
- const uint32 kBucketId = 123;
- const char* kNonExistentName = "foobar";
- typedef GetAttribLocationBucket::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- SetBucketAsCString(kBucketId, kAttrib2Name);
- *result = -1;
- GetAttribLocationBucket cmd;
- cmd.Init(client_program_id_, kBucketId,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(kAttrib2Location, *result);
- SetBucketAsCString(kBucketId, kNonExistentName);
- *result = -1;
- cmd.Init(client_program_id_, kBucketId,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetAttribLocationBucketInvalidArgs) {
- const uint32 kBucketId = 123;
- typedef GetAttribLocationBucket::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- *result = -1;
- GetAttribLocationBucket cmd;
- // Check no bucket
- cmd.Init(client_program_id_, kBucketId,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- // Check bad program id.
- SetBucketAsCString(kBucketId, kAttrib2Name);
- cmd.Init(kInvalidClientId, kBucketId,
- kSharedMemoryId, kSharedMemoryOffset);
- *result = -1;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- // Check bad memory
- cmd.Init(client_program_id_, kBucketId,
- kInvalidSharedMemoryId, kSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, kBucketId,
- kSharedMemoryId, kInvalidSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformLocation) {
- const uint32 kNameSize = strlen(kUniform2Name);
- const char* kNonExistentName = "foobar";
- const uint32 kNonExistentNameSize = strlen(kNonExistentName);
- typedef GetUniformLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- *result = -1;
- char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result));
- const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result);
- memcpy(name, kUniform2Name, kNameSize);
- GetUniformLocation cmd;
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(kUniform2FakeLocation, *result);
- memcpy(name, kNonExistentName, kNonExistentNameSize);
- *result = -1;
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNonExistentNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) {
- const uint32 kNameSize = strlen(kUniform2Name);
- const char* kBadName = "foo\abar";
- const uint32 kBadNameSize = strlen(kBadName);
- typedef GetUniformLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- *result = -1;
- char* name = GetSharedMemoryAsWithOffset<char*>(sizeof(*result));
- const uint32 kNameOffset = kSharedMemoryOffset + sizeof(*result);
- memcpy(name, kUniform2Name, kNameSize);
- GetUniformLocation cmd;
- cmd.Init(kInvalidClientId,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- *result = -1;
- cmd.Init(client_program_id_,
- kInvalidSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kInvalidSharedMemoryOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kInvalidSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kInvalidSharedMemoryOffset,
- kNameSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kSharedBufferSize);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- memcpy(name, kBadName, kBadNameSize);
- cmd.Init(client_program_id_,
- kSharedMemoryId, kNameOffset,
- kSharedMemoryId, kSharedMemoryOffset,
- kBadNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationBucket) {
- const uint32 kBucketId = 123;
- const char* kNonExistentName = "foobar";
- typedef GetUniformLocationBucket::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- SetBucketAsCString(kBucketId, kUniform2Name);
- *result = -1;
- GetUniformLocationBucket cmd;
- cmd.Init(client_program_id_, kBucketId,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(kUniform2FakeLocation, *result);
- SetBucketAsCString(kBucketId, kNonExistentName);
- *result = -1;
- cmd.Init(client_program_id_, kBucketId,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetUniformLocationBucketInvalidArgs) {
- const uint32 kBucketId = 123;
- typedef GetUniformLocationBucket::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- *result = -1;
- GetUniformLocationBucket cmd;
- // Check no bucket
- cmd.Init(client_program_id_, kBucketId,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- // Check bad program id.
- SetBucketAsCString(kBucketId, kUniform2Name);
- cmd.Init(kInvalidClientId, kBucketId,
- kSharedMemoryId, kSharedMemoryOffset);
- *result = -1;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(-1, *result);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- // Check bad memory
- cmd.Init(client_program_id_, kBucketId,
- kInvalidSharedMemoryId, kSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_program_id_, kBucketId,
- kSharedMemoryId, kInvalidSharedMemoryOffset);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetMaxValueInBufferCHROMIUM) {
+TEST_P(GLES2DecoderWithShaderTest, GetMaxValueInBufferCHROMIUM) {
SetupIndexBuffer();
GetMaxValueInBufferCHROMIUM::Result* result =
static_cast<GetMaxValueInBufferCHROMIUM::Result*>(shared_memory_address_);
*result = 0;
GetMaxValueInBufferCHROMIUM cmd;
- cmd.Init(client_element_buffer_id_, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kSharedMemoryId, kSharedMemoryOffset);
+ cmd.Init(client_element_buffer_id_,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(7u, *result);
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- cmd.Init(client_element_buffer_id_, kValidIndexRangeCount + 1,
+ cmd.Init(client_element_buffer_id_,
+ kValidIndexRangeCount + 1,
GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kSharedMemoryId, kSharedMemoryOffset);
+ kValidIndexRangeStart * 2,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(100u, *result);
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- cmd.Init(kInvalidClientId, kValidIndexRangeCount,
+ cmd.Init(kInvalidClientId,
+ kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kSharedMemoryId, kSharedMemoryOffset);
+ kValidIndexRangeStart * 2,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(client_element_buffer_id_, kOutOfRangeIndexRangeEnd,
+ cmd.Init(client_element_buffer_id_,
+ kOutOfRangeIndexRangeEnd,
GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kSharedMemoryId, kSharedMemoryOffset);
+ kValidIndexRangeStart * 2,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- cmd.Init(client_element_buffer_id_, kValidIndexRangeCount + 1,
+ cmd.Init(client_element_buffer_id_,
+ kValidIndexRangeCount + 1,
GL_UNSIGNED_SHORT,
- kOutOfRangeIndexRangeEnd * 2, kSharedMemoryId, kSharedMemoryOffset);
+ kOutOfRangeIndexRangeEnd * 2,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- cmd.Init(client_element_buffer_id_, kValidIndexRangeCount + 1,
+ cmd.Init(client_element_buffer_id_,
+ kValidIndexRangeCount + 1,
GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kSharedMemoryId, kSharedMemoryOffset);
+ kValidIndexRangeStart * 2,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_buffer_id_, kValidIndexRangeCount + 1,
+ cmd.Init(client_buffer_id_,
+ kValidIndexRangeCount + 1,
GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2, kSharedMemoryId, kSharedMemoryOffset);
+ kValidIndexRangeStart * 2,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- cmd.Init(client_element_buffer_id_, kValidIndexRangeCount + 1,
+ cmd.Init(client_element_buffer_id_,
+ kValidIndexRangeCount + 1,
GL_UNSIGNED_SHORT,
kValidIndexRangeStart * 2,
- kInvalidSharedMemoryId, kSharedMemoryOffset);
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(client_element_buffer_id_, kValidIndexRangeCount + 1,
+ cmd.Init(client_element_buffer_id_,
+ kValidIndexRangeCount + 1,
GL_UNSIGNED_SHORT,
kValidIndexRangeStart * 2,
- kSharedMemoryId, kInvalidSharedMemoryOffset);
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest, SharedIds) {
+TEST_P(GLES2DecoderTest, SharedIds) {
GenSharedIdsCHROMIUM gen_cmd;
RegisterSharedIdsCHROMIUM reg_cmd;
DeleteSharedIdsCHROMIUM del_cmd;
@@ -2956,7 +280,7 @@ TEST_F(GLES2DecoderTest, SharedIds) {
EXPECT_EQ(kOffset + 1, ids[1]);
}
-TEST_F(GLES2DecoderTest, GenSharedIdsCHROMIUMBadArgs) {
+TEST_P(GLES2DecoderTest, GenSharedIdsCHROMIUMBadArgs) {
const GLuint kNamespaceId = id_namespaces::kTextures;
GenSharedIdsCHROMIUM cmd;
cmd.Init(kNamespaceId, 0, -1, kSharedMemoryId, kSharedMemoryOffset);
@@ -2967,7 +291,7 @@ TEST_F(GLES2DecoderTest, GenSharedIdsCHROMIUMBadArgs) {
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest, RegisterSharedIdsCHROMIUMBadArgs) {
+TEST_P(GLES2DecoderTest, RegisterSharedIdsCHROMIUMBadArgs) {
const GLuint kNamespaceId = id_namespaces::kTextures;
RegisterSharedIdsCHROMIUM cmd;
cmd.Init(kNamespaceId, -1, kSharedMemoryId, kSharedMemoryOffset);
@@ -2978,7 +302,7 @@ TEST_F(GLES2DecoderTest, RegisterSharedIdsCHROMIUMBadArgs) {
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest, RegisterSharedIdsCHROMIUMDuplicateIds) {
+TEST_P(GLES2DecoderTest, RegisterSharedIdsCHROMIUMDuplicateIds) {
const GLuint kNamespaceId = id_namespaces::kTextures;
const GLuint kRegisterId = 3;
RegisterSharedIdsCHROMIUM cmd;
@@ -2991,7 +315,7 @@ TEST_F(GLES2DecoderTest, RegisterSharedIdsCHROMIUMDuplicateIds) {
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderTest, DeleteSharedIdsCHROMIUMBadArgs) {
+TEST_P(GLES2DecoderTest, DeleteSharedIdsCHROMIUMBadArgs) {
const GLuint kNamespaceId = id_namespaces::kTextures;
DeleteSharedIdsCHROMIUM cmd;
cmd.Init(kNamespaceId, -1, kSharedMemoryId, kSharedMemoryOffset);
@@ -3002,234 +326,7 @@ TEST_F(GLES2DecoderTest, DeleteSharedIdsCHROMIUMBadArgs) {
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest, TexSubImage2DValidArgs) {
- const int kWidth = 16;
- const int kHeight = 8;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 1, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- TexSubImage2D cmd;
- cmd.Init(
- GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, TexSubImage2DBadArgs) {
- const int kWidth = 16;
- const int kHeight = 8;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 1, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- TexSubImage2D cmd;
- cmd.Init(GL_TEXTURE0, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_TRUE, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_INT,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, -1, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 1, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, -1, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 1, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth + 1, kHeight, GL_RGBA,
- GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight + 1, GL_RGBA,
- GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA,
- GL_UNSIGNED_SHORT_4_4_4_4, kSharedMemoryId, kSharedMemoryOffset,
- GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- kInvalidSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kInvalidSharedMemoryOffset, GL_FALSE);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, CopyTexSubImage2DValidArgs) {
- const int kWidth = 16;
- const int kHeight = 8;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 1, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, CopyTexSubImage2D(
- GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight))
- .Times(1)
- .RetiresOnSaturation();
- CopyTexSubImage2D cmd;
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, CopyTexSubImage2DBadArgs) {
- const int kWidth = 16;
- const int kHeight = 8;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 1, GL_RGBA, kWidth, kHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- CopyTexSubImage2D cmd;
- cmd.Init(GL_TEXTURE0, 1, 0, 0, 0, 0, kWidth, kHeight);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, -1, 0, 0, 0, kWidth, kHeight);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 1, 0, 0, 0, kWidth, kHeight);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, -1, 0, 0, kWidth, kHeight);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 1, 0, 0, kWidth, kHeight);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth + 1, kHeight);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight + 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-// Check that if a renderbuffer is attached and GL returns
-// GL_FRAMEBUFFER_COMPLETE that the buffer is cleared and state is restored.
-TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearColor) {
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- ClearColor color_cmd;
- ColorMask color_mask_cmd;
- Enable enable_cmd;
- FramebufferRenderbuffer cmd;
- color_cmd.Init(0.1f, 0.2f, 0.3f, 0.4f);
- color_mask_cmd.Init(0, 1, 0, 1);
- enable_cmd.Init(GL_SCISSOR_TEST);
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- InSequence sequence;
- EXPECT_CALL(*gl_, ClearColor(0.1f, 0.2f, 0.3f, 0.4f))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(color_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(enable_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepth) {
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- ClearDepthf depth_cmd;
- DepthMask depth_mask_cmd;
- FramebufferRenderbuffer cmd;
- depth_cmd.Init(0.5f);
- depth_mask_cmd.Init(false);
- cmd.Init(
- GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- InSequence sequence;
- EXPECT_CALL(*gl_, ClearDepth(0.5f))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(depth_mask_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearStencil) {
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- ClearStencil stencil_cmd;
- StencilMaskSeparate stencil_mask_separate_cmd;
- FramebufferRenderbuffer cmd;
- stencil_cmd.Init(123);
- stencil_mask_separate_cmd.Init(GL_BACK, 0x1234u);
- cmd.Init(
- GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- InSequence sequence;
- EXPECT_CALL(*gl_, ClearStencil(123))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_mask_separate_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, IsBuffer) {
+TEST_P(GLES2DecoderTest, IsBuffer) {
EXPECT_FALSE(DoIsBuffer(client_buffer_id_));
DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
EXPECT_TRUE(DoIsBuffer(client_buffer_id_));
@@ -3237,19 +334,23 @@ TEST_F(GLES2DecoderTest, IsBuffer) {
EXPECT_FALSE(DoIsBuffer(client_buffer_id_));
}
-TEST_F(GLES2DecoderTest, IsFramebuffer) {
+TEST_P(GLES2DecoderTest, IsFramebuffer) {
EXPECT_FALSE(DoIsFramebuffer(client_framebuffer_id_));
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
EXPECT_TRUE(DoIsFramebuffer(client_framebuffer_id_));
- DoDeleteFramebuffer(
- client_framebuffer_id_, kServiceFramebufferId,
- true, GL_FRAMEBUFFER, 0,
- true, GL_FRAMEBUFFER, 0);
+ DoDeleteFramebuffer(client_framebuffer_id_,
+ kServiceFramebufferId,
+ true,
+ GL_FRAMEBUFFER,
+ 0,
+ true,
+ GL_FRAMEBUFFER,
+ 0);
EXPECT_FALSE(DoIsFramebuffer(client_framebuffer_id_));
}
-TEST_F(GLES2DecoderTest, IsProgram) {
+TEST_P(GLES2DecoderTest, IsProgram) {
// IsProgram is true as soon as the program is created.
EXPECT_TRUE(DoIsProgram(client_program_id_));
EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId))
@@ -3257,26 +358,25 @@ TEST_F(GLES2DecoderTest, IsProgram) {
.RetiresOnSaturation();
DoDeleteProgram(client_program_id_, kServiceProgramId);
EXPECT_FALSE(DoIsProgram(client_program_id_));
-
}
-TEST_F(GLES2DecoderTest, IsRenderbuffer) {
+TEST_P(GLES2DecoderTest, IsRenderbuffer) {
EXPECT_FALSE(DoIsRenderbuffer(client_renderbuffer_id_));
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
EXPECT_TRUE(DoIsRenderbuffer(client_renderbuffer_id_));
DoDeleteRenderbuffer(client_renderbuffer_id_, kServiceRenderbufferId);
EXPECT_FALSE(DoIsRenderbuffer(client_renderbuffer_id_));
}
-TEST_F(GLES2DecoderTest, IsShader) {
+TEST_P(GLES2DecoderTest, IsShader) {
// IsShader is true as soon as the program is created.
EXPECT_TRUE(DoIsShader(client_shader_id_));
DoDeleteShader(client_shader_id_, kServiceShaderId);
EXPECT_FALSE(DoIsShader(client_shader_id_));
}
-TEST_F(GLES2DecoderTest, IsTexture) {
+TEST_P(GLES2DecoderTest, IsTexture) {
EXPECT_FALSE(DoIsTexture(client_texture_id_));
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
EXPECT_TRUE(DoIsTexture(client_texture_id_));
@@ -3284,1114 +384,7 @@ TEST_F(GLES2DecoderTest, IsTexture) {
EXPECT_FALSE(DoIsTexture(client_texture_id_));
}
-#if 0 // Turn this test on once we allow GL_DEPTH_STENCIL_ATTACHMENT
-TEST_F(GLES2DecoderTest, FramebufferRenderbufferClearDepthStencil) {
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- ClearDepthf depth_cmd;
- ClearStencil stencil_cmd;
- FramebufferRenderbuffer cmd;
- depth_cmd.Init(0.5f);
- stencil_cmd.Init(123);
- cmd.Init(
- GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- InSequence sequence;
- EXPECT_CALL(*gl_, ClearDepth(0.5f))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ClearStencil(123))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-#endif
-
-TEST_F(GLES2DecoderWithShaderTest, VertexAttribPointer) {
- SetupVertexBuffer();
- static const GLenum types[] = {
- GL_BYTE,
- GL_UNSIGNED_BYTE,
- GL_SHORT,
- GL_UNSIGNED_SHORT,
- GL_FLOAT,
- GL_FIXED,
- GL_INT,
- GL_UNSIGNED_INT,
- };
- static const GLsizei sizes[] = {
- 1,
- 1,
- 2,
- 2,
- 4,
- 4,
- 4,
- 4,
- };
- static const GLuint indices[] = {
- 0,
- 1,
- kNumVertexAttribs - 1,
- kNumVertexAttribs,
- };
- static const GLsizei offset_mult[] = {
- 0,
- 0,
- 1,
- 1,
- 2,
- 1000,
- };
- static const GLsizei offset_offset[] = {
- 0,
- 1,
- 0,
- 1,
- 0,
- 0,
- };
- static const GLsizei stride_mult[] = {
- -1,
- 0,
- 0,
- 1,
- 1,
- 2,
- 1000,
- };
- static const GLsizei stride_offset[] = {
- 0,
- 0,
- 1,
- 0,
- 1,
- 0,
- 0,
- };
- for (size_t tt = 0; tt < arraysize(types); ++tt) {
- GLenum type = types[tt];
- GLsizei num_bytes = sizes[tt];
- for (size_t ii = 0; ii < arraysize(indices); ++ii) {
- GLuint index = indices[ii];
- for (GLint size = 0; size < 5; ++size) {
- for (size_t oo = 0; oo < arraysize(offset_mult); ++oo) {
- GLuint offset = num_bytes * offset_mult[oo] + offset_offset[oo];
- for (size_t ss = 0; ss < arraysize(stride_mult); ++ss) {
- GLsizei stride = num_bytes * stride_mult[ss] + stride_offset[ss];
- for (int normalize = 0; normalize < 2; ++normalize) {
- bool index_good = index < static_cast<GLuint>(kNumVertexAttribs);
- bool size_good = (size > 0 && size < 5);
- bool offset_good = (offset % num_bytes == 0);
- bool stride_good = (stride % num_bytes == 0) && stride >= 0 &&
- stride <= 255;
- bool type_good = (type != GL_INT && type != GL_UNSIGNED_INT &&
- type != GL_FIXED);
- bool good = size_good && offset_good && stride_good &&
- type_good && index_good;
- bool call = good && (type != GL_FIXED);
- if (call) {
- EXPECT_CALL(*gl_, VertexAttribPointer(
- index, size, type, normalize, stride,
- BufferOffset(offset)));
- }
- VertexAttribPointer cmd;
- cmd.Init(index, size, type, normalize, stride, offset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- if (good) {
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- } else if (size_good &&
- offset_good &&
- stride_good &&
- type_good &&
- !index_good) {
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- } else if (size_good &&
- offset_good &&
- stride_good &&
- !type_good &&
- index_good) {
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
- } else if (size_good &&
- offset_good &&
- !stride_good &&
- type_good &&
- index_good) {
- if (stride < 0 || stride > 255) {
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- } else {
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- }
- } else if (size_good &&
- !offset_good &&
- stride_good &&
- type_good &&
- index_good) {
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- } else if (!size_good &&
- offset_good &&
- stride_good &&
- type_good &&
- index_good) {
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- } else {
- EXPECT_NE(GL_NO_ERROR, GetGLError());
- }
- }
- }
- }
- }
- }
- }
-}
-
-// Test that with an RGB backbuffer if we set the color mask to 1,1,1,1 it is
-// set to 1,1,1,0 at Draw time but is 1,1,1,1 at query time.
-TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMask) {
- ColorMask cmd;
- cmd.Init(true, true, true, true);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_COLOR_WRITEMASK, result->GetData()))
- .Times(0);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_COLOR_WRITEMASK, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_COLOR_WRITEMASK),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, result->GetData()[0]);
- EXPECT_EQ(1, result->GetData()[1]);
- EXPECT_EQ(1, result->GetData()[2]);
- EXPECT_EQ(1, result->GetData()[3]);
-}
-
-// Test that with no depth if we set DepthMask true that it's set to false at
-// draw time but querying it returns true.
-TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferDepthMask) {
- EXPECT_CALL(*gl_, DepthMask(true))
- .Times(0)
- .RetiresOnSaturation();
- DepthMask cmd;
- cmd.Init(true);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_WRITEMASK, result->GetData()))
- .Times(0);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_DEPTH_WRITEMASK, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_WRITEMASK),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, result->GetData()[0]);
-}
-
-// Test that with no stencil if we set the stencil mask it's still set to 0 at
-// draw time but gets our value if we query.
-TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferStencilMask) {
- const GLint kMask = 123;
- EXPECT_CALL(*gl_, StencilMask(kMask))
- .Times(0)
- .RetiresOnSaturation();
- StencilMask cmd;
- cmd.Init(kMask);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_WRITEMASK, result->GetData()))
- .Times(0);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_WRITEMASK, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_WRITEMASK),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(kMask, result->GetData()[0]);
-}
-
-// Test that if an FBO is bound we get the correct masks.
-TEST_F(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMaskFBO) {
- ColorMask cmd;
- cmd.Init(true, true, true, true);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupTexture();
- SetupVertexBuffer();
- DoEnableVertexAttribArray(0);
- DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
- DoEnableVertexAttribArray(1);
- DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
- DoEnableVertexAttribArray(2);
- DoVertexAttribPointer(2, 2, GL_FLOAT, 0, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Check that no extra calls are made on the next draw.
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Setup Frame buffer.
- // needs to be 1x1 or else it's not renderable.
- const GLsizei kWidth = 1;
- const GLsizei kHeight = 1;
- const GLenum kFormat = GL_RGB;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- // Pass some data so the texture will be marked as cleared.
- DoTexImage2D(
- GL_TEXTURE_2D, 0, kFormat, kWidth, kHeight, 0,
- kFormat, GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- client_texture_id_, kServiceTextureId, 0, GL_NO_ERROR);
- EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
- .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
- .RetiresOnSaturation();
-
- // This time state needs to be set.
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Check that no extra calls are made on the next draw.
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Unbind
- DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
-
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualAlphaMatchesRequestedAlpha) {
- InitDecoder(
- "", // extensions
- true, // has alpha
- false, // has depth
- false, // has stencil
- true, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(8, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualAlphaDoesNotMatchRequestedAlpha) {
- InitDecoder(
- "", // extensions
- true, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualDepthMatchesRequestedDepth) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- true, // has depth
- false, // has stencil
- false, // request alpha
- true, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(24))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(24, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualDepthDoesNotMatchRequestedDepth) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- true, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(24))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualStencilMatchesRequestedStencil) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- true, // has stencil
- false, // request alpha
- false, // request depth
- true, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(8, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ActualStencilDoesNotMatchRequestedStencil) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- true, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, DepthEnableWithDepth) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- true, // has depth
- false, // has stencil
- false, // request alpha
- true, // request depth
- false, // request stencil
- true); // bind generates resource
-
- Enable cmd;
- cmd.Init(GL_DEPTH_TEST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupDefaultProgram();
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- true, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- true, // depth mask
- true, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_TEST, _))
- .Times(0)
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_DEPTH_TEST, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_TEST),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, DepthEnableWithoutRequestedDepth) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- true, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- Enable cmd;
- cmd.Init(GL_DEPTH_TEST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupDefaultProgram();
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_TEST, _))
- .Times(0)
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_DEPTH_TEST, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_TEST),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, StencilEnableWithStencil) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- true, // has stencil
- false, // request alpha
- false, // request depth
- true, // request stencil
- true); // bind generates resource
-
- Enable cmd;
- cmd.Init(GL_STENCIL_TEST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupDefaultProgram();
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- true, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- -1, // front stencil mask
- -1, // back stencil mask
- true, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_TEST, _))
- .Times(0)
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_TEST, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_TEST),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, StencilEnableWithoutRequestedStencil) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- true, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- Enable cmd;
- cmd.Init(GL_STENCIL_TEST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupDefaultProgram();
- SetupTexture();
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- true, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1110, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays draw_cmd;
- draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_TEST, _))
- .Times(0)
- .RetiresOnSaturation();
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_TEST, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_TEST),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilReportsCorrectValues) {
- InitDecoder(
- "GL_OES_packed_depth_stencil", // extensions
- false, // has alpha
- true, // has depth
- true, // has stencil
- false, // request alpha
- true, // request depth
- true, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(8, result->GetData()[0]);
- result->size = 0;
- cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(24))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(24, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilNoRequestedStencil) {
- InitDecoder(
- "GL_OES_packed_depth_stencil", // extensions
- false, // has alpha
- true, // has depth
- true, // has stencil
- false, // request alpha
- true, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
- result->size = 0;
- cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(24))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(24, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferDepth) {
- InitDecoder(
- "GL_OES_packed_depth_stencil", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR)) // for FramebufferRenderbuffer
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR)) // for GetIntegerv
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR)) // for GetIntegerv
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
-
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(
- GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50))
- .Times(1)
- .RetiresOnSaturation();
- RenderbufferStorage cmd;
- cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- FramebufferRenderbuffer fbrb_cmd;
- fbrb_cmd.Init(
- GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
-
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
- result->size = 0;
- cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(24))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(24, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferStencil) {
- InitDecoder(
- "GL_OES_packed_depth_stencil", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR)) // for FramebufferRenderbuffer
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR)) // for GetIntegerv
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR)) // for GetIntegerv
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
-
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(
- GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50))
- .Times(1)
- .RetiresOnSaturation();
- RenderbufferStorage cmd;
- cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- FramebufferRenderbuffer fbrb_cmd;
- fbrb_cmd.Init(
- GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
-
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- result->size = 0;
- GetIntegerv cmd2;
- cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(8))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(8, result->GetData()[0]);
- result->size = 0;
- cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(24))
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(
- decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
- result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(0, result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderTest, GetMultipleIntegervCHROMIUMValidArgs) {
+TEST_P(GLES2DecoderTest, GetMultipleIntegervCHROMIUMValidArgs) {
const GLsizei kCount = 3;
GLenum* pnames = GetSharedMemoryAs<GLenum*>();
pnames[0] = GL_DEPTH_WRITEMASK;
@@ -4405,29 +398,31 @@ TEST_F(GLES2DecoderTest, GetMultipleIntegervCHROMIUMValidArgs) {
num_results += decoder_->GetGLES2Util()->GLGetNumValuesReturned(pnames[ii]);
}
const GLsizei result_size = num_results * sizeof(*results);
- memset(results, 0, result_size);
+ memset(results, 0, result_size);
const GLint kSentinel = 0x12345678;
results[num_results] = kSentinel;
GetMultipleIntegervCHROMIUM cmd;
- cmd.Init(
- kSharedMemoryId, kSharedMemoryOffset, kCount,
- kSharedMemoryId, kSharedMemoryOffset + sizeof(*pnames) * kCount,
- result_size);
+ cmd.Init(kSharedMemoryId,
+ kSharedMemoryOffset,
+ kCount,
+ kSharedMemoryId,
+ kSharedMemoryOffset + sizeof(*pnames) * kCount,
+ result_size);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(1, results[0]); // Depth writemask
- EXPECT_EQ(1, results[1]); // color writemask red
- EXPECT_EQ(1, results[2]); // color writemask green
- EXPECT_EQ(1, results[3]); // color writemask blue
- EXPECT_EQ(1, results[4]); // color writemask alpha
- EXPECT_EQ(-1, results[5]); // stencil writemask alpha
+ EXPECT_EQ(1, results[0]); // Depth writemask
+ EXPECT_EQ(1, results[1]); // color writemask red
+ EXPECT_EQ(1, results[2]); // color writemask green
+ EXPECT_EQ(1, results[3]); // color writemask blue
+ EXPECT_EQ(1, results[4]); // color writemask alpha
+ EXPECT_EQ(-1, results[5]); // stencil writemask alpha
EXPECT_EQ(kSentinel, results[num_results]); // End of results
}
-TEST_F(GLES2DecoderTest, GetMultipleIntegervCHROMIUMInvalidArgs) {
+TEST_P(GLES2DecoderTest, GetMultipleIntegervCHROMIUMInvalidArgs) {
const GLsizei kCount = 3;
// Offset the pnames because GLGetError will use the first uint32.
const uint32 kPnameOffset = sizeof(uint32);
@@ -4443,66 +438,82 @@ TEST_F(GLES2DecoderTest, GetMultipleIntegervCHROMIUMInvalidArgs) {
num_results += decoder_->GetGLES2Util()->GLGetNumValuesReturned(pnames[ii]);
}
const GLsizei result_size = num_results * sizeof(*results);
- memset(results, 0, result_size);
+ memset(results, 0, result_size);
const GLint kSentinel = 0x12345678;
results[num_results] = kSentinel;
GetMultipleIntegervCHROMIUM cmd;
// Check bad pnames pointer.
- cmd.Init(
- kInvalidSharedMemoryId, kSharedMemoryOffset + kPnameOffset, kCount,
- kSharedMemoryId, kSharedMemoryOffset + kResultsOffset,
- result_size);
+ cmd.Init(kInvalidSharedMemoryId,
+ kSharedMemoryOffset + kPnameOffset,
+ kCount,
+ kSharedMemoryId,
+ kSharedMemoryOffset + kResultsOffset,
+ result_size);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Check bad pnames pointer.
- cmd.Init(
- kSharedMemoryId, kInvalidSharedMemoryOffset, kCount,
- kSharedMemoryId, kSharedMemoryOffset + kResultsOffset,
- result_size);
+ cmd.Init(kSharedMemoryId,
+ kInvalidSharedMemoryOffset,
+ kCount,
+ kSharedMemoryId,
+ kSharedMemoryOffset + kResultsOffset,
+ result_size);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Check bad count.
- cmd.Init(
- kSharedMemoryId, kSharedMemoryOffset + kPnameOffset, -1,
- kSharedMemoryId, kSharedMemoryOffset + kResultsOffset,
- result_size);
+ cmd.Init(kSharedMemoryId,
+ kSharedMemoryOffset + kPnameOffset,
+ -1,
+ kSharedMemoryId,
+ kSharedMemoryOffset + kResultsOffset,
+ result_size);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Check bad results pointer.
- cmd.Init(
- kSharedMemoryId, kSharedMemoryOffset + kPnameOffset, kCount,
- kInvalidSharedMemoryId, kSharedMemoryOffset + kResultsOffset,
- result_size);
+ cmd.Init(kSharedMemoryId,
+ kSharedMemoryOffset + kPnameOffset,
+ kCount,
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset + kResultsOffset,
+ result_size);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Check bad results pointer.
- cmd.Init(
- kSharedMemoryId, kSharedMemoryOffset + kPnameOffset, kCount,
- kSharedMemoryId, kInvalidSharedMemoryOffset,
- result_size);
+ cmd.Init(kSharedMemoryId,
+ kSharedMemoryOffset + kPnameOffset,
+ kCount,
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset,
+ result_size);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Check bad size.
- cmd.Init(
- kSharedMemoryId, kSharedMemoryOffset + kPnameOffset, kCount,
- kSharedMemoryId, kSharedMemoryOffset + kResultsOffset,
- result_size + 1);
+ cmd.Init(kSharedMemoryId,
+ kSharedMemoryOffset + kPnameOffset,
+ kCount,
+ kSharedMemoryId,
+ kSharedMemoryOffset + kResultsOffset,
+ result_size + 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
// Check bad size.
- cmd.Init(
- kSharedMemoryId, kSharedMemoryOffset + kPnameOffset, kCount,
- kSharedMemoryId, kSharedMemoryOffset + kResultsOffset,
- result_size - 1);
+ cmd.Init(kSharedMemoryId,
+ kSharedMemoryOffset + kPnameOffset,
+ kCount,
+ kSharedMemoryId,
+ kSharedMemoryOffset + kResultsOffset,
+ result_size - 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
// Check bad enum.
- cmd.Init(
- kSharedMemoryId, kSharedMemoryOffset + kPnameOffset, kCount,
- kSharedMemoryId, kSharedMemoryOffset + kResultsOffset,
- result_size);
+ cmd.Init(kSharedMemoryId,
+ kSharedMemoryOffset + kPnameOffset,
+ kCount,
+ kSharedMemoryId,
+ kSharedMemoryOffset + kResultsOffset,
+ result_size);
GLenum temp = pnames[2];
pnames[2] = GL_TRUE;
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -4521,2631 +532,58 @@ TEST_F(GLES2DecoderTest, GetMultipleIntegervCHROMIUMInvalidArgs) {
EXPECT_EQ(kSentinel, results[num_results]); // End of results
}
-TEST_F(GLES2DecoderTest, TexImage2DRedefinitionSucceeds) {
- const int kWidth = 16;
- const int kHeight = 8;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- EXPECT_CALL(*gl_, GetError())
- .WillRepeatedly(Return(GL_NO_ERROR));
- for (int ii = 0; ii < 2; ++ii) {
- TexImage2D cmd;
- if (ii == 0) {
- EXPECT_CALL(*gl_, TexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, _))
- .Times(1)
- .RetiresOnSaturation();
- cmd.Init(
- GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
- } else {
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, kWidth, kHeight);
- cmd.Init(
- GL_TEXTURE_2D, 0, GL_RGBA, kWidth, kHeight, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, 0, 0);
- }
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight - 1, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- // Consider this TexSubImage2D command part of the previous TexImage2D
- // (last GL_TRUE argument). It will be skipped if there are bugs in the
- // redefinition case.
- TexSubImage2D cmd2;
- cmd2.Init(
- GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight - 1, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_TRUE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- }
-}
-
-TEST_F(GLES2DecoderTest, TexImage2DGLError) {
- GLenum target = GL_TEXTURE_2D;
- GLint level = 0;
- GLenum internal_format = GL_RGBA;
- GLsizei width = 2;
- GLsizei height = 4;
- GLint border = 0;
- GLenum format = GL_RGBA;
- GLenum type = GL_UNSIGNED_BYTE;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- TextureManager* manager = group().texture_manager();
- TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, TexImage2D(target, level, internal_format,
- width, height, border, format, type, _))
- .Times(1)
- .RetiresOnSaturation();
- TexImage2D cmd;
- cmd.Init(target, level, internal_format, width, height, border, format,
- type, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
- EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
-}
-
-TEST_F(GLES2DecoderTest, BufferDataGLError) {
- GLenum target = GL_ARRAY_BUFFER;
- GLsizeiptr size = 4;
- DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
- BufferManager* manager = group().buffer_manager();
- Buffer* buffer = manager->GetBuffer(client_buffer_id_);
- ASSERT_TRUE(buffer != NULL);
- EXPECT_EQ(0, buffer->size());
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BufferData(target, size, _, GL_STREAM_DRAW))
- .Times(1)
- .RetiresOnSaturation();
- BufferData cmd;
- cmd.Init(target, size, 0, 0, GL_STREAM_DRAW);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
- EXPECT_EQ(0, buffer->size());
-}
-
-TEST_F(GLES2DecoderTest, CopyTexImage2DGLError) {
- GLenum target = GL_TEXTURE_2D;
- GLint level = 0;
- GLenum internal_format = GL_RGBA;
- GLsizei width = 2;
- GLsizei height = 4;
- GLint border = 0;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- TextureManager* manager = group().texture_manager();
- TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, CopyTexImage2D(
- target, level, internal_format, 0, 0, width, height, border))
- .Times(1)
- .RetiresOnSaturation();
- CopyTexImage2D cmd;
- cmd.Init(target, level, internal_format, 0, 0, width, height, border);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
- EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
-}
-
-TEST_F(GLES2DecoderTest, FramebufferRenderbufferGLError) {
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- FramebufferRenderbuffer cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, FramebufferTexture2DGLError) {
- const GLsizei kWidth = 5;
- const GLsizei kHeight = 3;
- const GLenum kFormat = GL_RGB;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, kFormat, kWidth, kHeight, 0,
- kFormat, GL_UNSIGNED_BYTE, 0, 0);
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferTexture2DEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kServiceTextureId, 0))
- .Times(1)
- .RetiresOnSaturation();
- FramebufferTexture2D fbtex_cmd;
- fbtex_cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
- 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, RenderbufferStorageGLError) {
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(
- GL_RENDERBUFFER, GL_RGBA, 100, 50))
- .Times(1)
- .RetiresOnSaturation();
- RenderbufferStorage cmd;
- cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 100, 50);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, RenderbufferStorageBadArgs) {
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- RenderbufferStorage cmd;
- cmd.Init(GL_RENDERBUFFER, GL_RGBA4, TestHelper::kMaxRenderbufferSize + 1, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 1, TestHelper::kMaxRenderbufferSize + 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest,
- RenderbufferStorageMultisampleCHROMIUMGLError) {
- InitDecoder(
- "GL_EXT_framebuffer_multisample", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, RenderbufferStorageMultisampleEXT(
- GL_RENDERBUFFER, 1, GL_RGBA, 100, 50))
- .Times(1)
- .RetiresOnSaturation();
- RenderbufferStorageMultisampleCHROMIUM cmd;
- cmd.Init(GL_RENDERBUFFER, 1, GL_RGBA4, 100, 50);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest,
- RenderbufferStorageMultisampleCHROMIUMBadArgs) {
- InitDecoder(
- "GL_EXT_framebuffer_multisample", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- EXPECT_CALL(*gl_, RenderbufferStorageMultisampleEXT(_, _, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- RenderbufferStorageMultisampleCHROMIUM cmd;
- cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples + 1,
- GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
- GL_RGBA4, TestHelper::kMaxRenderbufferSize + 1, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
- GL_RGBA4, 1, TestHelper::kMaxRenderbufferSize + 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, RenderbufferStorageMultisampleCHROMIUM) {
- InitDecoder(
- "GL_EXT_framebuffer_multisample", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- false); // bind generates resource
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- InSequence sequence;
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(
- *gl_,
- RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER,
- TestHelper::kMaxSamples,
- GL_RGBA,
- TestHelper::kMaxRenderbufferSize,
- 1))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- RenderbufferStorageMultisampleCHROMIUM cmd;
- cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
- GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest,
- RenderbufferStorageMultisampleEXTNotSupported) {
- InitDecoder(
- "GL_EXT_framebuffer_multisample", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- false); // bind generates resource
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- InSequence sequence;
- // GL_EXT_framebuffer_multisample uses RenderbufferStorageMultisampleCHROMIUM.
- RenderbufferStorageMultisampleEXT cmd;
- cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
- GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-class GLES2DecoderMultisampledRenderToTextureTest
- : public GLES2DecoderTestWithExtensions {};
-
-TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
- NotCompatibleWithRenderbufferStorageMultisampleCHROMIUM) {
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- RenderbufferStorageMultisampleCHROMIUM cmd;
- cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
- GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
- RenderbufferStorageMultisampleEXT) {
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- InSequence sequence;
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- if (strstr(GetParam(), "GL_IMG_multisampled_render_to_texture")) {
- EXPECT_CALL(
- *gl_,
- RenderbufferStorageMultisampleIMG(GL_RENDERBUFFER,
- TestHelper::kMaxSamples,
- GL_RGBA,
- TestHelper::kMaxRenderbufferSize,
- 1))
- .Times(1)
- .RetiresOnSaturation();
- } else {
- EXPECT_CALL(
- *gl_,
- RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER,
- TestHelper::kMaxSamples,
- GL_RGBA,
- TestHelper::kMaxRenderbufferSize,
- 1))
- .Times(1)
- .RetiresOnSaturation();
- }
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- RenderbufferStorageMultisampleEXT cmd;
- cmd.Init(GL_RENDERBUFFER, TestHelper::kMaxSamples,
- GL_RGBA4, TestHelper::kMaxRenderbufferSize, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-INSTANTIATE_TEST_CASE_P(
- GLES2DecoderMultisampledRenderToTextureTests,
- GLES2DecoderMultisampledRenderToTextureTest,
- ::testing::Values("GL_EXT_multisampled_render_to_texture",
- "GL_IMG_multisampled_render_to_texture"));
-
-TEST_F(GLES2DecoderTest, ReadPixelsGLError) {
- GLenum kFormat = GL_RGBA;
- GLint x = 0;
- GLint y = 0;
- GLsizei width = 2;
- GLsizei height = 4;
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- uint32 result_shm_id = kSharedMemoryId;
- uint32 result_shm_offset = kSharedMemoryOffset;
- uint32 pixels_shm_id = kSharedMemoryId;
- uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_OUT_OF_MEMORY))
- .RetiresOnSaturation();
- EXPECT_CALL(
- *gl_, ReadPixels(x, y, width, height, kFormat, GL_UNSIGNED_BYTE, _))
- .Times(1)
- .RetiresOnSaturation();
- ReadPixels cmd;
- cmd.Init(x, y, width, height, kFormat, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
-}
-
-static bool ValueInArray(GLint value, GLint* array, GLint count) {
- for (GLint ii = 0; ii < count; ++ii) {
- if (array[ii] == value) {
- return true;
- }
- }
- return false;
-}
-
-TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormats) {
- InitDecoder(
- "GL_EXT_texture_compression_s3tc", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
-
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- GetIntegerv cmd;
- result->size = 0;
- EXPECT_CALL(*gl_, GetIntegerv(_, _))
- .Times(0)
- .RetiresOnSaturation();
- cmd.Init(
- GL_NUM_COMPRESSED_TEXTURE_FORMATS,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(1, result->GetNumResults());
- GLint num_formats = result->GetData()[0];
- EXPECT_EQ(4, num_formats);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- result->size = 0;
- cmd.Init(
- GL_COMPRESSED_TEXTURE_FORMATS,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(num_formats, result->GetNumResults());
-
- EXPECT_TRUE(ValueInArray(
- GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
- result->GetData(), result->GetNumResults()));
- EXPECT_TRUE(ValueInArray(
- GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
- result->GetData(), result->GetNumResults()));
- EXPECT_TRUE(ValueInArray(
- GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
- result->GetData(), result->GetNumResults()));
- EXPECT_TRUE(ValueInArray(
- GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
- result->GetData(), result->GetNumResults()));
-
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
-
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- GetIntegerv cmd;
- result->size = 0;
- EXPECT_CALL(*gl_, GetIntegerv(_, _))
- .Times(0)
- .RetiresOnSaturation();
- cmd.Init(
- GL_NUM_COMPRESSED_TEXTURE_FORMATS,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(1, result->GetNumResults());
- GLint num_formats = result->GetData()[0];
- EXPECT_EQ(0, num_formats);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- result->size = 0;
- cmd.Init(
- GL_COMPRESSED_TEXTURE_FORMATS,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(num_formats, result->GetNumResults());
-
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DBucketBadBucket) {
- InitDecoder(
- "GL_EXT_texture_compression_s3tc", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- const uint32 kBadBucketId = 123;
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CompressedTexImage2DBucket cmd;
- cmd.Init(
- GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 4, 4, 0,
- kBadBucketId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- CompressedTexSubImage2DBucket cmd2;
- cmd2.Init(
- GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
- kBadBucketId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
-}
-
-namespace {
-
-struct S3TCTestData {
- GLenum format;
- size_t block_size;
-};
-
-} // anonymous namespace.
-
-TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DS3TC) {
- InitDecoder(
- "GL_EXT_texture_compression_s3tc", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- const uint32 kBucketId = 123;
- CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId);
- ASSERT_TRUE(bucket != NULL);
-
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
-
- static const S3TCTestData test_data[] = {
- { GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 8, },
- { GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 8, },
- { GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 16, },
- { GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 16, },
- };
-
- for (size_t ii = 0; ii < arraysize(test_data); ++ii) {
- const S3TCTestData& test = test_data[ii];
- CompressedTexImage2DBucket cmd;
- // test small width.
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 0, test.format, 2, 4, 0, test.block_size,
- kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // test bad width.
- cmd.Init(
- GL_TEXTURE_2D, 0, test.format, 5, 4, 0,
- kBucketId);
- bucket->SetSize(test.block_size * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // test small height.
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 0, test.format, 4, 2, 0, test.block_size,
- kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // test too bad height.
- cmd.Init(
- GL_TEXTURE_2D, 0, test.format, 4, 5, 0,
- kBucketId);
- bucket->SetSize(test.block_size * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // test small for level 0.
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 0, test.format, 1, 1, 0, test.block_size,
- kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // test small for level 0.
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 0, test.format, 2, 2, 0, test.block_size,
- kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // test size too large.
- cmd.Init(
- GL_TEXTURE_2D, 0, test.format, 4, 4, 0,
- kBucketId);
- bucket->SetSize(test.block_size * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
- // test size too small.
- cmd.Init(
- GL_TEXTURE_2D, 0, test.format, 4, 4, 0,
- kBucketId);
- bucket->SetSize(test.block_size / 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
- // test with 3 mips.
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 0, test.format, 4, 4, 0, test.block_size, kBucketId);
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 1, test.format, 2, 2, 0, test.block_size, kBucketId);
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 2, test.format, 1, 1, 0, test.block_size, kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Test a 16x16
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 0, test.format, 16, 16, 0, test.block_size * 4 * 4,
- kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- CompressedTexSubImage2DBucket sub_cmd;
- bucket->SetSize(test.block_size);
- // Test sub image bad xoffset
- sub_cmd.Init(
- GL_TEXTURE_2D, 0, 1, 0, 4, 4, test.format, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // Test sub image bad yoffset
- sub_cmd.Init(
- GL_TEXTURE_2D, 0, 0, 2, 4, 4, test.format, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // Test sub image bad width
- bucket->SetSize(test.block_size * 2);
- sub_cmd.Init(
- GL_TEXTURE_2D, 0, 0, 0, 5, 4, test.format, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // Test sub image bad height
- sub_cmd.Init(
- GL_TEXTURE_2D, 0, 0, 0, 4, 5, test.format, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // Test sub image bad size
- bucket->SetSize(test.block_size + 1);
- sub_cmd.Init(
- GL_TEXTURE_2D, 0, 0, 0, 4, 4, test.format, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
- for (GLint yoffset = 0; yoffset <= 8; yoffset += 4) {
- for (GLint xoffset = 0; xoffset <= 8; xoffset += 4) {
- for (GLsizei height = 4; height <= 8; height +=4 ) {
- for (GLsizei width = 4; width <= 8; width += 4) {
- GLsizei size = test.block_size * (width / 4) * (height / 4);
- bucket->SetSize(size);
- EXPECT_CALL(*gl_, CompressedTexSubImage2D(
- GL_TEXTURE_2D, 0, xoffset, yoffset, width, height, test.format,
- size, _))
- .Times(1)
- .RetiresOnSaturation();
- sub_cmd.Init(
- GL_TEXTURE_2D, 0, xoffset, yoffset, width, height, test.format,
- kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- }
- }
- }
- }
- }
-}
-
-TEST_F(GLES2DecoderManualInitTest, CompressedTexImage2DETC1) {
- InitDecoder(
- "GL_OES_compressed_ETC1_RGB8_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- const uint32 kBucketId = 123;
- CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId);
- ASSERT_TRUE(bucket != NULL);
-
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
-
- const GLenum kFormat = GL_ETC1_RGB8_OES;
- const size_t kBlockSize = 8;
-
- CompressedTexImage2DBucket cmd;
- // test small width.
- DoCompressedTexImage2D(GL_TEXTURE_2D, 0, kFormat, 4, 8, 0, 16, kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // test small height.
- DoCompressedTexImage2D(GL_TEXTURE_2D, 0, kFormat, 8, 4, 0, 16, kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // test size too large.
- cmd.Init(GL_TEXTURE_2D, 0, kFormat, 4, 4, 0, kBucketId);
- bucket->SetSize(kBlockSize * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
- // test size too small.
- cmd.Init(GL_TEXTURE_2D, 0, kFormat, 4, 4, 0, kBucketId);
- bucket->SetSize(kBlockSize / 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-
- // Test a 16x16
- DoCompressedTexImage2D(
- GL_TEXTURE_2D, 0, kFormat, 16, 16, 0, kBlockSize * 16, kBucketId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Test CompressedTexSubImage not allowed
- CompressedTexSubImage2DBucket sub_cmd;
- bucket->SetSize(kBlockSize);
- sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, kFormat, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // Test TexSubImage not allowed for ETC1 compressed texture
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- GLenum type, internal_format;
- EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
- EXPECT_EQ(kFormat, internal_format);
- TexSubImage2D texsub_cmd;
- texsub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(texsub_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // Test CopyTexSubImage not allowed for ETC1 compressed texture
- CopyTexSubImage2D copy_cmd;
- copy_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4);
- EXPECT_EQ(error::kNoError, ExecuteCmd(copy_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, GetCompressedTextureFormatsETC1) {
- InitDecoder(
- "GL_OES_compressed_ETC1_RGB8_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
-
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- GetIntegerv cmd;
- result->size = 0;
- EXPECT_CALL(*gl_, GetIntegerv(_, _))
- .Times(0)
- .RetiresOnSaturation();
- cmd.Init(
- GL_NUM_COMPRESSED_TEXTURE_FORMATS,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(1, result->GetNumResults());
- GLint num_formats = result->GetData()[0];
- EXPECT_EQ(1, num_formats);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- result->size = 0;
- cmd.Init(
- GL_COMPRESSED_TEXTURE_FORMATS,
- shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(num_formats, result->GetNumResults());
-
- EXPECT_TRUE(ValueInArray(
- GL_ETC1_RGB8_OES,
- result->GetData(), result->GetNumResults()));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMValidArgs) {
- const uint32 kBucketId = 123;
- GetProgramInfoCHROMIUM cmd;
- cmd.Init(client_program_id_, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
- EXPECT_GT(bucket->size(), 0u);
-}
-
-TEST_F(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) {
- const uint32 kBucketId = 123;
- CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
- EXPECT_TRUE(bucket == NULL);
- GetProgramInfoCHROMIUM cmd;
- cmd.Init(kInvalidClientId, kBucketId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- bucket = decoder_->GetBucket(kBucketId);
- ASSERT_TRUE(bucket != NULL);
- EXPECT_EQ(sizeof(ProgramInfoHeader), bucket->size());
- ProgramInfoHeader* info = bucket->GetDataAs<ProgramInfoHeader*>(
- 0, sizeof(ProgramInfoHeader));
- ASSERT_TRUE(info != 0);
- EXPECT_EQ(0u, info->link_status);
- EXPECT_EQ(0u, info->num_attribs);
- EXPECT_EQ(0u, info->num_uniforms);
-}
-
-TEST_F(GLES2DecoderManualInitTest, EGLImageExternalBindTexture) {
- InitDecoder(
- "GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kNewServiceId));
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
- BindTexture cmd;
- cmd.Init(GL_TEXTURE_EXTERNAL_OES, kNewClientId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- TextureRef* texture_ref = GetTexture(kNewClientId);
- EXPECT_TRUE(texture_ref != NULL);
- EXPECT_TRUE(texture_ref->texture()->target() == GL_TEXTURE_EXTERNAL_OES);
-}
-
-TEST_F(GLES2DecoderManualInitTest, EGLImageExternalGetBinding) {
- InitDecoder(
- "GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES,
- result->GetData()))
- .Times(0);
- result->size = 0;
- GetIntegerv cmd;
- cmd.Init(GL_TEXTURE_BINDING_EXTERNAL_OES,
- shared_memory_id_,
- shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_TEXTURE_BINDING_EXTERNAL_OES), result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureDefaults) {
- InitDecoder(
- "GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- EXPECT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
- EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
- EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
- EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
-}
-
-TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParam) {
- InitDecoder(
- "GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
-
- EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_MIN_FILTER,
- GL_NEAREST));
- EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_MIN_FILTER,
- GL_LINEAR));
- EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE));
- EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE));
- TexParameteri cmd;
- cmd.Init(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_MIN_FILTER,
- GL_NEAREST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- cmd.Init(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_MIN_FILTER,
- GL_LINEAR);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- cmd.Init(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- cmd.Init(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- EXPECT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
- EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
- EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
- EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
-}
-
-TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTextureParamInvalid) {
- InitDecoder(
- "GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
-
- TexParameteri cmd;
- cmd.Init(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_MIN_FILTER,
- GL_NEAREST_MIPMAP_NEAREST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
- cmd.Init(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_WRAP_S,
- GL_REPEAT);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
- cmd.Init(GL_TEXTURE_EXTERNAL_OES,
- GL_TEXTURE_WRAP_T,
- GL_REPEAT);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- EXPECT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
- EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
- EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
- EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
-}
-
-TEST_F(GLES2DecoderManualInitTest, EGLImageExternalTexImage2DError) {
- InitDecoder(
- "GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- GLenum target = GL_TEXTURE_EXTERNAL_OES;
- GLint level = 0;
- GLenum internal_format = GL_RGBA;
- GLsizei width = 2;
- GLsizei height = 4;
- GLint border = 0;
- GLenum format = GL_RGBA;
- GLenum type = GL_UNSIGNED_BYTE;
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
- ASSERT_TRUE(GetTexture(client_texture_id_) != NULL);
- TexImage2D cmd;
- cmd.Init(target, level, internal_format, width, height, border, format,
- type, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-
- // TexImage2D is not allowed with GL_TEXTURE_EXTERNAL_OES targets.
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- false); // bind generates resource
+TEST_P(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, kInvalidClientId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
BindBuffer cmd2;
cmd2.Init(GL_ARRAY_BUFFER, kInvalidClientId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
BindFramebuffer cmd3;
cmd3.Init(GL_FRAMEBUFFER, kInvalidClientId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd3));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd3));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
BindRenderbuffer cmd4;
cmd4.Init(GL_RENDERBUFFER, kInvalidClientId);
- EXPECT_NE(error::kNoError, ExecuteCmd(cmd4));
-}
-
-TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUM) {
- const GLuint kObjectId = 123;
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*stream_texture_manager(), CreateStreamTexture(
- kServiceTextureId, client_texture_id_))
- .WillOnce(Return(kObjectId))
- .RetiresOnSaturation();
-
- CreateStreamTextureCHROMIUM cmd;
- CreateStreamTextureCHROMIUM::Result* result =
- static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_);
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(kObjectId, *result);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- EXPECT_TRUE(texture_ref != NULL);
- EXPECT_TRUE(texture_ref->texture()->IsStreamTexture());
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
-
-TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMBadId) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- CreateStreamTextureCHROMIUM cmd;
- CreateStreamTextureCHROMIUM::Result* result =
- static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_);
- cmd.Init(kNewClientId, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(static_cast<GLuint>(GL_ZERO), *result);
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMAlreadyBound) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
-
- CreateStreamTextureCHROMIUM cmd;
- CreateStreamTextureCHROMIUM::Result* result =
- static_cast<CreateStreamTextureCHROMIUM::Result*>(shared_memory_address_);
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(static_cast<GLuint>(GL_ZERO), *result);
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, CreateStreamTextureCHROMIUMAlreadySet) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- CreateStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
-
-TEST_F(GLES2DecoderManualInitTest, DrawStreamTextureCHROMIUM) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
- true, // has alpha
- true, // has depth
- false, // has stencil
- true, // request alpha
- true, // request depth
- false, // request stencil
- true); // bind generates resource
-
- StrictMock<MockStreamTexture> stream_texture;
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- SetupSamplerExternalProgram();
- SetupIndexBuffer();
- AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
- EXPECT_TRUE(group().texture_manager()->CanRender(texture_ref));
-
- InSequence s;
- EXPECT_CALL(*stream_texture_manager(), LookupStreamTexture(kServiceTextureId))
- .WillOnce(Return(&stream_texture))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(stream_texture, Update())
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
- .Times(1);
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
-
-TEST_F(GLES2DecoderManualInitTest, BindStreamTextureCHROMIUMInvalid) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- BindTexture cmd;
- cmd.Init(GL_TEXTURE_2D, client_texture_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- BindTexture cmd2;
- cmd2.Init(GL_TEXTURE_CUBE_MAP, client_texture_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd4));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
-
-TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUM) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-
- DestroyStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_FALSE(texture_ref->texture()->IsStreamTexture());
- EXPECT_EQ(0U, texture_ref->texture()->target());
-}
-
-TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMInvalid) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- DestroyStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, DestroyStreamTextureCHROMIUMBadId) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- DestroyStreamTextureCHROMIUM cmd;
- cmd.Init(GL_ZERO);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, StreamTextureCHROMIUMNullMgr) {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- CreateStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
- GetGLError(); // ignore internal error
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- DestroyStreamTextureCHROMIUM cmd2;
- cmd2.Init(client_texture_id_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd2));
- GetGLError(); // ignore internal error
-}
-
-TEST_F(GLES2DecoderManualInitTest, ReCreateStreamTextureCHROMIUM) {
- const GLuint kObjectId = 123;
- InitDecoder(
- "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*stream_texture_manager(),
- CreateStreamTexture(kServiceTextureId, client_texture_id_))
- .WillOnce(Return(kObjectId))
- .RetiresOnSaturation();
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- DestroyStreamTextureCHROMIUM cmd;
- cmd.Init(client_texture_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_FALSE(texture_ref->texture()->IsStreamTexture());
-
- CreateStreamTextureCHROMIUM cmd2;
- cmd2.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(texture_ref->texture()->IsStreamTexture());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
}
-TEST_F(GLES2DecoderManualInitTest, ProduceAndConsumeStreamTextureCHROMIUM) {
- InitDecoder(
- "GL_CHROMIUM_stream_texture GL_OES_EGL_image_external", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- group().texture_manager()->SetStreamTexture(texture_ref, true);
-
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
-
- GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM];
- group().mailbox_manager()->GenerateMailboxName(
- reinterpret_cast<MailboxName*>(mailbox));
-
- memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
-
- EXPECT_EQ(kServiceTextureId, texture_ref->service_id());
-
- ProduceTextureCHROMIUM produce_cmd;
- produce_cmd.Init(
- GL_TEXTURE_EXTERNAL_OES, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(produce_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Create new texture for consume.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId))
- .RetiresOnSaturation();
- DoBindTexture(GL_TEXTURE_EXTERNAL_OES, kNewClientId, kNewServiceId);
-
- // Assigns and binds original service size texture ID.
- EXPECT_CALL(*gl_, DeleteTextures(1, _))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-
- // Shared mem got clobbered from GetError() above.
- memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
- ConsumeTextureCHROMIUM consume_cmd;
- consume_cmd.Init(
- GL_TEXTURE_EXTERNAL_OES, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(consume_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Service ID is restored.
- EXPECT_EQ(kServiceTextureId, texture_ref->service_id());
-
- EXPECT_CALL(*stream_texture_manager(),
- DestroyStreamTexture(kServiceTextureId))
- .Times(1)
- .RetiresOnSaturation();
-}
-
-TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
- InitDecoder(
- "GL_ARB_texture_rectangle", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId));
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
- BindTexture cmd;
- cmd.Init(GL_TEXTURE_RECTANGLE_ARB, kNewClientId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- Texture* texture = GetTexture(kNewClientId)->texture();
- EXPECT_TRUE(texture != NULL);
- EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) {
- InitDecoder(
- "GL_ARB_texture_rectangle", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindTexture(
- GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB,
- result->GetData()))
- .Times(0);
- result->size = 0;
- GetIntegerv cmd;
- cmd.Init(GL_TEXTURE_BINDING_RECTANGLE_ARB,
- shared_memory_id_,
- shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_TEXTURE_BINDING_RECTANGLE_ARB), result->GetNumResults());
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureDefaults) {
- InitDecoder(
- "GL_ARB_texture_rectangle", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindTexture(
- GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
-
- Texture* texture = GetTexture(client_texture_id_)->texture();
- EXPECT_TRUE(texture != NULL);
- EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
- EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
- EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
- EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParam) {
- InitDecoder(
- "GL_ARB_texture_rectangle", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- DoBindTexture(
- GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
-
- EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_MIN_FILTER,
- GL_NEAREST));
- EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_MIN_FILTER,
- GL_LINEAR));
- EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE));
- EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE));
- TexParameteri cmd;
- cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_MIN_FILTER,
- GL_NEAREST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_MIN_FILTER,
- GL_LINEAR);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_WRAP_S,
- GL_CLAMP_TO_EDGE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_WRAP_T,
- GL_CLAMP_TO_EDGE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- Texture* texture = GetTexture(client_texture_id_)->texture();
- EXPECT_TRUE(texture != NULL);
- EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
- EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
- EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
- EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParamInvalid) {
- InitDecoder(
- "GL_ARB_texture_rectangle", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- DoBindTexture(
- GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
-
- TexParameteri cmd;
- cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_MIN_FILTER,
- GL_NEAREST_MIPMAP_NEAREST);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
- cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_WRAP_S,
- GL_REPEAT);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
- cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
- GL_TEXTURE_WRAP_T,
- GL_REPEAT);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-
- Texture* texture = GetTexture(client_texture_id_)->texture();
- EXPECT_TRUE(texture != NULL);
- EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
- EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
- EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
- EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
-}
-
-TEST_F(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2DError) {
- InitDecoder(
- "GL_ARB_texture_rectangle", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- GLenum target = GL_TEXTURE_RECTANGLE_ARB;
- GLint level = 0;
- GLenum internal_format = GL_RGBA;
- GLsizei width = 2;
- GLsizei height = 4;
- GLint border = 0;
- GLenum format = GL_RGBA;
- GLenum type = GL_UNSIGNED_BYTE;
- DoBindTexture(
- GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
- ASSERT_TRUE(GetTexture(client_texture_id_) != NULL);
- TexImage2D cmd;
- cmd.Init(target, level, internal_format, width, height, border, format,
- type, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-
- // TexImage2D is not allowed with GL_TEXTURE_RECTANGLE_ARB targets.
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, EnableFeatureCHROMIUMBadBucket) {
+TEST_P(GLES2DecoderTest, EnableFeatureCHROMIUMBadBucket) {
const uint32 kBadBucketId = 123;
EnableFeatureCHROMIUM cmd;
cmd.Init(kBadBucketId, shared_memory_id_, shared_memory_offset_);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest, RequestExtensionCHROMIUMBadBucket) {
+TEST_P(GLES2DecoderTest, RequestExtensionCHROMIUMBadBucket) {
const uint32 kBadBucketId = 123;
RequestExtensionCHROMIUM cmd;
cmd.Init(kBadBucketId);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest, TexSubImage2DClearsAfterTexImage2DNULL) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- TexSubImage2D cmd;
- cmd.Init(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- // Test if we call it again it does not clear.
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, TexSubImage2DDoesNotClearAfterTexImage2DNULLThenData) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- TexSubImage2D cmd;
- cmd.Init(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- // Test if we call it again it does not clear.
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(
- GLES2DecoderManualInitTest,
- TexSubImage2DDoesNotClearAfterTexImage2DNULLThenDataWithTexImage2DIsFaster) {
- CommandLine command_line(0, NULL);
- command_line.AppendSwitchASCII(
- switches::kGpuDriverBugWorkarounds,
- base::IntToString(gpu::TEXSUBIMAGE2D_FASTER_THAN_TEXIMAGE2D));
- InitDecoderWithCommandLine(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true, // bind generates resource
- &command_line);
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
-
- {
- // Uses texSubimage internally because the above workaround is active and
- // the update is for the full size of the texture.
- EXPECT_CALL(*gl_,
- TexSubImage2D(
- GL_TEXTURE_2D, 0, 0, 0, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, _))
- .Times(1)
- .RetiresOnSaturation();
- cmds::TexImage2D cmd;
- cmd.Init(GL_TEXTURE_2D,
- 0,
- GL_RGBA,
- 2,
- 2,
- 0,
- GL_RGBA,
- GL_UNSIGNED_BYTE,
- kSharedMemoryId,
- kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- }
-
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- TexSubImage2D cmd;
- cmd.Init(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- // Test if we call it again it does not clear.
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, TexSubImage2DClearsAfterTexImage2DWithDataThenNULL) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- // Put in data (so it should be marked as cleared)
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
- // Put in no data.
- TexImage2D tex_cmd;
- tex_cmd.Init(
- GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
- // It won't actually call TexImage2D, just mark it as uncleared.
- EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
- // Next call to TexSubImage2d should clear.
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
- EXPECT_CALL(*gl_, TexSubImage2D(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- shared_memory_address_))
- .Times(1)
- .RetiresOnSaturation();
- TexSubImage2D cmd;
- cmd.Init(
- GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawArraysClearsAfterTexImage2DNULL) {
- SetupAllNeededVertexBuffers();
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- // Create an uncleared texture with 2 levels.
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- DoTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- // Expect 2 levels will be cleared.
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 1, GL_RGBA, GL_UNSIGNED_BYTE, 1, 1);
- SetupExpectationsForApplyingDefaultDirtyState();
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // But not again
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawElementsClearsAfterTexImage2DNULL) {
- SetupAllNeededVertexBuffers();
- SetupIndexBuffer();
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- // Create an uncleared texture with 2 levels.
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- DoTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- // Expect 2 levels will be cleared.
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 1, GL_RGBA, GL_UNSIGNED_BYTE, 1, 1);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2)))
- .Times(1)
- .RetiresOnSaturation();
- DrawElements cmd;
- cmd.Init(GL_TRIANGLES, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
- kValidIndexRangeStart * 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // But not again
- EXPECT_CALL(*gl_, DrawElements(GL_TRIANGLES, kValidIndexRangeCount,
- GL_UNSIGNED_SHORT,
- BufferOffset(kValidIndexRangeStart * 2)))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawClearsAfterTexImage2DNULLInFBO) {
- const GLuint kFBOClientTextureId = 4100;
- const GLuint kFBOServiceTextureId = 4101;
-
- SetupAllNeededVertexBuffers();
- // Register a texture id.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
- .RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
-
- // Setup "render to" texture.
- DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
-
- // Setup "render from" texture.
- SetupTexture();
-
- SetupExpectationsForFramebufferClearing(
- GL_FRAMEBUFFER, // target
- GL_COLOR_BUFFER_BIT, // clear bits
- 0, 0, 0, 0, // color
- 0, // stencil
- 1.0f, // depth
- false); // scissor test
-
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1111, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // But not again.
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawWitFBOThatCantClearDoesNotDraw) {
- const GLuint kFBOClientTextureId = 4100;
- const GLuint kFBOServiceTextureId = 4101;
-
- // Register a texture id.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
- .RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
-
- // Setup "render to" texture.
- DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
-
- // Setup "render from" texture.
- SetupTexture();
-
- EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
- .WillOnce(Return(GL_FRAMEBUFFER_UNSUPPORTED))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DrawArrays(_, _, _))
- .Times(0)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
-
- TextureManager* manager = group().texture_manager();
- TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- CopyTexImage2D cmd;
- cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-
- EXPECT_TRUE(texture->SafeToRenderFrom());
-}
-
-TEST_F(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedTexture) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
-
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_2D, GL_TEXTURE_2D,
- 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
- EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1))
- .Times(1)
- .RetiresOnSaturation();
- CopyTexSubImage2D cmd;
- cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) {
- InitDecoder(
- "GL_EXT_texture_compression_s3tc", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, CompressedTexImage2D(
- GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, 8, _))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- CompressedTexImage2D cmd;
- cmd.Init(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0,
- 8, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- TextureManager* manager = group().texture_manager();
- TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
- EXPECT_TRUE(texture_ref->texture()->SafeToRenderFrom());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) {
- const GLuint kFBOClientTextureId = 4100;
- const GLuint kFBOServiceTextureId = 4101;
-
- // Register a texture id.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
- .RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
-
- // Setup "render to" texture.
- DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
-
- // Setup "render from" texture.
- SetupTexture();
-
- SetupExpectationsForFramebufferClearing(
- GL_FRAMEBUFFER, // target
- GL_COLOR_BUFFER_BIT, // clear bits
- 0, 0, 0, 0, // color
- 0, // stencil
- 1.0f, // depth
- false); // scissor test
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1111, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, Clear(GL_COLOR_BUFFER_BIT))
- .Times(1)
- .RetiresOnSaturation();
-
- Clear cmd;
- cmd.Init(GL_COLOR_BUFFER_BIT);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnReadPixels) {
- const GLuint kFBOClientTextureId = 4100;
- const GLuint kFBOServiceTextureId = 4101;
-
- // Register a texture id.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
- .RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
-
- // Setup "render to" texture.
- DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
-
- // Setup "render from" texture.
- SetupTexture();
-
- SetupExpectationsForFramebufferClearing(
- GL_FRAMEBUFFER, // target
- GL_COLOR_BUFFER_BIT, // clear bits
- 0, 0, 0, 0, // color
- 0, // stencil
- 1.0f, // depth
- false); // scissor test
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
- .Times(1)
- .RetiresOnSaturation();
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
- uint32 result_shm_id = kSharedMemoryId;
- uint32 result_shm_offset = kSharedMemoryOffset;
- uint32 pixels_shm_id = kSharedMemoryId;
- uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
- ReadPixels cmd;
- cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest,
- UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) {
- InitDecoder(
- "GL_EXT_framebuffer_multisample", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- const GLuint kFBOClientTextureId = 4100;
- const GLuint kFBOServiceTextureId = 4101;
-
- // Register a texture id.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
- .RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
-
- // Setup "render from" texture.
- DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
- DoBindFramebuffer(
- GL_READ_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
-
- SetupExpectationsForFramebufferClearingMulti(
- kServiceFramebufferId, // read framebuffer service id
- 0, // backbuffer service id
- GL_READ_FRAMEBUFFER, // target
- GL_COLOR_BUFFER_BIT, // clear bits
- 0, 0, 0, 0, // color
- 0, // stencil
- 1.0f, // depth
- false); // scissor test
-
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
- .Times(1)
- .RetiresOnSaturation();
- typedef ReadPixels::Result Result;
- uint32 result_shm_id = kSharedMemoryId;
- uint32 result_shm_offset = kSharedMemoryOffset;
- uint32 pixels_shm_id = kSharedMemoryId;
- uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
- ReadPixels cmd;
- cmd.Init(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
- pixels_shm_id, pixels_shm_offset,
- result_shm_id, result_shm_offset,
- false);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, DrawClearsAfterRenderbufferStorageInFBO) {
- SetupTexture();
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- DoRenderbufferStorage(
- GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 100, 50, GL_NO_ERROR);
- DoFramebufferRenderbuffer(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
-
- SetupExpectationsForFramebufferClearing(
- GL_FRAMEBUFFER, // target
- GL_COLOR_BUFFER_BIT, // clear bits
- 0, 0, 0, 0, // color
- 0, // stencil
- 1.0f, // depth
- false); // scissor test
-
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1111, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, DrawArraysClearsAfterTexImage2DNULLCubemap) {
- static const GLenum faces[] = {
- GL_TEXTURE_CUBE_MAP_POSITIVE_X,
- GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
- GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
- GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
- GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
- GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
- };
- SetupCubemapProgram();
- DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
- // Fill out all the faces for 2 levels, leave 2 uncleared.
- for (int ii = 0; ii < 6; ++ii) {
- GLenum face = faces[ii];
- int32 shm_id =
- (face == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) ? 0 : kSharedMemoryId;
- uint32 shm_offset =
- (face == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) ? 0 : kSharedMemoryOffset;
- DoTexImage2D(face, 0, GL_RGBA, 2, 2, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, shm_id, shm_offset);
- DoTexImage2D(face, 1, GL_RGBA, 1, 1, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, shm_id, shm_offset);
- }
- // Expect 2 levels will be cleared.
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_CUBE_MAP,
- GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA, GL_UNSIGNED_BYTE, 2, 2);
- SetupClearTextureExpections(
- kServiceTextureId, kServiceTextureId, GL_TEXTURE_CUBE_MAP,
- GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 1, GL_RGBA, GL_UNSIGNED_BYTE, 1, 1);
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest, TextureUsageAngleExtNotEnabledByDefault) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
-
- TexParameteri cmd;
- cmd.Init(GL_TEXTURE_2D,
- GL_TEXTURE_USAGE_ANGLE,
- GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest,
- DrawClearsAfterRenderbuffersWithMultipleAttachments) {
- const GLuint kFBOClientTextureId = 4100;
- const GLuint kFBOServiceTextureId = 4101;
-
- // Register a texture id.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
- .RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
-
- // Setup "render to" texture.
- DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
-
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- DoRenderbufferStorage(
- GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT,
- 1, 1, GL_NO_ERROR);
- DoFramebufferRenderbuffer(
- GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
- client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
-
- SetupTexture();
- SetupExpectationsForFramebufferClearing(
- GL_FRAMEBUFFER, // target
- GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits
- 0, 0, 0, 0, // color
- 0, // stencil
- 1.0f, // depth
- false); // scissor test
-
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- true, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1111, // color bits
- true, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, CopyTexImageWithInCompleteFBOFails) {
- GLenum target = GL_TEXTURE_2D;
- GLint level = 0;
- GLenum internal_format = GL_RGBA;
- GLsizei width = 2;
- GLsizei height = 4;
- GLint border = 0;
- SetupTexture();
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- DoRenderbufferStorage(
- GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 0, 0, GL_NO_ERROR);
- DoFramebufferRenderbuffer(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
-
- EXPECT_CALL(*gl_, CopyTexImage2D(_, _, _, _, _, _, _, _))
- .Times(0)
- .RetiresOnSaturation();
- CopyTexImage2D cmd;
- cmd.Init(target, level, internal_format, 0, 0, width, height, border);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, GetGLError());
-}
-
-void GLES2DecoderWithShaderTest::CheckRenderbufferChangesMarkFBOAsNotComplete(
- bool bound_fbo) {
- FramebufferManager* framebuffer_manager = group().framebuffer_manager();
- SetupTexture();
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- DoRenderbufferStorage(
- GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 1, 1, GL_NO_ERROR);
- DoFramebufferRenderbuffer(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
-
-
- if (!bound_fbo) {
- DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
- }
-
- Framebuffer* framebuffer =
- framebuffer_manager->GetFramebuffer(client_framebuffer_id_);
- ASSERT_TRUE(framebuffer != NULL);
- framebuffer_manager->MarkAsComplete(framebuffer);
- EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
-
- // Test that renderbufferStorage marks fbo as not complete.
- DoRenderbufferStorage(
- GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 1, 1, GL_NO_ERROR);
- EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
- framebuffer_manager->MarkAsComplete(framebuffer);
- EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
-
- // Test deleting renderbuffer marks fbo as not complete.
- DoDeleteRenderbuffer(client_renderbuffer_id_, kServiceRenderbufferId);
- if (bound_fbo) {
- EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
- } else {
- EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
- }
-}
-
-TEST_F(GLES2DecoderWithShaderTest,
- RenderbufferChangesMarkFBOAsNotCompleteBoundFBO) {
- CheckRenderbufferChangesMarkFBOAsNotComplete(true);
-}
-
-TEST_F(GLES2DecoderWithShaderTest,
- RenderbufferChangesMarkFBOAsNotCompleteUnboundFBO) {
- CheckRenderbufferChangesMarkFBOAsNotComplete(false);
-}
-
-void GLES2DecoderWithShaderTest::CheckTextureChangesMarkFBOAsNotComplete(
- bool bound_fbo) {
- FramebufferManager* framebuffer_manager = group().framebuffer_manager();
- const GLuint kFBOClientTextureId = 4100;
- const GLuint kFBOServiceTextureId = 4101;
-
- // Register a texture id.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
- .RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
-
- SetupTexture();
-
- // Setup "render to" texture.
- DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
-
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- DoRenderbufferStorage(
- GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT,
- 1, 1, GL_NO_ERROR);
- DoFramebufferRenderbuffer(
- GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER,
- client_renderbuffer_id_, kServiceRenderbufferId, GL_NO_ERROR);
-
- if (!bound_fbo) {
- DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
- }
-
- Framebuffer* framebuffer =
- framebuffer_manager->GetFramebuffer(client_framebuffer_id_);
- ASSERT_TRUE(framebuffer != NULL);
- framebuffer_manager->MarkAsComplete(framebuffer);
- EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
-
- // Test TexImage2D marks fbo as not complete.
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0, 0);
- EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
- framebuffer_manager->MarkAsComplete(framebuffer);
- EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
-
- // Test CopyImage2D marks fbo as not complete.
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, 1, 0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- CopyTexImage2D cmd;
- cmd.Init(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, 1, 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
-
- // Test deleting texture marks fbo as not complete.
- framebuffer_manager->MarkAsComplete(framebuffer);
- EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
- DoDeleteTexture(kFBOClientTextureId, kFBOServiceTextureId);
-
- if (bound_fbo) {
- EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
- } else {
- EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
- }
-}
-
-TEST_F(GLES2DecoderWithShaderTest, TextureChangesMarkFBOAsNotCompleteBoundFBO) {
- CheckTextureChangesMarkFBOAsNotComplete(true);
-}
-
-TEST_F(GLES2DecoderWithShaderTest,
- TextureChangesMarkFBOAsNotCompleteUnboundFBO) {
- CheckTextureChangesMarkFBOAsNotComplete(false);
-}
-
-TEST_F(GLES2DecoderWithShaderTest,
- DrawingWithFBOTwiceChecksForFBOCompleteOnce) {
- const GLuint kFBOClientTextureId = 4100;
- const GLuint kFBOServiceTextureId = 4101;
-
- SetupAllNeededVertexBuffers();
-
- // Register a texture id.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
- .RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
-
- // Setup "render to" texture that is cleared.
- DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
- DoTexImage2D(
- GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kFBOClientTextureId, kFBOServiceTextureId, 0, GL_NO_ERROR);
-
- // Setup "render from" texture.
- SetupTexture();
-
- // Make sure we check for framebuffer complete.
- EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
- .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
- .RetiresOnSaturation();
-
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1111, // color bits
- false, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
-
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // But not again.
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, BeginQueryEXTDisabled) {
+TEST_P(GLES2DecoderTest, BeginQueryEXTDisabled) {
// Test something fails if off.
}
-TEST_F(GLES2DecoderManualInitTest, BeginEndQueryEXT) {
- InitDecoder(
- "GL_EXT_occlusion_query_boolean", // extensions
- true, // has alpha
- false, // has depth
- false, // has stencil
- true, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXT) {
+ InitState init;
+ init.extensions = "GL_EXT_occlusion_query_boolean";
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.request_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
// Test end fails if no begin.
EndQueryEXT end_cmd;
@@ -7165,20 +603,35 @@ TEST_F(GLES2DecoderManualInitTest, BeginEndQueryEXT) {
// Test valid parameters work.
EXPECT_CALL(*gl_, GenQueriesARB(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId))
- .RetiresOnSaturation();
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId))
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, kNewServiceId))
.Times(1)
.RetiresOnSaturation();
- begin_cmd.Init(
- GL_ANY_SAMPLES_PASSED_EXT, kNewClientId,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ // Query object should not be created untill BeginQueriesEXT.
QueryManager* query_manager = decoder_->GetQueryManager();
ASSERT_TRUE(query_manager != NULL);
QueryManager::Query* query = query_manager->GetQuery(kNewClientId);
+ EXPECT_TRUE(query == NULL);
+
+ // BeginQueryEXT should fail if id is not generated from GenQueriesEXT.
+ begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT,
+ kInvalidClientId,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT,
+ kNewClientId,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // After BeginQueriesEXT id name should have query object associated with it.
+ query = query_manager->GetQuery(kNewClientId);
ASSERT_TRUE(query != NULL);
EXPECT_FALSE(query->pending());
@@ -7200,105 +653,150 @@ TEST_F(GLES2DecoderManualInitTest, BeginEndQueryEXT) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_TRUE(query->pending());
- EXPECT_CALL(*gl_, DeleteQueriesARB(1, _))
- .Times(1)
- .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DeleteQueriesARB(1, _)).Times(1).RetiresOnSaturation();
}
-static void CheckBeginEndQueryBadMemoryFails(
- GLES2DecoderTestBase* test,
- GLuint client_id,
- GLuint service_id,
- int32 shm_id,
- uint32 shm_offset) {
+struct QueryType {
+ GLenum type;
+ bool is_gl;
+};
+
+const QueryType kQueryTypes[] = {
+ {GL_COMMANDS_ISSUED_CHROMIUM, false},
+ {GL_LATENCY_QUERY_CHROMIUM, false},
+ {GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM, false},
+ {GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM, false},
+ {GL_GET_ERROR_QUERY_CHROMIUM, false},
+ {GL_COMMANDS_COMPLETED_CHROMIUM, false},
+ {GL_ANY_SAMPLES_PASSED_EXT, true},
+};
+
+static void CheckBeginEndQueryBadMemoryFails(GLES2DecoderTestBase* test,
+ GLuint client_id,
+ GLuint service_id,
+ const QueryType& query_type,
+ int32 shm_id,
+ uint32 shm_offset) {
+ // We need to reset the decoder on each iteration, because we lose the
+ // context every time.
+ GLES2DecoderTestBase::InitState init;
+ init.extensions = "GL_EXT_occlusion_query_boolean GL_ARB_sync";
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.request_alpha = true;
+ init.bind_generates_resource = true;
+ test->InitDecoder(init);
::testing::StrictMock< ::gfx::MockGLInterface>* gl = test->GetGLMock();
BeginQueryEXT begin_cmd;
test->GenHelper<GenQueriesEXTImmediate>(client_id);
- EXPECT_CALL(*gl, GenQueriesARB(1, _))
- .WillOnce(SetArgumentPointee<1>(service_id))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl, BeginQueryARB(GL_ANY_SAMPLES_PASSED_EXT, service_id))
- .Times(1)
- .RetiresOnSaturation();
+ if (query_type.is_gl) {
+ EXPECT_CALL(*gl, GenQueriesARB(1, _))
+ .WillOnce(SetArgumentPointee<1>(service_id))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BeginQueryARB(query_type.type, service_id))
+ .Times(1)
+ .RetiresOnSaturation();
+ }
// Test bad shared memory fails
- begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, client_id, shm_id, shm_offset);
+ begin_cmd.Init(query_type.type, client_id, shm_id, shm_offset);
error::Error error1 = test->ExecuteCmd(begin_cmd);
- EXPECT_CALL(*gl, EndQueryARB(GL_ANY_SAMPLES_PASSED_EXT))
- .Times(1)
- .RetiresOnSaturation();
+ if (query_type.is_gl) {
+ EXPECT_CALL(*gl, EndQueryARB(query_type.type))
+ .Times(1)
+ .RetiresOnSaturation();
+ }
+ if (query_type.type == GL_GET_ERROR_QUERY_CHROMIUM) {
+ EXPECT_CALL(*gl, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ }
+ GLsync kGlSync = reinterpret_cast<GLsync>(0xdeadbeef);
+ if (query_type.type == GL_COMMANDS_COMPLETED_CHROMIUM) {
+ EXPECT_CALL(*gl, Flush()).RetiresOnSaturation();
+ EXPECT_CALL(*gl, FenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0))
+ .WillOnce(Return(kGlSync))
+ .RetiresOnSaturation();
+ }
EndQueryEXT end_cmd;
- end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1);
+ end_cmd.Init(query_type.type, 1);
error::Error error2 = test->ExecuteCmd(end_cmd);
- EXPECT_CALL(*gl,
- GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
- .WillOnce(SetArgumentPointee<2>(1))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl,
- GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_EXT, _))
- .WillOnce(SetArgumentPointee<2>(1))
- .RetiresOnSaturation();
+ if (query_type.is_gl) {
+ EXPECT_CALL(
+ *gl, GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_AVAILABLE_EXT, _))
+ .WillOnce(SetArgumentPointee<2>(1))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, GetQueryObjectuivARB(service_id, GL_QUERY_RESULT_EXT, _))
+ .WillOnce(SetArgumentPointee<2>(1))
+ .RetiresOnSaturation();
+ }
+ if (query_type.type == GL_COMMANDS_COMPLETED_CHROMIUM) {
+ EXPECT_CALL(*gl, ClientWaitSync(kGlSync, _, _))
+ .WillOnce(Return(GL_ALREADY_SIGNALED))
+ .RetiresOnSaturation();
+ }
QueryManager* query_manager = test->GetDecoder()->GetQueryManager();
ASSERT_TRUE(query_manager != NULL);
bool process_success = query_manager->ProcessPendingQueries();
- EXPECT_TRUE(error1 != error::kNoError ||
- error2 != error::kNoError ||
+ EXPECT_TRUE(error1 != error::kNoError || error2 != error::kNoError ||
!process_success);
- EXPECT_CALL(*gl, DeleteQueriesARB(1, _))
- .Times(1)
- .RetiresOnSaturation();
+ if (query_type.is_gl) {
+ EXPECT_CALL(*gl, DeleteQueriesARB(1, _)).Times(1).RetiresOnSaturation();
+ }
+ if (query_type.type == GL_COMMANDS_COMPLETED_CHROMIUM)
+ EXPECT_CALL(*gl, DeleteSync(kGlSync)).Times(1).RetiresOnSaturation();
+ test->ResetDecoder();
}
-TEST_F(GLES2DecoderManualInitTest, BeginEndQueryEXTBadMemoryIdFails) {
- InitDecoder(
- "GL_EXT_occlusion_query_boolean", // extensions
- true, // has alpha
- false, // has depth
- false, // has stencil
- true, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- CheckBeginEndQueryBadMemoryFails(
- this, kNewClientId, kNewServiceId,
- kInvalidSharedMemoryId, kSharedMemoryOffset);
+TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXTBadMemoryIdFails) {
+ for (size_t i = 0; i < arraysize(kQueryTypes); ++i) {
+ CheckBeginEndQueryBadMemoryFails(this,
+ kNewClientId,
+ kNewServiceId,
+ kQueryTypes[i],
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset);
+ }
}
-TEST_F(GLES2DecoderManualInitTest, BeginEndQueryEXTBadMemoryOffsetFails) {
- InitDecoder(
- "GL_EXT_occlusion_query_boolean", // extensions
- true, // has alpha
- false, // has depth
- false, // has stencil
- true, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
-
- CheckBeginEndQueryBadMemoryFails(
- this, kNewClientId, kNewServiceId,
- kSharedMemoryId, kInvalidSharedMemoryOffset);
+TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXTBadMemoryOffsetFails) {
+ for (size_t i = 0; i < arraysize(kQueryTypes); ++i) {
+ // Out-of-bounds.
+ CheckBeginEndQueryBadMemoryFails(this,
+ kNewClientId,
+ kNewServiceId,
+ kQueryTypes[i],
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset);
+ // Overflow.
+ CheckBeginEndQueryBadMemoryFails(this,
+ kNewClientId,
+ kNewServiceId,
+ kQueryTypes[i],
+ kSharedMemoryId,
+ 0xfffffffcu);
+ }
}
-TEST_F(GLES2DecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
+TEST_P(GLES2DecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
BeginQueryEXT begin_cmd;
GenHelper<GenQueriesEXTImmediate>(kNewClientId);
// Test valid parameters work.
- begin_cmd.Init(
- GL_COMMANDS_ISSUED_CHROMIUM, kNewClientId,
- kSharedMemoryId, kSharedMemoryOffset);
+ begin_cmd.Init(GL_COMMANDS_ISSUED_CHROMIUM,
+ kNewClientId,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -7316,15 +814,16 @@ TEST_F(GLES2DecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
EXPECT_FALSE(query->pending());
}
-TEST_F(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) {
+TEST_P(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) {
BeginQueryEXT begin_cmd;
GenHelper<GenQueriesEXTImmediate>(kNewClientId);
// Test valid parameters work.
- begin_cmd.Init(
- GL_GET_ERROR_QUERY_CHROMIUM, kNewClientId,
- kSharedMemoryId, kSharedMemoryOffset);
+ begin_cmd.Init(GL_GET_ERROR_QUERY_CHROMIUM,
+ kNewClientId,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -7350,107 +849,70 @@ TEST_F(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) {
static_cast<GLenum>(sync->result));
}
-TEST_F(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) {
- GLbyte mailbox[GL_MAILBOX_SIZE_CHROMIUM];
- group().mailbox_manager()->GenerateMailboxName(
- reinterpret_cast<MailboxName*>(mailbox));
+TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXTCommandsCompletedCHROMIUM) {
+ InitState init;
+ init.extensions = "GL_EXT_occlusion_query_boolean GL_ARB_sync";
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.request_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
- memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
+ GenHelper<GenQueriesEXTImmediate>(kNewClientId);
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- DoTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- TextureRef* texture_ref = group().texture_manager()->GetTexture(
- client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_EQ(kServiceTextureId, texture->service_id());
-
- ProduceTextureCHROMIUM produce_cmd;
- produce_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(produce_cmd));
+ BeginQueryEXT begin_cmd;
+ begin_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM,
+ kNewClientId,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- // Texture didn't change.
- GLsizei width;
- GLsizei height;
- GLenum type;
- GLenum internal_format;
-
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- EXPECT_EQ(3, width);
- EXPECT_EQ(1, height);
- EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
- EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
- EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
-
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
- EXPECT_EQ(2, width);
- EXPECT_EQ(4, height);
- EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format));
- EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
- EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
-
- // Service ID has not changed.
- EXPECT_EQ(kServiceTextureId, texture->service_id());
-
- // Create new texture for consume.
- EXPECT_CALL(*gl_, GenTextures(_, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId))
- .RetiresOnSaturation();
- DoBindTexture(GL_TEXTURE_2D, kNewClientId, kNewServiceId);
+ QueryManager* query_manager = decoder_->GetQueryManager();
+ ASSERT_TRUE(query_manager != NULL);
+ QueryManager::Query* query = query_manager->GetQuery(kNewClientId);
+ ASSERT_TRUE(query != NULL);
+ EXPECT_FALSE(query->pending());
- // Assigns and binds original service size texture ID.
- EXPECT_CALL(*gl_, DeleteTextures(1, _))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
- .Times(1)
+ GLsync kGlSync = reinterpret_cast<GLsync>(0xdeadbeef);
+ EXPECT_CALL(*gl_, Flush()).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, FenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0))
+ .WillOnce(Return(kGlSync))
.RetiresOnSaturation();
- memcpy(shared_memory_address_, mailbox, sizeof(mailbox));
- ConsumeTextureCHROMIUM consume_cmd;
- consume_cmd.Init(GL_TEXTURE_2D, kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(consume_cmd));
+ EndQueryEXT end_cmd;
+ end_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_TRUE(query->pending());
- // Texture is redefined.
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- EXPECT_EQ(3, width);
- EXPECT_EQ(1, height);
- EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
- EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
- EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
-
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
- EXPECT_EQ(2, width);
- EXPECT_EQ(4, height);
- EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format));
- EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
- EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
-
- // Service ID is restored.
- EXPECT_EQ(kServiceTextureId, texture->service_id());
-}
+ EXPECT_CALL(*gl_, ClientWaitSync(kGlSync, _, _))
+ .WillOnce(Return(GL_TIMEOUT_EXPIRED))
+ .RetiresOnSaturation();
+ bool process_success = query_manager->ProcessPendingQueries();
+ EXPECT_TRUE(process_success);
+ EXPECT_TRUE(query->pending());
+
+ EXPECT_CALL(*gl_, ClientWaitSync(kGlSync, _, _))
+ .WillOnce(Return(GL_ALREADY_SIGNALED))
+ .RetiresOnSaturation();
+ process_success = query_manager->ProcessPendingQueries();
-TEST_F(GLES2DecoderTest, CanChangeSurface) {
- scoped_refptr<GLSurfaceMock> other_surface(new GLSurfaceMock);
- EXPECT_CALL(*other_surface.get(), GetBackingFrameBufferObject()).
- WillOnce(Return(7));
- EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER_EXT, 7));
+ EXPECT_TRUE(process_success);
+ EXPECT_FALSE(query->pending());
+ QuerySync* sync = static_cast<QuerySync*>(shared_memory_address_);
+ EXPECT_EQ(static_cast<GLenum>(0), static_cast<GLenum>(sync->result));
- decoder_->SetSurface(other_surface);
+ EXPECT_CALL(*gl_, DeleteSync(kGlSync)).Times(1).RetiresOnSaturation();
+ ResetDecoder();
}
-TEST_F(GLES2DecoderTest, IsEnabledReturnsCachedValue) {
+TEST_P(GLES2DecoderTest, IsEnabledReturnsCachedValue) {
// NOTE: There are no expectations because no GL functions should be
// called for DEPTH_TEST or STENCIL_TEST
static const GLenum kStates[] = {
- GL_DEPTH_TEST,
- GL_STENCIL_TEST,
+ GL_DEPTH_TEST, GL_STENCIL_TEST,
};
for (size_t ii = 0; ii < arraysize(kStates); ++ii) {
Enable enable_cmd;
@@ -7471,732 +933,18 @@ TEST_F(GLES2DecoderTest, IsEnabledReturnsCachedValue) {
}
}
-TEST_F(GLES2DecoderManualInitTest, DepthTextureBadArgs) {
- InitDecoder(
- "GL_ANGLE_depth_texture", // extensions
- false, // has alpha
- true, // has depth
- true, // has stencil
- false, // request alpha
- true, // request depth
- true, // request stencil
- true); // bind generates resource
-
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- // Check trying to upload data fails.
- TexImage2D tex_cmd;
- tex_cmd.Init(
- GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
- 1, 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
- kSharedMemoryId, kSharedMemoryOffset);
- EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- // Try level > 0.
- tex_cmd.Init(
- GL_TEXTURE_2D, 1, GL_DEPTH_COMPONENT,
- 1, 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- // Make a 1 pixel depth texture.
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
- 1, 1, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, 0);
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // Check that trying to update it fails.
- TexSubImage2D tex_sub_cmd;
- tex_sub_cmd.Init(
- GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
- kSharedMemoryId, kSharedMemoryOffset, GL_FALSE);
- EXPECT_EQ(error::kNoError, ExecuteCmd(tex_sub_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // Check that trying to CopyTexImage2D fails
- CopyTexImage2D copy_tex_cmd;
- copy_tex_cmd.Init(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, 1, 1, 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(copy_tex_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-
- // Check that trying to CopyTexSubImage2D fails
- CopyTexSubImage2D copy_sub_cmd;
- copy_sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(copy_sub_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, GenerateMipmapDepthTexture) {
- InitDecoder(
- "GL_ANGLE_depth_texture", // extensions
- false, // has alpha
- true, // has depth
- true, // has stencil
- false, // request alpha
- true, // request depth
- true, // request stencil
- true); // bind generates resource
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
- 2, 2, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
- 0, 0);
- GenerateMipmap cmd;
- cmd.Init(GL_TEXTURE_2D);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, DrawClearsDepthTexture) {
- InitDecoder(
- "GL_ANGLE_depth_texture", // extensions
- true, // has alpha
- true, // has depth
- false, // has stencil
- true, // request alpha
- true, // request depth
- false, // request stencil
- true); // bind generates resource
-
- SetupDefaultProgram();
- SetupAllNeededVertexBuffers();
- const GLenum attachment = GL_DEPTH_ATTACHMENT;
- const GLenum target = GL_TEXTURE_2D;
- const GLint level = 0;
- DoBindTexture(target, client_texture_id_, kServiceTextureId);
-
- // Create a depth texture.
- DoTexImage2D(target, level, GL_DEPTH_COMPONENT, 1, 1, 0,
- GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0, 0);
-
- EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, _))
- .Times(1)
- .RetiresOnSaturation();
-
- EXPECT_CALL(*gl_, FramebufferTexture2DEXT(
- GL_DRAW_FRAMEBUFFER_EXT, attachment, target, kServiceTextureId, level))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT))
- .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
- .RetiresOnSaturation();
-
- EXPECT_CALL(*gl_, ClearStencil(0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, StencilMask(-1))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ClearDepth(1.0f))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DepthMask(true))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, Disable(GL_SCISSOR_TEST))
- .Times(1)
- .RetiresOnSaturation();
-
- EXPECT_CALL(*gl_, Clear(GL_DEPTH_BUFFER_BIT))
- .Times(1)
- .RetiresOnSaturation();
-
- SetupExpectationsForRestoreClearState(
- 0.0f, 0.0f, 0.0f, 0.0f, 0, 1.0f, false);
-
- EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0))
- .Times(1)
- .RetiresOnSaturation();
-
- SetupExpectationsForApplyingDefaultDirtyState();
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderWithShaderTest, BindUniformLocationCHROMIUM) {
- const GLint kLocation = 2;
- const char* kName = "testing";
- const uint32 kNameSize = strlen(kName);
- const char* kBadName1 = "gl_testing";
- const uint32 kBadName1Size = strlen(kBadName1);
- const char* kBadName2 = "testing[1]";
- const uint32 kBadName2Size = strlen(kBadName2);
- memcpy(shared_memory_address_, kName, kNameSize);
- BindUniformLocationCHROMIUM cmd;
- cmd.Init(client_program_id_, kLocation, kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- // check negative location
- memcpy(shared_memory_address_, kName, kNameSize);
- cmd.Init(client_program_id_, -1, kSharedMemoryId, kSharedMemoryOffset,
- kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- // check highest location
- memcpy(shared_memory_address_, kName, kNameSize);
- GLint kMaxLocation =
- (kMaxFragmentUniformVectors + kMaxVertexUniformVectors) * 4 - 1;
- cmd.Init(client_program_id_, kMaxLocation, kSharedMemoryId,
- kSharedMemoryOffset, kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- // check too high location
- memcpy(shared_memory_address_, kName, kNameSize);
- cmd.Init(client_program_id_, kMaxLocation + 1, kSharedMemoryId,
- kSharedMemoryOffset, kNameSize);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
- // check bad name "gl_..."
- memcpy(shared_memory_address_, kBadName1, kBadName1Size);
- cmd.Init(client_program_id_, kLocation, kSharedMemoryId, kSharedMemoryOffset,
- kBadName1Size);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- // check bad name "name[1]" non zero
- memcpy(shared_memory_address_, kBadName2, kBadName2Size);
- cmd.Init(client_program_id_, kLocation, kSharedMemoryId, kSharedMemoryOffset,
- kBadName2Size);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
- public:
- GLES2DecoderVertexArraysOESTest() { }
-
- bool vertex_array_deleted_manually_;
-
- virtual void SetUp() {
- InitDecoder(
- "GL_OES_vertex_array_object", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- SetupDefaultProgram();
-
- AddExpectationsForGenVertexArraysOES();
- GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
-
- vertex_array_deleted_manually_ = false;
- }
-
- virtual void TearDown() {
- // This should only be set if the test handled deletion of the vertex array
- // itself. Necessary because vertex_array_objects are not sharable, and thus
- // not managed in the ContextGroup, meaning they will be destroyed during
- // test tear down
- if (!vertex_array_deleted_manually_) {
- AddExpectationsForDeleteVertexArraysOES();
- }
-
- GLES2DecoderWithShaderTest::TearDown();
- }
-
- void GenVertexArraysOESValidArgs() {
- AddExpectationsForGenVertexArraysOES();
- GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
- GenVertexArraysOES cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(GetVertexArrayInfo(kNewClientId) != NULL);
- AddExpectationsForDeleteVertexArraysOES();
- }
-
- void GenVertexArraysOESInvalidArgs() {
- EXPECT_CALL(*gl_, GenVertexArraysOES(_, _)).Times(0);
- GetSharedMemoryAs<GLuint*>()[0] = client_vertexarray_id_;
- GenVertexArraysOES cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
- }
-
- void GenVertexArraysOESImmediateValidArgs() {
- AddExpectationsForGenVertexArraysOES();
- GenVertexArraysOESImmediate* cmd =
- GetImmediateAs<GenVertexArraysOESImmediate>();
- GLuint temp = kNewClientId;
- cmd->Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(*cmd, sizeof(temp)));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(GetVertexArrayInfo(kNewClientId) != NULL);
- AddExpectationsForDeleteVertexArraysOES();
- }
-
- void GenVertexArraysOESImmediateInvalidArgs() {
- EXPECT_CALL(*gl_, GenVertexArraysOES(_, _)).Times(0);
- GenVertexArraysOESImmediate* cmd =
- GetImmediateAs<GenVertexArraysOESImmediate>();
- cmd->Init(1, &client_vertexarray_id_);
- EXPECT_EQ(error::kInvalidArguments,
- ExecuteImmediateCmd(*cmd, sizeof(&client_vertexarray_id_)));
- }
-
- void DeleteVertexArraysOESValidArgs() {
- AddExpectationsForDeleteVertexArraysOES();
- GetSharedMemoryAs<GLuint*>()[0] = client_vertexarray_id_;
- DeleteVertexArraysOES cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetVertexArrayInfo(client_vertexarray_id_) == NULL);
- vertex_array_deleted_manually_ = true;
- }
-
- void DeleteVertexArraysOESInvalidArgs() {
- GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
- DeleteVertexArraysOES cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- }
-
- void DeleteVertexArraysOESImmediateValidArgs() {
- AddExpectationsForDeleteVertexArraysOES();
- DeleteVertexArraysOESImmediate& cmd =
- *GetImmediateAs<DeleteVertexArraysOESImmediate>();
- cmd.Init(1, &client_vertexarray_id_);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(client_vertexarray_id_)));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetVertexArrayInfo(client_vertexarray_id_) == NULL);
- vertex_array_deleted_manually_ = true;
- }
-
- void DeleteVertexArraysOESImmediateInvalidArgs() {
- DeleteVertexArraysOESImmediate& cmd =
- *GetImmediateAs<DeleteVertexArraysOESImmediate>();
- GLuint temp = kInvalidClientId;
- cmd.Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
- }
-
- void IsVertexArrayOESValidArgs() {
- IsVertexArrayOES cmd;
- cmd.Init(client_vertexarray_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- }
-
- void IsVertexArrayOESInvalidArgsBadSharedMemoryId() {
- IsVertexArrayOES cmd;
- cmd.Init(
- client_vertexarray_id_, kInvalidSharedMemoryId, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- cmd.Init(
- client_vertexarray_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- }
-
- void BindVertexArrayOESValidArgs() {
- AddExpectationsForBindVertexArrayOES();
- BindVertexArrayOES cmd;
- cmd.Init(client_vertexarray_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- }
-
- void BindVertexArrayOESValidArgsNewId() {
- BindVertexArrayOES cmd;
- cmd.Init(kNewClientId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- }
-};
-
-class GLES2DecoderEmulatedVertexArraysOESTest
- : public GLES2DecoderVertexArraysOESTest {
- public:
- GLES2DecoderEmulatedVertexArraysOESTest() { }
-
- virtual void SetUp() {
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- SetupDefaultProgram();
-
- AddExpectationsForGenVertexArraysOES();
- GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
-
- vertex_array_deleted_manually_ = false;
- }
-};
-
-// Test vertex array objects with native support
-TEST_F(GLES2DecoderVertexArraysOESTest, GenVertexArraysOESValidArgs) {
- GenVertexArraysOESValidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, GenVertexArraysOESValidArgs) {
- GenVertexArraysOESValidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest, GenVertexArraysOESInvalidArgs) {
- GenVertexArraysOESInvalidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, ) {
- GenVertexArraysOESInvalidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest, GenVertexArraysOESImmediateValidArgs) {
- GenVertexArraysOESImmediateValidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
- GenVertexArraysOESImmediateValidArgs) {
- GenVertexArraysOESImmediateValidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest,
- GenVertexArraysOESImmediateInvalidArgs) {
- GenVertexArraysOESImmediateInvalidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
- GenVertexArraysOESImmediateInvalidArgs) {
- GenVertexArraysOESImmediateInvalidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest, DeleteVertexArraysOESValidArgs) {
- DeleteVertexArraysOESValidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
- DeleteVertexArraysOESValidArgs) {
- DeleteVertexArraysOESValidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest, DeleteVertexArraysOESInvalidArgs) {
- DeleteVertexArraysOESInvalidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
- DeleteVertexArraysOESInvalidArgs) {
- DeleteVertexArraysOESInvalidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest,
- DeleteVertexArraysOESImmediateValidArgs) {
- DeleteVertexArraysOESImmediateValidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
- DeleteVertexArraysOESImmediateValidArgs) {
- DeleteVertexArraysOESImmediateValidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest,
- DeleteVertexArraysOESImmediateInvalidArgs) {
- DeleteVertexArraysOESImmediateInvalidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
- DeleteVertexArraysOESImmediateInvalidArgs) {
- DeleteVertexArraysOESImmediateInvalidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest, IsVertexArrayOESValidArgs) {
- IsVertexArrayOESValidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, IsVertexArrayOESValidArgs) {
- IsVertexArrayOESValidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest,
- IsVertexArrayOESInvalidArgsBadSharedMemoryId) {
- IsVertexArrayOESInvalidArgsBadSharedMemoryId();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
- IsVertexArrayOESInvalidArgsBadSharedMemoryId) {
- IsVertexArrayOESInvalidArgsBadSharedMemoryId();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest, BindVertexArrayOESValidArgs) {
- BindVertexArrayOESValidArgs();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, BindVertexArrayOESValidArgs) {
- BindVertexArrayOESValidArgs();
-}
-
-TEST_F(GLES2DecoderVertexArraysOESTest, BindVertexArrayOESValidArgsNewId) {
- BindVertexArrayOESValidArgsNewId();
-}
-TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
- BindVertexArrayOESValidArgsNewId) {
- BindVertexArrayOESValidArgsNewId();
-}
-
-TEST_F(GLES2DecoderTest, BindTexImage2DCHROMIUM) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- TextureRef* texture_ref = group().texture_manager()->GetTexture(
- client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_EQ(kServiceTextureId, texture->service_id());
-
- group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1);
- EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL);
-
- GLsizei width;
- GLsizei height;
- GLenum type;
- GLenum internal_format;
-
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- EXPECT_EQ(3, width);
- EXPECT_EQ(1, height);
- EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
- EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
- EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
- EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
-
- // Bind image to texture.
- // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
- bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- // Image should now be set.
- EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
-
- // Define new texture image.
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- // Image should no longer be set.
- EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
-}
-
-TEST_F(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- 0, 0);
- TextureRef* texture_ref = group().texture_manager()->GetTexture(
- client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_EQ(kServiceTextureId, texture->service_id());
-
- group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1);
- EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL);
-
- GLsizei width;
- GLsizei height;
- GLenum type;
- GLenum internal_format;
-
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- EXPECT_EQ(3, width);
- EXPECT_EQ(1, height);
- EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
- EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
- EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
- EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
-
- // Bind image to texture.
- // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
- bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- // Image should now be set.
- EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
-
- // Release image from texture.
- // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd;
- release_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(release_tex_image_2d_cmd));
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- // Image should no longer be set.
- EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
-}
-
-class MockGLImage : public gfx::GLImage {
- public:
- MockGLImage() {}
-
- // Overridden from gfx::GLImage:
- MOCK_METHOD0(Destroy, void());
- MOCK_METHOD0(GetSize, gfx::Size());
- MOCK_METHOD1(BindTexImage, bool(unsigned));
- MOCK_METHOD1(ReleaseTexImage, void(unsigned));
- MOCK_METHOD0(WillUseTexImage, void());
- MOCK_METHOD0(DidUseTexImage, void());
-
- protected:
- virtual ~MockGLImage() {}
-};
-
-TEST_F(GLES2DecoderWithShaderTest, UseTexImage) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
-
- TextureRef* texture_ref = group().texture_manager()->GetTexture(
- client_texture_id_);
- ASSERT_TRUE(texture_ref != NULL);
- Texture* texture = texture_ref->texture();
- EXPECT_EQ(kServiceTextureId, texture->service_id());
-
- const int32 kImageId = 1;
- scoped_refptr<MockGLImage> image(new MockGLImage);
- group().image_manager()->AddImage(image.get(), kImageId);
-
- // Bind image to texture.
- EXPECT_CALL(*image, BindTexImage(GL_TEXTURE_2D))
- .Times(1)
- .WillOnce(Return(true))
- .RetiresOnSaturation();
- EXPECT_CALL(*image, GetSize())
- .Times(1)
- .WillOnce(Return(gfx::Size(1, 1)))
- .RetiresOnSaturation();
- // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
- bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, kImageId);
- EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
-
- AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
- SetupExpectationsForApplyingDefaultDirtyState();
-
- // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
- .Times(3)
- .RetiresOnSaturation();
- EXPECT_CALL(*image, WillUseTexImage())
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*image, DidUseTexImage())
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
- .Times(1)
- .RetiresOnSaturation();
- DrawArrays cmd;
- cmd.Init(GL_TRIANGLES, 0, kNumVertices);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
- .Times(2)
- .RetiresOnSaturation();
- // Image will be 'in use' as long as bound to a framebuffer.
- EXPECT_CALL(*image, WillUseTexImage())
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferTexture2DEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kServiceTextureId, 0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- FramebufferTexture2D fbtex_cmd;
- fbtex_cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
- 0);
- EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-
- // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- kServiceRenderbufferId))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
- .Times(2)
- .RetiresOnSaturation();
- // Image should no longer be 'in use' after being unbound from framebuffer.
- EXPECT_CALL(*image, DidUseTexImage())
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- FramebufferRenderbuffer fbrb_cmd;
- fbrb_cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
-}
-
-TEST_F(GLES2DecoderManualInitTest, GpuMemoryManagerCHROMIUM) {
- InitDecoder(
- "GL_ARB_texture_rectangle", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+TEST_P(GLES2DecoderManualInitTest, GpuMemoryManagerCHROMIUM) {
+ InitState init;
+ init.extensions = "GL_ARB_texture_rectangle";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
Texture* texture = GetTexture(client_texture_id_)->texture();
EXPECT_TRUE(texture != NULL);
EXPECT_TRUE(texture->pool() == GL_TEXTURE_POOL_UNMANAGED_CHROMIUM);
- DoBindTexture(
- GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
TexParameteri cmd;
cmd.Init(GL_TEXTURE_2D,
@@ -8213,258 +961,11 @@ TEST_F(GLES2DecoderManualInitTest, GpuMemoryManagerCHROMIUM) {
EXPECT_TRUE(texture->pool() == GL_TEXTURE_POOL_MANAGED_CHROMIUM);
- cmd.Init(GL_TEXTURE_2D,
- GL_TEXTURE_POOL_CHROMIUM,
- GL_NONE);
+ cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_POOL_CHROMIUM, GL_NONE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransfers) {
- InitDecoder(
- "GL_CHROMIUM_async_pixel_transfers", // extensions
- false, false, false, // has alpha/depth/stencil
- false, false, false, // request alpha/depth/stencil
- true); // bind generates resource
-
- // Set up the texture.
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- TextureRef* texture_ref = GetTexture(client_texture_id_);
- Texture* texture = texture_ref->texture();
-
- // Set a mock Async delegate
- StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
- new StrictMock<gpu::MockAsyncPixelTransferManager>;
- manager->Initialize(group().texture_manager());
- decoder_->SetAsyncPixelTransferManagerForTest(manager);
- StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
-
- // Tex(Sub)Image2D upload commands.
- AsyncTexImage2DCHROMIUM teximage_cmd;
- teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
- AsyncTexSubImage2DCHROMIUM texsubimage_cmd;
- texsubimage_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 8, 8, GL_RGBA,
- GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
- WaitAsyncTexImage2DCHROMIUM wait_cmd;
- wait_cmd.Init(GL_TEXTURE_2D);
-
- // No transfer state exists initially.
- EXPECT_FALSE(
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
-
- base::Closure bind_callback;
-
- // AsyncTexImage2D
- {
- // Create transfer state since it doesn't exist.
- EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
- .WillOnce(Return(
- delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
- .RetiresOnSaturation();
- EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _))
- .WillOnce(SaveArg<2>(&bind_callback))
- .RetiresOnSaturation();
- // Command succeeds.
- EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(
- delegate,
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
- EXPECT_TRUE(texture->IsImmutable());
- // The texture is safe but the level has not been defined yet.
- EXPECT_TRUE(texture->SafeToRenderFrom());
- GLsizei width, height;
- EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- }
- {
- // Async redefinitions are not allowed!
- // Command fails.
- EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(
- delegate,
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
- EXPECT_TRUE(texture->IsImmutable());
- EXPECT_TRUE(texture->SafeToRenderFrom());
- }
-
- // Binding/defining of the async transfer
- {
- // TODO(epenner): We should check that the manager gets the
- // BindCompletedAsyncTransfers() call, which is required to
- // guarantee the delegate calls the bind callback.
-
- // Simulate the bind callback from the delegate.
- bind_callback.Run();
-
- // After the bind callback is run, the texture is safe,
- // and has the right size etc.
- EXPECT_TRUE(texture->SafeToRenderFrom());
- GLsizei width, height;
- EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
- EXPECT_EQ(width, 8);
- EXPECT_EQ(height, 8);
- }
-
- // AsyncTexSubImage2D
- decoder_->GetAsyncPixelTransferManager()
- ->ClearPixelTransferDelegateForTest(texture_ref);
- texture->SetImmutable(false);
- {
- // Create transfer state since it doesn't exist.
- EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
- .WillOnce(Return(
- delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
- .RetiresOnSaturation();
- EXPECT_CALL(*delegate, AsyncTexSubImage2D(_, _))
- .RetiresOnSaturation();
- // Command succeeds.
- EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(
- delegate,
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
- EXPECT_TRUE(texture->IsImmutable());
- EXPECT_TRUE(texture->SafeToRenderFrom());
- }
- {
- // No transfer is in progress.
- EXPECT_CALL(*delegate, TransferIsInProgress())
- .WillOnce(Return(false)) // texSubImage validation
- .WillOnce(Return(false)) // async validation
- .RetiresOnSaturation();
- EXPECT_CALL(*delegate, AsyncTexSubImage2D(_, _))
- .RetiresOnSaturation();
- // Command succeeds.
- EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(
- delegate,
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
- EXPECT_TRUE(texture->IsImmutable());
- EXPECT_TRUE(texture->SafeToRenderFrom());
- }
- {
- // A transfer is still in progress!
- EXPECT_CALL(*delegate, TransferIsInProgress())
- .WillOnce(Return(true))
- .RetiresOnSaturation();
- // No async call, command fails.
- EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- EXPECT_EQ(
- delegate,
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
- EXPECT_TRUE(texture->IsImmutable());
- EXPECT_TRUE(texture->SafeToRenderFrom());
- }
-
- // Delete delegate on DeleteTexture.
- {
- EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
- DoDeleteTexture(client_texture_id_, kServiceTextureId);
- EXPECT_FALSE(
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
- delegate = NULL;
- }
-
- // WaitAsyncTexImage2D
- {
- // Get a fresh texture since the existing texture cannot be respecified
- // asynchronously and AsyncTexSubImage2D does not involved binding.
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgumentPointee<1>(kServiceTextureId));
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- texture_ref = GetTexture(client_texture_id_);
- texture = texture_ref->texture();
- texture->SetImmutable(false);
- // Create transfer state since it doesn't exist.
- EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
- .WillOnce(Return(
- delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
- .RetiresOnSaturation();
- EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _))
- .RetiresOnSaturation();
- // Start async transfer.
- EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_EQ(
- delegate,
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
-
- EXPECT_TRUE(texture->IsImmutable());
- // Wait for completion.
- EXPECT_CALL(*delegate, WaitForTransferCompletion());
- EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
- EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- }
-}
-
-TEST_F(GLES2DecoderManualInitTest, AsyncPixelTransferManager) {
- InitDecoder(
- "GL_CHROMIUM_async_pixel_transfers", // extensions
- false, false, false, // has alpha/depth/stencil
- false, false, false, // request alpha/depth/stencil
- true); // bind generates resource
-
- // Set up the texture.
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- TextureRef* texture_ref = GetTexture(client_texture_id_);
-
- // Set a mock Async delegate.
- StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
- new StrictMock<gpu::MockAsyncPixelTransferManager>;
- manager->Initialize(group().texture_manager());
- decoder_->SetAsyncPixelTransferManagerForTest(manager);
- StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
-
- AsyncTexImage2DCHROMIUM teximage_cmd;
- teximage_cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, kSharedMemoryId, kSharedMemoryOffset);
-
- // No transfer delegate exists initially.
- EXPECT_FALSE(
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
-
- // Create delegate on AsyncTexImage2D.
- {
- EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
- .WillOnce(Return(
- delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
- .RetiresOnSaturation();
- EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation();
-
- // Command succeeds.
- EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- }
-
- // Delegate is cached.
- EXPECT_EQ(delegate,
- decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
- texture_ref));
-
- // Delete delegate on manager teardown.
- {
- EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
- decoder_->ResetAsyncPixelTransferManagerForTest();
-
- // Texture ref still valid.
- EXPECT_EQ(texture_ref, GetTexture(client_texture_id_));
- }
-}
-
namespace {
class SizeOnlyMemoryTracker : public MemoryTracker {
@@ -8476,15 +977,15 @@ class SizeOnlyMemoryTracker : public MemoryTracker {
const size_t kInitialManagedPoolSize = 0;
pool_infos_[MemoryTracker::kUnmanaged].initial_size =
kInitialUnmanagedPoolSize;
- pool_infos_[MemoryTracker::kManaged].initial_size =
- kInitialManagedPoolSize;
+ pool_infos_[MemoryTracker::kManaged].initial_size = kInitialManagedPoolSize;
}
// Ensure a certain amount of GPU memory is free. Returns true on success.
MOCK_METHOD1(EnsureGPUMemoryAvailable, bool(size_t size_needed));
- virtual void TrackMemoryAllocatedChange(
- size_t old_size, size_t new_size, Pool pool) {
+ virtual void TrackMemoryAllocatedChange(size_t old_size,
+ size_t new_size,
+ Pool pool) {
PoolInfo& info = pool_infos_[pool];
info.size += new_size - old_size;
}
@@ -8495,13 +996,9 @@ class SizeOnlyMemoryTracker : public MemoryTracker {
}
private:
- virtual ~SizeOnlyMemoryTracker() {
- }
+ virtual ~SizeOnlyMemoryTracker() {}
struct PoolInfo {
- PoolInfo()
- : initial_size(0),
- size(0) {
- }
+ PoolInfo() : initial_size(0), size(0) {}
size_t initial_size;
size_t size;
};
@@ -8510,78 +1007,90 @@ class SizeOnlyMemoryTracker : public MemoryTracker {
} // anonymous namespace.
-TEST_F(GLES2DecoderManualInitTest, MemoryTrackerInitialSize) {
+TEST_P(GLES2DecoderManualInitTest, MemoryTrackerInitialSize) {
scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
new SizeOnlyMemoryTracker();
set_memory_tracker(memory_tracker.get());
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
// Expect that initial size - size is 0.
EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
EXPECT_EQ(0u, memory_tracker->GetPoolSize(MemoryTracker::kManaged));
}
-TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexImage2D) {
+TEST_P(GLES2DecoderManualInitTest, MemoryTrackerTexImage2D) {
scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
new SizeOnlyMemoryTracker();
set_memory_tracker(memory_tracker.get());
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
- .WillOnce(Return(true)).RetiresOnSaturation();
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
+ .WillOnce(Return(true))
+ .RetiresOnSaturation();
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 8,
+ 4,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(64))
- .WillOnce(Return(true)).RetiresOnSaturation();
- DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
+ .WillOnce(Return(true))
+ .RetiresOnSaturation();
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 4,
+ 4,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Check we get out of memory and no call to glTexImage2D if Ensure fails.
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(64))
- .WillOnce(Return(false)).RetiresOnSaturation();
+ .WillOnce(Return(false))
+ .RetiresOnSaturation();
TexImage2D cmd;
- cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE,
- kSharedMemoryId, kSharedMemoryOffset);
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 4,
+ 4,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
EXPECT_EQ(64u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
}
-TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexStorage2DEXT) {
+TEST_P(GLES2DecoderManualInitTest, MemoryTrackerTexStorage2DEXT) {
scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
new SizeOnlyMemoryTracker();
set_memory_tracker(memory_tracker.get());
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
// Check we get out of memory and no call to glTexStorage2DEXT
// if Ensure fails.
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
- .WillOnce(Return(false)).RetiresOnSaturation();
+ .WillOnce(Return(false))
+ .RetiresOnSaturation();
TexStorage2DEXT cmd;
cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -8589,7 +1098,7 @@ TEST_F(GLES2DecoderManualInitTest, MemoryTrackerTexStorage2DEXT) {
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
}
-TEST_F(GLES2DecoderManualInitTest, MemoryTrackerCopyTexImage2D) {
+TEST_P(GLES2DecoderManualInitTest, MemoryTrackerCopyTexImage2D) {
GLenum target = GL_TEXTURE_2D;
GLint level = 0;
GLenum internal_format = GL_RGBA;
@@ -8599,62 +1108,57 @@ TEST_F(GLES2DecoderManualInitTest, MemoryTrackerCopyTexImage2D) {
scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
new SizeOnlyMemoryTracker();
set_memory_tracker(memory_tracker.get());
- InitDecoder(
- "", // extensions
- true, // has alpha
- false, // has depth
- false, // has stencil
- true, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.request_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
- .WillOnce(Return(true)).RetiresOnSaturation();
+ .WillOnce(Return(true))
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, CopyTexImage2D(
- target, level, internal_format, 0, 0, width, height, border))
+ EXPECT_CALL(*gl_,
+ CopyTexImage2D(
+ target, level, internal_format, 0, 0, width, height, border))
.Times(1)
.RetiresOnSaturation();
CopyTexImage2D cmd;
- cmd.Init(target, level, internal_format, 0, 0, width, height, border);
+ cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Check we get out of memory and no call to glCopyTexImage2D if Ensure fails.
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
- .WillOnce(Return(false)).RetiresOnSaturation();
+ .WillOnce(Return(false))
+ .RetiresOnSaturation();
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
}
-TEST_F(GLES2DecoderManualInitTest, MemoryTrackerRenderbufferStorage) {
+TEST_P(GLES2DecoderManualInitTest, MemoryTrackerRenderbufferStorage) {
scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
new SizeOnlyMemoryTracker();
set_memory_tracker(memory_tracker.get());
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
- .WillOnce(Return(true)).RetiresOnSaturation();
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(
- GL_RENDERBUFFER, GL_RGBA, 8, 4))
+ .WillOnce(Return(true))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, RenderbufferStorageEXT(GL_RENDERBUFFER, GL_RGBA, 8, 4))
.Times(1)
.RetiresOnSaturation();
RenderbufferStorage cmd;
@@ -8665,33 +1169,29 @@ TEST_F(GLES2DecoderManualInitTest, MemoryTrackerRenderbufferStorage) {
// Check we get out of memory and no call to glRenderbufferStorage if Ensure
// fails.
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
- .WillOnce(Return(false)).RetiresOnSaturation();
+ .WillOnce(Return(false))
+ .RetiresOnSaturation();
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kUnmanaged));
}
-TEST_F(GLES2DecoderManualInitTest, MemoryTrackerBufferData) {
+TEST_P(GLES2DecoderManualInitTest, MemoryTrackerBufferData) {
scoped_refptr<SizeOnlyMemoryTracker> memory_tracker =
new SizeOnlyMemoryTracker();
set_memory_tracker(memory_tracker.get());
- InitDecoder(
- "", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- true); // bind generates resource
- DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_,
- kServiceBufferId);
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
- .WillOnce(Return(true)).RetiresOnSaturation();
+ .WillOnce(Return(true))
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER, 128, _, GL_STREAM_DRAW))
.Times(1)
.RetiresOnSaturation();
@@ -8703,206 +1203,96 @@ TEST_F(GLES2DecoderManualInitTest, MemoryTrackerBufferData) {
// Check we get out of memory and no call to glBufferData if Ensure
// fails.
EXPECT_CALL(*memory_tracker.get(), EnsureGPUMemoryAvailable(128))
- .WillOnce(Return(false)).RetiresOnSaturation();
+ .WillOnce(Return(false))
+ .RetiresOnSaturation();
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
EXPECT_EQ(128u, memory_tracker->GetPoolSize(MemoryTracker::kManaged));
}
-TEST_F(GLES2DecoderTest, DrawBuffersEXTImmediateSuccceeds) {
- const GLsizei count = 1;
- const GLenum bufs[] = { GL_COLOR_ATTACHMENT0 };
- DrawBuffersEXTImmediate& cmd =
- *GetImmediateAs<DrawBuffersEXTImmediate>();
- cmd.Init(count, bufs);
-
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- EXPECT_CALL(*gl_, DrawBuffersARB(count, _))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(bufs)));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, DrawBuffersEXTImmediateFails) {
- const GLsizei count = 1;
- const GLenum bufs[] = { GL_COLOR_ATTACHMENT1_EXT };
- DrawBuffersEXTImmediate& cmd =
- *GetImmediateAs<DrawBuffersEXTImmediate>();
- cmd.Init(count, bufs);
-
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(bufs)));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest, DrawBuffersEXTImmediateBackbuffer) {
- const GLsizei count = 1;
- const GLenum bufs[] = { GL_BACK };
- DrawBuffersEXTImmediate& cmd =
- *GetImmediateAs<DrawBuffersEXTImmediate>();
- cmd.Init(count, bufs);
-
- DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
- kServiceFramebufferId);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(bufs)));
- EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+TEST_P(GLES2DecoderManualInitTest, ImmutableCopyTexImage2D) {
+ const GLenum kTarget = GL_TEXTURE_2D;
+ const GLint kLevel = 0;
+ const GLenum kInternalFormat = GL_RGBA;
+ const GLenum kSizedInternalFormat = GL_RGBA8;
+ const GLsizei kWidth = 4;
+ const GLsizei kHeight = 8;
+ const GLint kBorder = 0;
+ InitState init;
+ init.extensions = "GL_EXT_texture_storage";
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.request_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0); // unbind
+ // CopyTexImage2D will call arbitrary amount of GetErrors.
+ EXPECT_CALL(*gl_, GetError())
+ .Times(AtLeast(1));
- EXPECT_CALL(*gl_, DrawBuffersARB(count, _))
- .Times(1)
- .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ CopyTexImage2D(
+ kTarget, kLevel, kInternalFormat, 0, 0, kWidth, kHeight,
+ kBorder))
+ .Times(1);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(bufs)));
+ EXPECT_CALL(*gl_,
+ TexStorage2DEXT(
+ kTarget, kLevel, kSizedInternalFormat, kWidth, kHeight))
+ .Times(1);
+ CopyTexImage2D copy_cmd;
+ copy_cmd.Init(kTarget, kLevel, kInternalFormat, 0, 0, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(copy_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderManualInitTest, DiscardFramebufferEXT) {
- InitDecoder("GL_EXT_discard_framebuffer", // extensions
- false, // has alpha
- false, // has depth
- false, // has stencil
- false, // request alpha
- false, // request depth
- false, // request stencil
- false); // bind generates resource
-
- const GLenum target = GL_FRAMEBUFFER;
- const GLsizei count = 1;
- const GLenum attachments[] = { GL_COLOR_ATTACHMENT0 };
-
- SetupTexture();
- DoBindFramebuffer(
- GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- DoFramebufferTexture2D(GL_FRAMEBUFFER,
- GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D,
- client_texture_id_,
- kServiceTextureId,
- 0,
- GL_NO_ERROR);
- FramebufferManager* framebuffer_manager = group().framebuffer_manager();
- Framebuffer* framebuffer =
- framebuffer_manager->GetFramebuffer(client_framebuffer_id_);
- EXPECT_TRUE(framebuffer->IsCleared());
-
- EXPECT_CALL(*gl_, DiscardFramebufferEXT(target, count, _))
- .Times(1)
- .RetiresOnSaturation();
- DiscardFramebufferEXTImmediate& cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
- cmd.Init(target, count, attachments);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(attachments)));
+ TexStorage2DEXT storage_cmd;
+ storage_cmd.Init(kTarget, kLevel, kSizedInternalFormat, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(storage_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_FALSE(framebuffer->IsCleared());
-}
-TEST_F(GLES2DecoderTest, DiscardFramebufferEXTUnsupported) {
- const GLenum target = GL_FRAMEBUFFER;
- const GLsizei count = 1;
- const GLenum attachments[] = { GL_COLOR_EXT };
- DiscardFramebufferEXTImmediate& cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
- cmd.Init(target, count, attachments);
-
- // Should not result into a call into GL.
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(attachments)));
+ // This should not invoke CopyTexImage2D.
+ copy_cmd.Init(kTarget, kLevel, kInternalFormat, 0, 0, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(copy_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
}
-TEST_F(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) {
- CommandLine command_line(0, NULL);
- command_line.AppendSwitchASCII(
- switches::kGpuDriverBugWorkarounds,
- base::IntToString(gpu::CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE));
- InitDecoderWithCommandLine(
- "", // extensions
- true, // has alpha
- false, // has depth
- false, // has stencil
- true, // request alpha
- false, // request depth
- false, // request stencil
- true, // bind generates resource
- &command_line);
- {
- static AttribInfo attribs[] = {
- { kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location, },
- { kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location, },
- { kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location, },
- };
- static UniformInfo uniforms[] = {
- { kUniform1Name, kUniform1Size, kUniform1Type,
- kUniform1FakeLocation, kUniform1RealLocation,
- kUniform1DesiredLocation },
- { kUniform2Name, kUniform2Size, kUniform2Type,
- kUniform2FakeLocation, kUniform2RealLocation,
- kUniform2DesiredLocation },
- { kUniform3Name, kUniform3Size, kUniform3Type,
- kUniform3FakeLocation, kUniform3RealLocation,
- kUniform3DesiredLocation },
- };
- SetupShader(attribs, arraysize(attribs), uniforms, arraysize(uniforms),
- client_program_id_, kServiceProgramId,
- client_vertex_shader_id_, kServiceVertexShaderId,
- client_fragment_shader_id_, kServiceFragmentShaderId);
- TestHelper::SetupExpectationsForClearingUniforms(
- gl_.get(), uniforms, arraysize(uniforms));
- }
-
- {
- EXPECT_CALL(*gl_, UseProgram(kServiceProgramId))
- .Times(1)
- .RetiresOnSaturation();
- cmds::UseProgram cmd;
- cmd.Init(client_program_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- }
+TEST_P(GLES2DecoderTest, LoseContextCHROMIUMValidArgs) {
+ EXPECT_CALL(*mock_decoder_, LoseContext(GL_GUILTY_CONTEXT_RESET_ARB))
+ .Times(1);
+ cmds::LoseContextCHROMIUM cmd;
+ cmd.Init(GL_GUILTY_CONTEXT_RESET_ARB, GL_GUILTY_CONTEXT_RESET_ARB);
+ EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-// TODO(gman): Complete this test.
-// TEST_F(GLES2DecoderTest, CompressedTexImage2DGLError) {
-// }
-
-// TODO(gman): BufferData
-
-// TODO(gman): BufferDataImmediate
-
-// TODO(gman): BufferSubData
-
-// TODO(gman): BufferSubDataImmediate
-
-// TODO(gman): CompressedTexImage2D
-
-// TODO(gman): CompressedTexImage2DImmediate
-
-// TODO(gman): CompressedTexSubImage2DImmediate
-
-// TODO(gman): DeleteProgram
-
-// TODO(gman): DeleteShader
-
-// TODO(gman): PixelStorei
+TEST_P(GLES2DecoderTest, LoseContextCHROMIUMInvalidArgs0_0) {
+ EXPECT_CALL(*mock_decoder_, LoseContext(_))
+ .Times(0);
+ cmds::LoseContextCHROMIUM cmd;
+ cmd.Init(GL_NONE, GL_GUILTY_CONTEXT_RESET_ARB);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
-// TODO(gman): TexImage2D
+TEST_P(GLES2DecoderTest, LoseContextCHROMIUMInvalidArgs1_0) {
+ EXPECT_CALL(*mock_decoder_, LoseContext(_))
+ .Times(0);
+ cmds::LoseContextCHROMIUM cmd;
+ cmd.Init(GL_GUILTY_CONTEXT_RESET_ARB, GL_NONE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
-// TODO(gman): TexImage2DImmediate
+INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest, ::testing::Bool());
-// TODO(gman): TexSubImage2DImmediate
+INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderWithShaderTest, ::testing::Bool());
-// TODO(gman): UseProgram
+INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderManualInitTest, ::testing::Bool());
-// TODO(gman): SwapBuffers
+INSTANTIATE_TEST_CASE_P(Service,
+ GLES2DecoderRGBBackbufferTest,
+ ::testing::Bool());
} // namespace gles2
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.h
new file mode 100644
index 00000000000..fea20abba52
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.h
@@ -0,0 +1,80 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_H_
+#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_H_
+
+#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/service/buffer_manager.h"
+#include "gpu/command_buffer/service/cmd_buffer_engine.h"
+#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/framebuffer_manager.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h"
+#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/query_manager.h"
+#include "gpu/command_buffer/service/renderbuffer_manager.h"
+#include "gpu/command_buffer/service/shader_manager.h"
+#include "gpu/command_buffer/service/test_helper.h"
+#include "gpu/command_buffer/service/texture_manager.h"
+#include "gpu/command_buffer/service/vertex_array_manager.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_context_stub_with_extensions.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
+
+namespace base {
+class CommandLine;
+}
+
+namespace gpu {
+namespace gles2 {
+
+class GLES2DecoderTest : public GLES2DecoderTestBase {
+ public:
+ GLES2DecoderTest() {}
+
+ protected:
+ void CheckReadPixelsOutOfRange(GLint in_read_x,
+ GLint in_read_y,
+ GLsizei in_read_width,
+ GLsizei in_read_height,
+ bool init);
+};
+
+class GLES2DecoderWithShaderTest : public GLES2DecoderWithShaderTestBase {
+ public:
+ GLES2DecoderWithShaderTest() : GLES2DecoderWithShaderTestBase() {}
+
+ void CheckTextureChangesMarkFBOAsNotComplete(bool bound_fbo);
+ void CheckRenderbufferChangesMarkFBOAsNotComplete(bool bound_fbo);
+};
+
+class GLES2DecoderRGBBackbufferTest : public GLES2DecoderWithShaderTest {
+ public:
+ GLES2DecoderRGBBackbufferTest() {}
+
+ virtual void SetUp();
+};
+
+class GLES2DecoderManualInitTest : public GLES2DecoderWithShaderTest {
+ public:
+ GLES2DecoderManualInitTest() {}
+
+ // Override default setup so nothing gets setup.
+ virtual void SetUp();
+
+ void DirtyStateMaskTest(GLuint color_bits,
+ bool depth_mask,
+ GLuint front_stencil_mask,
+ GLuint back_stencil_mask);
+ void EnableDisableTest(GLenum cap, bool enable, bool expect_set);
+};
+
+} // namespace gles2
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_H_
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h
index ac8a8f206ef..3eb5acb7279 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_0_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by gles2_cmd_decoder_unittest_base.cc
@@ -35,50 +37,30 @@ void GLES2DecoderTestBase::SetupInitStateExpectations() {
EXPECT_CALL(*gl_, ClearColor(0.0f, 0.0f, 0.0f, 0.0f))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, ClearDepth(1.0f))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, ClearStencil(0))
- .Times(1)
- .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ClearDepth(1.0f)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ClearStencil(0)).Times(1).RetiresOnSaturation();
EXPECT_CALL(*gl_, ColorMask(true, true, true, true))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, CullFace(GL_BACK))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DepthFunc(GL_LESS))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DepthMask(true))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DepthRange(0.0f, 1.0f))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, FrontFace(GL_CCW))
- .Times(1)
- .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, CullFace(GL_BACK)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DepthFunc(GL_LESS)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DepthMask(true)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DepthRange(0.0f, 1.0f)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, FrontFace(GL_CCW)).Times(1).RetiresOnSaturation();
EXPECT_CALL(*gl_, Hint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, LineWidth(1.0f))
- .Times(1)
- .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, LineWidth(1.0f)).Times(1).RetiresOnSaturation();
EXPECT_CALL(*gl_, PixelStorei(GL_PACK_ALIGNMENT, 4))
.Times(1)
.RetiresOnSaturation();
EXPECT_CALL(*gl_, PixelStorei(GL_UNPACK_ALIGNMENT, 4))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, PolygonOffset(0.0f, 0.0f))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, SampleCoverage(1.0f, false))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(
- *gl_, Scissor(kViewportX, kViewportY, kViewportWidth, kViewportHeight))
+ EXPECT_CALL(*gl_, PolygonOffset(0.0f, 0.0f)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, SampleCoverage(1.0f, false)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ Scissor(kViewportX, kViewportY, kViewportWidth, kViewportHeight))
.Times(1)
.RetiresOnSaturation();
EXPECT_CALL(*gl_, StencilFuncSeparate(GL_FRONT, GL_ALWAYS, 0, 0xFFFFFFFFU))
@@ -99,10 +81,9 @@ void GLES2DecoderTestBase::SetupInitStateExpectations() {
EXPECT_CALL(*gl_, StencilOpSeparate(GL_BACK, GL_KEEP, GL_KEEP, GL_KEEP))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(
- *gl_, Viewport(kViewportX, kViewportY, kViewportWidth, kViewportHeight))
+ EXPECT_CALL(*gl_,
+ Viewport(kViewportX, kViewportY, kViewportWidth, kViewportHeight))
.Times(1)
.RetiresOnSaturation();
}
#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_0_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc
index 9c3d7339afe..10f6af17389 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1.cc
@@ -37,6 +37,8 @@ class GLES2DecoderTest1 : public GLES2DecoderTestBase {
GLES2DecoderTest1() { }
};
+INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest1, ::testing::Bool());
+
template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::GenerateMipmap, 0>(
bool valid) {
@@ -45,14 +47,6 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::GenerateMipmap, 0>(
GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE,
kSharedMemoryId, kSharedMemoryOffset);
if (valid) {
- EXPECT_CALL(*gl_, TexParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, TexParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR))
- .Times(1)
- .RetiresOnSaturation();
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -281,6 +275,26 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::GetVertexAttribiv, 0>(
}
};
+template <>
+void GLES2DecoderTestBase::SpecializedSetup<cmds::RenderbufferStorage, 0>(
+ bool valid) {
+ DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
+ kServiceRenderbufferId);
+ if (valid) {
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ RenderbufferStorageEXT(GL_RENDERBUFFER, _, 3, 4))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ }
+}
+
+
#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h"
} // namespace gles2
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
index d89779b1f3e..32e20d82720 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by gles2_cmd_decoder_unittest_1.cc
@@ -12,7 +14,7 @@
// TODO(gman): ActiveTexture
-TEST_F(GLES2DecoderTest1, AttachShaderValidArgs) {
+TEST_P(GLES2DecoderTest1, AttachShaderValidArgs) {
EXPECT_CALL(*gl_, AttachShader(kServiceProgramId, kServiceShaderId));
SpecializedSetup<cmds::AttachShader, 0>(true);
cmds::AttachShader cmd;
@@ -20,11 +22,9 @@ TEST_F(GLES2DecoderTest1, AttachShaderValidArgs) {
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-// TODO(gman): BindAttribLocation
-
// TODO(gman): BindAttribLocationBucket
-TEST_F(GLES2DecoderTest1, BindBufferValidArgs) {
+TEST_P(GLES2DecoderTest1, BindBufferValidArgs) {
EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kServiceBufferId));
SpecializedSetup<cmds::BindBuffer, 0>(true);
cmds::BindBuffer cmd;
@@ -33,10 +33,10 @@ TEST_F(GLES2DecoderTest1, BindBufferValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindBufferValidArgsNewId) {
+TEST_P(GLES2DecoderTest1, BindBufferValidArgsNewId) {
EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, kNewServiceId));
EXPECT_CALL(*gl_, GenBuffersARB(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId));
SpecializedSetup<cmds::BindBuffer, 0>(true);
cmds::BindBuffer cmd;
cmd.Init(GL_ARRAY_BUFFER, kNewClientId);
@@ -45,7 +45,7 @@ TEST_F(GLES2DecoderTest1, BindBufferValidArgsNewId) {
EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, BindBufferInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, BindBufferInvalidArgs0_0) {
EXPECT_CALL(*gl_, BindBuffer(_, _)).Times(0);
SpecializedSetup<cmds::BindBuffer, 0>(false);
cmds::BindBuffer cmd;
@@ -54,7 +54,7 @@ TEST_F(GLES2DecoderTest1, BindBufferInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindFramebufferValidArgs) {
+TEST_P(GLES2DecoderTest1, BindFramebufferValidArgs) {
EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kServiceFramebufferId));
SpecializedSetup<cmds::BindFramebuffer, 0>(true);
cmds::BindFramebuffer cmd;
@@ -63,10 +63,10 @@ TEST_F(GLES2DecoderTest1, BindFramebufferValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindFramebufferValidArgsNewId) {
+TEST_P(GLES2DecoderTest1, BindFramebufferValidArgsNewId) {
EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER, kNewServiceId));
EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId));
SpecializedSetup<cmds::BindFramebuffer, 0>(true);
cmds::BindFramebuffer cmd;
cmd.Init(GL_FRAMEBUFFER, kNewClientId);
@@ -75,7 +75,7 @@ TEST_F(GLES2DecoderTest1, BindFramebufferValidArgsNewId) {
EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, BindFramebufferInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, BindFramebufferInvalidArgs0_0) {
EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0);
SpecializedSetup<cmds::BindFramebuffer, 0>(false);
cmds::BindFramebuffer cmd;
@@ -84,7 +84,7 @@ TEST_F(GLES2DecoderTest1, BindFramebufferInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindFramebufferInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, BindFramebufferInvalidArgs0_1) {
EXPECT_CALL(*gl_, BindFramebufferEXT(_, _)).Times(0);
SpecializedSetup<cmds::BindFramebuffer, 0>(false);
cmds::BindFramebuffer cmd;
@@ -93,9 +93,9 @@ TEST_F(GLES2DecoderTest1, BindFramebufferInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindRenderbufferValidArgs) {
- EXPECT_CALL(
- *gl_, BindRenderbufferEXT(GL_RENDERBUFFER, kServiceRenderbufferId));
+TEST_P(GLES2DecoderTest1, BindRenderbufferValidArgs) {
+ EXPECT_CALL(*gl_,
+ BindRenderbufferEXT(GL_RENDERBUFFER, kServiceRenderbufferId));
SpecializedSetup<cmds::BindRenderbuffer, 0>(true);
cmds::BindRenderbuffer cmd;
cmd.Init(GL_RENDERBUFFER, client_renderbuffer_id_);
@@ -103,10 +103,10 @@ TEST_F(GLES2DecoderTest1, BindRenderbufferValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindRenderbufferValidArgsNewId) {
+TEST_P(GLES2DecoderTest1, BindRenderbufferValidArgsNewId) {
EXPECT_CALL(*gl_, BindRenderbufferEXT(GL_RENDERBUFFER, kNewServiceId));
EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId));
SpecializedSetup<cmds::BindRenderbuffer, 0>(true);
cmds::BindRenderbuffer cmd;
cmd.Init(GL_RENDERBUFFER, kNewClientId);
@@ -115,7 +115,7 @@ TEST_F(GLES2DecoderTest1, BindRenderbufferValidArgsNewId) {
EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, BindRenderbufferInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, BindRenderbufferInvalidArgs0_0) {
EXPECT_CALL(*gl_, BindRenderbufferEXT(_, _)).Times(0);
SpecializedSetup<cmds::BindRenderbuffer, 0>(false);
cmds::BindRenderbuffer cmd;
@@ -124,7 +124,7 @@ TEST_F(GLES2DecoderTest1, BindRenderbufferInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindTextureValidArgs) {
+TEST_P(GLES2DecoderTest1, BindTextureValidArgs) {
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId));
SpecializedSetup<cmds::BindTexture, 0>(true);
cmds::BindTexture cmd;
@@ -133,10 +133,10 @@ TEST_F(GLES2DecoderTest1, BindTextureValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindTextureValidArgsNewId) {
+TEST_P(GLES2DecoderTest1, BindTextureValidArgsNewId) {
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kNewServiceId));
EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId));
SpecializedSetup<cmds::BindTexture, 0>(true);
cmds::BindTexture cmd;
cmd.Init(GL_TEXTURE_2D, kNewClientId);
@@ -145,7 +145,7 @@ TEST_F(GLES2DecoderTest1, BindTextureValidArgsNewId) {
EXPECT_TRUE(GetTexture(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, BindTextureInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, BindTextureInvalidArgs0_0) {
EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0);
SpecializedSetup<cmds::BindTexture, 0>(false);
cmds::BindTexture cmd;
@@ -154,7 +154,7 @@ TEST_F(GLES2DecoderTest1, BindTextureInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BindTextureInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, BindTextureInvalidArgs0_1) {
EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0);
SpecializedSetup<cmds::BindTexture, 0>(false);
cmds::BindTexture cmd;
@@ -163,7 +163,7 @@ TEST_F(GLES2DecoderTest1, BindTextureInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendColorValidArgs) {
+TEST_P(GLES2DecoderTest1, BlendColorValidArgs) {
EXPECT_CALL(*gl_, BlendColor(1, 2, 3, 4));
SpecializedSetup<cmds::BlendColor, 0>(true);
cmds::BlendColor cmd;
@@ -172,7 +172,7 @@ TEST_F(GLES2DecoderTest1, BlendColorValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendEquationValidArgs) {
+TEST_P(GLES2DecoderTest1, BlendEquationValidArgs) {
EXPECT_CALL(*gl_, BlendEquation(GL_FUNC_SUBTRACT));
SpecializedSetup<cmds::BlendEquation, 0>(true);
cmds::BlendEquation cmd;
@@ -181,7 +181,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendEquationInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, BlendEquationInvalidArgs0_0) {
EXPECT_CALL(*gl_, BlendEquation(_)).Times(0);
SpecializedSetup<cmds::BlendEquation, 0>(false);
cmds::BlendEquation cmd;
@@ -190,7 +190,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendEquationInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, BlendEquationInvalidArgs0_1) {
EXPECT_CALL(*gl_, BlendEquation(_)).Times(0);
SpecializedSetup<cmds::BlendEquation, 0>(false);
cmds::BlendEquation cmd;
@@ -199,7 +199,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendEquationSeparateValidArgs) {
+TEST_P(GLES2DecoderTest1, BlendEquationSeparateValidArgs) {
EXPECT_CALL(*gl_, BlendEquationSeparate(GL_FUNC_SUBTRACT, GL_FUNC_ADD));
SpecializedSetup<cmds::BlendEquationSeparate, 0>(true);
cmds::BlendEquationSeparate cmd;
@@ -208,7 +208,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationSeparateValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_0) {
EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
cmds::BlendEquationSeparate cmd;
@@ -217,7 +217,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_1) {
EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
cmds::BlendEquationSeparate cmd;
@@ -226,7 +226,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_0) {
EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
cmds::BlendEquationSeparate cmd;
@@ -235,7 +235,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_1) {
+TEST_P(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_1) {
EXPECT_CALL(*gl_, BlendEquationSeparate(_, _)).Times(0);
SpecializedSetup<cmds::BlendEquationSeparate, 0>(false);
cmds::BlendEquationSeparate cmd;
@@ -244,7 +244,7 @@ TEST_F(GLES2DecoderTest1, BlendEquationSeparateInvalidArgs1_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendFuncValidArgs) {
+TEST_P(GLES2DecoderTest1, BlendFuncValidArgs) {
EXPECT_CALL(*gl_, BlendFunc(GL_ZERO, GL_ZERO));
SpecializedSetup<cmds::BlendFunc, 0>(true);
cmds::BlendFunc cmd;
@@ -253,7 +253,7 @@ TEST_F(GLES2DecoderTest1, BlendFuncValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, BlendFuncSeparateValidArgs) {
+TEST_P(GLES2DecoderTest1, BlendFuncSeparateValidArgs) {
EXPECT_CALL(*gl_, BlendFuncSeparate(GL_ZERO, GL_ZERO, GL_ZERO, GL_ZERO));
SpecializedSetup<cmds::BlendFuncSeparate, 0>(true);
cmds::BlendFuncSeparate cmd;
@@ -265,8 +265,7 @@ TEST_F(GLES2DecoderTest1, BlendFuncSeparateValidArgs) {
// TODO(gman): BufferSubData
-
-TEST_F(GLES2DecoderTest1, CheckFramebufferStatusValidArgs) {
+TEST_P(GLES2DecoderTest1, CheckFramebufferStatusValidArgs) {
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER));
SpecializedSetup<cmds::CheckFramebufferStatus, 0>(true);
cmds::CheckFramebufferStatus cmd;
@@ -275,7 +274,7 @@ TEST_F(GLES2DecoderTest1, CheckFramebufferStatusValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_0) {
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0);
SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
cmds::CheckFramebufferStatus cmd;
@@ -284,7 +283,7 @@ TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_1) {
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0);
SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
cmds::CheckFramebufferStatus cmd;
@@ -293,7 +292,7 @@ TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgsBadSharedMemoryId) {
+TEST_P(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgsBadSharedMemoryId) {
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER)).Times(0);
SpecializedSetup<cmds::CheckFramebufferStatus, 0>(false);
cmds::CheckFramebufferStatus cmd;
@@ -303,7 +302,7 @@ TEST_F(GLES2DecoderTest1, CheckFramebufferStatusInvalidArgsBadSharedMemoryId) {
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest1, ClearValidArgs) {
+TEST_P(GLES2DecoderTest1, ClearValidArgs) {
EXPECT_CALL(*gl_, Clear(1));
SpecializedSetup<cmds::Clear, 0>(true);
cmds::Clear cmd;
@@ -312,7 +311,7 @@ TEST_F(GLES2DecoderTest1, ClearValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, ClearColorValidArgs) {
+TEST_P(GLES2DecoderTest1, ClearColorValidArgs) {
EXPECT_CALL(*gl_, ClearColor(1, 2, 3, 4));
SpecializedSetup<cmds::ClearColor, 0>(true);
cmds::ClearColor cmd;
@@ -321,7 +320,7 @@ TEST_F(GLES2DecoderTest1, ClearColorValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, ClearDepthfValidArgs) {
+TEST_P(GLES2DecoderTest1, ClearDepthfValidArgs) {
EXPECT_CALL(*gl_, ClearDepth(0.5f));
SpecializedSetup<cmds::ClearDepthf, 0>(true);
cmds::ClearDepthf cmd;
@@ -330,7 +329,7 @@ TEST_F(GLES2DecoderTest1, ClearDepthfValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, ClearStencilValidArgs) {
+TEST_P(GLES2DecoderTest1, ClearStencilValidArgs) {
EXPECT_CALL(*gl_, ClearStencil(1));
SpecializedSetup<cmds::ClearStencil, 0>(true);
cmds::ClearStencil cmd;
@@ -339,7 +338,7 @@ TEST_F(GLES2DecoderTest1, ClearStencilValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, ColorMaskValidArgs) {
+TEST_P(GLES2DecoderTest1, ColorMaskValidArgs) {
SpecializedSetup<cmds::ColorMask, 0>(true);
cmds::ColorMask cmd;
cmd.Init(true, true, true, true);
@@ -347,15 +346,15 @@ TEST_F(GLES2DecoderTest1, ColorMaskValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
// TODO(gman): CompileShader
+// TODO(gman): CompressedTexImage2DBucket
// TODO(gman): CompressedTexImage2D
-// TODO(gman): CompressedTexImage2DBucket
+// TODO(gman): CompressedTexSubImage2DBucket
// TODO(gman): CompressedTexSubImage2D
-// TODO(gman): CompressedTexSubImage2DBucket
// TODO(gman): CopyTexImage2D
-TEST_F(GLES2DecoderTest1, CopyTexSubImage2DValidArgs) {
+TEST_P(GLES2DecoderTest1, CopyTexSubImage2DValidArgs) {
EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 2, 3, 4, 5, 6, 7, 8));
SpecializedSetup<cmds::CopyTexSubImage2D, 0>(true);
cmds::CopyTexSubImage2D cmd;
@@ -364,7 +363,7 @@ TEST_F(GLES2DecoderTest1, CopyTexSubImage2DValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs0_0) {
EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
cmds::CopyTexSubImage2D cmd;
@@ -373,7 +372,7 @@ TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs6_0) {
+TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs6_0) {
EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
cmds::CopyTexSubImage2D cmd;
@@ -382,7 +381,7 @@ TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs6_0) {
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs7_0) {
+TEST_P(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs7_0) {
EXPECT_CALL(*gl_, CopyTexSubImage2D(_, _, _, _, _, _, _, _)).Times(0);
SpecializedSetup<cmds::CopyTexSubImage2D, 0>(false);
cmds::CopyTexSubImage2D cmd;
@@ -391,9 +390,8 @@ TEST_F(GLES2DecoderTest1, CopyTexSubImage2DInvalidArgs7_0) {
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderTest1, CreateProgramValidArgs) {
- EXPECT_CALL(*gl_, CreateProgram())
- .WillOnce(Return(kNewServiceId));
+TEST_P(GLES2DecoderTest1, CreateProgramValidArgs) {
+ EXPECT_CALL(*gl_, CreateProgram()).WillOnce(Return(kNewServiceId));
SpecializedSetup<cmds::CreateProgram, 0>(true);
cmds::CreateProgram cmd;
cmd.Init(kNewClientId);
@@ -402,7 +400,7 @@ TEST_F(GLES2DecoderTest1, CreateProgramValidArgs) {
EXPECT_TRUE(GetProgram(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, CreateShaderValidArgs) {
+TEST_P(GLES2DecoderTest1, CreateShaderValidArgs) {
EXPECT_CALL(*gl_, CreateShader(GL_VERTEX_SHADER))
.WillOnce(Return(kNewServiceId));
SpecializedSetup<cmds::CreateShader, 0>(true);
@@ -413,7 +411,7 @@ TEST_F(GLES2DecoderTest1, CreateShaderValidArgs) {
EXPECT_TRUE(GetShader(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, CreateShaderInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, CreateShaderInvalidArgs0_0) {
EXPECT_CALL(*gl_, CreateShader(_)).Times(0);
SpecializedSetup<cmds::CreateShader, 0>(false);
cmds::CreateShader cmd;
@@ -422,7 +420,7 @@ TEST_F(GLES2DecoderTest1, CreateShaderInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, CullFaceValidArgs) {
+TEST_P(GLES2DecoderTest1, CullFaceValidArgs) {
EXPECT_CALL(*gl_, CullFace(GL_FRONT));
SpecializedSetup<cmds::CullFace, 0>(true);
cmds::CullFace cmd;
@@ -431,34 +429,8 @@ TEST_F(GLES2DecoderTest1, CullFaceValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DeleteBuffersValidArgs) {
- EXPECT_CALL(
- *gl_,
- DeleteBuffersARB(1, Pointee(kServiceBufferId)))
- .Times(1);
- GetSharedMemoryAs<GLuint*>()[0] = client_buffer_id_;
- SpecializedSetup<cmds::DeleteBuffers, 0>(true);
- cmds::DeleteBuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetBuffer(client_buffer_id_) == NULL);
-}
-
-TEST_F(GLES2DecoderTest1, DeleteBuffersInvalidArgs) {
- GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
- SpecializedSetup<cmds::DeleteBuffers, 0>(false);
- cmds::DeleteBuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest1, DeleteBuffersImmediateValidArgs) {
- EXPECT_CALL(
- *gl_,
- DeleteBuffersARB(1, Pointee(kServiceBufferId)))
- .Times(1);
+TEST_P(GLES2DecoderTest1, DeleteBuffersImmediateValidArgs) {
+ EXPECT_CALL(*gl_, DeleteBuffersARB(1, Pointee(kServiceBufferId))).Times(1);
cmds::DeleteBuffersImmediate& cmd =
*GetImmediateAs<cmds::DeleteBuffersImmediate>();
SpecializedSetup<cmds::DeleteBuffersImmediate, 0>(true);
@@ -466,47 +438,20 @@ TEST_F(GLES2DecoderTest1, DeleteBuffersImmediateValidArgs) {
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(cmd, sizeof(client_buffer_id_)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetBuffer(client_buffer_id_) == NULL);
+ EXPECT_TRUE(GetBuffer(client_buffer_id_) == NULL);
}
-TEST_F(GLES2DecoderTest1, DeleteBuffersImmediateInvalidArgs) {
+TEST_P(GLES2DecoderTest1, DeleteBuffersImmediateInvalidArgs) {
cmds::DeleteBuffersImmediate& cmd =
*GetImmediateAs<cmds::DeleteBuffersImmediate>();
SpecializedSetup<cmds::DeleteBuffersImmediate, 0>(false);
GLuint temp = kInvalidClientId;
cmd.Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
-}
-
-TEST_F(GLES2DecoderTest1, DeleteFramebuffersValidArgs) {
- EXPECT_CALL(
- *gl_,
- DeleteFramebuffersEXT(1, Pointee(kServiceFramebufferId)))
- .Times(1);
- GetSharedMemoryAs<GLuint*>()[0] = client_framebuffer_id_;
- SpecializedSetup<cmds::DeleteFramebuffers, 0>(true);
- cmds::DeleteFramebuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetFramebuffer(client_framebuffer_id_) == NULL);
-}
-
-TEST_F(GLES2DecoderTest1, DeleteFramebuffersInvalidArgs) {
- GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
- SpecializedSetup<cmds::DeleteFramebuffers, 0>(false);
- cmds::DeleteFramebuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
}
-TEST_F(GLES2DecoderTest1, DeleteFramebuffersImmediateValidArgs) {
- EXPECT_CALL(
- *gl_,
- DeleteFramebuffersEXT(1, Pointee(kServiceFramebufferId)))
+TEST_P(GLES2DecoderTest1, DeleteFramebuffersImmediateValidArgs) {
+ EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, Pointee(kServiceFramebufferId)))
.Times(1);
cmds::DeleteFramebuffersImmediate& cmd =
*GetImmediateAs<cmds::DeleteFramebuffersImmediate>();
@@ -515,21 +460,19 @@ TEST_F(GLES2DecoderTest1, DeleteFramebuffersImmediateValidArgs) {
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(cmd, sizeof(client_framebuffer_id_)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetFramebuffer(client_framebuffer_id_) == NULL);
+ EXPECT_TRUE(GetFramebuffer(client_framebuffer_id_) == NULL);
}
-TEST_F(GLES2DecoderTest1, DeleteFramebuffersImmediateInvalidArgs) {
+TEST_P(GLES2DecoderTest1, DeleteFramebuffersImmediateInvalidArgs) {
cmds::DeleteFramebuffersImmediate& cmd =
*GetImmediateAs<cmds::DeleteFramebuffersImmediate>();
SpecializedSetup<cmds::DeleteFramebuffersImmediate, 0>(false);
GLuint temp = kInvalidClientId;
cmd.Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
}
-TEST_F(GLES2DecoderTest1, DeleteProgramValidArgs) {
+TEST_P(GLES2DecoderTest1, DeleteProgramValidArgs) {
EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId));
SpecializedSetup<cmds::DeleteProgram, 0>(true);
cmds::DeleteProgram cmd;
@@ -538,33 +481,8 @@ TEST_F(GLES2DecoderTest1, DeleteProgramValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DeleteRenderbuffersValidArgs) {
- EXPECT_CALL(
- *gl_,
- DeleteRenderbuffersEXT(1, Pointee(kServiceRenderbufferId)))
- .Times(1);
- GetSharedMemoryAs<GLuint*>()[0] = client_renderbuffer_id_;
- SpecializedSetup<cmds::DeleteRenderbuffers, 0>(true);
- cmds::DeleteRenderbuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetRenderbuffer(client_renderbuffer_id_) == NULL);
-}
-
-TEST_F(GLES2DecoderTest1, DeleteRenderbuffersInvalidArgs) {
- GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
- SpecializedSetup<cmds::DeleteRenderbuffers, 0>(false);
- cmds::DeleteRenderbuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest1, DeleteRenderbuffersImmediateValidArgs) {
- EXPECT_CALL(
- *gl_,
- DeleteRenderbuffersEXT(1, Pointee(kServiceRenderbufferId)))
+TEST_P(GLES2DecoderTest1, DeleteRenderbuffersImmediateValidArgs) {
+ EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, Pointee(kServiceRenderbufferId)))
.Times(1);
cmds::DeleteRenderbuffersImmediate& cmd =
*GetImmediateAs<cmds::DeleteRenderbuffersImmediate>();
@@ -573,21 +491,19 @@ TEST_F(GLES2DecoderTest1, DeleteRenderbuffersImmediateValidArgs) {
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(cmd, sizeof(client_renderbuffer_id_)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetRenderbuffer(client_renderbuffer_id_) == NULL);
+ EXPECT_TRUE(GetRenderbuffer(client_renderbuffer_id_) == NULL);
}
-TEST_F(GLES2DecoderTest1, DeleteRenderbuffersImmediateInvalidArgs) {
+TEST_P(GLES2DecoderTest1, DeleteRenderbuffersImmediateInvalidArgs) {
cmds::DeleteRenderbuffersImmediate& cmd =
*GetImmediateAs<cmds::DeleteRenderbuffersImmediate>();
SpecializedSetup<cmds::DeleteRenderbuffersImmediate, 0>(false);
GLuint temp = kInvalidClientId;
cmd.Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
}
-TEST_F(GLES2DecoderTest1, DeleteShaderValidArgs) {
+TEST_P(GLES2DecoderTest1, DeleteShaderValidArgs) {
EXPECT_CALL(*gl_, DeleteShader(kServiceShaderId));
SpecializedSetup<cmds::DeleteShader, 0>(true);
cmds::DeleteShader cmd;
@@ -596,34 +512,8 @@ TEST_F(GLES2DecoderTest1, DeleteShaderValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DeleteTexturesValidArgs) {
- EXPECT_CALL(
- *gl_,
- DeleteTextures(1, Pointee(kServiceTextureId)))
- .Times(1);
- GetSharedMemoryAs<GLuint*>()[0] = client_texture_id_;
- SpecializedSetup<cmds::DeleteTextures, 0>(true);
- cmds::DeleteTextures cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetTexture(client_texture_id_) == NULL);
-}
-
-TEST_F(GLES2DecoderTest1, DeleteTexturesInvalidArgs) {
- GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
- SpecializedSetup<cmds::DeleteTextures, 0>(false);
- cmds::DeleteTextures cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest1, DeleteTexturesImmediateValidArgs) {
- EXPECT_CALL(
- *gl_,
- DeleteTextures(1, Pointee(kServiceTextureId)))
- .Times(1);
+TEST_P(GLES2DecoderTest1, DeleteTexturesImmediateValidArgs) {
+ EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(kServiceTextureId))).Times(1);
cmds::DeleteTexturesImmediate& cmd =
*GetImmediateAs<cmds::DeleteTexturesImmediate>();
SpecializedSetup<cmds::DeleteTexturesImmediate, 0>(true);
@@ -631,21 +521,19 @@ TEST_F(GLES2DecoderTest1, DeleteTexturesImmediateValidArgs) {
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(cmd, sizeof(client_texture_id_)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(
- GetTexture(client_texture_id_) == NULL);
+ EXPECT_TRUE(GetTexture(client_texture_id_) == NULL);
}
-TEST_F(GLES2DecoderTest1, DeleteTexturesImmediateInvalidArgs) {
+TEST_P(GLES2DecoderTest1, DeleteTexturesImmediateInvalidArgs) {
cmds::DeleteTexturesImmediate& cmd =
*GetImmediateAs<cmds::DeleteTexturesImmediate>();
SpecializedSetup<cmds::DeleteTexturesImmediate, 0>(false);
GLuint temp = kInvalidClientId;
cmd.Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
}
-TEST_F(GLES2DecoderTest1, DepthFuncValidArgs) {
+TEST_P(GLES2DecoderTest1, DepthFuncValidArgs) {
EXPECT_CALL(*gl_, DepthFunc(GL_NEVER));
SpecializedSetup<cmds::DepthFunc, 0>(true);
cmds::DepthFunc cmd;
@@ -654,7 +542,7 @@ TEST_F(GLES2DecoderTest1, DepthFuncValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DepthMaskValidArgs) {
+TEST_P(GLES2DecoderTest1, DepthMaskValidArgs) {
SpecializedSetup<cmds::DepthMask, 0>(true);
cmds::DepthMask cmd;
cmd.Init(true);
@@ -662,7 +550,7 @@ TEST_F(GLES2DecoderTest1, DepthMaskValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DepthRangefValidArgs) {
+TEST_P(GLES2DecoderTest1, DepthRangefValidArgs) {
EXPECT_CALL(*gl_, DepthRange(1, 2));
SpecializedSetup<cmds::DepthRangef, 0>(true);
cmds::DepthRangef cmd;
@@ -671,7 +559,7 @@ TEST_F(GLES2DecoderTest1, DepthRangefValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DetachShaderValidArgs) {
+TEST_P(GLES2DecoderTest1, DetachShaderValidArgs) {
EXPECT_CALL(*gl_, DetachShader(kServiceProgramId, kServiceShaderId));
SpecializedSetup<cmds::DetachShader, 0>(true);
cmds::DetachShader cmd;
@@ -680,8 +568,8 @@ TEST_F(GLES2DecoderTest1, DetachShaderValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DisableValidArgs) {
- EXPECT_CALL(*gl_, Disable(GL_BLEND));
+TEST_P(GLES2DecoderTest1, DisableValidArgs) {
+ SetupExpectationsForEnableDisable(GL_BLEND, false);
SpecializedSetup<cmds::Disable, 0>(true);
cmds::Disable cmd;
cmd.Init(GL_BLEND);
@@ -689,7 +577,7 @@ TEST_F(GLES2DecoderTest1, DisableValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DisableInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, DisableInvalidArgs0_0) {
EXPECT_CALL(*gl_, Disable(_)).Times(0);
SpecializedSetup<cmds::Disable, 0>(false);
cmds::Disable cmd;
@@ -698,7 +586,7 @@ TEST_F(GLES2DecoderTest1, DisableInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DisableInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, DisableInvalidArgs0_1) {
EXPECT_CALL(*gl_, Disable(_)).Times(0);
SpecializedSetup<cmds::Disable, 0>(false);
cmds::Disable cmd;
@@ -707,7 +595,7 @@ TEST_F(GLES2DecoderTest1, DisableInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, DisableVertexAttribArrayValidArgs) {
+TEST_P(GLES2DecoderTest1, DisableVertexAttribArrayValidArgs) {
EXPECT_CALL(*gl_, DisableVertexAttribArray(1));
SpecializedSetup<cmds::DisableVertexAttribArray, 0>(true);
cmds::DisableVertexAttribArray cmd;
@@ -719,9 +607,8 @@ TEST_F(GLES2DecoderTest1, DisableVertexAttribArrayValidArgs) {
// TODO(gman): DrawElements
-
-TEST_F(GLES2DecoderTest1, EnableValidArgs) {
- EXPECT_CALL(*gl_, Enable(GL_BLEND));
+TEST_P(GLES2DecoderTest1, EnableValidArgs) {
+ SetupExpectationsForEnableDisable(GL_BLEND, true);
SpecializedSetup<cmds::Enable, 0>(true);
cmds::Enable cmd;
cmd.Init(GL_BLEND);
@@ -729,7 +616,7 @@ TEST_F(GLES2DecoderTest1, EnableValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, EnableInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, EnableInvalidArgs0_0) {
EXPECT_CALL(*gl_, Enable(_)).Times(0);
SpecializedSetup<cmds::Enable, 0>(false);
cmds::Enable cmd;
@@ -738,7 +625,7 @@ TEST_F(GLES2DecoderTest1, EnableInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, EnableInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, EnableInvalidArgs0_1) {
EXPECT_CALL(*gl_, Enable(_)).Times(0);
SpecializedSetup<cmds::Enable, 0>(false);
cmds::Enable cmd;
@@ -747,7 +634,7 @@ TEST_F(GLES2DecoderTest1, EnableInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, EnableVertexAttribArrayValidArgs) {
+TEST_P(GLES2DecoderTest1, EnableVertexAttribArrayValidArgs) {
EXPECT_CALL(*gl_, EnableVertexAttribArray(1));
SpecializedSetup<cmds::EnableVertexAttribArray, 0>(true);
cmds::EnableVertexAttribArray cmd;
@@ -756,7 +643,7 @@ TEST_F(GLES2DecoderTest1, EnableVertexAttribArrayValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FinishValidArgs) {
+TEST_P(GLES2DecoderTest1, FinishValidArgs) {
EXPECT_CALL(*gl_, Finish());
SpecializedSetup<cmds::Finish, 0>(true);
cmds::Finish cmd;
@@ -765,7 +652,7 @@ TEST_F(GLES2DecoderTest1, FinishValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FlushValidArgs) {
+TEST_P(GLES2DecoderTest1, FlushValidArgs) {
EXPECT_CALL(*gl_, Flush());
SpecializedSetup<cmds::Flush, 0>(true);
cmds::Flush cmd;
@@ -774,112 +661,110 @@ TEST_F(GLES2DecoderTest1, FlushValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferRenderbufferValidArgs) {
- EXPECT_CALL(
- *gl_, FramebufferRenderbufferEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- kServiceRenderbufferId));
+TEST_P(GLES2DecoderTest1, FramebufferRenderbufferValidArgs) {
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId));
SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(true);
cmds::FramebufferRenderbuffer cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_0) {
EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
cmds::FramebufferRenderbuffer cmd;
- cmd.Init(
- GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
+ cmd.Init(GL_DRAW_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs0_1) {
EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
cmds::FramebufferRenderbuffer cmd;
- cmd.Init(
- GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
- client_renderbuffer_id_);
+ cmd.Init(GL_READ_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, FramebufferRenderbufferInvalidArgs2_0) {
EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
SpecializedSetup<cmds::FramebufferRenderbuffer, 0>(false);
cmds::FramebufferRenderbuffer cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER,
- client_renderbuffer_id_);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER,
+ client_renderbuffer_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferTexture2DValidArgs) {
- EXPECT_CALL(
- *gl_, FramebufferTexture2DEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- kServiceTextureId, 0));
+TEST_P(GLES2DecoderTest1, FramebufferTexture2DValidArgs) {
+ EXPECT_CALL(*gl_,
+ FramebufferTexture2DEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kServiceTextureId,
+ 0));
SpecializedSetup<cmds::FramebufferTexture2D, 0>(true);
cmds::FramebufferTexture2D cmd;
cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
- 0);
+ GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_0) {
EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
cmds::FramebufferTexture2D cmd;
- cmd.Init(
- GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- client_texture_id_, 0);
+ cmd.Init(GL_DRAW_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs0_1) {
EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
cmds::FramebufferTexture2D cmd;
- cmd.Init(
- GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- client_texture_id_, 0);
+ cmd.Init(GL_READ_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs2_0) {
EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
cmds::FramebufferTexture2D cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_PROXY_TEXTURE_CUBE_MAP,
- client_texture_id_, 0);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_PROXY_TEXTURE_CUBE_MAP,
+ client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, FramebufferTexture2DInvalidArgs4_0) {
- EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
- SpecializedSetup<cmds::FramebufferTexture2D, 0>(false);
- cmds::FramebufferTexture2D cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, client_texture_id_,
- 1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest1, FrontFaceValidArgs) {
+TEST_P(GLES2DecoderTest1, FrontFaceValidArgs) {
EXPECT_CALL(*gl_, FrontFace(GL_CW));
SpecializedSetup<cmds::FrontFace, 0>(true);
cmds::FrontFace cmd;
@@ -888,41 +773,19 @@ TEST_F(GLES2DecoderTest1, FrontFaceValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GenBuffersValidArgs) {
- EXPECT_CALL(*gl_, GenBuffersARB(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
- GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
- SpecializedSetup<cmds::GenBuffers, 0>(true);
- cmds::GenBuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
-}
-
-TEST_F(GLES2DecoderTest1, GenBuffersInvalidArgs) {
- EXPECT_CALL(*gl_, GenBuffersARB(_, _)).Times(0);
- GetSharedMemoryAs<GLuint*>()[0] = client_buffer_id_;
- SpecializedSetup<cmds::GenBuffers, 0>(false);
- cmds::GenBuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest1, GenBuffersImmediateValidArgs) {
+TEST_P(GLES2DecoderTest1, GenBuffersImmediateValidArgs) {
EXPECT_CALL(*gl_, GenBuffersARB(1, _))
.WillOnce(SetArgumentPointee<1>(kNewServiceId));
cmds::GenBuffersImmediate* cmd = GetImmediateAs<cmds::GenBuffersImmediate>();
GLuint temp = kNewClientId;
SpecializedSetup<cmds::GenBuffersImmediate, 0>(true);
cmd->Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(*cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_TRUE(GetBuffer(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, GenBuffersImmediateInvalidArgs) {
+TEST_P(GLES2DecoderTest1, GenBuffersImmediateInvalidArgs) {
EXPECT_CALL(*gl_, GenBuffersARB(_, _)).Times(0);
cmds::GenBuffersImmediate* cmd = GetImmediateAs<cmds::GenBuffersImmediate>();
SpecializedSetup<cmds::GenBuffersImmediate, 0>(false);
@@ -931,7 +794,7 @@ TEST_F(GLES2DecoderTest1, GenBuffersImmediateInvalidArgs) {
ExecuteImmediateCmd(*cmd, sizeof(&client_buffer_id_)));
}
-TEST_F(GLES2DecoderTest1, GenerateMipmapValidArgs) {
+TEST_P(GLES2DecoderTest1, GenerateMipmapValidArgs) {
EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
SpecializedSetup<cmds::GenerateMipmap, 0>(true);
cmds::GenerateMipmap cmd;
@@ -940,7 +803,7 @@ TEST_F(GLES2DecoderTest1, GenerateMipmapValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_0) {
EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
SpecializedSetup<cmds::GenerateMipmap, 0>(false);
cmds::GenerateMipmap cmd;
@@ -949,7 +812,7 @@ TEST_F(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_1) {
EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
SpecializedSetup<cmds::GenerateMipmap, 0>(false);
cmds::GenerateMipmap cmd;
@@ -958,28 +821,7 @@ TEST_F(GLES2DecoderTest1, GenerateMipmapInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GenFramebuffersValidArgs) {
- EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
- GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
- SpecializedSetup<cmds::GenFramebuffers, 0>(true);
- cmds::GenFramebuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL);
-}
-
-TEST_F(GLES2DecoderTest1, GenFramebuffersInvalidArgs) {
- EXPECT_CALL(*gl_, GenFramebuffersEXT(_, _)).Times(0);
- GetSharedMemoryAs<GLuint*>()[0] = client_framebuffer_id_;
- SpecializedSetup<cmds::GenFramebuffers, 0>(false);
- cmds::GenFramebuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest1, GenFramebuffersImmediateValidArgs) {
+TEST_P(GLES2DecoderTest1, GenFramebuffersImmediateValidArgs) {
EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _))
.WillOnce(SetArgumentPointee<1>(kNewServiceId));
cmds::GenFramebuffersImmediate* cmd =
@@ -987,13 +829,12 @@ TEST_F(GLES2DecoderTest1, GenFramebuffersImmediateValidArgs) {
GLuint temp = kNewClientId;
SpecializedSetup<cmds::GenFramebuffersImmediate, 0>(true);
cmd->Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(*cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_TRUE(GetFramebuffer(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, GenFramebuffersImmediateInvalidArgs) {
+TEST_P(GLES2DecoderTest1, GenFramebuffersImmediateInvalidArgs) {
EXPECT_CALL(*gl_, GenFramebuffersEXT(_, _)).Times(0);
cmds::GenFramebuffersImmediate* cmd =
GetImmediateAs<cmds::GenFramebuffersImmediate>();
@@ -1003,28 +844,7 @@ TEST_F(GLES2DecoderTest1, GenFramebuffersImmediateInvalidArgs) {
ExecuteImmediateCmd(*cmd, sizeof(&client_framebuffer_id_)));
}
-TEST_F(GLES2DecoderTest1, GenRenderbuffersValidArgs) {
- EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
- GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
- SpecializedSetup<cmds::GenRenderbuffers, 0>(true);
- cmds::GenRenderbuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL);
-}
-
-TEST_F(GLES2DecoderTest1, GenRenderbuffersInvalidArgs) {
- EXPECT_CALL(*gl_, GenRenderbuffersEXT(_, _)).Times(0);
- GetSharedMemoryAs<GLuint*>()[0] = client_renderbuffer_id_;
- SpecializedSetup<cmds::GenRenderbuffers, 0>(false);
- cmds::GenRenderbuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest1, GenRenderbuffersImmediateValidArgs) {
+TEST_P(GLES2DecoderTest1, GenRenderbuffersImmediateValidArgs) {
EXPECT_CALL(*gl_, GenRenderbuffersEXT(1, _))
.WillOnce(SetArgumentPointee<1>(kNewServiceId));
cmds::GenRenderbuffersImmediate* cmd =
@@ -1032,13 +852,12 @@ TEST_F(GLES2DecoderTest1, GenRenderbuffersImmediateValidArgs) {
GLuint temp = kNewClientId;
SpecializedSetup<cmds::GenRenderbuffersImmediate, 0>(true);
cmd->Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(*cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_TRUE(GetRenderbuffer(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, GenRenderbuffersImmediateInvalidArgs) {
+TEST_P(GLES2DecoderTest1, GenRenderbuffersImmediateInvalidArgs) {
EXPECT_CALL(*gl_, GenRenderbuffersEXT(_, _)).Times(0);
cmds::GenRenderbuffersImmediate* cmd =
GetImmediateAs<cmds::GenRenderbuffersImmediate>();
@@ -1048,28 +867,7 @@ TEST_F(GLES2DecoderTest1, GenRenderbuffersImmediateInvalidArgs) {
ExecuteImmediateCmd(*cmd, sizeof(&client_renderbuffer_id_)));
}
-TEST_F(GLES2DecoderTest1, GenTexturesValidArgs) {
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgumentPointee<1>(kNewServiceId));
- GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
- SpecializedSetup<cmds::GenTextures, 0>(true);
- cmds::GenTextures cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(GetTexture(kNewClientId) != NULL);
-}
-
-TEST_F(GLES2DecoderTest1, GenTexturesInvalidArgs) {
- EXPECT_CALL(*gl_, GenTextures(_, _)).Times(0);
- GetSharedMemoryAs<GLuint*>()[0] = client_texture_id_;
- SpecializedSetup<cmds::GenTextures, 0>(false);
- cmds::GenTextures cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest1, GenTexturesImmediateValidArgs) {
+TEST_P(GLES2DecoderTest1, GenTexturesImmediateValidArgs) {
EXPECT_CALL(*gl_, GenTextures(1, _))
.WillOnce(SetArgumentPointee<1>(kNewServiceId));
cmds::GenTexturesImmediate* cmd =
@@ -1077,13 +875,12 @@ TEST_F(GLES2DecoderTest1, GenTexturesImmediateValidArgs) {
GLuint temp = kNewClientId;
SpecializedSetup<cmds::GenTexturesImmediate, 0>(true);
cmd->Init(1, &temp);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(*cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_TRUE(GetTexture(kNewClientId) != NULL);
}
-TEST_F(GLES2DecoderTest1, GenTexturesImmediateInvalidArgs) {
+TEST_P(GLES2DecoderTest1, GenTexturesImmediateInvalidArgs) {
EXPECT_CALL(*gl_, GenTextures(_, _)).Times(0);
cmds::GenTexturesImmediate* cmd =
GetImmediateAs<cmds::GenTexturesImmediate>();
@@ -1100,10 +897,7 @@ TEST_F(GLES2DecoderTest1, GenTexturesImmediateInvalidArgs) {
// TODO(gman): GetAttribLocation
-// TODO(gman): GetAttribLocationBucket
-
-
-TEST_F(GLES2DecoderTest1, GetBooleanvValidArgs) {
+TEST_P(GLES2DecoderTest1, GetBooleanvValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -1116,13 +910,12 @@ TEST_F(GLES2DecoderTest1, GetBooleanvValidArgs) {
cmds::GetBooleanv cmd;
cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_ACTIVE_TEXTURE),
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE),
result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs0_0) {
EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
SpecializedSetup<cmds::GetBooleanv, 0>(false);
cmds::GetBooleanv::Result* result =
@@ -1135,7 +928,7 @@ TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs1_0) {
EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
SpecializedSetup<cmds::GetBooleanv, 0>(false);
cmds::GetBooleanv::Result* result =
@@ -1147,7 +940,7 @@ TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs1_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs1_1) {
+TEST_P(GLES2DecoderTest1, GetBooleanvInvalidArgs1_1) {
EXPECT_CALL(*gl_, GetBooleanv(_, _)).Times(0);
SpecializedSetup<cmds::GetBooleanv, 0>(false);
cmds::GetBooleanv::Result* result =
@@ -1159,53 +952,55 @@ TEST_F(GLES2DecoderTest1, GetBooleanvInvalidArgs1_1) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetBufferParameterivValidArgs) {
+TEST_P(GLES2DecoderTest1, GetBufferParameterivValidArgs) {
SpecializedSetup<cmds::GetBufferParameteriv, 0>(true);
typedef cmds::GetBufferParameteriv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
result->size = 0;
cmds::GetBufferParameteriv cmd;
- cmd.Init(
- GL_ARRAY_BUFFER, GL_BUFFER_SIZE, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_ARRAY_BUFFER,
+ GL_BUFFER_SIZE,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_BUFFER_SIZE),
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_BUFFER_SIZE),
result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs0_0) {
EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
cmds::GetBufferParameteriv::Result* result =
static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetBufferParameteriv cmd;
- cmd.Init(
- GL_RENDERBUFFER, GL_BUFFER_SIZE, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_RENDERBUFFER,
+ GL_BUFFER_SIZE,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs1_0) {
EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
cmds::GetBufferParameteriv::Result* result =
static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetBufferParameteriv cmd;
- cmd.Init(
- GL_ARRAY_BUFFER, GL_PIXEL_PACK_BUFFER, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_ARRAY_BUFFER,
+ GL_PIXEL_PACK_BUFFER,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_0) {
EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
cmds::GetBufferParameteriv::Result* result =
@@ -1217,21 +1012,22 @@ TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_1) {
+TEST_P(GLES2DecoderTest1, GetBufferParameterivInvalidArgs2_1) {
EXPECT_CALL(*gl_, GetBufferParameteriv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetBufferParameteriv, 0>(false);
cmds::GetBufferParameteriv::Result* result =
static_cast<cmds::GetBufferParameteriv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetBufferParameteriv cmd;
- cmd.Init(
- GL_ARRAY_BUFFER, GL_BUFFER_SIZE, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(GL_ARRAY_BUFFER,
+ GL_BUFFER_SIZE,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetErrorValidArgs) {
+TEST_P(GLES2DecoderTest1, GetErrorValidArgs) {
EXPECT_CALL(*gl_, GetError());
SpecializedSetup<cmds::GetError, 0>(true);
cmds::GetError cmd;
@@ -1240,7 +1036,7 @@ TEST_F(GLES2DecoderTest1, GetErrorValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetErrorInvalidArgsBadSharedMemoryId) {
+TEST_P(GLES2DecoderTest1, GetErrorInvalidArgsBadSharedMemoryId) {
EXPECT_CALL(*gl_, GetError()).Times(0);
SpecializedSetup<cmds::GetError, 0>(false);
cmds::GetError cmd;
@@ -1250,7 +1046,7 @@ TEST_F(GLES2DecoderTest1, GetErrorInvalidArgsBadSharedMemoryId) {
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest1, GetFloatvValidArgs) {
+TEST_P(GLES2DecoderTest1, GetFloatvValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -1263,13 +1059,12 @@ TEST_F(GLES2DecoderTest1, GetFloatvValidArgs) {
cmds::GetFloatv cmd;
cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_ACTIVE_TEXTURE),
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE),
result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs0_0) {
EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
SpecializedSetup<cmds::GetFloatv, 0>(false);
cmds::GetFloatv::Result* result =
@@ -1282,7 +1077,7 @@ TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs1_0) {
EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
SpecializedSetup<cmds::GetFloatv, 0>(false);
cmds::GetFloatv::Result* result =
@@ -1294,7 +1089,7 @@ TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs1_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs1_1) {
+TEST_P(GLES2DecoderTest1, GetFloatvInvalidArgs1_1) {
EXPECT_CALL(*gl_, GetFloatv(_, _)).Times(0);
SpecializedSetup<cmds::GetFloatv, 0>(false);
cmds::GetFloatv::Result* result =
@@ -1306,7 +1101,7 @@ TEST_F(GLES2DecoderTest1, GetFloatvInvalidArgs1_1) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivValidArgs) {
+TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -1314,16 +1109,19 @@ TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivValidArgs) {
SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(true);
typedef cmds::GetFramebufferAttachmentParameteriv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(
- *gl_, GetFramebufferAttachmentParameterivEXT(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, result->GetData()));
+ EXPECT_CALL(*gl_,
+ GetFramebufferAttachmentParameterivEXT(
+ GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ result->GetData()));
result->size = 0;
cmds::GetFramebufferAttachmentParameteriv cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE),
@@ -1331,76 +1129,81 @@ TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_0) {
- EXPECT_CALL(
- *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0);
+TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_0) {
+ EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
+ .Times(0);
SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
cmds::GetFramebufferAttachmentParameteriv::Result* result =
static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
shared_memory_address_);
result->size = 0;
cmds::GetFramebufferAttachmentParameteriv cmd;
- cmd.Init(
- GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_DRAW_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_1) {
- EXPECT_CALL(
- *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0);
+TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs0_1) {
+ EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
+ .Times(0);
SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
cmds::GetFramebufferAttachmentParameteriv::Result* result =
static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
shared_memory_address_);
result->size = 0;
cmds::GetFramebufferAttachmentParameteriv cmd;
- cmd.Init(
- GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_READ_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_0) {
- EXPECT_CALL(
- *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0);
+TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_0) {
+ EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
+ .Times(0);
SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
cmds::GetFramebufferAttachmentParameteriv::Result* result =
static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
shared_memory_address_);
result->size = 0;
cmds::GetFramebufferAttachmentParameteriv cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, kInvalidSharedMemoryId, 0);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ kInvalidSharedMemoryId,
+ 0);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_1) {
- EXPECT_CALL(
- *gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _)).Times(0);
+TEST_P(GLES2DecoderTest1, GetFramebufferAttachmentParameterivInvalidArgs3_1) {
+ EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
+ .Times(0);
SpecializedSetup<cmds::GetFramebufferAttachmentParameteriv, 0>(false);
cmds::GetFramebufferAttachmentParameteriv::Result* result =
static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
shared_memory_address_);
result->size = 0;
cmds::GetFramebufferAttachmentParameteriv cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetIntegervValidArgs) {
+TEST_P(GLES2DecoderTest1, GetIntegervValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -1413,13 +1216,12 @@ TEST_F(GLES2DecoderTest1, GetIntegervValidArgs) {
cmds::GetIntegerv cmd;
cmd.Init(GL_ACTIVE_TEXTURE, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_ACTIVE_TEXTURE),
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ACTIVE_TEXTURE),
result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs0_0) {
EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
SpecializedSetup<cmds::GetIntegerv, 0>(false);
cmds::GetIntegerv::Result* result =
@@ -1432,7 +1234,7 @@ TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs1_0) {
EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
SpecializedSetup<cmds::GetIntegerv, 0>(false);
cmds::GetIntegerv::Result* result =
@@ -1444,7 +1246,7 @@ TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs1_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs1_1) {
+TEST_P(GLES2DecoderTest1, GetIntegervInvalidArgs1_1) {
EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0);
SpecializedSetup<cmds::GetIntegerv, 0>(false);
cmds::GetIntegerv::Result* result =
@@ -1456,23 +1258,23 @@ TEST_F(GLES2DecoderTest1, GetIntegervInvalidArgs1_1) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetProgramivValidArgs) {
+TEST_P(GLES2DecoderTest1, GetProgramivValidArgs) {
SpecializedSetup<cmds::GetProgramiv, 0>(true);
typedef cmds::GetProgramiv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
result->size = 0;
cmds::GetProgramiv cmd;
- cmd.Init(
- client_program_id_, GL_DELETE_STATUS, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(client_program_id_,
+ GL_DELETE_STATUS,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_DELETE_STATUS),
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DELETE_STATUS),
result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetProgramivInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, GetProgramivInvalidArgs2_0) {
EXPECT_CALL(*gl_, GetProgramiv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetProgramiv, 0>(false);
cmds::GetProgramiv::Result* result =
@@ -1484,23 +1286,24 @@ TEST_F(GLES2DecoderTest1, GetProgramivInvalidArgs2_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetProgramivInvalidArgs2_1) {
+TEST_P(GLES2DecoderTest1, GetProgramivInvalidArgs2_1) {
EXPECT_CALL(*gl_, GetProgramiv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetProgramiv, 0>(false);
cmds::GetProgramiv::Result* result =
static_cast<cmds::GetProgramiv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetProgramiv cmd;
- cmd.Init(
- client_program_id_, GL_DELETE_STATUS, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(client_program_id_,
+ GL_DELETE_STATUS,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetProgramInfoLogValidArgs) {
+TEST_P(GLES2DecoderTest1, GetProgramInfoLogValidArgs) {
const char* kInfo = "hello";
- const uint32 kBucketId = 123;
+ const uint32_t kBucketId = 123;
SpecializedSetup<cmds::GetProgramInfoLog, 0>(true);
cmds::GetProgramInfoLog cmd;
@@ -1509,20 +1312,20 @@ TEST_F(GLES2DecoderTest1, GetProgramInfoLogValidArgs) {
CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
ASSERT_TRUE(bucket != NULL);
EXPECT_EQ(strlen(kInfo) + 1, bucket->size());
- EXPECT_EQ(0, memcmp(bucket->GetData(0, bucket->size()), kInfo,
- bucket->size()));
+ EXPECT_EQ(0,
+ memcmp(bucket->GetData(0, bucket->size()), kInfo, bucket->size()));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetProgramInfoLogInvalidArgs) {
- const uint32 kBucketId = 123;
+TEST_P(GLES2DecoderTest1, GetProgramInfoLogInvalidArgs) {
+ const uint32_t kBucketId = 123;
cmds::GetProgramInfoLog cmd;
cmd.Init(kInvalidClientId, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivValidArgs) {
+TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -1531,13 +1334,15 @@ TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivValidArgs) {
typedef cmds::GetRenderbufferParameteriv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
EXPECT_CALL(
- *gl_, GetRenderbufferParameterivEXT(
+ *gl_,
+ GetRenderbufferParameterivEXT(
GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, result->GetData()));
result->size = 0;
cmds::GetRenderbufferParameteriv cmd;
- cmd.Init(
- GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_RENDERBUFFER,
+ GL_RENDERBUFFER_RED_SIZE,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
GL_RENDERBUFFER_RED_SIZE),
@@ -1545,7 +1350,7 @@ TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs0_0) {
EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
cmds::GetRenderbufferParameteriv::Result* result =
@@ -1553,15 +1358,16 @@ TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs0_0) {
shared_memory_address_);
result->size = 0;
cmds::GetRenderbufferParameteriv cmd;
- cmd.Init(
- GL_FRAMEBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_RENDERBUFFER_RED_SIZE,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_0) {
EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
cmds::GetRenderbufferParameteriv::Result* result =
@@ -1575,7 +1381,7 @@ TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_1) {
+TEST_P(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_1) {
EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
SpecializedSetup<cmds::GetRenderbufferParameteriv, 0>(false);
cmds::GetRenderbufferParameteriv::Result* result =
@@ -1583,14 +1389,15 @@ TEST_F(GLES2DecoderTest1, GetRenderbufferParameterivInvalidArgs2_1) {
shared_memory_address_);
result->size = 0;
cmds::GetRenderbufferParameteriv cmd;
- cmd.Init(
- GL_RENDERBUFFER, GL_RENDERBUFFER_RED_SIZE, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(GL_RENDERBUFFER,
+ GL_RENDERBUFFER_RED_SIZE,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetShaderivValidArgs) {
+TEST_P(GLES2DecoderTest1, GetShaderivValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -1598,21 +1405,21 @@ TEST_F(GLES2DecoderTest1, GetShaderivValidArgs) {
SpecializedSetup<cmds::GetShaderiv, 0>(true);
typedef cmds::GetShaderiv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(
- *gl_, GetShaderiv(kServiceShaderId, GL_SHADER_TYPE, result->GetData()));
+ EXPECT_CALL(*gl_,
+ GetShaderiv(kServiceShaderId, GL_SHADER_TYPE, result->GetData()));
result->size = 0;
cmds::GetShaderiv cmd;
- cmd.Init(
- client_shader_id_, GL_SHADER_TYPE, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(client_shader_id_,
+ GL_SHADER_TYPE,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_SHADER_TYPE),
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_SHADER_TYPE),
result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetShaderivInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, GetShaderivInvalidArgs2_0) {
EXPECT_CALL(*gl_, GetShaderiv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetShaderiv, 0>(false);
cmds::GetShaderiv::Result* result =
@@ -1624,16 +1431,17 @@ TEST_F(GLES2DecoderTest1, GetShaderivInvalidArgs2_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetShaderivInvalidArgs2_1) {
+TEST_P(GLES2DecoderTest1, GetShaderivInvalidArgs2_1) {
EXPECT_CALL(*gl_, GetShaderiv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetShaderiv, 0>(false);
cmds::GetShaderiv::Result* result =
static_cast<cmds::GetShaderiv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetShaderiv cmd;
- cmd.Init(
- client_shader_id_, GL_SHADER_TYPE, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(client_shader_id_,
+ GL_SHADER_TYPE,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
@@ -1643,8 +1451,7 @@ TEST_F(GLES2DecoderTest1, GetShaderivInvalidArgs2_1) {
// TODO(gman): GetShaderSource
// TODO(gman): GetString
-
-TEST_F(GLES2DecoderTest1, GetTexParameterfvValidArgs) {
+TEST_P(GLES2DecoderTest1, GetTexParameterfvValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -1652,52 +1459,55 @@ TEST_F(GLES2DecoderTest1, GetTexParameterfvValidArgs) {
SpecializedSetup<cmds::GetTexParameterfv, 0>(true);
typedef cmds::GetTexParameterfv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(
- *gl_, GetTexParameterfv(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, result->GetData()));
+ EXPECT_CALL(*gl_,
+ GetTexParameterfv(
+ GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, result->GetData()));
result->size = 0;
cmds::GetTexParameterfv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_TEXTURE_MAG_FILTER),
- result->GetNumResults());
+ EXPECT_EQ(
+ decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_TEXTURE_MAG_FILTER),
+ result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, GetTexParameterfvInvalidArgs0_0) {
EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
cmds::GetTexParameterfv::Result* result =
static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetTexParameterfv cmd;
- cmd.Init(
- GL_PROXY_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_PROXY_TEXTURE_CUBE_MAP,
+ GL_TEXTURE_MAG_FILTER,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest1, GetTexParameterfvInvalidArgs1_0) {
EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
cmds::GetTexParameterfv::Result* result =
static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetTexParameterfv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_GENERATE_MIPMAP, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_TEXTURE_2D,
+ GL_GENERATE_MIPMAP,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_0) {
EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
cmds::GetTexParameterfv::Result* result =
@@ -1709,21 +1519,22 @@ TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_1) {
+TEST_P(GLES2DecoderTest1, GetTexParameterfvInvalidArgs2_1) {
EXPECT_CALL(*gl_, GetTexParameterfv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetTexParameterfv, 0>(false);
cmds::GetTexParameterfv::Result* result =
static_cast<cmds::GetTexParameterfv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetTexParameterfv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetTexParameterivValidArgs) {
+TEST_P(GLES2DecoderTest1, GetTexParameterivValidArgs) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
@@ -1731,52 +1542,55 @@ TEST_F(GLES2DecoderTest1, GetTexParameterivValidArgs) {
SpecializedSetup<cmds::GetTexParameteriv, 0>(true);
typedef cmds::GetTexParameteriv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
- EXPECT_CALL(
- *gl_, GetTexParameteriv(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, result->GetData()));
+ EXPECT_CALL(*gl_,
+ GetTexParameteriv(
+ GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, result->GetData()));
result->size = 0;
cmds::GetTexParameteriv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
- GL_TEXTURE_MAG_FILTER),
- result->GetNumResults());
+ EXPECT_EQ(
+ decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_TEXTURE_MAG_FILTER),
+ result->GetNumResults());
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, GetTexParameterivInvalidArgs0_0) {
EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
cmds::GetTexParameteriv::Result* result =
static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetTexParameteriv cmd;
- cmd.Init(
- GL_PROXY_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_PROXY_TEXTURE_CUBE_MAP,
+ GL_TEXTURE_MAG_FILTER,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest1, GetTexParameterivInvalidArgs1_0) {
EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
cmds::GetTexParameteriv::Result* result =
static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetTexParameteriv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_GENERATE_MIPMAP, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(GL_TEXTURE_2D,
+ GL_GENERATE_MIPMAP,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_0) {
EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
cmds::GetTexParameteriv::Result* result =
@@ -1788,16 +1602,17 @@ TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_1) {
+TEST_P(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_1) {
EXPECT_CALL(*gl_, GetTexParameteriv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetTexParameteriv, 0>(false);
cmds::GetTexParameteriv::Result* result =
static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetTexParameteriv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
@@ -1807,18 +1622,16 @@ TEST_F(GLES2DecoderTest1, GetTexParameterivInvalidArgs2_1) {
// TODO(gman): GetUniformLocation
-// TODO(gman): GetUniformLocationBucket
-
-
-TEST_F(GLES2DecoderTest1, GetVertexAttribfvValidArgs) {
+TEST_P(GLES2DecoderTest1, GetVertexAttribfvValidArgs) {
SpecializedSetup<cmds::GetVertexAttribfv, 0>(true);
typedef cmds::GetVertexAttribfv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
result->size = 0;
cmds::GetVertexAttribfv cmd;
- cmd.Init(
- 1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(1,
+ GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
GL_VERTEX_ATTRIB_ARRAY_NORMALIZED),
@@ -1826,7 +1639,7 @@ TEST_F(GLES2DecoderTest1, GetVertexAttribfvValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_0) {
EXPECT_CALL(*gl_, GetVertexAttribfv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetVertexAttribfv, 0>(false);
cmds::GetVertexAttribfv::Result* result =
@@ -1838,29 +1651,31 @@ TEST_F(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_1) {
+TEST_P(GLES2DecoderTest1, GetVertexAttribfvInvalidArgs2_1) {
EXPECT_CALL(*gl_, GetVertexAttribfv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetVertexAttribfv, 0>(false);
cmds::GetVertexAttribfv::Result* result =
static_cast<cmds::GetVertexAttribfv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetVertexAttribfv cmd;
- cmd.Init(
- 1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(1,
+ GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetVertexAttribivValidArgs) {
+TEST_P(GLES2DecoderTest1, GetVertexAttribivValidArgs) {
SpecializedSetup<cmds::GetVertexAttribiv, 0>(true);
typedef cmds::GetVertexAttribiv::Result Result;
Result* result = static_cast<Result*>(shared_memory_address_);
result->size = 0;
cmds::GetVertexAttribiv cmd;
- cmd.Init(
- 1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, shared_memory_id_,
- shared_memory_offset_);
+ cmd.Init(1,
+ GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
+ shared_memory_id_,
+ shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
GL_VERTEX_ATTRIB_ARRAY_NORMALIZED),
@@ -1868,7 +1683,7 @@ TEST_F(GLES2DecoderTest1, GetVertexAttribivValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, GetVertexAttribivInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest1, GetVertexAttribivInvalidArgs2_0) {
EXPECT_CALL(*gl_, GetVertexAttribiv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetVertexAttribiv, 0>(false);
cmds::GetVertexAttribiv::Result* result =
@@ -1880,23 +1695,23 @@ TEST_F(GLES2DecoderTest1, GetVertexAttribivInvalidArgs2_0) {
EXPECT_EQ(0u, result->size);
}
-TEST_F(GLES2DecoderTest1, GetVertexAttribivInvalidArgs2_1) {
+TEST_P(GLES2DecoderTest1, GetVertexAttribivInvalidArgs2_1) {
EXPECT_CALL(*gl_, GetVertexAttribiv(_, _, _)).Times(0);
SpecializedSetup<cmds::GetVertexAttribiv, 0>(false);
cmds::GetVertexAttribiv::Result* result =
static_cast<cmds::GetVertexAttribiv::Result*>(shared_memory_address_);
result->size = 0;
cmds::GetVertexAttribiv cmd;
- cmd.Init(
- 1, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, shared_memory_id_,
- kInvalidSharedMemoryOffset);
+ cmd.Init(1,
+ GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
EXPECT_EQ(0u, result->size);
}
// TODO(gman): GetVertexAttribPointerv
-
-TEST_F(GLES2DecoderTest1, HintValidArgs) {
+TEST_P(GLES2DecoderTest1, HintValidArgs) {
EXPECT_CALL(*gl_, Hint(GL_GENERATE_MIPMAP_HINT, GL_FASTEST));
SpecializedSetup<cmds::Hint, 0>(true);
cmds::Hint cmd;
@@ -1905,7 +1720,7 @@ TEST_F(GLES2DecoderTest1, HintValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, HintInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, HintInvalidArgs0_0) {
EXPECT_CALL(*gl_, Hint(_, _)).Times(0);
SpecializedSetup<cmds::Hint, 0>(false);
cmds::Hint cmd;
@@ -1914,7 +1729,7 @@ TEST_F(GLES2DecoderTest1, HintInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, IsBufferValidArgs) {
+TEST_P(GLES2DecoderTest1, IsBufferValidArgs) {
SpecializedSetup<cmds::IsBuffer, 0>(true);
cmds::IsBuffer cmd;
cmd.Init(client_buffer_id_, shared_memory_id_, shared_memory_offset_);
@@ -1922,7 +1737,7 @@ TEST_F(GLES2DecoderTest1, IsBufferValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, IsBufferInvalidArgsBadSharedMemoryId) {
+TEST_P(GLES2DecoderTest1, IsBufferInvalidArgsBadSharedMemoryId) {
SpecializedSetup<cmds::IsBuffer, 0>(false);
cmds::IsBuffer cmd;
cmd.Init(client_buffer_id_, kInvalidSharedMemoryId, shared_memory_offset_);
@@ -1931,7 +1746,7 @@ TEST_F(GLES2DecoderTest1, IsBufferInvalidArgsBadSharedMemoryId) {
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest1, IsEnabledValidArgs) {
+TEST_P(GLES2DecoderTest1, IsEnabledValidArgs) {
SpecializedSetup<cmds::IsEnabled, 0>(true);
cmds::IsEnabled cmd;
cmd.Init(GL_BLEND, shared_memory_id_, shared_memory_offset_);
@@ -1939,7 +1754,7 @@ TEST_F(GLES2DecoderTest1, IsEnabledValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, IsEnabledInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgs0_0) {
EXPECT_CALL(*gl_, IsEnabled(_)).Times(0);
SpecializedSetup<cmds::IsEnabled, 0>(false);
cmds::IsEnabled cmd;
@@ -1948,7 +1763,7 @@ TEST_F(GLES2DecoderTest1, IsEnabledInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, IsEnabledInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgs0_1) {
EXPECT_CALL(*gl_, IsEnabled(_)).Times(0);
SpecializedSetup<cmds::IsEnabled, 0>(false);
cmds::IsEnabled cmd;
@@ -1957,7 +1772,7 @@ TEST_F(GLES2DecoderTest1, IsEnabledInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest1, IsEnabledInvalidArgsBadSharedMemoryId) {
+TEST_P(GLES2DecoderTest1, IsEnabledInvalidArgsBadSharedMemoryId) {
SpecializedSetup<cmds::IsEnabled, 0>(false);
cmds::IsEnabled cmd;
cmd.Init(GL_BLEND, kInvalidSharedMemoryId, shared_memory_offset_);
@@ -1966,7 +1781,7 @@ TEST_F(GLES2DecoderTest1, IsEnabledInvalidArgsBadSharedMemoryId) {
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest1, IsFramebufferValidArgs) {
+TEST_P(GLES2DecoderTest1, IsFramebufferValidArgs) {
SpecializedSetup<cmds::IsFramebuffer, 0>(true);
cmds::IsFramebuffer cmd;
cmd.Init(client_framebuffer_id_, shared_memory_id_, shared_memory_offset_);
@@ -1974,7 +1789,7 @@ TEST_F(GLES2DecoderTest1, IsFramebufferValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, IsFramebufferInvalidArgsBadSharedMemoryId) {
+TEST_P(GLES2DecoderTest1, IsFramebufferInvalidArgsBadSharedMemoryId) {
SpecializedSetup<cmds::IsFramebuffer, 0>(false);
cmds::IsFramebuffer cmd;
cmd.Init(
@@ -1985,7 +1800,7 @@ TEST_F(GLES2DecoderTest1, IsFramebufferInvalidArgsBadSharedMemoryId) {
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
}
-TEST_F(GLES2DecoderTest1, IsProgramValidArgs) {
+TEST_P(GLES2DecoderTest1, IsProgramValidArgs) {
SpecializedSetup<cmds::IsProgram, 0>(true);
cmds::IsProgram cmd;
cmd.Init(client_program_id_, shared_memory_id_, shared_memory_offset_);
@@ -1993,7 +1808,7 @@ TEST_F(GLES2DecoderTest1, IsProgramValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest1, IsProgramInvalidArgsBadSharedMemoryId) {
+TEST_P(GLES2DecoderTest1, IsProgramInvalidArgsBadSharedMemoryId) {
SpecializedSetup<cmds::IsProgram, 0>(false);
cmds::IsProgram cmd;
cmd.Init(client_program_id_, kInvalidSharedMemoryId, shared_memory_offset_);
@@ -2001,5 +1816,140 @@ TEST_F(GLES2DecoderTest1, IsProgramInvalidArgsBadSharedMemoryId) {
cmd.Init(client_program_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
}
-#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
+TEST_P(GLES2DecoderTest1, IsRenderbufferValidArgs) {
+ SpecializedSetup<cmds::IsRenderbuffer, 0>(true);
+ cmds::IsRenderbuffer cmd;
+ cmd.Init(client_renderbuffer_id_, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, IsRenderbufferInvalidArgsBadSharedMemoryId) {
+ SpecializedSetup<cmds::IsRenderbuffer, 0>(false);
+ cmds::IsRenderbuffer cmd;
+ cmd.Init(
+ client_renderbuffer_id_, kInvalidSharedMemoryId, shared_memory_offset_);
+ EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
+ cmd.Init(
+ client_renderbuffer_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
+ EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest1, IsShaderValidArgs) {
+ SpecializedSetup<cmds::IsShader, 0>(true);
+ cmds::IsShader cmd;
+ cmd.Init(client_shader_id_, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, IsShaderInvalidArgsBadSharedMemoryId) {
+ SpecializedSetup<cmds::IsShader, 0>(false);
+ cmds::IsShader cmd;
+ cmd.Init(client_shader_id_, kInvalidSharedMemoryId, shared_memory_offset_);
+ EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
+ cmd.Init(client_shader_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
+ EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest1, IsTextureValidArgs) {
+ SpecializedSetup<cmds::IsTexture, 0>(true);
+ cmds::IsTexture cmd;
+ cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, IsTextureInvalidArgsBadSharedMemoryId) {
+ SpecializedSetup<cmds::IsTexture, 0>(false);
+ cmds::IsTexture cmd;
+ cmd.Init(client_texture_id_, kInvalidSharedMemoryId, shared_memory_offset_);
+ EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
+ cmd.Init(client_texture_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
+ EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest1, LineWidthValidArgs) {
+ EXPECT_CALL(*gl_, LineWidth(0.5f));
+ SpecializedSetup<cmds::LineWidth, 0>(true);
+ cmds::LineWidth cmd;
+ cmd.Init(0.5f);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, LineWidthInvalidValue0_0) {
+ SpecializedSetup<cmds::LineWidth, 0>(false);
+ cmds::LineWidth cmd;
+ cmd.Init(0.0f);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, LinkProgramValidArgs) {
+ EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId));
+ SpecializedSetup<cmds::LinkProgram, 0>(true);
+ cmds::LinkProgram cmd;
+ cmd.Init(client_program_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+// TODO(gman): PixelStorei
+
+TEST_P(GLES2DecoderTest1, PolygonOffsetValidArgs) {
+ EXPECT_CALL(*gl_, PolygonOffset(1, 2));
+ SpecializedSetup<cmds::PolygonOffset, 0>(true);
+ cmds::PolygonOffset cmd;
+ cmd.Init(1, 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+// TODO(gman): ReadPixels
+
+// TODO(gman): ReleaseShaderCompiler
+
+TEST_P(GLES2DecoderTest1, RenderbufferStorageValidArgs) {
+ SpecializedSetup<cmds::RenderbufferStorage, 0>(true);
+ cmds::RenderbufferStorage cmd;
+ cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, RenderbufferStorageInvalidArgs0_0) {
+ EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
+ SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
+ cmds::RenderbufferStorage cmd;
+ cmd.Init(GL_FRAMEBUFFER, GL_RGBA4, 3, 4);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, RenderbufferStorageInvalidArgs2_0) {
+ EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
+ SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
+ cmds::RenderbufferStorage cmd;
+ cmd.Init(GL_RENDERBUFFER, GL_RGBA4, -1, 4);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, RenderbufferStorageInvalidArgs3_0) {
+ EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
+ SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
+ cmds::RenderbufferStorage cmd;
+ cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, -1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest1, SampleCoverageValidArgs) {
+ EXPECT_CALL(*gl_, SampleCoverage(1, true));
+ SpecializedSetup<cmds::SampleCoverage, 0>(true);
+ cmds::SampleCoverage cmd;
+ cmd.Init(1, true);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc
index 8c9c6ecd839..221aa332a48 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc
@@ -15,6 +15,7 @@
using ::gfx::MockGLInterface;
using ::testing::_;
+using ::testing::AnyNumber;
using ::testing::DoAll;
using ::testing::InSequence;
using ::testing::MatcherCast;
@@ -30,43 +31,236 @@ namespace gles2 {
class GLES2DecoderTest2 : public GLES2DecoderTestBase {
public:
GLES2DecoderTest2() { }
-};
-template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::GenQueriesEXT, 0>(
- bool valid) {
- if (!valid) {
- // Make the client_query_id_ so that trying to make it again
- // will fail.
- GetSharedMemoryAs<GLuint*>()[0] = client_query_id_;
- cmds::GenQueriesEXT cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ void TestAcceptedUniform(GLenum uniform_type, uint32 accepts_apis) {
+ SetupShaderForUniform(uniform_type);
+ bool valid_uniform = false;
+
+ EXPECT_CALL(*gl_, Uniform1i(1, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform1iv(1, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform2iv(1, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform3iv(1, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform4iv(1, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform1f(1, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform1fv(1, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform2fv(1, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform3fv(1, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, Uniform4fv(1, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, UniformMatrix2fv(1, _, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, UniformMatrix3fv(1, _, _, _)).Times(AnyNumber());
+ EXPECT_CALL(*gl_, UniformMatrix4fv(1, _, _, _)).Times(AnyNumber());
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform1i;
+ cmds::Uniform1i cmd;
+ cmd.Init(1, 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform1i;
+ cmds::Uniform1ivImmediate& cmd =
+ *GetImmediateAs<cmds::Uniform1ivImmediate>();
+ GLint data[2][1] = {{0}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform2i;
+ cmds::Uniform2i cmd;
+ cmd.Init(1, 2, 3);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform2i;
+ cmds::Uniform2ivImmediate& cmd =
+ *GetImmediateAs<cmds::Uniform2ivImmediate>();
+ GLint data[2][2] = {{0}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform3i;
+ cmds::Uniform3i cmd;
+ cmd.Init(1, 2, 3, 4);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform3i;
+ cmds::Uniform3ivImmediate& cmd =
+ *GetImmediateAs<cmds::Uniform3ivImmediate>();
+ GLint data[2][3] = {{0}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform4i;
+ cmds::Uniform4i cmd;
+ cmd.Init(1, 2, 3, 4, 5);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform4i;
+ cmds::Uniform4ivImmediate& cmd =
+ *GetImmediateAs<cmds::Uniform4ivImmediate>();
+ GLint data[2][4] = {{0}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ ////////////////////
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform1f;
+ cmds::Uniform1f cmd;
+ cmd.Init(1, 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform1f;
+ cmds::Uniform1fvImmediate& cmd =
+ *GetImmediateAs<cmds::Uniform1fvImmediate>();
+ GLfloat data[2][1] = {{0.0f}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform2f;
+ cmds::Uniform2f cmd;
+ cmd.Init(1, 2, 3);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform2f;
+ cmds::Uniform2fvImmediate& cmd =
+ *GetImmediateAs<cmds::Uniform2fvImmediate>();
+ GLfloat data[2][2] = {{0.0f}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform3f;
+ cmds::Uniform3f cmd;
+ cmd.Init(1, 2, 3, 4);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform3f;
+ cmds::Uniform3fvImmediate& cmd =
+ *GetImmediateAs<cmds::Uniform3fvImmediate>();
+ GLfloat data[2][3] = {{0.0f}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform4f;
+ cmds::Uniform4f cmd;
+ cmd.Init(1, 2, 3, 4, 5);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniform4f;
+ cmds::Uniform4fvImmediate& cmd =
+ *GetImmediateAs<cmds::Uniform4fvImmediate>();
+ GLfloat data[2][4] = {{0.0f}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniformMatrix2f;
+ cmds::UniformMatrix2fvImmediate& cmd =
+ *GetImmediateAs<cmds::UniformMatrix2fvImmediate>();
+ GLfloat data[2][2 * 2] = {{0.0f}};
+
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniformMatrix3f;
+ cmds::UniformMatrix3fvImmediate& cmd =
+ *GetImmediateAs<cmds::UniformMatrix3fvImmediate>();
+ GLfloat data[2][3 * 3] = {{0.0f}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
+
+ {
+ valid_uniform = accepts_apis & Program::kUniformMatrix4f;
+ cmds::UniformMatrix4fvImmediate& cmd =
+ *GetImmediateAs<cmds::UniformMatrix4fvImmediate>();
+ GLfloat data[2][4 * 4] = {{0.0f}};
+ cmd.Init(1, 2, &data[0][0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(data)));
+ EXPECT_EQ(valid_uniform ? GL_NO_ERROR : GL_INVALID_OPERATION,
+ GetGLError());
+ }
}
};
+INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest2, ::testing::Bool());
+
template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::GenQueriesEXTImmediate, 0>(
bool valid) {
if (!valid) {
// Make the client_query_id_ so that trying to make it again
// will fail.
- GetSharedMemoryAs<GLuint*>()[0] = client_query_id_;
- cmds::GenQueriesEXT cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- }
-};
-
-template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::DeleteQueriesEXT, 0>(
- bool valid) {
- if (valid) {
- // Make the client_query_id_ so that trying to delete it will succeed.
- GetSharedMemoryAs<GLuint*>()[0] = client_query_id_;
- cmds::GenQueriesEXT cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ cmds::GenQueriesEXTImmediate& cmd =
+ *GetImmediateAs<cmds::GenQueriesEXTImmediate>();
+ cmd.Init(1, &client_query_id_);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(cmd, sizeof(client_query_id_)));
}
};
@@ -75,10 +269,11 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::DeleteQueriesEXTImmediate, 0>(
bool valid) {
if (valid) {
// Make the client_query_id_ so that trying to delete it will succeed.
- GetSharedMemoryAs<GLuint*>()[0] = client_query_id_;
- cmds::GenQueriesEXT cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ cmds::GenQueriesEXTImmediate& cmd =
+ *GetImmediateAs<cmds::GenQueriesEXTImmediate>();
+ cmd.Init(1, &client_query_id_);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(cmd, sizeof(client_query_id_)));
}
};
@@ -134,6 +329,21 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::LinkProgram, 0>(
};
template <>
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UseProgram, 0>(
+ bool /* valid */) {
+ // Needs the same setup as LinkProgram.
+ SpecializedSetup<cmds::LinkProgram, 0>(false);
+
+ EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId))
+ .Times(1)
+ .RetiresOnSaturation();
+
+ cmds::LinkProgram link_cmd;
+ link_cmd.Init(client_program_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
+};
+
+template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::ValidateProgram, 0>(
bool /* valid */) {
// Needs the same setup as LinkProgram.
@@ -160,24 +370,12 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1f, 0>(
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1fv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_FLOAT);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT);
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1iv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_INT);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform1ivImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_INT);
@@ -196,18 +394,6 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2i, 0>(
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2fv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_FLOAT_VEC2);
-};
-
-template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2iv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_INT_VEC2);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform2fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_VEC2);
@@ -232,18 +418,6 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3i, 0>(
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3fv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_FLOAT_VEC3);
-};
-
-template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3iv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_INT_VEC3);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform3fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_VEC3);
@@ -268,18 +442,6 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4i, 0>(
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4fv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_FLOAT_VEC4);
-};
-
-template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4iv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_INT_VEC4);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_VEC4);
@@ -292,61 +454,24 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4ivImmediate, 0>(
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix2fv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_FLOAT_MAT2);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix2fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT2);
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3fv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_FLOAT_MAT3);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT3);
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4fv, 0>(
- bool /* valid */) {
- SetupShaderForUniform(GL_FLOAT_MAT4);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT4);
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::RenderbufferStorage, 0>(
- bool valid) {
- DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
- kServiceRenderbufferId);
- if (valid) {
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_,
- RenderbufferStorageEXT(GL_RENDERBUFFER, _, 3, 4))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, GetError())
- .WillOnce(Return(GL_NO_ERROR))
- .RetiresOnSaturation();
- }
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterf, 0>(
bool /* valid */) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
@@ -359,24 +484,12 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameteri, 0>(
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterfv, 0>(
- bool /* valid */) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterfvImmediate, 0>(
bool /* valid */) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
};
template <>
-void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameteriv, 0>(
- bool /* valid */) {
- DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
-};
-
-template <>
void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterivImmediate, 0>(
bool /* valid */) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
@@ -384,6 +497,66 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::TexParameterivImmediate, 0>(
#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h"
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT) {
+ TestAcceptedUniform(GL_INT, Program::kUniform1i);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC2) {
+ TestAcceptedUniform(GL_INT_VEC2, Program::kUniform2i);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC3) {
+ TestAcceptedUniform(GL_INT_VEC3, Program::kUniform3i);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC4) {
+ TestAcceptedUniform(GL_INT_VEC4, Program::kUniform4i);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL) {
+ TestAcceptedUniform(GL_BOOL, Program::kUniform1i | Program::kUniform1f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC2) {
+ TestAcceptedUniform(GL_BOOL_VEC2, Program::kUniform2i | Program::kUniform2f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC3) {
+ TestAcceptedUniform(GL_BOOL_VEC3, Program::kUniform3i | Program::kUniform3f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC4) {
+ TestAcceptedUniform(GL_BOOL_VEC4, Program::kUniform4i | Program::kUniform4f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniformTypeFLOAT) {
+ TestAcceptedUniform(GL_FLOAT, Program::kUniform1f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC2) {
+ TestAcceptedUniform(GL_FLOAT_VEC2, Program::kUniform2f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC3) {
+ TestAcceptedUniform(GL_FLOAT_VEC3, Program::kUniform3f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC4) {
+ TestAcceptedUniform(GL_FLOAT_VEC4, Program::kUniform4f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT2) {
+ TestAcceptedUniform(GL_FLOAT_MAT2, Program::kUniformMatrix2f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT3) {
+ TestAcceptedUniform(GL_FLOAT_MAT3, Program::kUniformMatrix3f);
+}
+
+TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT4) {
+ TestAcceptedUniform(GL_FLOAT_MAT4, Program::kUniformMatrix4f);
+}
+
} // namespace gles2
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
index db72cac7225..dd2cd0edafb 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h
@@ -1,154 +1,18 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by gles2_cmd_decoder_unittest_2.cc
#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
-
-TEST_F(GLES2DecoderTest2, IsRenderbufferValidArgs) {
- SpecializedSetup<cmds::IsRenderbuffer, 0>(true);
- cmds::IsRenderbuffer cmd;
- cmd.Init(client_renderbuffer_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, IsRenderbufferInvalidArgsBadSharedMemoryId) {
- SpecializedSetup<cmds::IsRenderbuffer, 0>(false);
- cmds::IsRenderbuffer cmd;
- cmd.Init(
- client_renderbuffer_id_, kInvalidSharedMemoryId, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- cmd.Init(
- client_renderbuffer_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, IsShaderValidArgs) {
- SpecializedSetup<cmds::IsShader, 0>(true);
- cmds::IsShader cmd;
- cmd.Init(client_shader_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, IsShaderInvalidArgsBadSharedMemoryId) {
- SpecializedSetup<cmds::IsShader, 0>(false);
- cmds::IsShader cmd;
- cmd.Init(client_shader_id_, kInvalidSharedMemoryId, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- cmd.Init(client_shader_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, IsTextureValidArgs) {
- SpecializedSetup<cmds::IsTexture, 0>(true);
- cmds::IsTexture cmd;
- cmd.Init(client_texture_id_, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, IsTextureInvalidArgsBadSharedMemoryId) {
- SpecializedSetup<cmds::IsTexture, 0>(false);
- cmds::IsTexture cmd;
- cmd.Init(client_texture_id_, kInvalidSharedMemoryId, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- cmd.Init(client_texture_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, LineWidthValidArgs) {
- EXPECT_CALL(*gl_, LineWidth(0.5f));
- SpecializedSetup<cmds::LineWidth, 0>(true);
- cmds::LineWidth cmd;
- cmd.Init(0.5f);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, LineWidthInvalidValue0_0) {
- SpecializedSetup<cmds::LineWidth, 0>(false);
- cmds::LineWidth cmd;
- cmd.Init(0.0f);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, LinkProgramValidArgs) {
- EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId));
- SpecializedSetup<cmds::LinkProgram, 0>(true);
- cmds::LinkProgram cmd;
- cmd.Init(client_program_id_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-// TODO(gman): PixelStorei
-
-
-TEST_F(GLES2DecoderTest2, PolygonOffsetValidArgs) {
- EXPECT_CALL(*gl_, PolygonOffset(1, 2));
- SpecializedSetup<cmds::PolygonOffset, 0>(true);
- cmds::PolygonOffset cmd;
- cmd.Init(1, 2);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-// TODO(gman): ReadPixels
-
-// TODO(gman): ReleaseShaderCompiler
-
-TEST_F(GLES2DecoderTest2, RenderbufferStorageValidArgs) {
- SpecializedSetup<cmds::RenderbufferStorage, 0>(true);
- cmds::RenderbufferStorage cmd;
- cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, RenderbufferStorageInvalidArgs0_0) {
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
- cmds::RenderbufferStorage cmd;
- cmd.Init(GL_FRAMEBUFFER, GL_RGBA4, 3, 4);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, RenderbufferStorageInvalidArgs2_0) {
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
- cmds::RenderbufferStorage cmd;
- cmd.Init(GL_RENDERBUFFER, GL_RGBA4, -1, 4);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, RenderbufferStorageInvalidArgs3_0) {
- EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::RenderbufferStorage, 0>(false);
- cmds::RenderbufferStorage cmd;
- cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, -1);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, SampleCoverageValidArgs) {
- EXPECT_CALL(*gl_, SampleCoverage(1, true));
- SpecializedSetup<cmds::SampleCoverage, 0>(true);
- cmds::SampleCoverage cmd;
- cmd.Init(1, true);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, ScissorValidArgs) {
+TEST_P(GLES2DecoderTest2, ScissorValidArgs) {
EXPECT_CALL(*gl_, Scissor(1, 2, 3, 4));
SpecializedSetup<cmds::Scissor, 0>(true);
cmds::Scissor cmd;
@@ -157,7 +21,7 @@ TEST_F(GLES2DecoderTest2, ScissorValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, ScissorInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest2, ScissorInvalidArgs2_0) {
EXPECT_CALL(*gl_, Scissor(_, _, _, _)).Times(0);
SpecializedSetup<cmds::Scissor, 0>(false);
cmds::Scissor cmd;
@@ -166,7 +30,7 @@ TEST_F(GLES2DecoderTest2, ScissorInvalidArgs2_0) {
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderTest2, ScissorInvalidArgs3_0) {
+TEST_P(GLES2DecoderTest2, ScissorInvalidArgs3_0) {
EXPECT_CALL(*gl_, Scissor(_, _, _, _)).Times(0);
SpecializedSetup<cmds::Scissor, 0>(false);
cmds::Scissor cmd;
@@ -176,11 +40,9 @@ TEST_F(GLES2DecoderTest2, ScissorInvalidArgs3_0) {
}
// TODO(gman): ShaderBinary
-// TODO(gman): ShaderSource
-
// TODO(gman): ShaderSourceBucket
-TEST_F(GLES2DecoderTest2, StencilFuncValidArgs) {
+TEST_P(GLES2DecoderTest2, StencilFuncValidArgs) {
EXPECT_CALL(*gl_, StencilFunc(GL_NEVER, 2, 3));
SpecializedSetup<cmds::StencilFunc, 0>(true);
cmds::StencilFunc cmd;
@@ -189,7 +51,7 @@ TEST_F(GLES2DecoderTest2, StencilFuncValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, StencilFuncSeparateValidArgs) {
+TEST_P(GLES2DecoderTest2, StencilFuncSeparateValidArgs) {
EXPECT_CALL(*gl_, StencilFuncSeparate(GL_FRONT, GL_NEVER, 3, 4));
SpecializedSetup<cmds::StencilFuncSeparate, 0>(true);
cmds::StencilFuncSeparate cmd;
@@ -198,7 +60,7 @@ TEST_F(GLES2DecoderTest2, StencilFuncSeparateValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, StencilMaskValidArgs) {
+TEST_P(GLES2DecoderTest2, StencilMaskValidArgs) {
SpecializedSetup<cmds::StencilMask, 0>(true);
cmds::StencilMask cmd;
cmd.Init(1);
@@ -206,7 +68,7 @@ TEST_F(GLES2DecoderTest2, StencilMaskValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, StencilMaskSeparateValidArgs) {
+TEST_P(GLES2DecoderTest2, StencilMaskSeparateValidArgs) {
SpecializedSetup<cmds::StencilMaskSeparate, 0>(true);
cmds::StencilMaskSeparate cmd;
cmd.Init(GL_FRONT, 2);
@@ -214,7 +76,7 @@ TEST_F(GLES2DecoderTest2, StencilMaskSeparateValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, StencilOpValidArgs) {
+TEST_P(GLES2DecoderTest2, StencilOpValidArgs) {
EXPECT_CALL(*gl_, StencilOp(GL_KEEP, GL_INCR, GL_KEEP));
SpecializedSetup<cmds::StencilOp, 0>(true);
cmds::StencilOp cmd;
@@ -223,7 +85,7 @@ TEST_F(GLES2DecoderTest2, StencilOpValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, StencilOpSeparateValidArgs) {
+TEST_P(GLES2DecoderTest2, StencilOpSeparateValidArgs) {
EXPECT_CALL(*gl_, StencilOpSeparate(GL_FRONT, GL_INCR, GL_KEEP, GL_KEEP));
SpecializedSetup<cmds::StencilOpSeparate, 0>(true);
cmds::StencilOpSeparate cmd;
@@ -233,10 +95,9 @@ TEST_F(GLES2DecoderTest2, StencilOpSeparateValidArgs) {
}
// TODO(gman): TexImage2D
-
-TEST_F(GLES2DecoderTest2, TexParameterfValidArgs) {
- EXPECT_CALL(
- *gl_, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
+TEST_P(GLES2DecoderTest2, TexParameterfValidArgs) {
+ EXPECT_CALL(*gl_,
+ TexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
SpecializedSetup<cmds::TexParameterf, 0>(true);
cmds::TexParameterf cmd;
cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -244,8 +105,8 @@ TEST_F(GLES2DecoderTest2, TexParameterfValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterfInvalidArgs0_0) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
+TEST_P(GLES2DecoderTest2, TexParameterfInvalidArgs0_0) {
+ EXPECT_CALL(*gl_, TexParameterf(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterf, 0>(false);
cmds::TexParameterf cmd;
cmd.Init(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -253,8 +114,8 @@ TEST_F(GLES2DecoderTest2, TexParameterfInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterfInvalidArgs0_1) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
+TEST_P(GLES2DecoderTest2, TexParameterfInvalidArgs0_1) {
+ EXPECT_CALL(*gl_, TexParameterf(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterf, 0>(false);
cmds::TexParameterf cmd;
cmd.Init(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -262,8 +123,8 @@ TEST_F(GLES2DecoderTest2, TexParameterfInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterfInvalidArgs1_0) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
+TEST_P(GLES2DecoderTest2, TexParameterfInvalidArgs1_0) {
+ EXPECT_CALL(*gl_, TexParameterf(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterf, 0>(false);
cmds::TexParameterf cmd;
cmd.Init(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_NEAREST);
@@ -271,131 +132,65 @@ TEST_F(GLES2DecoderTest2, TexParameterfInvalidArgs1_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterfvValidArgs) {
- SpecializedSetup<cmds::TexParameterfv, 0>(true);
- cmds::TexParameterfv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
- GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST;
- EXPECT_CALL(
- *gl_, TexParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
- *reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterfvInvalidArgs0_0) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameterfv, 0>(false);
- cmds::TexParameterfv cmd;
- cmd.Init(
- GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
- GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterfvInvalidArgs0_1) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameterfv, 0>(false);
- cmds::TexParameterfv cmd;
- cmd.Init(
- GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
- GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterfvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameterfv, 0>(false);
- cmds::TexParameterfv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_GENERATE_MIPMAP, shared_memory_id_,
- shared_memory_offset_);
- GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterfvInvalidArgs2_0) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameterfv, 0>(false);
- cmds::TexParameterfv cmd;
- cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, kInvalidSharedMemoryId, 0);
- GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterfvInvalidArgs2_1) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameterfv, 0>(false);
- cmds::TexParameterfv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- kInvalidSharedMemoryOffset);
- GetSharedMemoryAs<GLfloat*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterfvImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, TexParameterfvImmediateValidArgs) {
cmds::TexParameterfvImmediate& cmd =
*GetImmediateAs<cmds::TexParameterfvImmediate>();
SpecializedSetup<cmds::TexParameterfvImmediate, 0>(true);
- GLfloat temp[1] = { GL_NEAREST, };
+ GLfloat temp[1] = {
+ GL_NEAREST,
+ };
cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &temp[0]);
EXPECT_CALL(
*gl_,
- TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, *reinterpret_cast<
- GLfloat*>(ImmediateDataAddress(&cmd))));
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ TexParameterf(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ *reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterfvImmediateInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest2, TexParameterfvImmediateInvalidArgs0_0) {
cmds::TexParameterfvImmediate& cmd =
*GetImmediateAs<cmds::TexParameterfvImmediate>();
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
+ EXPECT_CALL(*gl_, TexParameterf(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterfvImmediate, 0>(false);
- GLfloat temp[1] = { GL_NEAREST, };
+ GLfloat temp[1] = {
+ GL_NEAREST,
+ };
cmd.Init(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterfvImmediateInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest2, TexParameterfvImmediateInvalidArgs0_1) {
cmds::TexParameterfvImmediate& cmd =
*GetImmediateAs<cmds::TexParameterfvImmediate>();
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
+ EXPECT_CALL(*gl_, TexParameterf(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterfvImmediate, 0>(false);
- GLfloat temp[1] = { GL_NEAREST, };
+ GLfloat temp[1] = {
+ GL_NEAREST,
+ };
cmd.Init(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterfvImmediateInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest2, TexParameterfvImmediateInvalidArgs1_0) {
cmds::TexParameterfvImmediate& cmd =
*GetImmediateAs<cmds::TexParameterfvImmediate>();
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
+ EXPECT_CALL(*gl_, TexParameterf(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterfvImmediate, 0>(false);
- GLfloat temp[1] = { GL_NEAREST, };
+ GLfloat temp[1] = {
+ GL_NEAREST,
+ };
cmd.Init(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameteriValidArgs) {
- EXPECT_CALL(
- *gl_, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
+TEST_P(GLES2DecoderTest2, TexParameteriValidArgs) {
+ EXPECT_CALL(*gl_,
+ TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
SpecializedSetup<cmds::TexParameteri, 0>(true);
cmds::TexParameteri cmd;
cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -403,7 +198,7 @@ TEST_F(GLES2DecoderTest2, TexParameteriValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameteriInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest2, TexParameteriInvalidArgs0_0) {
EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameteri, 0>(false);
cmds::TexParameteri cmd;
@@ -412,7 +207,7 @@ TEST_F(GLES2DecoderTest2, TexParameteriInvalidArgs0_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameteriInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest2, TexParameteriInvalidArgs0_1) {
EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameteri, 0>(false);
cmds::TexParameteri cmd;
@@ -421,7 +216,7 @@ TEST_F(GLES2DecoderTest2, TexParameteriInvalidArgs0_1) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameteriInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest2, TexParameteriInvalidArgs1_0) {
EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameteri, 0>(false);
cmds::TexParameteri cmd;
@@ -430,131 +225,64 @@ TEST_F(GLES2DecoderTest2, TexParameteriInvalidArgs1_0) {
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterivValidArgs) {
- SpecializedSetup<cmds::TexParameteriv, 0>(true);
- cmds::TexParameteriv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
- GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST;
- EXPECT_CALL(
- *gl_, TexParameteri(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, *reinterpret_cast<const GLint*>(
- shared_memory_address_)));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterivInvalidArgs0_0) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameteriv, 0>(false);
- cmds::TexParameteriv cmd;
- cmd.Init(
- GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
- GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterivInvalidArgs0_1) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameteriv, 0>(false);
- cmds::TexParameteriv cmd;
- cmd.Init(
- GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- shared_memory_offset_);
- GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterivInvalidArgs1_0) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameteriv, 0>(false);
- cmds::TexParameteriv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_GENERATE_MIPMAP, shared_memory_id_,
- shared_memory_offset_);
- GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterivInvalidArgs2_0) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameteriv, 0>(false);
- cmds::TexParameteriv cmd;
- cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, kInvalidSharedMemoryId, 0);
- GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterivInvalidArgs2_1) {
- EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
- SpecializedSetup<cmds::TexParameteriv, 0>(false);
- cmds::TexParameteriv cmd;
- cmd.Init(
- GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, shared_memory_id_,
- kInvalidSharedMemoryOffset);
- GetSharedMemoryAs<GLint*>()[0] = GL_NEAREST;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, TexParameterivImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, TexParameterivImmediateValidArgs) {
cmds::TexParameterivImmediate& cmd =
*GetImmediateAs<cmds::TexParameterivImmediate>();
SpecializedSetup<cmds::TexParameterivImmediate, 0>(true);
- GLint temp[1] = { GL_NEAREST, };
+ GLint temp[1] = {
+ GL_NEAREST,
+ };
cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &temp[0]);
EXPECT_CALL(
*gl_,
- TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, *reinterpret_cast<
- GLint*>(ImmediateDataAddress(&cmd))));
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ *reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterivImmediateInvalidArgs0_0) {
+TEST_P(GLES2DecoderTest2, TexParameterivImmediateInvalidArgs0_0) {
cmds::TexParameterivImmediate& cmd =
*GetImmediateAs<cmds::TexParameterivImmediate>();
EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterivImmediate, 0>(false);
- GLint temp[1] = { GL_NEAREST, };
+ GLint temp[1] = {
+ GL_NEAREST,
+ };
cmd.Init(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterivImmediateInvalidArgs0_1) {
+TEST_P(GLES2DecoderTest2, TexParameterivImmediateInvalidArgs0_1) {
cmds::TexParameterivImmediate& cmd =
*GetImmediateAs<cmds::TexParameterivImmediate>();
EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterivImmediate, 0>(false);
- GLint temp[1] = { GL_NEAREST, };
+ GLint temp[1] = {
+ GL_NEAREST,
+ };
cmd.Init(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
-TEST_F(GLES2DecoderTest2, TexParameterivImmediateInvalidArgs1_0) {
+TEST_P(GLES2DecoderTest2, TexParameterivImmediateInvalidArgs1_0) {
cmds::TexParameterivImmediate& cmd =
*GetImmediateAs<cmds::TexParameterivImmediate>();
EXPECT_CALL(*gl_, TexParameteri(_, _, _)).Times(0);
SpecializedSetup<cmds::TexParameterivImmediate, 0>(false);
- GLint temp[1] = { GL_NEAREST, };
+ GLint temp[1] = {
+ GL_NEAREST,
+ };
cmd.Init(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
// TODO(gman): TexSubImage2D
-
-TEST_F(GLES2DecoderTest2, Uniform1fValidArgs) {
+TEST_P(GLES2DecoderTest2, Uniform1fValidArgs) {
EXPECT_CALL(*gl_, Uniform1fv(1, 1, _));
SpecializedSetup<cmds::Uniform1f, 0>(true);
cmds::Uniform1f cmd;
@@ -563,74 +291,23 @@ TEST_F(GLES2DecoderTest2, Uniform1fValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform1fvValidArgs) {
- EXPECT_CALL(
- *gl_, Uniform1fv(
- 1, 2, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform1fv, 0>(true);
- cmds::Uniform1fv cmd;
- cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform1fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, Uniform1fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform1fv, 0>(false);
- cmds::Uniform1fv cmd;
- cmd.Init(1, -1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform1fvInvalidArgs2_0) {
- EXPECT_CALL(*gl_, Uniform1fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform1fv, 0>(false);
- cmds::Uniform1fv cmd;
- cmd.Init(1, 2, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform1fvInvalidArgs2_1) {
- EXPECT_CALL(*gl_, Uniform1fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform1fv, 0>(false);
- cmds::Uniform1fv cmd;
- cmd.Init(1, 2, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform1fvValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, Uniform1fv(
- 3, 3, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform1fv, 0>(true);
- cmds::Uniform1fv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform1fvImmediateValidArgs) {
- cmds::Uniform1fvImmediate& cmd =
- *GetImmediateAs<cmds::Uniform1fvImmediate>();
+TEST_P(GLES2DecoderTest2, Uniform1fvImmediateValidArgs) {
+ cmds::Uniform1fvImmediate& cmd = *GetImmediateAs<cmds::Uniform1fvImmediate>();
EXPECT_CALL(
*gl_,
- Uniform1fv(1, 2,
- reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ Uniform1fv(1, 2, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::Uniform1fvImmediate, 0>(true);
- GLfloat temp[1 * 2] = { 0, };
+ GLfloat temp[1 * 2] = {
+ 0,
+ };
cmd.Init(1, 2, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
// TODO(gman): Uniform1i
-// TODO(gman): Uniform1iv
// TODO(gman): Uniform1ivImmediate
-TEST_F(GLES2DecoderTest2, Uniform2fValidArgs) {
+TEST_P(GLES2DecoderTest2, Uniform2fValidArgs) {
EXPECT_CALL(*gl_, Uniform2fv(1, 1, _));
SpecializedSetup<cmds::Uniform2f, 0>(true);
cmds::Uniform2f cmd;
@@ -639,71 +316,21 @@ TEST_F(GLES2DecoderTest2, Uniform2fValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform2fvValidArgs) {
- EXPECT_CALL(
- *gl_, Uniform2fv(
- 1, 2, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform2fv, 0>(true);
- cmds::Uniform2fv cmd;
- cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, Uniform2fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform2fv, 0>(false);
- cmds::Uniform2fv cmd;
- cmd.Init(1, -1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2fvInvalidArgs2_0) {
- EXPECT_CALL(*gl_, Uniform2fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform2fv, 0>(false);
- cmds::Uniform2fv cmd;
- cmd.Init(1, 2, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2fvInvalidArgs2_1) {
- EXPECT_CALL(*gl_, Uniform2fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform2fv, 0>(false);
- cmds::Uniform2fv cmd;
- cmd.Init(1, 2, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2fvValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, Uniform2fv(
- 3, 3, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform2fv, 0>(true);
- cmds::Uniform2fv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2fvImmediateValidArgs) {
- cmds::Uniform2fvImmediate& cmd =
- *GetImmediateAs<cmds::Uniform2fvImmediate>();
+TEST_P(GLES2DecoderTest2, Uniform2fvImmediateValidArgs) {
+ cmds::Uniform2fvImmediate& cmd = *GetImmediateAs<cmds::Uniform2fvImmediate>();
EXPECT_CALL(
*gl_,
- Uniform2fv(1, 2,
- reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ Uniform2fv(1, 2, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::Uniform2fvImmediate, 0>(true);
- GLfloat temp[2 * 2] = { 0, };
+ GLfloat temp[2 * 2] = {
+ 0,
+ };
cmd.Init(1, 2, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform2iValidArgs) {
+TEST_P(GLES2DecoderTest2, Uniform2iValidArgs) {
EXPECT_CALL(*gl_, Uniform2iv(1, 1, _));
SpecializedSetup<cmds::Uniform2i, 0>(true);
cmds::Uniform2i cmd;
@@ -712,71 +339,21 @@ TEST_F(GLES2DecoderTest2, Uniform2iValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform2ivValidArgs) {
- EXPECT_CALL(
- *gl_, Uniform2iv(
- 1, 2, reinterpret_cast<const GLint*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform2iv, 0>(true);
- cmds::Uniform2iv cmd;
- cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2ivInvalidArgs1_0) {
- EXPECT_CALL(*gl_, Uniform2iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform2iv, 0>(false);
- cmds::Uniform2iv cmd;
- cmd.Init(1, -1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2ivInvalidArgs2_0) {
- EXPECT_CALL(*gl_, Uniform2iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform2iv, 0>(false);
- cmds::Uniform2iv cmd;
- cmd.Init(1, 2, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2ivInvalidArgs2_1) {
- EXPECT_CALL(*gl_, Uniform2iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform2iv, 0>(false);
- cmds::Uniform2iv cmd;
- cmd.Init(1, 2, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2ivValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, Uniform2iv(
- 3, 3, reinterpret_cast<const GLint*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform2iv, 0>(true);
- cmds::Uniform2iv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform2ivImmediateValidArgs) {
- cmds::Uniform2ivImmediate& cmd =
- *GetImmediateAs<cmds::Uniform2ivImmediate>();
+TEST_P(GLES2DecoderTest2, Uniform2ivImmediateValidArgs) {
+ cmds::Uniform2ivImmediate& cmd = *GetImmediateAs<cmds::Uniform2ivImmediate>();
EXPECT_CALL(
*gl_,
- Uniform2iv(1, 2,
- reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
+ Uniform2iv(1, 2, reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::Uniform2ivImmediate, 0>(true);
- GLint temp[2 * 2] = { 0, };
+ GLint temp[2 * 2] = {
+ 0,
+ };
cmd.Init(1, 2, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform3fValidArgs) {
+TEST_P(GLES2DecoderTest2, Uniform3fValidArgs) {
EXPECT_CALL(*gl_, Uniform3fv(1, 1, _));
SpecializedSetup<cmds::Uniform3f, 0>(true);
cmds::Uniform3f cmd;
@@ -785,71 +362,21 @@ TEST_F(GLES2DecoderTest2, Uniform3fValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform3fvValidArgs) {
- EXPECT_CALL(
- *gl_, Uniform3fv(
- 1, 2, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform3fv, 0>(true);
- cmds::Uniform3fv cmd;
- cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, Uniform3fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform3fv, 0>(false);
- cmds::Uniform3fv cmd;
- cmd.Init(1, -1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3fvInvalidArgs2_0) {
- EXPECT_CALL(*gl_, Uniform3fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform3fv, 0>(false);
- cmds::Uniform3fv cmd;
- cmd.Init(1, 2, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3fvInvalidArgs2_1) {
- EXPECT_CALL(*gl_, Uniform3fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform3fv, 0>(false);
- cmds::Uniform3fv cmd;
- cmd.Init(1, 2, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3fvValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, Uniform3fv(
- 3, 3, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform3fv, 0>(true);
- cmds::Uniform3fv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3fvImmediateValidArgs) {
- cmds::Uniform3fvImmediate& cmd =
- *GetImmediateAs<cmds::Uniform3fvImmediate>();
+TEST_P(GLES2DecoderTest2, Uniform3fvImmediateValidArgs) {
+ cmds::Uniform3fvImmediate& cmd = *GetImmediateAs<cmds::Uniform3fvImmediate>();
EXPECT_CALL(
*gl_,
- Uniform3fv(1, 2,
- reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ Uniform3fv(1, 2, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::Uniform3fvImmediate, 0>(true);
- GLfloat temp[3 * 2] = { 0, };
+ GLfloat temp[3 * 2] = {
+ 0,
+ };
cmd.Init(1, 2, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform3iValidArgs) {
+TEST_P(GLES2DecoderTest2, Uniform3iValidArgs) {
EXPECT_CALL(*gl_, Uniform3iv(1, 1, _));
SpecializedSetup<cmds::Uniform3i, 0>(true);
cmds::Uniform3i cmd;
@@ -858,71 +385,21 @@ TEST_F(GLES2DecoderTest2, Uniform3iValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform3ivValidArgs) {
- EXPECT_CALL(
- *gl_, Uniform3iv(
- 1, 2, reinterpret_cast<const GLint*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform3iv, 0>(true);
- cmds::Uniform3iv cmd;
- cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3ivInvalidArgs1_0) {
- EXPECT_CALL(*gl_, Uniform3iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform3iv, 0>(false);
- cmds::Uniform3iv cmd;
- cmd.Init(1, -1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3ivInvalidArgs2_0) {
- EXPECT_CALL(*gl_, Uniform3iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform3iv, 0>(false);
- cmds::Uniform3iv cmd;
- cmd.Init(1, 2, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3ivInvalidArgs2_1) {
- EXPECT_CALL(*gl_, Uniform3iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform3iv, 0>(false);
- cmds::Uniform3iv cmd;
- cmd.Init(1, 2, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3ivValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, Uniform3iv(
- 3, 3, reinterpret_cast<const GLint*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform3iv, 0>(true);
- cmds::Uniform3iv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform3ivImmediateValidArgs) {
- cmds::Uniform3ivImmediate& cmd =
- *GetImmediateAs<cmds::Uniform3ivImmediate>();
+TEST_P(GLES2DecoderTest2, Uniform3ivImmediateValidArgs) {
+ cmds::Uniform3ivImmediate& cmd = *GetImmediateAs<cmds::Uniform3ivImmediate>();
EXPECT_CALL(
*gl_,
- Uniform3iv(1, 2,
- reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
+ Uniform3iv(1, 2, reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::Uniform3ivImmediate, 0>(true);
- GLint temp[3 * 2] = { 0, };
+ GLint temp[3 * 2] = {
+ 0,
+ };
cmd.Init(1, 2, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform4fValidArgs) {
+TEST_P(GLES2DecoderTest2, Uniform4fValidArgs) {
EXPECT_CALL(*gl_, Uniform4fv(1, 1, _));
SpecializedSetup<cmds::Uniform4f, 0>(true);
cmds::Uniform4f cmd;
@@ -931,71 +408,21 @@ TEST_F(GLES2DecoderTest2, Uniform4fValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform4fvValidArgs) {
- EXPECT_CALL(
- *gl_, Uniform4fv(
- 1, 2, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform4fv, 0>(true);
- cmds::Uniform4fv cmd;
- cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, Uniform4fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform4fv, 0>(false);
- cmds::Uniform4fv cmd;
- cmd.Init(1, -1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4fvInvalidArgs2_0) {
- EXPECT_CALL(*gl_, Uniform4fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform4fv, 0>(false);
- cmds::Uniform4fv cmd;
- cmd.Init(1, 2, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4fvInvalidArgs2_1) {
- EXPECT_CALL(*gl_, Uniform4fv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform4fv, 0>(false);
- cmds::Uniform4fv cmd;
- cmd.Init(1, 2, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4fvValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, Uniform4fv(
- 3, 3, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform4fv, 0>(true);
- cmds::Uniform4fv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4fvImmediateValidArgs) {
- cmds::Uniform4fvImmediate& cmd =
- *GetImmediateAs<cmds::Uniform4fvImmediate>();
+TEST_P(GLES2DecoderTest2, Uniform4fvImmediateValidArgs) {
+ cmds::Uniform4fvImmediate& cmd = *GetImmediateAs<cmds::Uniform4fvImmediate>();
EXPECT_CALL(
*gl_,
- Uniform4fv(1, 2,
- reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ Uniform4fv(1, 2, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::Uniform4fvImmediate, 0>(true);
- GLfloat temp[4 * 2] = { 0, };
+ GLfloat temp[4 * 2] = {
+ 0,
+ };
cmd.Init(1, 2, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform4iValidArgs) {
+TEST_P(GLES2DecoderTest2, Uniform4iValidArgs) {
EXPECT_CALL(*gl_, Uniform4iv(1, 1, _));
SpecializedSetup<cmds::Uniform4i, 0>(true);
cmds::Uniform4i cmd;
@@ -1004,333 +431,87 @@ TEST_F(GLES2DecoderTest2, Uniform4iValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, Uniform4ivValidArgs) {
- EXPECT_CALL(
- *gl_, Uniform4iv(
- 1, 2, reinterpret_cast<const GLint*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform4iv, 0>(true);
- cmds::Uniform4iv cmd;
- cmd.Init(1, 2, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4ivInvalidArgs1_0) {
- EXPECT_CALL(*gl_, Uniform4iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform4iv, 0>(false);
- cmds::Uniform4iv cmd;
- cmd.Init(1, -1, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4ivInvalidArgs2_0) {
- EXPECT_CALL(*gl_, Uniform4iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform4iv, 0>(false);
- cmds::Uniform4iv cmd;
- cmd.Init(1, 2, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4ivInvalidArgs2_1) {
- EXPECT_CALL(*gl_, Uniform4iv(_, _, _)).Times(0);
- SpecializedSetup<cmds::Uniform4iv, 0>(false);
- cmds::Uniform4iv cmd;
- cmd.Init(1, 2, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4ivValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, Uniform4iv(
- 3, 3, reinterpret_cast<const GLint*>(shared_memory_address_)));
- SpecializedSetup<cmds::Uniform4iv, 0>(true);
- cmds::Uniform4iv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, Uniform4ivImmediateValidArgs) {
- cmds::Uniform4ivImmediate& cmd =
- *GetImmediateAs<cmds::Uniform4ivImmediate>();
+TEST_P(GLES2DecoderTest2, Uniform4ivImmediateValidArgs) {
+ cmds::Uniform4ivImmediate& cmd = *GetImmediateAs<cmds::Uniform4ivImmediate>();
EXPECT_CALL(
*gl_,
- Uniform4iv(1, 2,
- reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
+ Uniform4iv(1, 2, reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::Uniform4ivImmediate, 0>(true);
- GLint temp[4 * 2] = { 0, };
+ GLint temp[4 * 2] = {
+ 0,
+ };
cmd.Init(1, 2, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, UniformMatrix2fvValidArgs) {
- EXPECT_CALL(
- *gl_, UniformMatrix2fv(
- 1, 2, false, reinterpret_cast<const GLfloat*>(
- shared_memory_address_)));
- SpecializedSetup<cmds::UniformMatrix2fv, 0>(true);
- cmds::UniformMatrix2fv cmd;
- cmd.Init(1, 2, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix2fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, UniformMatrix2fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix2fv, 0>(false);
- cmds::UniformMatrix2fv cmd;
- cmd.Init(1, -1, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix2fvInvalidArgs2_0) {
- EXPECT_CALL(*gl_, UniformMatrix2fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix2fv, 0>(false);
- cmds::UniformMatrix2fv cmd;
- cmd.Init(1, 2, true, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix2fvInvalidArgs3_0) {
- EXPECT_CALL(*gl_, UniformMatrix2fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix2fv, 0>(false);
- cmds::UniformMatrix2fv cmd;
- cmd.Init(1, 2, false, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix2fvInvalidArgs3_1) {
- EXPECT_CALL(*gl_, UniformMatrix2fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix2fv, 0>(false);
- cmds::UniformMatrix2fv cmd;
- cmd.Init(1, 2, false, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix2fvValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, UniformMatrix2fv(
- 3, 3, false, reinterpret_cast<const GLfloat*>(
- shared_memory_address_)));
- SpecializedSetup<cmds::UniformMatrix2fv, 0>(true);
- cmds::UniformMatrix2fv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix2fvImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, UniformMatrix2fvImmediateValidArgs) {
cmds::UniformMatrix2fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix2fvImmediate>();
EXPECT_CALL(
*gl_,
- UniformMatrix2fv(1, 2, false,
- reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ UniformMatrix2fv(
+ 1, 2, false, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::UniformMatrix2fvImmediate, 0>(true);
- GLfloat temp[4 * 2] = { 0, };
- cmd.Init(1, 2, false, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix2fvImmediateInvalidArgs2_0) {
- cmds::UniformMatrix2fvImmediate& cmd =
- *GetImmediateAs<cmds::UniformMatrix2fvImmediate>();
- EXPECT_CALL(*gl_, UniformMatrix2fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix2fvImmediate, 0>(false);
- GLfloat temp[4 * 2] = { 0, };
- cmd.Init(1, 2, true, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix3fvValidArgs) {
- EXPECT_CALL(
- *gl_, UniformMatrix3fv(
- 1, 2, false, reinterpret_cast<const GLfloat*>(
- shared_memory_address_)));
- SpecializedSetup<cmds::UniformMatrix3fv, 0>(true);
- cmds::UniformMatrix3fv cmd;
- cmd.Init(1, 2, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix3fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, UniformMatrix3fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix3fv, 0>(false);
- cmds::UniformMatrix3fv cmd;
- cmd.Init(1, -1, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix3fvInvalidArgs2_0) {
- EXPECT_CALL(*gl_, UniformMatrix3fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix3fv, 0>(false);
- cmds::UniformMatrix3fv cmd;
- cmd.Init(1, 2, true, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix3fvInvalidArgs3_0) {
- EXPECT_CALL(*gl_, UniformMatrix3fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix3fv, 0>(false);
- cmds::UniformMatrix3fv cmd;
- cmd.Init(1, 2, false, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix3fvInvalidArgs3_1) {
- EXPECT_CALL(*gl_, UniformMatrix3fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix3fv, 0>(false);
- cmds::UniformMatrix3fv cmd;
- cmd.Init(1, 2, false, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix3fvValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, UniformMatrix3fv(
- 3, 3, false, reinterpret_cast<const GLfloat*>(
- shared_memory_address_)));
- SpecializedSetup<cmds::UniformMatrix3fv, 0>(true);
- cmds::UniformMatrix3fv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ GLfloat temp[4 * 2] = {
+ 0,
+ };
+ cmd.Init(1, 2, &temp[0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, UniformMatrix3fvImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, UniformMatrix3fvImmediateValidArgs) {
cmds::UniformMatrix3fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix3fvImmediate>();
EXPECT_CALL(
*gl_,
- UniformMatrix3fv(1, 2, false,
- reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ UniformMatrix3fv(
+ 1, 2, false, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::UniformMatrix3fvImmediate, 0>(true);
- GLfloat temp[9 * 2] = { 0, };
- cmd.Init(1, 2, false, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix3fvImmediateInvalidArgs2_0) {
- cmds::UniformMatrix3fvImmediate& cmd =
- *GetImmediateAs<cmds::UniformMatrix3fvImmediate>();
- EXPECT_CALL(*gl_, UniformMatrix3fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix3fvImmediate, 0>(false);
- GLfloat temp[9 * 2] = { 0, };
- cmd.Init(1, 2, true, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix4fvValidArgs) {
- EXPECT_CALL(
- *gl_, UniformMatrix4fv(
- 1, 2, false, reinterpret_cast<const GLfloat*>(
- shared_memory_address_)));
- SpecializedSetup<cmds::UniformMatrix4fv, 0>(true);
- cmds::UniformMatrix4fv cmd;
- cmd.Init(1, 2, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix4fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, UniformMatrix4fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix4fv, 0>(false);
- cmds::UniformMatrix4fv cmd;
- cmd.Init(1, -1, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix4fvInvalidArgs2_0) {
- EXPECT_CALL(*gl_, UniformMatrix4fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix4fv, 0>(false);
- cmds::UniformMatrix4fv cmd;
- cmd.Init(1, 2, true, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix4fvInvalidArgs3_0) {
- EXPECT_CALL(*gl_, UniformMatrix4fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix4fv, 0>(false);
- cmds::UniformMatrix4fv cmd;
- cmd.Init(1, 2, false, kInvalidSharedMemoryId, 0);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix4fvInvalidArgs3_1) {
- EXPECT_CALL(*gl_, UniformMatrix4fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix4fv, 0>(false);
- cmds::UniformMatrix4fv cmd;
- cmd.Init(1, 2, false, shared_memory_id_, kInvalidSharedMemoryOffset);
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, UniformMatrix4fvValidArgsCountTooLarge) {
- EXPECT_CALL(
- *gl_, UniformMatrix4fv(
- 3, 3, false, reinterpret_cast<const GLfloat*>(
- shared_memory_address_)));
- SpecializedSetup<cmds::UniformMatrix4fv, 0>(true);
- cmds::UniformMatrix4fv cmd;
- cmd.Init(
- ProgramManager::MakeFakeLocation(
- 1, 1), 5, false, shared_memory_id_, shared_memory_offset_);
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ GLfloat temp[9 * 2] = {
+ 0,
+ };
+ cmd.Init(1, 2, &temp[0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, UniformMatrix4fvImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, UniformMatrix4fvImmediateValidArgs) {
cmds::UniformMatrix4fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix4fvImmediate>();
EXPECT_CALL(
*gl_,
- UniformMatrix4fv(1, 2, false,
- reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ UniformMatrix4fv(
+ 1, 2, false, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
SpecializedSetup<cmds::UniformMatrix4fvImmediate, 0>(true);
- GLfloat temp[16 * 2] = { 0, };
- cmd.Init(1, 2, false, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ GLfloat temp[16 * 2] = {
+ 0,
+ };
+ cmd.Init(1, 2, &temp[0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, UniformMatrix4fvImmediateInvalidArgs2_0) {
- cmds::UniformMatrix4fvImmediate& cmd =
- *GetImmediateAs<cmds::UniformMatrix4fvImmediate>();
- EXPECT_CALL(*gl_, UniformMatrix4fv(_, _, _, _)).Times(0);
- SpecializedSetup<cmds::UniformMatrix4fvImmediate, 0>(false);
- GLfloat temp[16 * 2] = { 0, };
- cmd.Init(1, 2, true, &temp[0]);
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+TEST_P(GLES2DecoderTest2, UseProgramValidArgs) {
+ EXPECT_CALL(*gl_, UseProgram(kServiceProgramId));
+ SpecializedSetup<cmds::UseProgram, 0>(true);
+ cmds::UseProgram cmd;
+ cmd.Init(client_program_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest2, UseProgramInvalidArgs0_0) {
+ EXPECT_CALL(*gl_, UseProgram(_)).Times(0);
+ SpecializedSetup<cmds::UseProgram, 0>(false);
+ cmds::UseProgram cmd;
+ cmd.Init(kInvalidClientId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-// TODO(gman): UseProgram
-TEST_F(GLES2DecoderTest2, ValidateProgramValidArgs) {
+TEST_P(GLES2DecoderTest2, ValidateProgramValidArgs) {
EXPECT_CALL(*gl_, ValidateProgram(kServiceProgramId));
SpecializedSetup<cmds::ValidateProgram, 0>(true);
cmds::ValidateProgram cmd;
@@ -1339,7 +520,7 @@ TEST_F(GLES2DecoderTest2, ValidateProgramValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, VertexAttrib1fValidArgs) {
+TEST_P(GLES2DecoderTest2, VertexAttrib1fValidArgs) {
EXPECT_CALL(*gl_, VertexAttrib1f(1, 2));
SpecializedSetup<cmds::VertexAttrib1f, 0>(true);
cmds::VertexAttrib1f cmd;
@@ -1348,52 +529,22 @@ TEST_F(GLES2DecoderTest2, VertexAttrib1fValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, VertexAttrib1fvValidArgs) {
- SpecializedSetup<cmds::VertexAttrib1fv, 0>(true);
- cmds::VertexAttrib1fv cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_CALL(
- *gl_, VertexAttrib1fv(
- 1, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib1fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, VertexAttrib1fv(_, _)).Times(0);
- SpecializedSetup<cmds::VertexAttrib1fv, 0>(false);
- cmds::VertexAttrib1fv cmd;
- cmd.Init(1, kInvalidSharedMemoryId, 0);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib1fvInvalidArgs1_1) {
- EXPECT_CALL(*gl_, VertexAttrib1fv(_, _)).Times(0);
- SpecializedSetup<cmds::VertexAttrib1fv, 0>(false);
- cmds::VertexAttrib1fv cmd;
- cmd.Init(1, shared_memory_id_, kInvalidSharedMemoryOffset);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib1fvImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, VertexAttrib1fvImmediateValidArgs) {
cmds::VertexAttrib1fvImmediate& cmd =
*GetImmediateAs<cmds::VertexAttrib1fvImmediate>();
SpecializedSetup<cmds::VertexAttrib1fvImmediate, 0>(true);
- GLfloat temp[1] = { 0, };
+ GLfloat temp[1] = {
+ 0,
+ };
cmd.Init(1, &temp[0]);
- EXPECT_CALL(
- *gl_,
- VertexAttrib1fv(1, reinterpret_cast<
- GLfloat*>(ImmediateDataAddress(&cmd))));
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_CALL(*gl_,
+ VertexAttrib1fv(
+ 1, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, VertexAttrib2fValidArgs) {
+TEST_P(GLES2DecoderTest2, VertexAttrib2fValidArgs) {
EXPECT_CALL(*gl_, VertexAttrib2f(1, 2, 3));
SpecializedSetup<cmds::VertexAttrib2f, 0>(true);
cmds::VertexAttrib2f cmd;
@@ -1402,52 +553,22 @@ TEST_F(GLES2DecoderTest2, VertexAttrib2fValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, VertexAttrib2fvValidArgs) {
- SpecializedSetup<cmds::VertexAttrib2fv, 0>(true);
- cmds::VertexAttrib2fv cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_CALL(
- *gl_, VertexAttrib2fv(
- 1, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib2fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, VertexAttrib2fv(_, _)).Times(0);
- SpecializedSetup<cmds::VertexAttrib2fv, 0>(false);
- cmds::VertexAttrib2fv cmd;
- cmd.Init(1, kInvalidSharedMemoryId, 0);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib2fvInvalidArgs1_1) {
- EXPECT_CALL(*gl_, VertexAttrib2fv(_, _)).Times(0);
- SpecializedSetup<cmds::VertexAttrib2fv, 0>(false);
- cmds::VertexAttrib2fv cmd;
- cmd.Init(1, shared_memory_id_, kInvalidSharedMemoryOffset);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib2fvImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, VertexAttrib2fvImmediateValidArgs) {
cmds::VertexAttrib2fvImmediate& cmd =
*GetImmediateAs<cmds::VertexAttrib2fvImmediate>();
SpecializedSetup<cmds::VertexAttrib2fvImmediate, 0>(true);
- GLfloat temp[2] = { 0, };
+ GLfloat temp[2] = {
+ 0,
+ };
cmd.Init(1, &temp[0]);
- EXPECT_CALL(
- *gl_,
- VertexAttrib2fv(1, reinterpret_cast<
- GLfloat*>(ImmediateDataAddress(&cmd))));
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_CALL(*gl_,
+ VertexAttrib2fv(
+ 1, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, VertexAttrib3fValidArgs) {
+TEST_P(GLES2DecoderTest2, VertexAttrib3fValidArgs) {
EXPECT_CALL(*gl_, VertexAttrib3f(1, 2, 3, 4));
SpecializedSetup<cmds::VertexAttrib3f, 0>(true);
cmds::VertexAttrib3f cmd;
@@ -1456,52 +577,22 @@ TEST_F(GLES2DecoderTest2, VertexAttrib3fValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, VertexAttrib3fvValidArgs) {
- SpecializedSetup<cmds::VertexAttrib3fv, 0>(true);
- cmds::VertexAttrib3fv cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_CALL(
- *gl_, VertexAttrib3fv(
- 1, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib3fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, VertexAttrib3fv(_, _)).Times(0);
- SpecializedSetup<cmds::VertexAttrib3fv, 0>(false);
- cmds::VertexAttrib3fv cmd;
- cmd.Init(1, kInvalidSharedMemoryId, 0);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib3fvInvalidArgs1_1) {
- EXPECT_CALL(*gl_, VertexAttrib3fv(_, _)).Times(0);
- SpecializedSetup<cmds::VertexAttrib3fv, 0>(false);
- cmds::VertexAttrib3fv cmd;
- cmd.Init(1, shared_memory_id_, kInvalidSharedMemoryOffset);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib3fvImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, VertexAttrib3fvImmediateValidArgs) {
cmds::VertexAttrib3fvImmediate& cmd =
*GetImmediateAs<cmds::VertexAttrib3fvImmediate>();
SpecializedSetup<cmds::VertexAttrib3fvImmediate, 0>(true);
- GLfloat temp[3] = { 0, };
+ GLfloat temp[3] = {
+ 0,
+ };
cmd.Init(1, &temp[0]);
- EXPECT_CALL(
- *gl_,
- VertexAttrib3fv(1, reinterpret_cast<
- GLfloat*>(ImmediateDataAddress(&cmd))));
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_CALL(*gl_,
+ VertexAttrib3fv(
+ 1, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, VertexAttrib4fValidArgs) {
+TEST_P(GLES2DecoderTest2, VertexAttrib4fValidArgs) {
EXPECT_CALL(*gl_, VertexAttrib4f(1, 2, 3, 4, 5));
SpecializedSetup<cmds::VertexAttrib4f, 0>(true);
cmds::VertexAttrib4f cmd;
@@ -1510,54 +601,23 @@ TEST_F(GLES2DecoderTest2, VertexAttrib4fValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, VertexAttrib4fvValidArgs) {
- SpecializedSetup<cmds::VertexAttrib4fv, 0>(true);
- cmds::VertexAttrib4fv cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_CALL(
- *gl_, VertexAttrib4fv(
- 1, reinterpret_cast<const GLfloat*>(shared_memory_address_)));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
- EXPECT_EQ(GL_NO_ERROR, GetGLError());
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib4fvInvalidArgs1_0) {
- EXPECT_CALL(*gl_, VertexAttrib4fv(_, _)).Times(0);
- SpecializedSetup<cmds::VertexAttrib4fv, 0>(false);
- cmds::VertexAttrib4fv cmd;
- cmd.Init(1, kInvalidSharedMemoryId, 0);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib4fvInvalidArgs1_1) {
- EXPECT_CALL(*gl_, VertexAttrib4fv(_, _)).Times(0);
- SpecializedSetup<cmds::VertexAttrib4fv, 0>(false);
- cmds::VertexAttrib4fv cmd;
- cmd.Init(1, shared_memory_id_, kInvalidSharedMemoryOffset);
- GetSharedMemoryAs<GLfloat*>()[0] = 0;
- EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
-}
-
-TEST_F(GLES2DecoderTest2, VertexAttrib4fvImmediateValidArgs) {
+TEST_P(GLES2DecoderTest2, VertexAttrib4fvImmediateValidArgs) {
cmds::VertexAttrib4fvImmediate& cmd =
*GetImmediateAs<cmds::VertexAttrib4fvImmediate>();
SpecializedSetup<cmds::VertexAttrib4fvImmediate, 0>(true);
- GLfloat temp[4] = { 0, };
+ GLfloat temp[4] = {
+ 0,
+ };
cmd.Init(1, &temp[0]);
- EXPECT_CALL(
- *gl_,
- VertexAttrib4fv(1, reinterpret_cast<
- GLfloat*>(ImmediateDataAddress(&cmd))));
- EXPECT_EQ(error::kNoError,
- ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_CALL(*gl_,
+ VertexAttrib4fv(
+ 1, reinterpret_cast<GLfloat*>(ImmediateDataAddress(&cmd))));
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
// TODO(gman): VertexAttribPointer
-
-TEST_F(GLES2DecoderTest2, ViewportValidArgs) {
+TEST_P(GLES2DecoderTest2, ViewportValidArgs) {
EXPECT_CALL(*gl_, Viewport(1, 2, 3, 4));
SpecializedSetup<cmds::Viewport, 0>(true);
cmds::Viewport cmd;
@@ -1566,7 +626,7 @@ TEST_F(GLES2DecoderTest2, ViewportValidArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-TEST_F(GLES2DecoderTest2, ViewportInvalidArgs2_0) {
+TEST_P(GLES2DecoderTest2, ViewportInvalidArgs2_0) {
EXPECT_CALL(*gl_, Viewport(_, _, _, _)).Times(0);
SpecializedSetup<cmds::Viewport, 0>(false);
cmds::Viewport cmd;
@@ -1575,7 +635,7 @@ TEST_F(GLES2DecoderTest2, ViewportInvalidArgs2_0) {
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
-TEST_F(GLES2DecoderTest2, ViewportInvalidArgs3_0) {
+TEST_P(GLES2DecoderTest2, ViewportInvalidArgs3_0) {
EXPECT_CALL(*gl_, Viewport(_, _, _, _)).Times(0);
SpecializedSetup<cmds::Viewport, 0>(false);
cmds::Viewport cmd;
@@ -1588,9 +648,7 @@ TEST_F(GLES2DecoderTest2, ViewportInvalidArgs3_0) {
// TODO(gman): RenderbufferStorageMultisampleEXT
// TODO(gman): FramebufferTexture2DMultisampleEXT
// TODO(gman): TexStorage2DEXT
-// TODO(gman): GenQueriesEXT
// TODO(gman): GenQueriesEXTImmediate
-// TODO(gman): DeleteQueriesEXT
// TODO(gman): DeleteQueriesEXTImmediate
// TODO(gman): BeginQueryEXT
@@ -1600,17 +658,14 @@ TEST_F(GLES2DecoderTest2, ViewportInvalidArgs3_0) {
// TODO(gman): PushGroupMarkerEXT
-
-TEST_F(GLES2DecoderTest2, PopGroupMarkerEXTValidArgs) {
+TEST_P(GLES2DecoderTest2, PopGroupMarkerEXTValidArgs) {
SpecializedSetup<cmds::PopGroupMarkerEXT, 0>(true);
cmds::PopGroupMarkerEXT cmd;
cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-// TODO(gman): GenVertexArraysOES
// TODO(gman): GenVertexArraysOESImmediate
-// TODO(gman): DeleteVertexArraysOES
// TODO(gman): DeleteVertexArraysOESImmediate
// TODO(gman): IsVertexArrayOES
// TODO(gman): BindVertexArrayOES
@@ -1618,5 +673,52 @@ TEST_F(GLES2DecoderTest2, PopGroupMarkerEXTValidArgs) {
// TODO(gman): GetMaxValueInBufferCHROMIUM
// TODO(gman): GenSharedIdsCHROMIUM
-#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
+// TODO(gman): DeleteSharedIdsCHROMIUM
+
+// TODO(gman): RegisterSharedIdsCHROMIUM
+
+// TODO(gman): EnableFeatureCHROMIUM
+
+// TODO(gman): ResizeCHROMIUM
+// TODO(gman): GetRequestableExtensionsCHROMIUM
+// TODO(gman): RequestExtensionCHROMIUM
+
+// TODO(gman): GetMultipleIntegervCHROMIUM
+
+// TODO(gman): GetProgramInfoCHROMIUM
+
+// TODO(gman): GetTranslatedShaderSourceANGLE
+// TODO(gman): PostSubBufferCHROMIUM
+// TODO(gman): TexImageIOSurface2DCHROMIUM
+// TODO(gman): CopyTextureCHROMIUM
+// TODO(gman): DrawArraysInstancedANGLE
+// TODO(gman): DrawElementsInstancedANGLE
+// TODO(gman): VertexAttribDivisorANGLE
+// TODO(gman): GenMailboxCHROMIUM
+
+// TODO(gman): ProduceTextureCHROMIUMImmediate
+// TODO(gman): ProduceTextureDirectCHROMIUMImmediate
+// TODO(gman): ConsumeTextureCHROMIUMImmediate
+// TODO(gman): CreateAndConsumeTextureCHROMIUMImmediate
+// TODO(gman): BindUniformLocationCHROMIUMBucket
+// TODO(gman): BindTexImage2DCHROMIUM
+// TODO(gman): ReleaseTexImage2DCHROMIUM
+// TODO(gman): TraceBeginCHROMIUM
+
+// TODO(gman): TraceEndCHROMIUM
+// TODO(gman): AsyncTexSubImage2DCHROMIUM
+
+// TODO(gman): AsyncTexImage2DCHROMIUM
+
+// TODO(gman): WaitAsyncTexImage2DCHROMIUM
+
+// TODO(gman): WaitAllAsyncTexImage2DCHROMIUM
+
+// TODO(gman): DiscardFramebufferEXTImmediate
+// TODO(gman): LoseContextCHROMIUM
+// TODO(gman): InsertSyncPointCHROMIUM
+
+// TODO(gman): WaitSyncPointCHROMIUM
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3.cc
index b41eed2953a..3fadaf07634 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3.cc
@@ -34,7 +34,9 @@ class GLES2DecoderTest3 : public GLES2DecoderTestBase {
GLES2DecoderTest3() { }
};
-TEST_F(GLES2DecoderTest3, TraceBeginCHROMIUM) {
+INSTANTIATE_TEST_CASE_P(Service, GLES2DecoderTest3, ::testing::Bool());
+
+TEST_P(GLES2DecoderTest3, TraceBeginCHROMIUM) {
const uint32 kBucketId = 123;
const char kName[] = "test_command";
SetBucketAsCString(kBucketId, kName);
@@ -44,7 +46,7 @@ TEST_F(GLES2DecoderTest3, TraceBeginCHROMIUM) {
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
}
-TEST_F(GLES2DecoderTest3, TraceEndCHROMIUM) {
+TEST_P(GLES2DecoderTest3, TraceEndCHROMIUM) {
// Test end fails if no begin.
TraceEndCHROMIUM end_cmd;
end_cmd.Init();
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
index ab338e46eff..adbde496acd 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h
@@ -1,70 +1,19 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
// It is included by gles2_cmd_decoder_unittest_3.cc
#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_
-// TODO(gman): DeleteSharedIdsCHROMIUM
-
-// TODO(gman): RegisterSharedIdsCHROMIUM
-
-// TODO(gman): EnableFeatureCHROMIUM
-
-// TODO(gman): ResizeCHROMIUM
-// TODO(gman): GetRequestableExtensionsCHROMIUM
-
-// TODO(gman): RequestExtensionCHROMIUM
-
-// TODO(gman): GetMultipleIntegervCHROMIUM
-
-// TODO(gman): GetProgramInfoCHROMIUM
-
-// TODO(gman): CreateStreamTextureCHROMIUM
-
-// TODO(gman): DestroyStreamTextureCHROMIUM
-
-// TODO(gman): GetTranslatedShaderSourceANGLE
-// TODO(gman): PostSubBufferCHROMIUM
-// TODO(gman): TexImageIOSurface2DCHROMIUM
-// TODO(gman): CopyTextureCHROMIUM
-// TODO(gman): DrawArraysInstancedANGLE
-// TODO(gman): DrawElementsInstancedANGLE
-// TODO(gman): VertexAttribDivisorANGLE
-// TODO(gman): GenMailboxCHROMIUM
-
-// TODO(gman): ProduceTextureCHROMIUM
-// TODO(gman): ProduceTextureCHROMIUMImmediate
-// TODO(gman): ConsumeTextureCHROMIUM
-// TODO(gman): ConsumeTextureCHROMIUMImmediate
-// TODO(gman): BindUniformLocationCHROMIUM
-
-// TODO(gman): BindUniformLocationCHROMIUMBucket
-// TODO(gman): BindTexImage2DCHROMIUM
-// TODO(gman): ReleaseTexImage2DCHROMIUM
-// TODO(gman): TraceBeginCHROMIUM
-
-// TODO(gman): TraceEndCHROMIUM
-// TODO(gman): AsyncTexSubImage2DCHROMIUM
-
-// TODO(gman): AsyncTexImage2DCHROMIUM
-
-// TODO(gman): WaitAsyncTexImage2DCHROMIUM
-
-// TODO(gman): DiscardFramebufferEXT
-// TODO(gman): DiscardFramebufferEXTImmediate
-// TODO(gman): LoseContextCHROMIUM
-
-// TODO(gman): InsertSyncPointCHROMIUM
-
-// TODO(gman): WaitSyncPointCHROMIUM
-
-// TODO(gman): DrawBuffersEXT
// TODO(gman): DrawBuffersEXTImmediate
-#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_
+// TODO(gman): DiscardBackbufferCHROMIUM
+// TODO(gman): ScheduleOverlayPlaneCHROMIUM
+#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc
new file mode 100644
index 00000000000..d32870d9a1a
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_async_pixel.cc
@@ -0,0 +1,388 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
+#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/common/id_allocator.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
+#include "gpu/command_buffer/service/cmd_buffer_engine.h"
+#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/context_state.h"
+#include "gpu/command_buffer/service/gl_surface_mock.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
+
+#include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/command_buffer/service/image_manager.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/mocks.h"
+#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
+
+#if !defined(GL_DEPTH24_STENCIL8)
+#define GL_DEPTH24_STENCIL8 0x88F0
+#endif
+
+using ::gfx::MockGLInterface;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::InSequence;
+using ::testing::Invoke;
+using ::testing::MatcherCast;
+using ::testing::Mock;
+using ::testing::Pointee;
+using ::testing::Return;
+using ::testing::SaveArg;
+using ::testing::SetArrayArgument;
+using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
+using ::testing::StrEq;
+using ::testing::StrictMock;
+
+namespace gpu {
+namespace gles2 {
+
+using namespace cmds;
+
+TEST_P(GLES2DecoderManualInitTest, AsyncPixelTransfers) {
+ InitState init;
+ init.extensions = "GL_CHROMIUM_async_pixel_transfers";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ // Set up the texture.
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ TextureRef* texture_ref = GetTexture(client_texture_id_);
+ Texture* texture = texture_ref->texture();
+
+ // Set a mock Async delegate
+ StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
+ new StrictMock<gpu::MockAsyncPixelTransferManager>;
+ manager->Initialize(group().texture_manager());
+ decoder_->SetAsyncPixelTransferManagerForTest(manager);
+ StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
+
+ // Tex(Sub)Image2D upload commands.
+ AsyncTexImage2DCHROMIUM teximage_cmd;
+ teximage_cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 8,
+ 8,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ 0,
+ 0,
+ 0);
+ AsyncTexSubImage2DCHROMIUM texsubimage_cmd;
+ texsubimage_cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 0,
+ 0,
+ 8,
+ 8,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ 0,
+ 0,
+ 0);
+ WaitAsyncTexImage2DCHROMIUM wait_cmd;
+ wait_cmd.Init(GL_TEXTURE_2D);
+ WaitAllAsyncTexImage2DCHROMIUM wait_all_cmd;
+ wait_all_cmd.Init();
+
+ // No transfer state exists initially.
+ EXPECT_FALSE(
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+
+ base::Closure bind_callback;
+
+ // AsyncTexImage2D
+ {
+ // Create transfer state since it doesn't exist.
+ EXPECT_EQ(texture_ref->num_observers(), 0);
+ EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
+ .WillOnce(Return(
+ delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _))
+ .WillOnce(SaveArg<2>(&bind_callback))
+ .RetiresOnSaturation();
+ // Command succeeds.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(
+ delegate,
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+ EXPECT_TRUE(texture->IsImmutable());
+ // The texture is safe but the level has not been defined yet.
+ EXPECT_TRUE(texture->SafeToRenderFrom());
+ GLsizei width, height;
+ EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ EXPECT_EQ(texture_ref->num_observers(), 1);
+ }
+ {
+ // Async redefinitions are not allowed!
+ // Command fails.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(
+ delegate,
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+ EXPECT_TRUE(texture->IsImmutable());
+ EXPECT_TRUE(texture->SafeToRenderFrom());
+ }
+
+ // Binding/defining of the async transfer
+ {
+ // TODO(epenner): We should check that the manager gets the
+ // BindCompletedAsyncTransfers() call, which is required to
+ // guarantee the delegate calls the bind callback.
+
+ // Simulate the bind callback from the delegate.
+ bind_callback.Run();
+
+ // After the bind callback is run, the texture is safe,
+ // and has the right size etc.
+ EXPECT_TRUE(texture->SafeToRenderFrom());
+ GLsizei width, height;
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ EXPECT_EQ(width, 8);
+ EXPECT_EQ(height, 8);
+ }
+
+ // AsyncTexSubImage2D
+ EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
+ decoder_->GetAsyncPixelTransferManager()->ClearPixelTransferDelegateForTest(
+ texture_ref);
+ EXPECT_EQ(texture_ref->num_observers(), 0);
+ texture->SetImmutable(false);
+ {
+ // Create transfer state since it doesn't exist.
+ EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
+ .WillOnce(Return(
+ delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*delegate, AsyncTexSubImage2D(_, _)).RetiresOnSaturation();
+ // Command succeeds.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(
+ delegate,
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+ EXPECT_TRUE(texture->IsImmutable());
+ EXPECT_TRUE(texture->SafeToRenderFrom());
+ }
+ {
+ // No transfer is in progress.
+ EXPECT_CALL(*delegate, TransferIsInProgress())
+ .WillOnce(Return(false)) // texSubImage validation
+ .WillOnce(Return(false)) // async validation
+ .RetiresOnSaturation();
+ EXPECT_CALL(*delegate, AsyncTexSubImage2D(_, _)).RetiresOnSaturation();
+ // Command succeeds.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(
+ delegate,
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+ EXPECT_TRUE(texture->IsImmutable());
+ EXPECT_TRUE(texture->SafeToRenderFrom());
+ }
+ {
+ // A transfer is still in progress!
+ EXPECT_CALL(*delegate, TransferIsInProgress())
+ .WillOnce(Return(true))
+ .RetiresOnSaturation();
+ // No async call, command fails.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(texsubimage_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(
+ delegate,
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+ EXPECT_TRUE(texture->IsImmutable());
+ EXPECT_TRUE(texture->SafeToRenderFrom());
+ }
+
+ // Delete delegate on DeleteTexture.
+ {
+ EXPECT_EQ(texture_ref->num_observers(), 1);
+ EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
+ DoDeleteTexture(client_texture_id_, kServiceTextureId);
+ EXPECT_FALSE(
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+ texture = NULL;
+ texture_ref = NULL;
+ delegate = NULL;
+ }
+
+ // WaitAsyncTexImage2D
+ {
+ // Get a fresh texture since the existing texture cannot be respecified
+ // asynchronously and AsyncTexSubImage2D does not involve binding.
+ EXPECT_CALL(*gl_, GenTextures(1, _))
+ .WillOnce(SetArgumentPointee<1>(kServiceTextureId));
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ texture_ref = GetTexture(client_texture_id_);
+ texture = texture_ref->texture();
+ texture->SetImmutable(false);
+ // Create transfer state since it doesn't exist.
+ EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
+ .WillOnce(Return(
+ delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation();
+ // Start async transfer.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(
+ delegate,
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+
+ EXPECT_TRUE(texture->IsImmutable());
+ // Wait for completion.
+ EXPECT_CALL(*delegate, WaitForTransferCompletion());
+ EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
+ EXPECT_EQ(error::kNoError, ExecuteCmd(wait_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ }
+
+ // WaitAllAsyncTexImage2D
+ EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
+ DoDeleteTexture(client_texture_id_, kServiceTextureId);
+ EXPECT_FALSE(
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+ texture = NULL;
+ texture_ref = NULL;
+ delegate = NULL;
+ {
+ // Get a fresh texture since the existing texture cannot be respecified
+ // asynchronously and AsyncTexSubImage2D does not involve binding.
+ EXPECT_CALL(*gl_, GenTextures(1, _))
+ .WillOnce(SetArgumentPointee<1>(kServiceTextureId));
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ texture_ref = GetTexture(client_texture_id_);
+ texture = texture_ref->texture();
+ texture->SetImmutable(false);
+ // Create transfer state since it doesn't exist.
+ EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
+ .WillOnce(Return(
+ delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation();
+ // Start async transfer.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(
+ delegate,
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+
+ EXPECT_TRUE(texture->IsImmutable());
+ // Wait for completion of all uploads.
+ EXPECT_CALL(*manager, WaitAllAsyncTexImage2D()).RetiresOnSaturation();
+ EXPECT_CALL(*manager, BindCompletedAsyncTransfers());
+ EXPECT_EQ(error::kNoError, ExecuteCmd(wait_all_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ }
+
+ // Remove PixelTransferManager before the decoder destroys.
+ EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
+ decoder_->ResetAsyncPixelTransferManagerForTest();
+ manager = NULL;
+}
+
+TEST_P(GLES2DecoderManualInitTest, AsyncPixelTransferManager) {
+ InitState init;
+ init.extensions = "GL_CHROMIUM_async_pixel_transfers";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ // Set up the texture.
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ TextureRef* texture_ref = GetTexture(client_texture_id_);
+
+ // Set a mock Async delegate.
+ StrictMock<gpu::MockAsyncPixelTransferManager>* manager =
+ new StrictMock<gpu::MockAsyncPixelTransferManager>;
+ manager->Initialize(group().texture_manager());
+ decoder_->SetAsyncPixelTransferManagerForTest(manager);
+ StrictMock<gpu::MockAsyncPixelTransferDelegate>* delegate = NULL;
+
+ AsyncTexImage2DCHROMIUM teximage_cmd;
+ teximage_cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 8,
+ 8,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ 0,
+ 0,
+ 0);
+
+ // No transfer delegate exists initially.
+ EXPECT_FALSE(
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+
+ // Create delegate on AsyncTexImage2D.
+ {
+ EXPECT_CALL(*manager, CreatePixelTransferDelegateImpl(texture_ref, _))
+ .WillOnce(Return(
+ delegate = new StrictMock<gpu::MockAsyncPixelTransferDelegate>))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*delegate, AsyncTexImage2D(_, _, _)).RetiresOnSaturation();
+
+ // Command succeeds.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(teximage_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ }
+
+ // Delegate is cached.
+ EXPECT_EQ(delegate,
+ decoder_->GetAsyncPixelTransferManager()->GetPixelTransferDelegate(
+ texture_ref));
+
+ // Delete delegate on manager teardown.
+ {
+ EXPECT_EQ(texture_ref->num_observers(), 1);
+ EXPECT_CALL(*delegate, Destroy()).RetiresOnSaturation();
+ decoder_->ResetAsyncPixelTransferManagerForTest();
+ manager = NULL;
+
+ // Texture ref still valid.
+ EXPECT_EQ(texture_ref, GetTexture(client_texture_id_));
+ EXPECT_EQ(texture_ref->num_observers(), 0);
+ }
+}
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
new file mode 100644
index 00000000000..3b000fca37c
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
@@ -0,0 +1,485 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
+#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/common/id_allocator.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
+#include "gpu/command_buffer/service/cmd_buffer_engine.h"
+#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/context_state.h"
+#include "gpu/command_buffer/service/gl_surface_mock.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
+
+#include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/command_buffer/service/image_manager.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/mocks.h"
+#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
+
+#if !defined(GL_DEPTH24_STENCIL8)
+#define GL_DEPTH24_STENCIL8 0x88F0
+#endif
+
+using ::gfx::MockGLInterface;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::InSequence;
+using ::testing::Invoke;
+using ::testing::MatcherCast;
+using ::testing::Mock;
+using ::testing::Pointee;
+using ::testing::Return;
+using ::testing::SaveArg;
+using ::testing::SetArrayArgument;
+using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
+using ::testing::StrEq;
+using ::testing::StrictMock;
+
+namespace gpu {
+namespace gles2 {
+
+using namespace cmds;
+
+TEST_P(GLES2DecoderWithShaderTest, GetVertexAttribPointervSucceeds) {
+ const float dummy = 0;
+ const GLuint kOffsetToTestFor = sizeof(dummy) * 4;
+ const GLuint kIndexToTest = 1;
+ GetVertexAttribPointerv::Result* result =
+ static_cast<GetVertexAttribPointerv::Result*>(shared_memory_address_);
+ result->size = 0;
+ const GLuint* result_value = result->GetData();
+ // Test that initial value is 0.
+ GetVertexAttribPointerv cmd;
+ cmd.Init(kIndexToTest,
+ GL_VERTEX_ATTRIB_ARRAY_POINTER,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(sizeof(*result_value), result->size);
+ EXPECT_EQ(0u, *result_value);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Set the value and see that we get it.
+ SetupVertexBuffer();
+ DoVertexAttribPointer(kIndexToTest, 2, GL_FLOAT, 0, kOffsetToTestFor);
+ result->size = 0;
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(sizeof(*result_value), result->size);
+ EXPECT_EQ(kOffsetToTestFor, *result_value);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetVertexAttribPointervBadArgsFails) {
+ const GLuint kIndexToTest = 1;
+ GetVertexAttribPointerv::Result* result =
+ static_cast<GetVertexAttribPointerv::Result*>(shared_memory_address_);
+ result->size = 0;
+ const GLuint* result_value = result->GetData();
+ // Test pname invalid fails.
+ GetVertexAttribPointerv cmd;
+ cmd.Init(kIndexToTest,
+ GL_VERTEX_ATTRIB_ARRAY_POINTER + 1,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0u, result->size);
+ EXPECT_EQ(kInitialResult, *result_value);
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+
+ // Test index out of range fails.
+ result->size = 0;
+ cmd.Init(kNumVertexAttribs,
+ GL_VERTEX_ATTRIB_ARRAY_POINTER,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0u, result->size);
+ EXPECT_EQ(kInitialResult, *result_value);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+
+ // Test memory id bad fails.
+ cmd.Init(kIndexToTest,
+ GL_VERTEX_ATTRIB_ARRAY_POINTER,
+ kInvalidSharedMemoryId,
+ shared_memory_offset_);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+
+ // Test memory offset bad fails.
+ cmd.Init(kIndexToTest,
+ GL_VERTEX_ATTRIB_ARRAY_POINTER,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, BindBufferToDifferentTargetFails) {
+ // Bind the buffer to GL_ARRAY_BUFFER
+ DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
+ // Attempt to rebind to GL_ELEMENT_ARRAY_BUFFER
+ // NOTE: Real GLES2 does not have this restriction but WebGL and we do.
+ // This can be restriction can be removed at runtime.
+ EXPECT_CALL(*gl_, BindBuffer(_, _)).Times(0);
+ BindBuffer cmd;
+ cmd.Init(GL_ELEMENT_ARRAY_BUFFER, client_buffer_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, VertexAttribPointer) {
+ SetupVertexBuffer();
+ static const GLenum types[] = {
+ GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT,
+ GL_FLOAT, GL_FIXED, GL_INT, GL_UNSIGNED_INT,
+ };
+ static const GLsizei sizes[] = {
+ 1, 1, 2, 2, 4, 4, 4, 4,
+ };
+ static const GLuint indices[] = {
+ 0, 1, kNumVertexAttribs - 1, kNumVertexAttribs,
+ };
+ static const GLsizei offset_mult[] = {
+ 0, 0, 1, 1, 2, 1000,
+ };
+ static const GLsizei offset_offset[] = {
+ 0, 1, 0, 1, 0, 0,
+ };
+ static const GLsizei stride_mult[] = {
+ -1, 0, 0, 1, 1, 2, 1000,
+ };
+ static const GLsizei stride_offset[] = {
+ 0, 0, 1, 0, 1, 0, 0,
+ };
+ for (size_t tt = 0; tt < arraysize(types); ++tt) {
+ GLenum type = types[tt];
+ GLsizei num_bytes = sizes[tt];
+ for (size_t ii = 0; ii < arraysize(indices); ++ii) {
+ GLuint index = indices[ii];
+ for (GLint size = 0; size < 5; ++size) {
+ for (size_t oo = 0; oo < arraysize(offset_mult); ++oo) {
+ GLuint offset = num_bytes * offset_mult[oo] + offset_offset[oo];
+ for (size_t ss = 0; ss < arraysize(stride_mult); ++ss) {
+ GLsizei stride = num_bytes * stride_mult[ss] + stride_offset[ss];
+ for (int normalize = 0; normalize < 2; ++normalize) {
+ bool index_good = index < static_cast<GLuint>(kNumVertexAttribs);
+ bool size_good = (size > 0 && size < 5);
+ bool offset_good = (offset % num_bytes == 0);
+ bool stride_good =
+ (stride % num_bytes == 0) && stride >= 0 && stride <= 255;
+ bool type_good = (type != GL_INT && type != GL_UNSIGNED_INT &&
+ type != GL_FIXED);
+ bool good = size_good && offset_good && stride_good &&
+ type_good && index_good;
+ bool call = good && (type != GL_FIXED);
+ if (call) {
+ EXPECT_CALL(*gl_,
+ VertexAttribPointer(index,
+ size,
+ type,
+ normalize,
+ stride,
+ BufferOffset(offset)));
+ }
+ VertexAttribPointer cmd;
+ cmd.Init(index, size, type, normalize, stride, offset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ if (good) {
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ } else if (size_good && offset_good && stride_good && type_good &&
+ !index_good) {
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ } else if (size_good && offset_good && stride_good &&
+ !type_good && index_good) {
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ } else if (size_good && offset_good && !stride_good &&
+ type_good && index_good) {
+ if (stride < 0 || stride > 255) {
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ } else {
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ }
+ } else if (size_good && !offset_good && stride_good &&
+ type_good && index_good) {
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ } else if (!size_good && offset_good && stride_good &&
+ type_good && index_good) {
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ } else {
+ EXPECT_NE(GL_NO_ERROR, GetGLError());
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
+ public:
+ GLES2DecoderVertexArraysOESTest() {}
+
+ bool vertex_array_deleted_manually_;
+
+ virtual void SetUp() {
+ InitState init;
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ SetupDefaultProgram();
+
+ AddExpectationsForGenVertexArraysOES();
+ GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
+
+ vertex_array_deleted_manually_ = false;
+ }
+
+ virtual void TearDown() {
+ // This should only be set if the test handled deletion of the vertex array
+ // itself. Necessary because vertex_array_objects are not sharable, and thus
+ // not managed in the ContextGroup, meaning they will be destroyed during
+ // test tear down
+ if (!vertex_array_deleted_manually_) {
+ AddExpectationsForDeleteVertexArraysOES();
+ }
+
+ GLES2DecoderWithShaderTest::TearDown();
+ }
+
+ void GenVertexArraysOESImmediateValidArgs() {
+ AddExpectationsForGenVertexArraysOES();
+ GenVertexArraysOESImmediate* cmd =
+ GetImmediateAs<GenVertexArraysOESImmediate>();
+ GLuint temp = kNewClientId;
+ cmd->Init(1, &temp);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_TRUE(GetVertexArrayInfo(kNewClientId) != NULL);
+ AddExpectationsForDeleteVertexArraysOES();
+ }
+
+ void GenVertexArraysOESImmediateInvalidArgs() {
+ EXPECT_CALL(*gl_, GenVertexArraysOES(_, _)).Times(0);
+ GenVertexArraysOESImmediate* cmd =
+ GetImmediateAs<GenVertexArraysOESImmediate>();
+ cmd->Init(1, &client_vertexarray_id_);
+ EXPECT_EQ(error::kInvalidArguments,
+ ExecuteImmediateCmd(*cmd, sizeof(&client_vertexarray_id_)));
+ }
+
+ void DeleteVertexArraysOESImmediateValidArgs() {
+ AddExpectationsForDeleteVertexArraysOES();
+ DeleteVertexArraysOESImmediate& cmd =
+ *GetImmediateAs<DeleteVertexArraysOESImmediate>();
+ cmd.Init(1, &client_vertexarray_id_);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(cmd, sizeof(client_vertexarray_id_)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_TRUE(GetVertexArrayInfo(client_vertexarray_id_) == NULL);
+ vertex_array_deleted_manually_ = true;
+ }
+
+ void DeleteVertexArraysOESImmediateInvalidArgs() {
+ DeleteVertexArraysOESImmediate& cmd =
+ *GetImmediateAs<DeleteVertexArraysOESImmediate>();
+ GLuint temp = kInvalidClientId;
+ cmd.Init(1, &temp);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+ }
+
+ void DeleteBoundVertexArraysOESImmediateValidArgs() {
+ BindVertexArrayOESValidArgs();
+
+ AddExpectationsForDeleteBoundVertexArraysOES();
+ DeleteVertexArraysOESImmediate& cmd =
+ *GetImmediateAs<DeleteVertexArraysOESImmediate>();
+ cmd.Init(1, &client_vertexarray_id_);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(cmd, sizeof(client_vertexarray_id_)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_TRUE(GetVertexArrayInfo(client_vertexarray_id_) == NULL);
+ vertex_array_deleted_manually_ = true;
+ }
+
+ void IsVertexArrayOESValidArgs() {
+ IsVertexArrayOES cmd;
+ cmd.Init(client_vertexarray_id_, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ }
+
+ void IsVertexArrayOESInvalidArgsBadSharedMemoryId() {
+ IsVertexArrayOES cmd;
+ cmd.Init(
+ client_vertexarray_id_, kInvalidSharedMemoryId, shared_memory_offset_);
+ EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
+ cmd.Init(
+ client_vertexarray_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
+ EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
+ }
+
+ void BindVertexArrayOESValidArgs() {
+ AddExpectationsForBindVertexArrayOES();
+ BindVertexArrayOES cmd;
+ cmd.Init(client_vertexarray_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ }
+
+ void BindVertexArrayOESValidArgsNewId() {
+ BindVertexArrayOES cmd;
+ cmd.Init(kNewClientId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ }
+};
+
+INSTANTIATE_TEST_CASE_P(Service,
+ GLES2DecoderVertexArraysOESTest,
+ ::testing::Bool());
+
+class GLES2DecoderEmulatedVertexArraysOESTest
+ : public GLES2DecoderVertexArraysOESTest {
+ public:
+ GLES2DecoderEmulatedVertexArraysOESTest() {}
+
+ virtual void SetUp() {
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ init.use_native_vao = false;
+ InitDecoder(init);
+ SetupDefaultProgram();
+
+ AddExpectationsForGenVertexArraysOES();
+ GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
+
+ vertex_array_deleted_manually_ = false;
+ }
+};
+
+INSTANTIATE_TEST_CASE_P(Service,
+ GLES2DecoderEmulatedVertexArraysOESTest,
+ ::testing::Bool());
+
+// Test vertex array objects with native support
+TEST_P(GLES2DecoderVertexArraysOESTest, GenVertexArraysOESImmediateValidArgs) {
+ GenVertexArraysOESImmediateValidArgs();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest,
+ GenVertexArraysOESImmediateValidArgs) {
+ GenVertexArraysOESImmediateValidArgs();
+}
+
+TEST_P(GLES2DecoderVertexArraysOESTest,
+ GenVertexArraysOESImmediateInvalidArgs) {
+ GenVertexArraysOESImmediateInvalidArgs();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest,
+ GenVertexArraysOESImmediateInvalidArgs) {
+ GenVertexArraysOESImmediateInvalidArgs();
+}
+
+TEST_P(GLES2DecoderVertexArraysOESTest,
+ DeleteVertexArraysOESImmediateValidArgs) {
+ DeleteVertexArraysOESImmediateValidArgs();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest,
+ DeleteVertexArraysOESImmediateValidArgs) {
+ DeleteVertexArraysOESImmediateValidArgs();
+}
+
+TEST_P(GLES2DecoderVertexArraysOESTest,
+ DeleteVertexArraysOESImmediateInvalidArgs) {
+ DeleteVertexArraysOESImmediateInvalidArgs();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest,
+ DeleteVertexArraysOESImmediateInvalidArgs) {
+ DeleteVertexArraysOESImmediateInvalidArgs();
+}
+
+TEST_P(GLES2DecoderVertexArraysOESTest,
+ DeleteBoundVertexArraysOESImmediateValidArgs) {
+ DeleteBoundVertexArraysOESImmediateValidArgs();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest,
+ DeleteBoundVertexArraysOESImmediateValidArgs) {
+ DeleteBoundVertexArraysOESImmediateValidArgs();
+}
+
+TEST_P(GLES2DecoderVertexArraysOESTest, IsVertexArrayOESValidArgs) {
+ IsVertexArrayOESValidArgs();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest, IsVertexArrayOESValidArgs) {
+ IsVertexArrayOESValidArgs();
+}
+
+TEST_P(GLES2DecoderVertexArraysOESTest,
+ IsVertexArrayOESInvalidArgsBadSharedMemoryId) {
+ IsVertexArrayOESInvalidArgsBadSharedMemoryId();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest,
+ IsVertexArrayOESInvalidArgsBadSharedMemoryId) {
+ IsVertexArrayOESInvalidArgsBadSharedMemoryId();
+}
+
+TEST_P(GLES2DecoderVertexArraysOESTest, BindVertexArrayOESValidArgs) {
+ BindVertexArrayOESValidArgs();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest, BindVertexArrayOESValidArgs) {
+ BindVertexArrayOESValidArgs();
+}
+
+TEST_P(GLES2DecoderVertexArraysOESTest, BindVertexArrayOESValidArgsNewId) {
+ BindVertexArrayOESValidArgsNewId();
+}
+TEST_P(GLES2DecoderEmulatedVertexArraysOESTest,
+ BindVertexArrayOESValidArgsNewId) {
+ BindVertexArrayOESValidArgsNewId();
+}
+
+TEST_P(GLES2DecoderTest, BufferDataGLError) {
+ GLenum target = GL_ARRAY_BUFFER;
+ GLsizeiptr size = 4;
+ DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
+ BufferManager* manager = group().buffer_manager();
+ Buffer* buffer = manager->GetBuffer(client_buffer_id_);
+ ASSERT_TRUE(buffer != NULL);
+ EXPECT_EQ(0, buffer->size());
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BufferData(target, size, _, GL_STREAM_DRAW))
+ .Times(1)
+ .RetiresOnSaturation();
+ BufferData cmd;
+ cmd.Init(target, size, 0, 0, GL_STREAM_DRAW);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+ EXPECT_EQ(0, buffer->size());
+}
+
+// TODO(gman): BufferData
+
+// TODO(gman): BufferDataImmediate
+
+// TODO(gman): BufferSubData
+
+// TODO(gman): BufferSubDataImmediate
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
index 9534b627adc..57c9c9dd6a6 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.cc
@@ -14,7 +14,6 @@
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
#include "gpu/command_buffer/service/cmd_buffer_engine.h"
#include "gpu/command_buffer/service/context_group.h"
-#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
#include "gpu/command_buffer/service/logger.h"
#include "gpu/command_buffer/service/program_manager.h"
#include "gpu/command_buffer/service/test_helper.h"
@@ -22,11 +21,14 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface.h"
using ::gfx::MockGLInterface;
using ::testing::_;
using ::testing::DoAll;
using ::testing::InSequence;
+using ::testing::Invoke;
+using ::testing::InvokeWithoutArgs;
using ::testing::MatcherCast;
using ::testing::Pointee;
using ::testing::Return;
@@ -35,6 +37,45 @@ using ::testing::SetArgPointee;
using ::testing::SetArgumentPointee;
using ::testing::StrEq;
using ::testing::StrictMock;
+using ::testing::WithArg;
+
+namespace {
+
+void NormalizeInitState(gpu::gles2::GLES2DecoderTestBase::InitState* init) {
+ CHECK(init);
+ const char* kVAOExtensions[] = {
+ "GL_OES_vertex_array_object",
+ "GL_ARB_vertex_array_object",
+ "GL_APPLE_vertex_array_object"
+ };
+ bool contains_vao_extension = false;
+ for (size_t ii = 0; ii < arraysize(kVAOExtensions); ++ii) {
+ if (init->extensions.find(kVAOExtensions[ii]) != std::string::npos) {
+ contains_vao_extension = true;
+ break;
+ }
+ }
+ if (init->use_native_vao) {
+ if (contains_vao_extension)
+ return;
+ if (!init->extensions.empty())
+ init->extensions += " ";
+ if (StartsWithASCII(init->gl_version, "opengl es", false)) {
+ init->extensions += kVAOExtensions[0];
+ } else {
+#if !defined(OS_MACOSX)
+ init->extensions += kVAOExtensions[1];
+#else
+ init->extensions += kVAOExtensions[2];
+#endif // OS_MACOSX
+ }
+ } else {
+ // Make sure we don't set up an invalid InitState.
+ CHECK(!contains_vao_extension);
+ }
+}
+
+} // namespace Anonymous
namespace gpu {
namespace gles2 {
@@ -53,22 +94,29 @@ GLES2DecoderTestBase::GLES2DecoderTestBase()
client_vertex_shader_id_(121),
client_fragment_shader_id_(122),
client_query_id_(123),
- client_vertexarray_id_(124) {
+ client_vertexarray_id_(124),
+ ignore_cached_state_for_test_(GetParam()),
+ cached_color_mask_red_(true),
+ cached_color_mask_green_(true),
+ cached_color_mask_blue_(true),
+ cached_color_mask_alpha_(true),
+ cached_depth_mask_(true),
+ cached_stencil_front_mask_(0xFFFFFFFFU),
+ cached_stencil_back_mask_(0xFFFFFFFFU) {
memset(immediate_buffer_, 0xEE, sizeof(immediate_buffer_));
}
GLES2DecoderTestBase::~GLES2DecoderTestBase() {}
void GLES2DecoderTestBase::SetUp() {
- InitDecoder(
- "", // extensions
- true, // has alpha
- true, // has depth
- false, // has stencil
- true, // request alpha
- true, // request depth
- false, // request stencil
- true); // bind generates resource
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
}
void GLES2DecoderTestBase::AddExpectationsForVertexAttribManager() {
@@ -79,65 +127,73 @@ void GLES2DecoderTestBase::AddExpectationsForVertexAttribManager() {
}
}
-void GLES2DecoderTestBase::InitDecoder(
- const char* extensions,
- bool has_alpha,
- bool has_depth,
- bool has_stencil,
- bool request_alpha,
- bool request_depth,
- bool request_stencil,
- bool bind_generates_resource) {
- InitDecoderWithCommandLine(extensions,
- has_alpha,
- has_depth,
- has_stencil,
- request_alpha,
- request_depth,
- request_stencil,
- bind_generates_resource,
- NULL);
+GLES2DecoderTestBase::InitState::InitState()
+ : has_alpha(false),
+ has_depth(false),
+ has_stencil(false),
+ request_alpha(false),
+ request_depth(false),
+ request_stencil(false),
+ bind_generates_resource(false),
+ lose_context_when_out_of_memory(false),
+ use_native_vao(true) {
+}
+
+void GLES2DecoderTestBase::InitDecoder(const InitState& init) {
+ InitDecoderWithCommandLine(init, NULL);
}
void GLES2DecoderTestBase::InitDecoderWithCommandLine(
- const char* extensions,
- bool has_alpha,
- bool has_depth,
- bool has_stencil,
- bool request_alpha,
- bool request_depth,
- bool request_stencil,
- bool bind_generates_resource,
- const CommandLine* command_line) {
+ const InitState& init,
+ const base::CommandLine* command_line) {
+ InitState normalized_init = init;
+ NormalizeInitState(&normalized_init);
Framebuffer::ClearFramebufferCompleteComboMap();
+
+ gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress);
+ gfx::GLSurface::InitializeOneOffWithMockBindingsForTests();
+
gl_.reset(new StrictMock<MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ ::gfx::MockGLInterface::SetGLInterface(gl_.get());
+
+ SetupMockGLBehaviors();
// Only create stream texture manager if extension is requested.
std::vector<std::string> list;
- base::SplitString(std::string(extensions), ' ', &list);
- if (std::find(list.begin(), list.end(),
- "GL_CHROMIUM_stream_texture") != list.end())
- stream_texture_manager_.reset(new StrictMock<MockStreamTextureManager>);
+ base::SplitString(normalized_init.extensions, ' ', &list);
scoped_refptr<FeatureInfo> feature_info;
if (command_line)
feature_info = new FeatureInfo(*command_line);
- group_ = scoped_refptr<ContextGroup>(new ContextGroup(
- NULL,
- NULL,
- memory_tracker_,
- stream_texture_manager_.get(),
- feature_info.get(),
- bind_generates_resource));
- // These two workarounds are always turned on.
- group_->feature_info(
- )->workarounds_.set_texture_filter_before_generating_mipmap = true;
- group_->feature_info()->workarounds_.clear_alpha_in_readpixels = true;
+ group_ = scoped_refptr<ContextGroup>(
+ new ContextGroup(NULL,
+ NULL,
+ memory_tracker_,
+ new ShaderTranslatorCache,
+ feature_info.get(),
+ normalized_init.bind_generates_resource));
+ bool use_default_textures = normalized_init.bind_generates_resource;
InSequence sequence;
- TestHelper::SetupContextGroupInitExpectations(gl_.get(),
- DisallowedFeatures(), extensions);
+ surface_ = new gfx::GLSurfaceStub;
+ surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight));
+
+ // Context needs to be created before initializing ContextGroup, which will
+ // in turn initialize FeatureInfo, which needs a context to determine
+ // extension support.
+ context_ = new gfx::GLContextStubWithExtensions;
+ context_->AddExtensionsString(normalized_init.extensions.c_str());
+ context_->SetGLVersionString(normalized_init.gl_version.c_str());
+
+ context_->MakeCurrent(surface_.get());
+ gfx::GLSurface::InitializeDynamicMockBindingsForTests(context_);
+
+ TestHelper::SetupContextGroupInitExpectations(
+ gl_.get(),
+ DisallowedFeatures(),
+ normalized_init.extensions.c_str(),
+ normalized_init.gl_version.c_str(),
+ normalized_init.bind_generates_resource);
// We initialize the ContextGroup with a MockGLES2Decoder so that
// we can use the ContextGroup to figure out how the real GLES2Decoder
@@ -146,7 +202,15 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
EXPECT_TRUE(
group_->Initialize(mock_decoder_.get(), DisallowedFeatures()));
- AddExpectationsForVertexAttribManager();
+ if (group_->feature_info()->feature_flags().native_vertex_array_object) {
+ EXPECT_CALL(*gl_, GenVertexArraysOES(1, _))
+ .WillOnce(SetArgumentPointee<1>(kServiceVertexArrayId))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindVertexArrayOES(_)).Times(1).RetiresOnSaturation();
+ }
+
+ if (group_->feature_info()->workarounds().init_vertex_attributes)
+ AddExpectationsForVertexAttribManager();
AddExpectationsForBindVertexArrayOES();
@@ -183,25 +247,36 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
.Times(1)
.RetiresOnSaturation();
if (group_->feature_info()->feature_flags().oes_egl_image_external) {
- EXPECT_CALL(*gl_, BindTexture(
- GL_TEXTURE_EXTERNAL_OES,
- TestHelper::kServiceDefaultExternalTextureId))
+ EXPECT_CALL(*gl_,
+ BindTexture(GL_TEXTURE_EXTERNAL_OES,
+ use_default_textures
+ ? TestHelper::kServiceDefaultExternalTextureId
+ : 0))
.Times(1)
.RetiresOnSaturation();
}
if (group_->feature_info()->feature_flags().arb_texture_rectangle) {
- EXPECT_CALL(*gl_, BindTexture(
- GL_TEXTURE_RECTANGLE_ARB,
- TestHelper::kServiceDefaultRectangleTextureId))
+ EXPECT_CALL(
+ *gl_,
+ BindTexture(GL_TEXTURE_RECTANGLE_ARB,
+ use_default_textures
+ ? TestHelper::kServiceDefaultRectangleTextureId
+ : 0))
.Times(1)
.RetiresOnSaturation();
}
- EXPECT_CALL(*gl_, BindTexture(
- GL_TEXTURE_CUBE_MAP, TestHelper::kServiceDefaultTextureCubemapId))
+ EXPECT_CALL(*gl_,
+ BindTexture(GL_TEXTURE_CUBE_MAP,
+ use_default_textures
+ ? TestHelper::kServiceDefaultTextureCubemapId
+ : 0))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindTexture(
- GL_TEXTURE_2D, TestHelper::kServiceDefaultTexture2dId))
+ EXPECT_CALL(
+ *gl_,
+ BindTexture(
+ GL_TEXTURE_2D,
+ use_default_textures ? TestHelper::kServiceDefaultTexture2dId : 0))
.Times(1)
.RetiresOnSaturation();
}
@@ -213,14 +288,14 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
.Times(1)
.RetiresOnSaturation();
EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
- .WillOnce(SetArgumentPointee<1>(has_alpha ? 8 : 0))
- .RetiresOnSaturation();
+ .WillOnce(SetArgumentPointee<1>(normalized_init.has_alpha ? 8 : 0))
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
- .WillOnce(SetArgumentPointee<1>(has_depth ? 24 : 0))
- .RetiresOnSaturation();
+ .WillOnce(SetArgumentPointee<1>(normalized_init.has_depth ? 24 : 0))
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
- .WillOnce(SetArgumentPointee<1>(has_stencil ? 8 : 0))
- .RetiresOnSaturation();
+ .WillOnce(SetArgumentPointee<1>(normalized_init.has_stencil ? 8 : 0))
+ .RetiresOnSaturation();
EXPECT_CALL(*gl_, Enable(GL_VERTEX_PROGRAM_POINT_SIZE))
.Times(1)
@@ -269,28 +344,29 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
#endif
engine_.reset(new StrictMock<MockCommandBufferEngine>());
- gpu::Buffer buffer = engine_->GetSharedMemoryBuffer(kSharedMemoryId);
+ scoped_refptr<gpu::Buffer> buffer =
+ engine_->GetSharedMemoryBuffer(kSharedMemoryId);
shared_memory_offset_ = kSharedMemoryOffset;
- shared_memory_address_ = reinterpret_cast<int8*>(buffer.ptr) +
- shared_memory_offset_;
+ shared_memory_address_ =
+ reinterpret_cast<int8*>(buffer->memory()) + shared_memory_offset_;
shared_memory_id_ = kSharedMemoryId;
- shared_memory_base_ = buffer.ptr;
+ shared_memory_base_ = buffer->memory();
- surface_ = new gfx::GLSurfaceStub;
- surface_->SetSize(gfx::Size(kBackBufferWidth, kBackBufferHeight));
-
- context_ = new gfx::GLContextStub;
-
- context_->MakeCurrent(surface_.get());
+ static const int32 kLoseContextWhenOutOfMemory = 0x10003;
int32 attributes[] = {
- EGL_ALPHA_SIZE, request_alpha ? 8 : 0,
- EGL_DEPTH_SIZE, request_depth ? 24 : 0,
- EGL_STENCIL_SIZE, request_stencil ? 8 : 0,
- };
+ EGL_ALPHA_SIZE,
+ normalized_init.request_alpha ? 8 : 0,
+ EGL_DEPTH_SIZE,
+ normalized_init.request_depth ? 24 : 0,
+ EGL_STENCIL_SIZE,
+ normalized_init.request_stencil ? 8 : 0,
+ kLoseContextWhenOutOfMemory,
+ normalized_init.lose_context_when_out_of_memory ? 1 : 0, };
std::vector<int32> attribs(attributes, attributes + arraysize(attributes));
decoder_.reset(GLES2Decoder::Create(group_.get()));
+ decoder_->SetIgnoreCachedStateForTest(ignore_cached_state_for_test_);
decoder_->GetLogger()->set_log_synthesized_gl_errors(false);
decoder_->Initialize(surface_,
context_,
@@ -300,6 +376,7 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
attribs);
decoder_->MakeCurrent();
decoder_->set_engine(engine_.get());
+ decoder_->BeginDecoding();
EXPECT_CALL(*gl_, GenBuffersARB(_, _))
.WillOnce(SetArgumentPointee<1>(kServiceBufferId))
@@ -328,20 +405,33 @@ void GLES2DecoderTestBase::InitDecoderWithCommandLine(
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
-void GLES2DecoderTestBase::TearDown() {
+void GLES2DecoderTestBase::ResetDecoder() {
+ if (!decoder_.get())
+ return;
// All Tests should have read all their GLErrors before getting here.
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_CALL(*gl_, DeleteBuffersARB(1, _))
.Times(2)
.RetiresOnSaturation();
+ if (group_->feature_info()->feature_flags().native_vertex_array_object) {
+ EXPECT_CALL(*gl_, DeleteVertexArraysOES(1, Pointee(kServiceVertexArrayId)))
+ .Times(1)
+ .RetiresOnSaturation();
+ }
+ decoder_->EndDecoding();
decoder_->Destroy(true);
decoder_.reset();
group_->Destroy(mock_decoder_.get(), false);
engine_.reset();
- ::gfx::GLInterface::SetGLInterface(NULL);
+ ::gfx::MockGLInterface::SetGLInterface(NULL);
gl_.reset();
+ gfx::ClearGLBindings();
+}
+
+void GLES2DecoderTestBase::TearDown() {
+ ResetDecoder();
}
void GLES2DecoderTestBase::ExpectEnableDisable(GLenum cap, bool enable) {
@@ -429,12 +519,13 @@ void GLES2DecoderTestBase::SetBucketAsCString(
}
}
-void GLES2DecoderTestBase::SetupClearTextureExpections(
+void GLES2DecoderTestBase::SetupClearTextureExpectations(
GLuint service_id,
GLuint old_service_id,
GLenum bind_target,
GLenum target,
GLint level,
+ GLenum internal_format,
GLenum format,
GLenum type,
GLsizei width,
@@ -443,7 +534,7 @@ void GLES2DecoderTestBase::SetupClearTextureExpections(
.Times(1)
.RetiresOnSaturation();
EXPECT_CALL(*gl_, TexImage2D(
- target, level, format, width, height, 0, format, type, _))
+ target, level, internal_format, width, height, 0, format, type, _))
.Times(1)
.RetiresOnSaturation();
EXPECT_CALL(*gl_, BindTexture(bind_target, old_service_id))
@@ -530,9 +621,7 @@ void GLES2DecoderTestBase::SetupExpectationsForFramebufferClearingMulti(
EXPECT_CALL(*gl_, ClearColor(0.0f, 0.0f, 0.0f, 0.0f))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, ColorMask(true, true, true, true))
- .Times(1)
- .RetiresOnSaturation();
+ SetupExpectationsForColorMask(true, true, true, true);
}
if ((clear_bits & GL_STENCIL_BUFFER_BIT) != 0) {
EXPECT_CALL(*gl_, ClearStencil(0))
@@ -546,13 +635,9 @@ void GLES2DecoderTestBase::SetupExpectationsForFramebufferClearingMulti(
EXPECT_CALL(*gl_, ClearDepth(1.0f))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, DepthMask(1))
- .Times(1)
- .RetiresOnSaturation();
+ SetupExpectationsForDepthMask(true);
}
- EXPECT_CALL(*gl_, Disable(GL_SCISSOR_TEST))
- .Times(1)
- .RetiresOnSaturation();
+ SetupExpectationsForEnableDisable(GL_SCISSOR_TEST, false);
EXPECT_CALL(*gl_, Clear(clear_bits))
.Times(1)
.RetiresOnSaturation();
@@ -616,102 +701,167 @@ void GLES2DecoderTestBase::DoDeleteBuffer(
EXPECT_CALL(*gl_, DeleteBuffersARB(1, Pointee(service_id)))
.Times(1)
.RetiresOnSaturation();
- cmds::DeleteBuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- memcpy(shared_memory_address_, &client_id, sizeof(client_id));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
-}
-
-void GLES2DecoderTestBase::SetupExpectationsForApplyingDirtyState(
- bool framebuffer_is_rgb,
- bool framebuffer_has_depth,
- bool framebuffer_has_stencil,
- GLuint color_bits,
- bool depth_mask,
- bool depth_enabled,
- GLuint front_stencil_mask,
- GLuint back_stencil_mask,
- bool stencil_enabled,
- bool cull_face_enabled,
- bool scissor_test_enabled,
- bool blend_enabled) {
- EXPECT_CALL(*gl_, ColorMask(
- (color_bits & 0x1000) != 0,
- (color_bits & 0x0100) != 0,
- (color_bits & 0x0010) != 0,
- (color_bits & 0x0001) && !framebuffer_is_rgb))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, DepthMask(depth_mask))
- .Times(1)
- .RetiresOnSaturation();
- if (framebuffer_has_depth && depth_enabled) {
- EXPECT_CALL(*gl_, Enable(GL_DEPTH_TEST))
- .Times(1)
- .RetiresOnSaturation();
- } else {
- EXPECT_CALL(*gl_, Disable(GL_DEPTH_TEST))
+ GenHelper<cmds::DeleteBuffersImmediate>(client_id);
+}
+
+void GLES2DecoderTestBase::SetupExpectationsForColorMask(bool red,
+ bool green,
+ bool blue,
+ bool alpha) {
+ if (ignore_cached_state_for_test_ || cached_color_mask_red_ != red ||
+ cached_color_mask_green_ != green || cached_color_mask_blue_ != blue ||
+ cached_color_mask_alpha_ != alpha) {
+ cached_color_mask_red_ = red;
+ cached_color_mask_green_ = green;
+ cached_color_mask_blue_ = blue;
+ cached_color_mask_alpha_ = alpha;
+ EXPECT_CALL(*gl_, ColorMask(red, green, blue, alpha))
.Times(1)
.RetiresOnSaturation();
}
- EXPECT_CALL(*gl_, StencilMaskSeparate(GL_FRONT, front_stencil_mask))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, back_stencil_mask))
- .Times(1)
- .RetiresOnSaturation();
- if (framebuffer_has_stencil && stencil_enabled) {
- EXPECT_CALL(*gl_, Enable(GL_STENCIL_TEST))
- .Times(1)
- .RetiresOnSaturation();
- } else {
- EXPECT_CALL(*gl_, Disable(GL_STENCIL_TEST))
- .Times(1)
- .RetiresOnSaturation();
+}
+
+void GLES2DecoderTestBase::SetupExpectationsForDepthMask(bool mask) {
+ if (ignore_cached_state_for_test_ || cached_depth_mask_ != mask) {
+ cached_depth_mask_ = mask;
+ EXPECT_CALL(*gl_, DepthMask(mask)).Times(1).RetiresOnSaturation();
}
- if (cull_face_enabled) {
- EXPECT_CALL(*gl_, Enable(GL_CULL_FACE))
- .Times(1)
- .RetiresOnSaturation();
- } else {
- EXPECT_CALL(*gl_, Disable(GL_CULL_FACE))
+}
+
+void GLES2DecoderTestBase::SetupExpectationsForStencilMask(uint32 front_mask,
+ uint32 back_mask) {
+ if (ignore_cached_state_for_test_ ||
+ cached_stencil_front_mask_ != front_mask) {
+ cached_stencil_front_mask_ = front_mask;
+ EXPECT_CALL(*gl_, StencilMaskSeparate(GL_FRONT, front_mask))
.Times(1)
.RetiresOnSaturation();
}
- if (scissor_test_enabled) {
- EXPECT_CALL(*gl_, Enable(GL_SCISSOR_TEST))
- .Times(1)
- .RetiresOnSaturation();
- } else {
- EXPECT_CALL(*gl_, Disable(GL_SCISSOR_TEST))
+
+ if (ignore_cached_state_for_test_ ||
+ cached_stencil_back_mask_ != back_mask) {
+ cached_stencil_back_mask_ = back_mask;
+ EXPECT_CALL(*gl_, StencilMaskSeparate(GL_BACK, back_mask))
.Times(1)
.RetiresOnSaturation();
}
- if (blend_enabled) {
- EXPECT_CALL(*gl_, Enable(GL_BLEND))
- .Times(1)
- .RetiresOnSaturation();
+}
+
+void GLES2DecoderTestBase::SetupExpectationsForEnableDisable(GLenum cap,
+ bool enable) {
+ switch (cap) {
+ case GL_BLEND:
+ if (enable_flags_.cached_blend == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_blend = enable;
+ break;
+ case GL_CULL_FACE:
+ if (enable_flags_.cached_cull_face == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_cull_face = enable;
+ break;
+ case GL_DEPTH_TEST:
+ if (enable_flags_.cached_depth_test == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_depth_test = enable;
+ break;
+ case GL_DITHER:
+ if (enable_flags_.cached_dither == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_dither = enable;
+ break;
+ case GL_POLYGON_OFFSET_FILL:
+ if (enable_flags_.cached_polygon_offset_fill == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_polygon_offset_fill = enable;
+ break;
+ case GL_SAMPLE_ALPHA_TO_COVERAGE:
+ if (enable_flags_.cached_sample_alpha_to_coverage == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_sample_alpha_to_coverage = enable;
+ break;
+ case GL_SAMPLE_COVERAGE:
+ if (enable_flags_.cached_sample_coverage == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_sample_coverage = enable;
+ break;
+ case GL_SCISSOR_TEST:
+ if (enable_flags_.cached_scissor_test == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_scissor_test = enable;
+ break;
+ case GL_STENCIL_TEST:
+ if (enable_flags_.cached_stencil_test == enable &&
+ !ignore_cached_state_for_test_)
+ return;
+ enable_flags_.cached_stencil_test = enable;
+ break;
+ default:
+ NOTREACHED();
+ return;
+ }
+ if (enable) {
+ EXPECT_CALL(*gl_, Enable(cap)).Times(1).RetiresOnSaturation();
} else {
- EXPECT_CALL(*gl_, Disable(GL_BLEND))
- .Times(1)
- .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, Disable(cap)).Times(1).RetiresOnSaturation();
}
}
+void GLES2DecoderTestBase::SetupExpectationsForApplyingDirtyState(
+ bool framebuffer_is_rgb,
+ bool framebuffer_has_depth,
+ bool framebuffer_has_stencil,
+ GLuint color_bits,
+ bool depth_mask,
+ bool depth_enabled,
+ GLuint front_stencil_mask,
+ GLuint back_stencil_mask,
+ bool stencil_enabled) {
+ bool color_mask_red = (color_bits & 0x1000) != 0;
+ bool color_mask_green = (color_bits & 0x0100) != 0;
+ bool color_mask_blue = (color_bits & 0x0010) != 0;
+ bool color_mask_alpha = (color_bits & 0x0001) && !framebuffer_is_rgb;
+
+ SetupExpectationsForColorMask(
+ color_mask_red, color_mask_green, color_mask_blue, color_mask_alpha);
+ SetupExpectationsForDepthMask(depth_mask);
+ SetupExpectationsForStencilMask(front_stencil_mask, back_stencil_mask);
+ SetupExpectationsForEnableDisable(GL_DEPTH_TEST,
+ framebuffer_has_depth && depth_enabled);
+ SetupExpectationsForEnableDisable(GL_STENCIL_TEST,
+ framebuffer_has_stencil && stencil_enabled);
+}
+
void GLES2DecoderTestBase::SetupExpectationsForApplyingDefaultDirtyState() {
- SetupExpectationsForApplyingDirtyState(
- false, // Framebuffer is RGB
- false, // Framebuffer has depth
- false, // Framebuffer has stencil
- 0x1111, // color bits
- true, // depth mask
- false, // depth enabled
- 0, // front stencil mask
- 0, // back stencil mask
- false, // stencil enabled
- false, // cull_face_enabled
- false, // scissor_test_enabled
- false); // blend_enabled
+ SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1111, // color bits
+ true, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+}
+
+GLES2DecoderTestBase::EnableFlags::EnableFlags()
+ : cached_blend(false),
+ cached_cull_face(false),
+ cached_depth_test(false),
+ cached_dither(true),
+ cached_polygon_offset_fill(false),
+ cached_sample_alpha_to_coverage(false),
+ cached_sample_coverage(false),
+ cached_scissor_test(false),
+ cached_stencil_test(false) {
}
void GLES2DecoderTestBase::DoBindFramebuffer(
@@ -746,10 +896,7 @@ void GLES2DecoderTestBase::DoDeleteFramebuffer(
EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, Pointee(service_id)))
.Times(1)
.RetiresOnSaturation();
- cmds::DeleteFramebuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- memcpy(shared_memory_address_, &client_id, sizeof(client_id));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ GenHelper<cmds::DeleteFramebuffersImmediate>(client_id);
}
void GLES2DecoderTestBase::DoBindRenderbuffer(
@@ -772,10 +919,7 @@ void GLES2DecoderTestBase::DoDeleteRenderbuffer(
EXPECT_CALL(*gl_, DeleteRenderbuffersEXT(1, Pointee(service_id)))
.Times(1)
.RetiresOnSaturation();
- cmds::DeleteRenderbuffers cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- memcpy(shared_memory_address_, &client_id, sizeof(client_id));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ GenHelper<cmds::DeleteRenderbuffersImmediate>(client_id);
}
void GLES2DecoderTestBase::DoBindTexture(
@@ -797,10 +941,7 @@ void GLES2DecoderTestBase::DoDeleteTexture(
EXPECT_CALL(*gl_, DeleteTextures(1, Pointee(service_id)))
.Times(1)
.RetiresOnSaturation();
- cmds::DeleteTextures cmd;
- cmd.Init(1, shared_memory_id_, shared_memory_offset_);
- memcpy(shared_memory_address_, &client_id, sizeof(client_id));
- EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ GenHelper<cmds::DeleteTexturesImmediate>(client_id);
}
void GLES2DecoderTestBase::DoTexImage2D(
@@ -819,11 +960,33 @@ void GLES2DecoderTestBase::DoTexImage2D(
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
cmds::TexImage2D cmd;
- cmd.Init(target, level, internal_format, width, height, border, format,
+ cmd.Init(target, level, internal_format, width, height, format,
type, shared_memory_id, shared_memory_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
+void GLES2DecoderTestBase::DoTexImage2DConvertInternalFormat(
+ GLenum target, GLint level, GLenum requested_internal_format,
+ GLsizei width, GLsizei height, GLint border,
+ GLenum format, GLenum type,
+ uint32 shared_memory_id, uint32 shared_memory_offset,
+ GLenum expected_internal_format) {
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, TexImage2D(target, level, expected_internal_format,
+ width, height, border, format, type, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ cmds::TexImage2D cmd;
+ cmd.Init(target, level, requested_internal_format, width, height,
+ format, type, shared_memory_id, shared_memory_offset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
void GLES2DecoderTestBase::DoCompressedTexImage2D(
GLenum target, GLint level, GLenum format,
GLsizei width, GLsizei height, GLint border,
@@ -842,7 +1005,7 @@ void GLES2DecoderTestBase::DoCompressedTexImage2D(
bucket->SetSize(size);
cmds::CompressedTexImage2DBucket cmd;
cmd.Init(
- target, level, format, width, height, border,
+ target, level, format, width, height,
bucket_id);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -880,7 +1043,7 @@ void GLES2DecoderTestBase::DoFramebufferTexture2D(
.WillOnce(Return(error))
.RetiresOnSaturation();
cmds::FramebufferTexture2D cmd;
- cmd.Init(target, attachment, textarget, texture_client_id, level);
+ cmd.Init(target, attachment, textarget, texture_client_id);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -945,6 +1108,12 @@ void GLES2DecoderTestBase::AddExpectationsForDeleteVertexArraysOES(){
}
}
+void GLES2DecoderTestBase::AddExpectationsForDeleteBoundVertexArraysOES() {
+ // Expectations are the same as a delete, followed by binding VAO 0.
+ AddExpectationsForDeleteVertexArraysOES();
+ AddExpectationsForBindVertexArrayOES();
+}
+
void GLES2DecoderTestBase::AddExpectationsForBindVertexArrayOES() {
if (group_->feature_info()->feature_flags().native_vertex_array_object) {
EXPECT_CALL(*gl_, BindVertexArrayOES(_))
@@ -1255,6 +1424,19 @@ void GLES2DecoderTestBase::SetupShader(
EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
}
+void GLES2DecoderTestBase::DoEnableDisable(GLenum cap, bool enable) {
+ SetupExpectationsForEnableDisable(cap, enable);
+ if (enable) {
+ cmds::Enable cmd;
+ cmd.Init(cap);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ } else {
+ cmds::Disable cmd;
+ cmd.Init(cap);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ }
+}
+
void GLES2DecoderTestBase::DoEnableVertexAttribArray(GLint index) {
EXPECT_CALL(*gl_, EnableVertexAttribArray(index))
.Times(1)
@@ -1360,12 +1542,6 @@ void GLES2DecoderTestBase::AddExpectationsForSimulatedAttrib0WithError(
EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL))
.Times(1)
.RetiresOnSaturation();
- EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, 0))
- .Times(1)
- .RetiresOnSaturation();
- EXPECT_CALL(*gl_, VertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL))
- .Times(1)
- .RetiresOnSaturation();
EXPECT_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, buffer_id))
.Times(1)
.RetiresOnSaturation();
@@ -1378,18 +1554,35 @@ void GLES2DecoderTestBase::AddExpectationsForSimulatedAttrib0(
num_vertices, buffer_id, GL_NO_ERROR);
}
+void GLES2DecoderTestBase::SetupMockGLBehaviors() {
+ ON_CALL(*gl_, BindVertexArrayOES(_))
+ .WillByDefault(Invoke(
+ &gl_states_,
+ &GLES2DecoderTestBase::MockGLStates::OnBindVertexArrayOES));
+ ON_CALL(*gl_, BindBuffer(GL_ARRAY_BUFFER, _))
+ .WillByDefault(WithArg<1>(Invoke(
+ &gl_states_,
+ &GLES2DecoderTestBase::MockGLStates::OnBindArrayBuffer)));
+ ON_CALL(*gl_, VertexAttribPointer(_, _, _, _, _, NULL))
+ .WillByDefault(InvokeWithoutArgs(
+ &gl_states_,
+ &GLES2DecoderTestBase::MockGLStates::OnVertexAttribNullPointer));
+}
+
GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::
MockCommandBufferEngine() {
- data_.reset(new int8[kSharedBufferSize]);
+
+ scoped_ptr<base::SharedMemory> shm(new base::SharedMemory());
+ shm->CreateAndMapAnonymous(kSharedBufferSize);
+ valid_buffer_ = MakeBufferFromSharedMemory(shm.Pass(), kSharedBufferSize);
+
ClearSharedMemory();
- valid_buffer_.ptr = data_.get();
- valid_buffer_.size = kSharedBufferSize;
}
GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::
~MockCommandBufferEngine() {}
-gpu::Buffer
+scoped_refptr<gpu::Buffer>
GLES2DecoderWithShaderTestBase::MockCommandBufferEngine::GetSharedMemoryBuffer(
int32 shm_id) {
return shm_id == kSharedMemoryId ? valid_buffer_ : invalid_buffer_;
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
index 55436192c06..8456698344e 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h
@@ -12,27 +12,29 @@
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/framebuffer_manager.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
#include "gpu/command_buffer/service/program_manager.h"
#include "gpu/command_buffer/service/query_manager.h"
#include "gpu/command_buffer/service/renderbuffer_manager.h"
#include "gpu/command_buffer/service/shader_manager.h"
-#include "gpu/command_buffer/service/stream_texture_manager_mock.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "gpu/command_buffer/service/vertex_array_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/gl/gl_context_stub.h"
+#include "ui/gl/gl_context_stub_with_extensions.h"
#include "ui/gl/gl_surface_stub.h"
#include "ui/gl/gl_mock.h"
+namespace base {
class CommandLine;
+}
namespace gpu {
namespace gles2 {
class MemoryTracker;
-class GLES2DecoderTestBase : public testing::Test {
+class GLES2DecoderTestBase : public ::testing::TestWithParam<bool> {
public:
GLES2DecoderTestBase();
virtual ~GLES2DecoderTestBase();
@@ -140,11 +142,6 @@ class GLES2DecoderTestBase : public testing::Test {
return group_->program_manager();
}
- ::testing::StrictMock<MockStreamTextureManager>*
- stream_texture_manager() const {
- return stream_texture_manager_.get();
- }
-
void DoCreateProgram(GLuint client_id, GLuint service_id);
void DoCreateShader(GLenum shader_type, GLuint client_id, GLuint service_id);
@@ -154,26 +151,27 @@ class GLES2DecoderTestBase : public testing::Test {
memory_tracker_ = memory_tracker;
}
- void InitDecoder(
- const char* extensions,
- bool has_alpha,
- bool has_depth,
- bool has_stencil,
- bool request_alpha,
- bool request_depth,
- bool request_stencil,
- bool bind_generates_resource);
-
- void InitDecoderWithCommandLine(
- const char* extensions,
- bool has_alpha,
- bool has_depth,
- bool has_stencil,
- bool request_alpha,
- bool request_depth,
- bool request_stencil,
- bool bind_generates_resource,
- const CommandLine* command_line);
+ struct InitState {
+ InitState();
+
+ std::string extensions;
+ std::string gl_version;
+ bool has_alpha;
+ bool has_depth;
+ bool has_stencil;
+ bool request_alpha;
+ bool request_depth;
+ bool request_stencil;
+ bool bind_generates_resource;
+ bool lose_context_when_out_of_memory;
+ bool use_native_vao; // default is true.
+ };
+
+ void InitDecoder(const InitState& init);
+ void InitDecoderWithCommandLine(const InitState& init,
+ const base::CommandLine* command_line);
+
+ void ResetDecoder();
const ContextGroup& group() const {
return *group_.get();
@@ -248,6 +246,12 @@ class GLES2DecoderTestBase : public testing::Test {
GLsizei width, GLsizei height, GLint border,
GLenum format, GLenum type,
uint32 shared_memory_id, uint32 shared_memory_offset);
+ void DoTexImage2DConvertInternalFormat(
+ GLenum target, GLint level, GLenum requested_internal_format,
+ GLsizei width, GLsizei height, GLint border,
+ GLenum format, GLenum type,
+ uint32 shared_memory_id, uint32 shared_memory_offset,
+ GLenum expected_internal_format);
void DoRenderbufferStorage(
GLenum target, GLenum internal_format, GLenum actual_format,
GLsizei width, GLsizei height, GLenum error);
@@ -266,6 +270,8 @@ class GLES2DecoderTestBase : public testing::Test {
GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset);
void DoVertexAttribDivisorANGLE(GLuint index, GLuint divisor);
+ void DoEnableDisable(GLenum cap, bool enable);
+
void DoEnableVertexAttribArray(GLint index);
void DoBufferData(GLenum target, GLsizei size);
@@ -282,12 +288,13 @@ class GLES2DecoderTestBase : public testing::Test {
void DeleteIndexBuffer();
- void SetupClearTextureExpections(
+ void SetupClearTextureExpectations(
GLuint service_id,
GLuint old_service_id,
GLenum bind_target,
GLenum target,
GLint level,
+ GLenum internal_format,
GLenum format,
GLenum type,
GLsizei width,
@@ -326,6 +333,15 @@ class GLES2DecoderTestBase : public testing::Test {
GLclampf restore_depth,
bool restore_scissor_test);
+ void SetupExpectationsForDepthMask(bool mask);
+ void SetupExpectationsForEnableDisable(GLenum cap, bool enable);
+ void SetupExpectationsForColorMask(bool red,
+ bool green,
+ bool blue,
+ bool alpha);
+ void SetupExpectationsForStencilMask(uint32 front_mask,
+ uint32 back_mask);
+
void SetupExpectationsForApplyingDirtyState(
bool framebuffer_is_rgb,
bool framebuffer_has_depth,
@@ -335,10 +351,7 @@ class GLES2DecoderTestBase : public testing::Test {
bool depth_enabled,
GLuint front_stencil_mask,
GLuint back_stencil_mask,
- bool stencil_enabled,
- bool cull_face_enabled,
- bool scissor_test_enabled,
- bool blend_enabled);
+ bool stencil_enabled);
void SetupExpectationsForApplyingDefaultDirtyState();
@@ -350,6 +363,7 @@ class GLES2DecoderTestBase : public testing::Test {
void AddExpectationsForGenVertexArraysOES();
void AddExpectationsForDeleteVertexArraysOES();
+ void AddExpectationsForDeleteBoundVertexArraysOES();
void AddExpectationsForBindVertexArrayOES();
void AddExpectationsForRestoreAttribState(GLuint attrib);
@@ -481,8 +495,8 @@ class GLES2DecoderTestBase : public testing::Test {
// Use StrictMock to make 100% sure we know how GL will be called.
scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_refptr<gfx::GLSurfaceStub> surface_;
- scoped_refptr<gfx::GLContextStub> context_;
- scoped_ptr<GLES2Decoder> mock_decoder_;
+ scoped_refptr<gfx::GLContextStubWithExtensions> context_;
+ scoped_ptr<MockGLES2Decoder> mock_decoder_;
scoped_ptr<GLES2Decoder> decoder_;
MemoryTracker* memory_tracker_;
@@ -505,6 +519,30 @@ class GLES2DecoderTestBase : public testing::Test {
int8 immediate_buffer_[256];
+ const bool ignore_cached_state_for_test_;
+ bool cached_color_mask_red_;
+ bool cached_color_mask_green_;
+ bool cached_color_mask_blue_;
+ bool cached_color_mask_alpha_;
+ bool cached_depth_mask_;
+ uint32 cached_stencil_front_mask_;
+ uint32 cached_stencil_back_mask_;
+
+ struct EnableFlags {
+ EnableFlags();
+ bool cached_blend;
+ bool cached_cull_face;
+ bool cached_depth_test;
+ bool cached_dither;
+ bool cached_polygon_offset_fill;
+ bool cached_sample_alpha_to_coverage;
+ bool cached_sample_coverage;
+ bool cached_scissor_test;
+ bool cached_stencil_test;
+ };
+
+ EnableFlags enable_flags_;
+
private:
class MockCommandBufferEngine : public CommandBufferEngine {
public:
@@ -512,10 +550,11 @@ class GLES2DecoderTestBase : public testing::Test {
virtual ~MockCommandBufferEngine();
- virtual gpu::Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE;
+ virtual scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id)
+ OVERRIDE;
void ClearSharedMemory() {
- memset(data_.get(), kInitialMemoryValue, kSharedBufferSize);
+ memset(valid_buffer_->memory(), kInitialMemoryValue, kSharedBufferSize);
}
virtual void set_token(int32 token) OVERRIDE;
@@ -529,17 +568,51 @@ class GLES2DecoderTestBase : public testing::Test {
virtual int32 GetGetOffset() OVERRIDE;
private:
- scoped_ptr<int8[]> data_;
- gpu::Buffer valid_buffer_;
- gpu::Buffer invalid_buffer_;
+ scoped_refptr<gpu::Buffer> valid_buffer_;
+ scoped_refptr<gpu::Buffer> invalid_buffer_;
};
+ // MockGLStates is used to track GL states and emulate driver
+ // behaviors on top of MockGLInterface.
+ class MockGLStates {
+ public:
+ MockGLStates()
+ : bound_array_buffer_object_(0),
+ bound_vertex_array_object_(0) {
+ }
+
+ ~MockGLStates() {
+ }
+
+ void OnBindArrayBuffer(GLuint id) {
+ bound_array_buffer_object_ = id;
+ }
+
+ void OnBindVertexArrayOES(GLuint id) {
+ bound_vertex_array_object_ = id;
+ }
+
+ void OnVertexAttribNullPointer() {
+ // When a vertex array object is bound, some drivers (AMD Linux,
+ // Qualcomm, etc.) have a bug where it incorrectly generates an
+ // GL_INVALID_OPERATION on glVertexAttribPointer() if pointer
+ // is NULL, no buffer is bound on GL_ARRAY_BUFFER.
+ // Make sure we don't trigger this bug.
+ if (bound_vertex_array_object_ != 0)
+ EXPECT_TRUE(bound_array_buffer_object_ != 0);
+ }
+
+ private:
+ GLuint bound_array_buffer_object_;
+ GLuint bound_vertex_array_object_;
+ }; // class MockGLStates
+
void AddExpectationsForVertexAttribManager();
+ void SetupMockGLBehaviors();
scoped_ptr< ::testing::StrictMock<MockCommandBufferEngine> > engine_;
- scoped_ptr< ::testing::StrictMock<MockStreamTextureManager> >
- stream_texture_manager_;
scoped_refptr<ContextGroup> group_;
+ MockGLStates gl_states_;
};
class GLES2DecoderWithShaderTestBase : public GLES2DecoderTestBase {
@@ -554,6 +627,10 @@ class GLES2DecoderWithShaderTestBase : public GLES2DecoderTestBase {
};
+// SpecializedSetup specializations that are needed in multiple unittest files.
+template <>
+void GLES2DecoderTestBase::SpecializedSetup<cmds::LinkProgram, 0>(bool valid);
+
} // namespace gles2
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc
new file mode 100644
index 00000000000..49ebfc3f27a
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc
@@ -0,0 +1,428 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
+#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/common/id_allocator.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
+#include "gpu/command_buffer/service/cmd_buffer_engine.h"
+#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/context_state.h"
+#include "gpu/command_buffer/service/gl_surface_mock.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
+
+#include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/command_buffer/service/image_manager.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/mocks.h"
+#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
+
+#if !defined(GL_DEPTH24_STENCIL8)
+#define GL_DEPTH24_STENCIL8 0x88F0
+#endif
+
+using ::gfx::MockGLInterface;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::InSequence;
+using ::testing::Invoke;
+using ::testing::MatcherCast;
+using ::testing::Mock;
+using ::testing::Pointee;
+using ::testing::Return;
+using ::testing::SaveArg;
+using ::testing::SetArrayArgument;
+using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
+using ::testing::StrEq;
+using ::testing::StrictMock;
+
+namespace gpu {
+namespace gles2 {
+
+using namespace cmds;
+
+class GLES2DecoderRestoreStateTest : public GLES2DecoderManualInitTest {
+ public:
+ GLES2DecoderRestoreStateTest() {}
+
+ protected:
+ void AddExpectationsForActiveTexture(GLenum unit);
+ void AddExpectationsForBindTexture(GLenum target, GLuint id);
+ void InitializeContextState(ContextState* state,
+ uint32 non_default_unit,
+ uint32 active_unit);
+};
+
+INSTANTIATE_TEST_CASE_P(Service,
+ GLES2DecoderRestoreStateTest,
+ ::testing::Bool());
+
+void GLES2DecoderRestoreStateTest::AddExpectationsForActiveTexture(
+ GLenum unit) {
+ EXPECT_CALL(*gl_, ActiveTexture(unit)).Times(1).RetiresOnSaturation();
+}
+
+void GLES2DecoderRestoreStateTest::AddExpectationsForBindTexture(GLenum target,
+ GLuint id) {
+ EXPECT_CALL(*gl_, BindTexture(target, id)).Times(1).RetiresOnSaturation();
+}
+
+void GLES2DecoderRestoreStateTest::InitializeContextState(
+ ContextState* state,
+ uint32 non_default_unit,
+ uint32 active_unit) {
+ state->texture_units.resize(group().max_texture_units());
+ for (uint32 tt = 0; tt < state->texture_units.size(); ++tt) {
+ TextureRef* ref_cube_map =
+ group().texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP);
+ state->texture_units[tt].bound_texture_cube_map = ref_cube_map;
+ TextureRef* ref_2d =
+ (tt == non_default_unit)
+ ? group().texture_manager()->GetTexture(client_texture_id_)
+ : group().texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_2D);
+ state->texture_units[tt].bound_texture_2d = ref_2d;
+ }
+ state->active_texture_unit = active_unit;
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, NullPreviousStateBGR) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ SetupTexture();
+
+ InSequence sequence;
+ // Expect to restore texture bindings for unit GL_TEXTURE0.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+ AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP,
+ TestHelper::kServiceDefaultTextureCubemapId);
+
+ // Expect to restore texture bindings for remaining units.
+ for (uint32 i = 1; i < group().max_texture_units(); ++i) {
+ AddExpectationsForActiveTexture(GL_TEXTURE0 + i);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D,
+ TestHelper::kServiceDefaultTexture2dId);
+ AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP,
+ TestHelper::kServiceDefaultTextureCubemapId);
+ }
+
+ // Expect to restore the active texture unit to GL_TEXTURE0.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(NULL);
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, NullPreviousState) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+ SetupTexture();
+
+ InSequence sequence;
+ // Expect to restore texture bindings for unit GL_TEXTURE0.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+ AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0);
+
+ // Expect to restore texture bindings for remaining units.
+ for (uint32 i = 1; i < group().max_texture_units(); ++i) {
+ AddExpectationsForActiveTexture(GL_TEXTURE0 + i);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, 0);
+ AddExpectationsForBindTexture(GL_TEXTURE_CUBE_MAP, 0);
+ }
+
+ // Expect to restore the active texture unit to GL_TEXTURE0.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(NULL);
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, WithPreviousStateBGR) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ SetupTexture();
+
+ // Construct a previous ContextState with all texture bindings
+ // set to default textures.
+ ContextState prev_state(NULL, NULL, NULL);
+ InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0);
+
+ InSequence sequence;
+ // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit,
+ // since the rest of the bindings haven't changed between the current
+ // state and the |prev_state|.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+
+ // Expect to restore active texture unit to GL_TEXTURE0.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, WithPreviousState) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+ SetupTexture();
+
+ // Construct a previous ContextState with all texture bindings
+ // set to default textures.
+ ContextState prev_state(NULL, NULL, NULL);
+ InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0);
+
+ InSequence sequence;
+ // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE0 unit,
+ // since the rest of the bindings haven't changed between the current
+ // state and the |prev_state|.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+
+ // Expect to restore active texture unit to GL_TEXTURE0.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, ActiveUnit1) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ // Bind a non-default texture to GL_TEXTURE1 unit.
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
+ ActiveTexture cmd;
+ cmd.Init(GL_TEXTURE1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ SetupTexture();
+
+ // Construct a previous ContextState with all texture bindings
+ // set to default textures.
+ ContextState prev_state(NULL, NULL, NULL);
+ InitializeContextState(&prev_state, std::numeric_limits<uint32>::max(), 0);
+
+ InSequence sequence;
+ // Expect to restore only GL_TEXTURE_2D binding for GL_TEXTURE1 unit,
+ // since the rest of the bindings haven't changed between the current
+ // state and the |prev_state|.
+ AddExpectationsForActiveTexture(GL_TEXTURE1);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+
+ // Expect to restore active texture unit to GL_TEXTURE1.
+ AddExpectationsForActiveTexture(GL_TEXTURE1);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit0BGR) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ // Bind a non-default texture to GL_TEXTURE1 unit.
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
+ SpecializedSetup<ActiveTexture, 0>(true);
+ ActiveTexture cmd;
+ cmd.Init(GL_TEXTURE1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ SetupTexture();
+
+ // Construct a previous ContextState with GL_TEXTURE_2D target in
+ // GL_TEXTURE0 unit bound to a non-default texture and the rest
+ // set to default textures.
+ ContextState prev_state(NULL, NULL, NULL);
+ InitializeContextState(&prev_state, 0, kServiceTextureId);
+
+ InSequence sequence;
+ // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE0 unit to
+ // a default texture.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D,
+ TestHelper::kServiceDefaultTexture2dId);
+
+ // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE1 unit to
+ // non-default.
+ AddExpectationsForActiveTexture(GL_TEXTURE1);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+
+ // Expect to restore active texture unit to GL_TEXTURE1.
+ AddExpectationsForActiveTexture(GL_TEXTURE1);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit1BGR) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ // Bind a non-default texture to GL_TEXTURE0 unit.
+ SetupTexture();
+
+ // Construct a previous ContextState with GL_TEXTURE_2D target in
+ // GL_TEXTURE1 unit bound to a non-default texture and the rest
+ // set to default textures.
+ ContextState prev_state(NULL, NULL, NULL);
+ InitializeContextState(&prev_state, 1, kServiceTextureId);
+
+ InSequence sequence;
+ // Expect to restore GL_TEXTURE_2D binding to the non-default texture
+ // for GL_TEXTURE0 unit.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+
+ // Expect to restore GL_TEXTURE_2D binding to the default texture
+ // for GL_TEXTURE1 unit.
+ AddExpectationsForActiveTexture(GL_TEXTURE1);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D,
+ TestHelper::kServiceDefaultTexture2dId);
+
+ // Expect to restore active texture unit to GL_TEXTURE0.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit0) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ // Bind a non-default texture to GL_TEXTURE1 unit.
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
+ SpecializedSetup<ActiveTexture, 0>(true);
+ ActiveTexture cmd;
+ cmd.Init(GL_TEXTURE1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ SetupTexture();
+
+ // Construct a previous ContextState with GL_TEXTURE_2D target in
+ // GL_TEXTURE0 unit bound to a non-default texture and the rest
+ // set to default textures.
+ ContextState prev_state(NULL, NULL, NULL);
+ InitializeContextState(&prev_state, 0, kServiceTextureId);
+
+ InSequence sequence;
+ // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE0 unit to
+ // the 0 texture.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, 0);
+
+ // Expect to restore GL_TEXTURE_2D binding for GL_TEXTURE1 unit to
+ // non-default.
+ AddExpectationsForActiveTexture(GL_TEXTURE1);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+
+ // Expect to restore active texture unit to GL_TEXTURE1.
+ AddExpectationsForActiveTexture(GL_TEXTURE1);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
+}
+
+TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit1) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ // Bind a non-default texture to GL_TEXTURE0 unit.
+ SetupTexture();
+
+ // Construct a previous ContextState with GL_TEXTURE_2D target in
+ // GL_TEXTURE1 unit bound to a non-default texture and the rest
+ // set to default textures.
+ ContextState prev_state(NULL, NULL, NULL);
+ InitializeContextState(&prev_state, 1, kServiceTextureId);
+
+ InSequence sequence;
+ // Expect to restore GL_TEXTURE_2D binding to the non-default texture
+ // for GL_TEXTURE0 unit.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, kServiceTextureId);
+
+ // Expect to restore GL_TEXTURE_2D binding to the 0 texture
+ // for GL_TEXTURE1 unit.
+ AddExpectationsForActiveTexture(GL_TEXTURE1);
+ AddExpectationsForBindTexture(GL_TEXTURE_2D, 0);
+
+ // Expect to restore active texture unit to GL_TEXTURE0.
+ AddExpectationsForActiveTexture(GL_TEXTURE0);
+
+ GetDecoder()->RestoreAllTextureUnitBindings(&prev_state);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ContextStateCapabilityCaching) {
+ struct TestInfo {
+ GLenum gl_enum;
+ bool default_state;
+ bool expect_set;
+ };
+
+ // TODO(vmiura): Should autogen this to match build_gles2_cmd_buffer.py.
+ TestInfo test[] = {{GL_BLEND, false, true},
+ {GL_CULL_FACE, false, true},
+ {GL_DEPTH_TEST, false, false},
+ {GL_DITHER, true, true},
+ {GL_POLYGON_OFFSET_FILL, false, true},
+ {GL_SAMPLE_ALPHA_TO_COVERAGE, false, true},
+ {GL_SAMPLE_COVERAGE, false, true},
+ {GL_SCISSOR_TEST, false, true},
+ {GL_STENCIL_TEST, false, false},
+ {0, false, false}};
+
+ InitState init;
+ init.gl_version = "2.1";
+ InitDecoder(init);
+
+ for (int i = 0; test[i].gl_enum; i++) {
+ bool enable_state = test[i].default_state;
+
+ // Test setting default state initially is ignored.
+ EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set);
+
+ // Test new and cached state changes.
+ for (int n = 0; n < 3; n++) {
+ enable_state = !enable_state;
+ EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set);
+ EnableDisableTest(test[i].gl_enum, enable_state, test[i].expect_set);
+ }
+ }
+}
+
+// TODO(vmiura): Tests for VAO restore.
+
+// TODO(vmiura): Tests for ContextState::RestoreAttribute().
+
+// TODO(vmiura): Tests for ContextState::RestoreBufferBindings().
+
+// TODO(vmiura): Tests for ContextState::RestoreProgramBindings().
+
+// TODO(vmiura): Tests for ContextState::RestoreRenderbufferBindings().
+
+// TODO(vmiura): Tests for ContextState::RestoreProgramBindings().
+
+// TODO(vmiura): Tests for ContextState::RestoreGlobalState().
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
new file mode 100644
index 00000000000..3dfa4758082
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
@@ -0,0 +1,2284 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
+#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/common/id_allocator.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
+#include "gpu/command_buffer/service/cmd_buffer_engine.h"
+#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/context_state.h"
+#include "gpu/command_buffer/service/gl_surface_mock.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
+
+#include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/command_buffer/service/image_manager.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/mocks.h"
+#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
+
+#if !defined(GL_DEPTH24_STENCIL8)
+#define GL_DEPTH24_STENCIL8 0x88F0
+#endif
+
+using ::gfx::MockGLInterface;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::InSequence;
+using ::testing::Invoke;
+using ::testing::MatcherCast;
+using ::testing::Mock;
+using ::testing::Pointee;
+using ::testing::Return;
+using ::testing::SaveArg;
+using ::testing::SetArrayArgument;
+using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
+using ::testing::StrEq;
+using ::testing::StrictMock;
+
+namespace gpu {
+namespace gles2 {
+
+using namespace cmds;
+
+class GLES2DecoderGeometryInstancingTest : public GLES2DecoderWithShaderTest {
+ public:
+ GLES2DecoderGeometryInstancingTest() : GLES2DecoderWithShaderTest() {}
+
+ virtual void SetUp() {
+ InitState init;
+ init.extensions = "GL_ANGLE_instanced_arrays";
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ SetupDefaultProgram();
+ }
+};
+
+INSTANTIATE_TEST_CASE_P(Service,
+ GLES2DecoderGeometryInstancingTest,
+ ::testing::Bool());
+
+void GLES2DecoderManualInitTest::DirtyStateMaskTest(GLuint color_bits,
+ bool depth_mask,
+ GLuint front_stencil_mask,
+ GLuint back_stencil_mask) {
+ ColorMask color_mask_cmd;
+ color_mask_cmd.Init((color_bits & 0x1000) != 0,
+ (color_bits & 0x0100) != 0,
+ (color_bits & 0x0010) != 0,
+ (color_bits & 0x0001) != 0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ DepthMask depth_mask_cmd;
+ depth_mask_cmd.Init(depth_mask);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(depth_mask_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ StencilMaskSeparate front_stencil_mask_cmd;
+ front_stencil_mask_cmd.Init(GL_FRONT, front_stencil_mask);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(front_stencil_mask_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ StencilMaskSeparate back_stencil_mask_cmd;
+ back_stencil_mask_cmd.Init(GL_BACK, back_stencil_mask);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(back_stencil_mask_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupExpectationsForApplyingDirtyState(
+ false, // Framebuffer is RGB
+ true, // Framebuffer has depth
+ true, // Framebuffer has stencil
+ color_bits, // color bits
+ depth_mask, // depth mask
+ false, // depth enabled
+ front_stencil_mask, // front stencil mask
+ back_stencil_mask, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Test that with an RGB backbuffer if we set the color mask to 1,1,1,1 it is
+// set to 1,1,1,0 at Draw time but is 1,1,1,1 at query time.
+TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMask) {
+ ColorMask cmd;
+ cmd.Init(true, true, true, true);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_COLOR_WRITEMASK, result->GetData()))
+ .Times(0);
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_COLOR_WRITEMASK, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(
+ decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_COLOR_WRITEMASK),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(1, result->GetData()[0]);
+ EXPECT_EQ(1, result->GetData()[1]);
+ EXPECT_EQ(1, result->GetData()[2]);
+ EXPECT_EQ(1, result->GetData()[3]);
+}
+
+// Test that with no depth if we set DepthMask true that it's set to false at
+// draw time but querying it returns true.
+TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferDepthMask) {
+ EXPECT_CALL(*gl_, DepthMask(true)).Times(0).RetiresOnSaturation();
+ DepthMask cmd;
+ cmd.Init(true);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_WRITEMASK, result->GetData()))
+ .Times(0);
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_DEPTH_WRITEMASK, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(
+ decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_WRITEMASK),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(1, result->GetData()[0]);
+}
+
+// Test that with no stencil if we set the stencil mask it's still set to 0 at
+// draw time but gets our value if we query.
+TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferStencilMask) {
+ const GLint kMask = 123;
+ EXPECT_CALL(*gl_, StencilMask(kMask)).Times(0).RetiresOnSaturation();
+ StencilMask cmd;
+ cmd.Init(kMask);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_WRITEMASK, result->GetData()))
+ .Times(0);
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_WRITEMASK, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(
+ decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_WRITEMASK),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(kMask, result->GetData()[0]);
+}
+
+// Test that if an FBO is bound we get the correct masks.
+TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMaskFBO) {
+ ColorMask cmd;
+ cmd.Init(true, true, true, true);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupTexture();
+ SetupVertexBuffer();
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
+ DoEnableVertexAttribArray(1);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+ DoEnableVertexAttribArray(2);
+ DoVertexAttribPointer(2, 2, GL_FLOAT, 0, 0);
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Check that no extra calls are made on the next draw.
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Setup Frame buffer.
+ // needs to be 1x1 or else it's not renderable.
+ const GLsizei kWidth = 1;
+ const GLsizei kHeight = 1;
+ const GLenum kFormat = GL_RGB;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ // Pass some data so the texture will be marked as cleared.
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ kFormat,
+ kWidth,
+ kHeight,
+ 0,
+ kFormat,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_,
+ kServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+ EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
+ .RetiresOnSaturation();
+
+ // This time state needs to be set.
+ SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Check that no extra calls are made on the next draw.
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Unbind
+ DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
+
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, DepthEnableWithDepth) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_depth = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ Enable cmd;
+ cmd.Init(GL_DEPTH_TEST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupDefaultProgram();
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ true, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ true, // depth mask
+ true, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_TEST, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_DEPTH_TEST, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_TEST),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(1, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, DepthEnableWithoutRequestedDepth) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ Enable cmd;
+ cmd.Init(GL_DEPTH_TEST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupDefaultProgram();
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_TEST, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_DEPTH_TEST, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_TEST),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(1, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, StencilEnableWithStencil) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_stencil = true;
+ init.request_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ Enable cmd;
+ cmd.Init(GL_STENCIL_TEST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupDefaultProgram();
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ true, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ -1, // front stencil mask
+ -1, // back stencil mask
+ true); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_TEST, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_TEST, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_TEST),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(1, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, StencilEnableWithoutRequestedStencil) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ Enable cmd;
+ cmd.Init(GL_STENCIL_TEST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupDefaultProgram();
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(true, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1110, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays draw_cmd;
+ draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_TEST, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_TEST, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_TEST),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(1, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, CachedColorMask) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.has_stencil = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.request_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ SetupDefaultProgram();
+ SetupAllNeededVertexBuffers();
+ SetupTexture();
+
+ // Test all color_bits combinations twice.
+ for (int i = 0; i < 32; i++) {
+ GLuint color_bits = (i & 1 ? 0x0001 : 0x0000) | (i & 2 ? 0x0010 : 0x0000) |
+ (i & 4 ? 0x0100 : 0x0000) | (i & 8 ? 0x1000 : 0x0000);
+
+ // Toggle depth_test to force ApplyDirtyState each time.
+ DirtyStateMaskTest(color_bits, false, 0xffffffff, 0xffffffff);
+ DirtyStateMaskTest(color_bits, true, 0xffffffff, 0xffffffff);
+ DirtyStateMaskTest(color_bits, false, 0xffffffff, 0xffffffff);
+ }
+}
+
+TEST_P(GLES2DecoderManualInitTest, CachedDepthMask) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.has_stencil = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.request_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ SetupDefaultProgram();
+ SetupAllNeededVertexBuffers();
+ SetupTexture();
+
+ // Test all depth_mask combinations twice.
+ for (int i = 0; i < 4; i++) {
+ bool depth_mask = (i & 1) == 1;
+
+ // Toggle color masks to force ApplyDirtyState each time.
+ DirtyStateMaskTest(0x1010, depth_mask, 0xffffffff, 0xffffffff);
+ DirtyStateMaskTest(0x0101, depth_mask, 0xffffffff, 0xffffffff);
+ DirtyStateMaskTest(0x1010, depth_mask, 0xffffffff, 0xffffffff);
+ }
+}
+
+TEST_P(GLES2DecoderManualInitTest, CachedStencilMask) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.has_stencil = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.request_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ SetupDefaultProgram();
+ SetupAllNeededVertexBuffers();
+ SetupTexture();
+
+ // Test all stencil_mask combinations twice.
+ for (int i = 0; i < 4; i++) {
+ GLuint stencil_mask = (i & 1) ? 0xf0f0f0f0 : 0x0f0f0f0f;
+
+ // Toggle color masks to force ApplyDirtyState each time.
+ DirtyStateMaskTest(0x1010, true, stencil_mask, 0xffffffff);
+ DirtyStateMaskTest(0x0101, true, stencil_mask, 0xffffffff);
+ DirtyStateMaskTest(0x1010, true, stencil_mask, 0xffffffff);
+ }
+
+ for (int i = 0; i < 4; i++) {
+ GLuint stencil_mask = (i & 1) ? 0xf0f0f0f0 : 0x0f0f0f0f;
+
+ // Toggle color masks to force ApplyDirtyState each time.
+ DirtyStateMaskTest(0x1010, true, 0xffffffff, stencil_mask);
+ DirtyStateMaskTest(0x0101, true, 0xffffffff, stencil_mask);
+ DirtyStateMaskTest(0x1010, true, 0xffffffff, stencil_mask);
+ }
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysNoAttributesSucceeds) {
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Tests when the math overflows (0x40000000 * sizeof GLfloat)
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OverflowFails) {
+ const GLsizei kLargeCount = 0x40000000;
+ SetupTexture();
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kLargeCount);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+ EXPECT_FALSE(GetDecoder()->WasContextLost());
+}
+
+// Tests when the math overflows (0x7FFFFFFF + 1 = 0x8000000 verts)
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0PosToNegFails) {
+ const GLsizei kLargeCount = 0x7FFFFFFF;
+ SetupTexture();
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kLargeCount);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+ EXPECT_FALSE(GetDecoder()->WasContextLost());
+}
+
+// Tests when the driver returns an error
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OOMFails) {
+ const GLsizei kFakeLargeCount = 0x1234;
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0WithError(
+ kFakeLargeCount, 0, GL_OUT_OF_MEMORY);
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+ EXPECT_FALSE(GetDecoder()->WasContextLost());
+}
+
+// Test that we lose context.
+TEST_P(GLES2DecoderManualInitTest, LoseContextWhenOOM) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ init.lose_context_when_out_of_memory = true;
+ InitDecoder(init);
+ SetupDefaultProgram();
+
+ const GLsizei kFakeLargeCount = 0x1234;
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0WithError(
+ kFakeLargeCount, 0, GL_OUT_OF_MEMORY);
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
+ // Other contexts in the group should be lost also.
+ EXPECT_CALL(*mock_decoder_, LoseContext(GL_UNKNOWN_CONTEXT_RESET_ARB))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount);
+ // This context should be lost.
+ EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+ EXPECT_TRUE(decoder_->WasContextLost());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysBadTextureUsesBlack) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ // This is an NPOT texture. As the default filtering requires mips
+ // this should trigger replacing with black textures before rendering.
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 3,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ {
+ InSequence sequence;
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(
+ *gl_, BindTexture(GL_TEXTURE_2D, TestHelper::kServiceBlackTexture2dId))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0))
+ .Times(1)
+ .RetiresOnSaturation();
+ }
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysMissingAttributesFails) {
+ DoEnableVertexAttribArray(1);
+
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest,
+ DrawArraysMissingAttributesZeroCountSucceeds) {
+ DoEnableVertexAttribArray(1);
+
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, 0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysValidAttributesSucceeds) {
+ SetupTexture();
+ SetupVertexBuffer();
+ DoEnableVertexAttribArray(1);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+ AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Same as DrawArraysValidAttributesSucceeds, but with workaround
+// |init_vertex_attributes|.
+TEST_P(GLES2DecoderManualInitTest, InitVertexAttributes) {
+ CommandLine command_line(0, NULL);
+ command_line.AppendSwitchASCII(
+ switches::kGpuDriverBugWorkarounds,
+ base::IntToString(gpu::INIT_VERTEX_ATTRIBUTES));
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoderWithCommandLine(init, &command_line);
+ SetupDefaultProgram();
+ SetupTexture();
+ SetupVertexBuffer();
+ DoEnableVertexAttribArray(1);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+ AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysDeletedBufferFails) {
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+ DeleteVertexBuffer();
+
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysDeletedProgramSucceeds) {
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DoDeleteProgram(client_program_id_, kServiceProgramId);
+
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)).Times(1);
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysWithInvalidModeFails) {
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
+ DrawArrays cmd;
+ cmd.Init(GL_QUADS, 0, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(GL_POLYGON, 0, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysInvalidCountFails) {
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ // Try start > 0
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 1, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Try with count > size
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices + 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Try with attrib offset > 0
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 4);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Try with size > 2 (ie, vec3 instead of vec2)
+ DoVertexAttribPointer(1, 3, GL_FLOAT, 0, 0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Try with stride > 8 (vec2 + vec2 byte)
+ DoVertexAttribPointer(1, 2, GL_FLOAT, sizeof(GLfloat) * 3, 0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysInstancedANGLEFails) {
+ SetupTexture();
+ SetupVertexBuffer();
+ DoEnableVertexAttribArray(1);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, VertexAttribDivisorANGLEFails) {
+ SetupTexture();
+ SetupVertexBuffer();
+ DoEnableVertexAttribArray(1);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(_, _))
+ .Times(0)
+ .RetiresOnSaturation();
+
+ VertexAttribDivisorANGLE cmd;
+ cmd.Init(0, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLENoAttributesFails) {
+ SetupTexture();
+
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLESimulatedAttrib0) {
+ SetupTexture();
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, 3))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 1))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, 3);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLEMissingAttributesFails) {
+ DoEnableVertexAttribArray(1);
+
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _)).Times(0);
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLEMissingAttributesZeroCountSucceeds) {
+ DoEnableVertexAttribArray(1);
+
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _)).Times(0);
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, 0, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLEValidAttributesSucceeds) {
+ SetupTexture();
+ SetupVertexBuffer();
+ DoEnableVertexAttribArray(1);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+ AddExpectationsForSimulatedAttrib0(kNumVertices, kServiceBufferId);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, 1))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLEWithInvalidModeFails) {
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _)).Times(0);
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_QUADS, 0, 1, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(GL_POLYGON, 0, 1, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLEInvalidPrimcountFails) {
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _)).Times(0);
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, 1, -1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+// Per-instance data is twice as large, but number of instances is half
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLELargeInstanceSucceeds) {
+ SetupTexture();
+ SetupVertexBuffer();
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 4, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(
+ *gl_,
+ DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, kNumVertices / 2))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices / 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Per-instance data is twice as large, but divisor is twice
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLELargeDivisorSucceeds) {
+ SetupTexture();
+ SetupVertexBuffer();
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 4, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 2);
+ EXPECT_CALL(
+ *gl_,
+ DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest, DrawArraysInstancedANGLELargeFails) {
+ SetupTexture();
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices + 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices + 1, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Per-index data is twice as large, but number of indices is half
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLELargeIndexSucceeds) {
+ SetupTexture();
+ SetupVertexBuffer();
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DoVertexAttribPointer(1, 4, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(
+ *gl_,
+ DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices / 2, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices / 2, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawArraysInstancedANGLENoDivisor0Fails) {
+ SetupTexture();
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ DoVertexAttribDivisorANGLE(1, 1);
+ EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawArraysInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsNoAttributesSucceeds) {
+ SetupTexture();
+ SetupIndexBuffer();
+ AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
+ SetupExpectationsForApplyingDefaultDirtyState();
+ EXPECT_CALL(*gl_,
+ DrawElements(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2)))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsMissingAttributesFails) {
+ SetupIndexBuffer();
+ DoEnableVertexAttribArray(1);
+
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest,
+ DrawElementsMissingAttributesZeroCountSucceeds) {
+ SetupIndexBuffer();
+ DoEnableVertexAttribArray(1);
+
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES, 0, GL_UNSIGNED_SHORT, kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsExtraAttributesFails) {
+ SetupIndexBuffer();
+ DoEnableVertexAttribArray(6);
+
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsValidAttributesSucceeds) {
+ SetupTexture();
+ SetupVertexBuffer();
+ SetupIndexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+ AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ EXPECT_CALL(*gl_,
+ DrawElements(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2)))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsDeletedBufferFails) {
+ SetupVertexBuffer();
+ SetupIndexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+ DeleteIndexBuffer();
+
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsDeletedProgramSucceeds) {
+ SetupTexture();
+ SetupIndexBuffer();
+ AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DoDeleteProgram(client_program_id_, kServiceProgramId);
+
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(1);
+ EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)).Times(1);
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsWithInvalidModeFails) {
+ SetupVertexBuffer();
+ SetupIndexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
+ DrawElements cmd;
+ cmd.Init(GL_QUADS,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(GL_POLYGON,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsInvalidCountFails) {
+ SetupVertexBuffer();
+ SetupIndexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ // Try start > 0
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES, kNumIndices, GL_UNSIGNED_SHORT, 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Try with count > size
+ cmd.Init(GL_TRIANGLES, kNumIndices + 1, GL_UNSIGNED_SHORT, 0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsOutOfRangeIndicesFails) {
+ SetupVertexBuffer();
+ SetupIndexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kInvalidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kInvalidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsOddOffsetForUint16Fails) {
+ SetupVertexBuffer();
+ SetupIndexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES, kInvalidIndexRangeCount, GL_UNSIGNED_SHORT, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsInstancedANGLEFails) {
+ SetupTexture();
+ SetupVertexBuffer();
+ SetupIndexBuffer();
+ DoEnableVertexAttribArray(1);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLENoAttributesFails) {
+ SetupTexture();
+ SetupIndexBuffer();
+
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLESimulatedAttrib0) {
+ SetupTexture();
+ SetupVertexBuffer();
+ SetupIndexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(
+ *gl_,
+ DrawElementsInstancedANGLE(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2),
+ 3))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 1))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ 3);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLEMissingAttributesFails) {
+ SetupIndexBuffer();
+ DoEnableVertexAttribArray(1);
+
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _)).Times(0);
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLEMissingAttributesZeroCountSucceeds) {
+ SetupIndexBuffer();
+ DoEnableVertexAttribArray(1);
+
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _)).Times(0);
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES, 0, GL_UNSIGNED_SHORT, kValidIndexRangeStart * 2, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLEValidAttributesSucceeds) {
+ SetupIndexBuffer();
+ SetupTexture();
+ SetupVertexBuffer();
+ DoEnableVertexAttribArray(1);
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+ AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, kServiceBufferId);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ EXPECT_CALL(
+ *gl_,
+ DrawElementsInstancedANGLE(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2),
+ 1))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLEWithInvalidModeFails) {
+ SetupIndexBuffer();
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _)).Times(0);
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_QUADS,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(GL_INVALID_ENUM,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+// Per-instance data is twice as large, but number of instances is half
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLELargeInstanceSucceeds) {
+ SetupTexture();
+ SetupIndexBuffer();
+ SetupVertexBuffer();
+ SetupExpectationsForApplyingDefaultDirtyState();
+ // Add offset so we're sure we're accessing data near the end of the buffer.
+ DoVertexAttribPointer(
+ 1,
+ 2,
+ GL_FLOAT,
+ 0,
+ (kNumVertices - kMaxValidIndex - 1) * 2 * sizeof(GLfloat));
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 4, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(
+ *gl_,
+ DrawElementsInstancedANGLE(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2),
+ kNumVertices / 2))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ kNumVertices / 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Per-instance data is twice as large, but divisor is twice
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLELargeDivisorSucceeds) {
+ SetupTexture();
+ SetupIndexBuffer();
+ SetupVertexBuffer();
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 4, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 2);
+ EXPECT_CALL(
+ *gl_,
+ DrawElementsInstancedANGLE(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2),
+ kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLELargeFails) {
+ SetupTexture();
+ SetupIndexBuffer();
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ kNumVertices + 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ cmd.Init(GL_TRIANGLES,
+ kInvalidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kInvalidIndexRangeStart * 2,
+ kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLEInvalidPrimcountFails) {
+ SetupTexture();
+ SetupIndexBuffer();
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ -1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Per-index data is twice as large, but values of indices are smaller
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLELargeIndexSucceeds) {
+ SetupTexture();
+ SetupIndexBuffer();
+ SetupVertexBuffer();
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DoVertexAttribPointer(1, 4, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ EXPECT_CALL(
+ *gl_,
+ DrawElementsInstancedANGLE(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2),
+ kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderGeometryInstancingTest,
+ DrawElementsInstancedANGLENoDivisor0Fails) {
+ SetupTexture();
+ SetupIndexBuffer();
+ SetupVertexBuffer();
+ DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
+
+ DoEnableVertexAttribArray(0);
+ DoVertexAttribPointer(0, 2, GL_FLOAT, 0, 0);
+ DoVertexAttribDivisorANGLE(0, 1);
+ DoVertexAttribDivisorANGLE(1, 1);
+ EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ DrawElementsInstancedANGLE cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2,
+ kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawArraysClearsAfterTexImage2DNULL) {
+ SetupAllNeededVertexBuffers();
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ // Create an uncleared texture with 2 levels.
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 1, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ // Expect 2 levels will be cleared.
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 2,
+ 2);
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 1,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 1,
+ 1);
+ SetupExpectationsForApplyingDefaultDirtyState();
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // But not again
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawElementsClearsAfterTexImage2DNULL) {
+ SetupAllNeededVertexBuffers();
+ SetupIndexBuffer();
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ // Create an uncleared texture with 2 levels.
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 1, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ // Expect 2 levels will be cleared.
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 2,
+ 2);
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 1,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 1,
+ 1);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ EXPECT_CALL(*gl_,
+ DrawElements(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2)))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // But not again
+ EXPECT_CALL(*gl_,
+ DrawElements(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ BufferOffset(kValidIndexRangeStart * 2)))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawClearsAfterTexImage2DNULLInFBO) {
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ SetupAllNeededVertexBuffers();
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ // Setup "render from" texture.
+ SetupTexture();
+
+ SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target
+ GL_COLOR_BUFFER_BIT, // clear bits
+ 0,
+ 0,
+ 0,
+ 0, // color
+ 0, // stencil
+ 1.0f, // depth
+ false); // scissor test
+
+ SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1111, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // But not again.
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawWitFBOThatCantClearDoesNotDraw) {
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ // Setup "render from" texture.
+ SetupTexture();
+
+ EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_UNSUPPORTED))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, DrawClearsAfterRenderbufferStorageInFBO) {
+ SetupTexture();
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoRenderbufferStorage(
+ GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 100, 50, GL_NO_ERROR);
+ DoFramebufferRenderbuffer(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_,
+ kServiceRenderbufferId,
+ GL_NO_ERROR);
+
+ SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target
+ GL_COLOR_BUFFER_BIT, // clear bits
+ 0,
+ 0,
+ 0,
+ 0, // color
+ 0, // stencil
+ 1.0f, // depth
+ false); // scissor test
+
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1111, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, DrawArraysClearsAfterTexImage2DNULLCubemap) {
+ InitState init;
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ InitDecoder(init);
+
+ static const GLenum faces[] = {
+ GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
+ GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
+ GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
+ };
+ SetupCubemapProgram();
+ DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
+ // Fill out all the faces for 2 levels, leave 2 uncleared.
+ for (int ii = 0; ii < 6; ++ii) {
+ GLenum face = faces[ii];
+ int32 shm_id =
+ (face == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) ? 0 : kSharedMemoryId;
+ uint32 shm_offset =
+ (face == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) ? 0 : kSharedMemoryOffset;
+ DoTexImage2D(face,
+ 0,
+ GL_RGBA,
+ 2,
+ 2,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shm_id,
+ shm_offset);
+ DoTexImage2D(face,
+ 1,
+ GL_RGBA,
+ 1,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shm_id,
+ shm_offset);
+ }
+ // Expect 2 levels will be cleared.
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_CUBE_MAP,
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 2,
+ 2);
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_CUBE_MAP,
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
+ 1,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 1,
+ 1);
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDefaultDirtyState();
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest,
+ DrawClearsAfterRenderbuffersWithMultipleAttachments) {
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoRenderbufferStorage(GL_RENDERBUFFER,
+ GL_DEPTH_COMPONENT16,
+ GL_DEPTH_COMPONENT,
+ 1,
+ 1,
+ GL_NO_ERROR);
+ DoFramebufferRenderbuffer(GL_FRAMEBUFFER,
+ GL_DEPTH_ATTACHMENT,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_,
+ kServiceRenderbufferId,
+ GL_NO_ERROR);
+
+ SetupTexture();
+ SetupExpectationsForFramebufferClearing(
+ GL_FRAMEBUFFER, // target
+ GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, // clear bits
+ 0,
+ 0,
+ 0,
+ 0, // color
+ 0, // stencil
+ 1.0f, // depth
+ false); // scissor test
+
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
+ true, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1111, // color bits
+ true, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest,
+ DrawingWithFBOTwiceChecksForFBOCompleteOnce) {
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ SetupAllNeededVertexBuffers();
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture that is cleared.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 1,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ // Setup "render from" texture.
+ SetupTexture();
+
+ // Make sure we check for framebuffer complete.
+ EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
+ .RetiresOnSaturation();
+
+ SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1111, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // But not again.
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, DrawClearsDepthTexture) {
+ InitState init;
+ init.extensions = "GL_ANGLE_depth_texture";
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ SetupDefaultProgram();
+ SetupAllNeededVertexBuffers();
+ const GLenum attachment = GL_DEPTH_ATTACHMENT;
+ const GLenum target = GL_TEXTURE_2D;
+ const GLint level = 0;
+ DoBindTexture(target, client_texture_id_, kServiceTextureId);
+
+ // Create a depth texture.
+ DoTexImage2D(target,
+ level,
+ GL_DEPTH_COMPONENT,
+ 1,
+ 1,
+ 0,
+ GL_DEPTH_COMPONENT,
+ GL_UNSIGNED_INT,
+ 0,
+ 0);
+
+ // Enable GL_SCISSOR_TEST to make sure we disable it in the clear,
+ // then re-enable it.
+ DoEnableDisable(GL_SCISSOR_TEST, true);
+
+ EXPECT_CALL(*gl_, GenFramebuffersEXT(1, _)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, _))
+ .Times(1)
+ .RetiresOnSaturation();
+
+ EXPECT_CALL(*gl_,
+ FramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT,
+ attachment,
+ target,
+ kServiceTextureId,
+ level))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT))
+ .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
+ .RetiresOnSaturation();
+
+ EXPECT_CALL(*gl_, ClearStencil(0)).Times(1).RetiresOnSaturation();
+ SetupExpectationsForStencilMask(-1, -1);
+ EXPECT_CALL(*gl_, ClearDepth(1.0f)).Times(1).RetiresOnSaturation();
+ SetupExpectationsForDepthMask(true);
+ SetupExpectationsForEnableDisable(GL_SCISSOR_TEST, false);
+
+ EXPECT_CALL(*gl_, Clear(GL_DEPTH_BUFFER_BIT)).Times(1).RetiresOnSaturation();
+
+ SetupExpectationsForRestoreClearState(0.0f, 0.0f, 0.0f, 0.0f, 0, 1.0f, true);
+
+ EXPECT_CALL(*gl_, DeleteFramebuffersEXT(1, _)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0))
+ .Times(1)
+ .RetiresOnSaturation();
+
+ SetupExpectationsForApplyingDefaultDirtyState();
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
new file mode 100644
index 00000000000..571573add5b
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
@@ -0,0 +1,2331 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
+#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/common/id_allocator.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
+#include "gpu/command_buffer/service/cmd_buffer_engine.h"
+#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/context_state.h"
+#include "gpu/command_buffer/service/gl_surface_mock.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
+
+#include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/command_buffer/service/image_manager.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/mocks.h"
+#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
+
+#if !defined(GL_DEPTH24_STENCIL8)
+#define GL_DEPTH24_STENCIL8 0x88F0
+#endif
+
+using ::gfx::MockGLInterface;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::InSequence;
+using ::testing::Invoke;
+using ::testing::MatcherCast;
+using ::testing::Mock;
+using ::testing::Pointee;
+using ::testing::Return;
+using ::testing::SaveArg;
+using ::testing::SetArrayArgument;
+using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
+using ::testing::StrEq;
+using ::testing::StrictMock;
+
+namespace gpu {
+namespace gles2 {
+
+using namespace cmds;
+
+class GLES2DecoderTestWithExtensionsOnGLES2 : public GLES2DecoderTest {
+ public:
+ GLES2DecoderTestWithExtensionsOnGLES2() {}
+
+ virtual void SetUp() {}
+ void Init(const char* extensions) {
+ InitState init;
+ init.extensions = extensions;
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ InitDecoder(init);
+ }
+};
+
+TEST_P(GLES2DecoderTest, CheckFramebufferStatusWithNoBoundTarget) {
+ EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0);
+ CheckFramebufferStatus::Result* result =
+ static_cast<CheckFramebufferStatus::Result*>(shared_memory_address_);
+ *result = 0;
+ CheckFramebufferStatus cmd;
+ cmd.Init(GL_FRAMEBUFFER, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE), *result);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, BindAndDeleteFramebuffer) {
+ SetupTexture();
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDefaultDirtyState();
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoDeleteFramebuffer(client_framebuffer_id_,
+ kServiceFramebufferId,
+ true,
+ GL_FRAMEBUFFER,
+ 0,
+ true,
+ GL_FRAMEBUFFER,
+ 0);
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, FramebufferRenderbufferWithNoBoundTarget) {
+ EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
+ FramebufferRenderbuffer cmd;
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, FramebufferTexture2DWithNoBoundTarget) {
+ EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
+ FramebufferTexture2D cmd;
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithNoBoundTarget) {
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
+ .Times(0);
+ GetFramebufferAttachmentParameteriv cmd;
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithRenderbuffer) {
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ GetFramebufferAttachmentParameteriv::Result* result =
+ static_cast<GetFramebufferAttachmentParameteriv::Result*>(
+ shared_memory_address_);
+ result->size = 0;
+ const GLint* result_value = result->GetData();
+ FramebufferRenderbuffer fbrb_cmd;
+ GetFramebufferAttachmentParameteriv cmd;
+ fbrb_cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(static_cast<GLuint>(*result_value), client_renderbuffer_id_);
+}
+
+TEST_P(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithTexture) {
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferTexture2DEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kServiceTextureId,
+ 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ GetFramebufferAttachmentParameteriv::Result* result =
+ static_cast<GetFramebufferAttachmentParameteriv::Result*>(
+ shared_memory_address_);
+ result->SetNumResults(0);
+ const GLint* result_value = result->GetData();
+ FramebufferTexture2D fbtex_cmd;
+ GetFramebufferAttachmentParameteriv cmd;
+ fbtex_cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(static_cast<GLuint>(*result_value), client_texture_id_);
+}
+
+TEST_P(GLES2DecoderTest, GetRenderbufferParameterivWithNoBoundTarget) {
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
+ GetRenderbufferParameteriv cmd;
+ cmd.Init(GL_RENDERBUFFER,
+ GL_RENDERBUFFER_WIDTH,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, RenderbufferStorageWithNoBoundTarget) {
+ EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
+ RenderbufferStorage cmd;
+ cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+namespace {
+
+// A class to emulate glReadPixels
+class ReadPixelsEmulator {
+ public:
+ // pack_alignment is the alignment you want ReadPixels to use
+ // when copying. The actual data passed in pixels should be contiguous.
+ ReadPixelsEmulator(GLsizei width,
+ GLsizei height,
+ GLint bytes_per_pixel,
+ const void* src_pixels,
+ const void* expected_pixels,
+ GLint pack_alignment)
+ : width_(width),
+ height_(height),
+ pack_alignment_(pack_alignment),
+ bytes_per_pixel_(bytes_per_pixel),
+ src_pixels_(reinterpret_cast<const int8*>(src_pixels)),
+ expected_pixels_(reinterpret_cast<const int8*>(expected_pixels)) {}
+
+ void ReadPixels(GLint x,
+ GLint y,
+ GLsizei width,
+ GLsizei height,
+ GLenum format,
+ GLenum type,
+ void* pixels) const {
+ DCHECK_GE(x, 0);
+ DCHECK_GE(y, 0);
+ DCHECK_LE(x + width, width_);
+ DCHECK_LE(y + height, height_);
+ for (GLint yy = 0; yy < height; ++yy) {
+ const int8* src = GetPixelAddress(src_pixels_, x, y + yy);
+ const void* dst = ComputePackAlignmentAddress(0, yy, width, pixels);
+ memcpy(const_cast<void*>(dst), src, width * bytes_per_pixel_);
+ }
+ }
+
+ bool CompareRowSegment(GLint x,
+ GLint y,
+ GLsizei width,
+ const void* data) const {
+ DCHECK(x + width <= width_ || width == 0);
+ return memcmp(data,
+ GetPixelAddress(expected_pixels_, x, y),
+ width * bytes_per_pixel_) == 0;
+ }
+
+ // Helper to compute address of pixel in pack aligned data.
+ const void* ComputePackAlignmentAddress(GLint x,
+ GLint y,
+ GLsizei width,
+ const void* address) const {
+ GLint unpadded_row_size = ComputeImageDataSize(width, 1);
+ GLint two_rows_size = ComputeImageDataSize(width, 2);
+ GLsizei padded_row_size = two_rows_size - unpadded_row_size;
+ GLint offset = y * padded_row_size + x * bytes_per_pixel_;
+ return static_cast<const int8*>(address) + offset;
+ }
+
+ GLint ComputeImageDataSize(GLint width, GLint height) const {
+ GLint row_size = width * bytes_per_pixel_;
+ if (height > 1) {
+ GLint temp = row_size + pack_alignment_ - 1;
+ GLint padded_row_size = (temp / pack_alignment_) * pack_alignment_;
+ GLint size_of_all_but_last_row = (height - 1) * padded_row_size;
+ return size_of_all_but_last_row + row_size;
+ } else {
+ return height * row_size;
+ }
+ }
+
+ private:
+ const int8* GetPixelAddress(const int8* base, GLint x, GLint y) const {
+ return base + (width_ * y + x) * bytes_per_pixel_;
+ }
+
+ GLsizei width_;
+ GLsizei height_;
+ GLint pack_alignment_;
+ GLint bytes_per_pixel_;
+ const int8* src_pixels_;
+ const int8* expected_pixels_;
+};
+
+} // anonymous namespace
+
+void GLES2DecoderTest::CheckReadPixelsOutOfRange(GLint in_read_x,
+ GLint in_read_y,
+ GLsizei in_read_width,
+ GLsizei in_read_height,
+ bool init) {
+ const GLsizei kWidth = 5;
+ const GLsizei kHeight = 3;
+ const GLint kBytesPerPixel = 3;
+ const GLint kPackAlignment = 4;
+ const GLenum kFormat = GL_RGB;
+ static const int8 kSrcPixels[kWidth * kHeight * kBytesPerPixel] = {
+ 12, 13, 14, 18, 19, 18, 19, 12, 13, 14, 18, 19, 18, 19, 13,
+ 29, 28, 23, 22, 21, 22, 21, 29, 28, 23, 22, 21, 22, 21, 28,
+ 31, 34, 39, 37, 32, 37, 32, 31, 34, 39, 37, 32, 37, 32, 34,
+ };
+
+ ClearSharedMemory();
+
+ // We need to setup an FBO so we can know the max size that ReadPixels will
+ // access
+ if (init) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ kFormat,
+ kWidth,
+ kHeight,
+ 0,
+ kFormat,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_,
+ kServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+ EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
+ .RetiresOnSaturation();
+ }
+
+ ReadPixelsEmulator emu(
+ kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment);
+ typedef ReadPixels::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ uint32 result_shm_id = kSharedMemoryId;
+ uint32 result_shm_offset = kSharedMemoryOffset;
+ uint32 pixels_shm_id = kSharedMemoryId;
+ uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+ void* dest = &result[1];
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ // ReadPixels will be called for valid size only even though the command
+ // is requesting a larger size.
+ GLint read_x = std::max(0, in_read_x);
+ GLint read_y = std::max(0, in_read_y);
+ GLint read_end_x = std::max(0, std::min(kWidth, in_read_x + in_read_width));
+ GLint read_end_y = std::max(0, std::min(kHeight, in_read_y + in_read_height));
+ GLint read_width = read_end_x - read_x;
+ GLint read_height = read_end_y - read_y;
+ if (read_width > 0 && read_height > 0) {
+ for (GLint yy = read_y; yy < read_end_y; ++yy) {
+ EXPECT_CALL(
+ *gl_,
+ ReadPixels(read_x, yy, read_width, 1, kFormat, GL_UNSIGNED_BYTE, _))
+ .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels))
+ .RetiresOnSaturation();
+ }
+ }
+ ReadPixels cmd;
+ cmd.Init(in_read_x,
+ in_read_y,
+ in_read_width,
+ in_read_height,
+ kFormat,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+
+ GLint unpadded_row_size = emu.ComputeImageDataSize(in_read_width, 1);
+ scoped_ptr<int8[]> zero(new int8[unpadded_row_size]);
+ scoped_ptr<int8[]> pack(new int8[kPackAlignment]);
+ memset(zero.get(), 0, unpadded_row_size);
+ memset(pack.get(), kInitialMemoryValue, kPackAlignment);
+ for (GLint yy = 0; yy < in_read_height; ++yy) {
+ const int8* row = static_cast<const int8*>(
+ emu.ComputePackAlignmentAddress(0, yy, in_read_width, dest));
+ GLint y = in_read_y + yy;
+ if (y < 0 || y >= kHeight) {
+ EXPECT_EQ(0, memcmp(zero.get(), row, unpadded_row_size));
+ } else {
+ // check off left.
+ GLint num_left_pixels = std::max(-in_read_x, 0);
+ GLint num_left_bytes = num_left_pixels * kBytesPerPixel;
+ EXPECT_EQ(0, memcmp(zero.get(), row, num_left_bytes));
+
+ // check off right.
+ GLint num_right_pixels = std::max(in_read_x + in_read_width - kWidth, 0);
+ GLint num_right_bytes = num_right_pixels * kBytesPerPixel;
+ EXPECT_EQ(0,
+ memcmp(zero.get(),
+ row + unpadded_row_size - num_right_bytes,
+ num_right_bytes));
+
+ // check middle.
+ GLint x = std::max(in_read_x, 0);
+ GLint num_middle_pixels =
+ std::max(in_read_width - num_left_pixels - num_right_pixels, 0);
+ EXPECT_TRUE(
+ emu.CompareRowSegment(x, y, num_middle_pixels, row + num_left_bytes));
+ }
+
+ // check padding
+ if (yy != in_read_height - 1) {
+ GLint num_padding_bytes =
+ (kPackAlignment - 1) - (unpadded_row_size % kPackAlignment);
+ EXPECT_EQ(0,
+ memcmp(pack.get(), row + unpadded_row_size, num_padding_bytes));
+ }
+ }
+}
+
+TEST_P(GLES2DecoderTest, ReadPixels) {
+ const GLsizei kWidth = 5;
+ const GLsizei kHeight = 3;
+ const GLint kBytesPerPixel = 3;
+ const GLint kPackAlignment = 4;
+ static const int8 kSrcPixels[kWidth * kHeight * kBytesPerPixel] = {
+ 12, 13, 14, 18, 19, 18, 19, 12, 13, 14, 18, 19, 18, 19, 13,
+ 29, 28, 23, 22, 21, 22, 21, 29, 28, 23, 22, 21, 22, 21, 28,
+ 31, 34, 39, 37, 32, 37, 32, 31, 34, 39, 37, 32, 37, 32, 34,
+ };
+
+ surface_->SetSize(gfx::Size(INT_MAX, INT_MAX));
+
+ ReadPixelsEmulator emu(
+ kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment);
+ typedef ReadPixels::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ uint32 result_shm_id = kSharedMemoryId;
+ uint32 result_shm_offset = kSharedMemoryOffset;
+ uint32 pixels_shm_id = kSharedMemoryId;
+ uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+ void* dest = &result[1];
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ ReadPixels(0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, _))
+ .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels));
+ ReadPixels cmd;
+ cmd.Init(0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ for (GLint yy = 0; yy < kHeight; ++yy) {
+ EXPECT_TRUE(emu.CompareRowSegment(
+ 0, yy, kWidth, emu.ComputePackAlignmentAddress(0, yy, kWidth, dest)));
+ }
+}
+
+TEST_P(GLES2DecoderRGBBackbufferTest, ReadPixelsNoAlphaBackbuffer) {
+ const GLsizei kWidth = 3;
+ const GLsizei kHeight = 3;
+ const GLint kBytesPerPixel = 4;
+ const GLint kPackAlignment = 4;
+ static const uint8 kExpectedPixels[kWidth * kHeight * kBytesPerPixel] = {
+ 12, 13, 14, 255, 19, 18, 19, 255, 13, 14, 18, 255,
+ 29, 28, 23, 255, 21, 22, 21, 255, 28, 23, 22, 255,
+ 31, 34, 39, 255, 32, 37, 32, 255, 34, 39, 37, 255,
+ };
+ static const uint8 kSrcPixels[kWidth * kHeight * kBytesPerPixel] = {
+ 12, 13, 14, 18, 19, 18, 19, 12, 13, 14, 18, 19, 29, 28, 23, 22, 21, 22,
+ 21, 29, 28, 23, 22, 21, 31, 34, 39, 37, 32, 37, 32, 31, 34, 39, 37, 32,
+ };
+
+ surface_->SetSize(gfx::Size(INT_MAX, INT_MAX));
+
+ ReadPixelsEmulator emu(kWidth,
+ kHeight,
+ kBytesPerPixel,
+ kSrcPixels,
+ kExpectedPixels,
+ kPackAlignment);
+ typedef ReadPixels::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ uint32 result_shm_id = kSharedMemoryId;
+ uint32 result_shm_offset = kSharedMemoryOffset;
+ uint32 pixels_shm_id = kSharedMemoryId;
+ uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+ void* dest = &result[1];
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ ReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, _))
+ .WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels));
+ ReadPixels cmd;
+ cmd.Init(0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ for (GLint yy = 0; yy < kHeight; ++yy) {
+ EXPECT_TRUE(emu.CompareRowSegment(
+ 0, yy, kWidth, emu.ComputePackAlignmentAddress(0, yy, kWidth, dest)));
+ }
+}
+
+TEST_P(GLES2DecoderTest, ReadPixelsOutOfRange) {
+ static GLint tests[][4] = {
+ {
+ -2, -1, 9, 5,
+ }, // out of range on all sides
+ {
+ 2, 1, 9, 5,
+ }, // out of range on right, bottom
+ {
+ -7, -4, 9, 5,
+ }, // out of range on left, top
+ {
+ 0, -5, 9, 5,
+ }, // completely off top
+ {
+ 0, 3, 9, 5,
+ }, // completely off bottom
+ {
+ -9, 0, 9, 5,
+ }, // completely off left
+ {
+ 5, 0, 9, 5,
+ }, // completely off right
+ };
+
+ for (size_t tt = 0; tt < arraysize(tests); ++tt) {
+ CheckReadPixelsOutOfRange(
+ tests[tt][0], tests[tt][1], tests[tt][2], tests[tt][3], tt == 0);
+ }
+}
+
+TEST_P(GLES2DecoderTest, ReadPixelsInvalidArgs) {
+ typedef ReadPixels::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ uint32 result_shm_id = kSharedMemoryId;
+ uint32 result_shm_offset = kSharedMemoryOffset;
+ uint32 pixels_shm_id = kSharedMemoryId;
+ uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+ EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0);
+ ReadPixels cmd;
+ cmd.Init(0,
+ 0,
+ -1,
+ 1,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(0,
+ 0,
+ 1,
+ -1,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(0,
+ 0,
+ 1,
+ 1,
+ GL_RGB,
+ GL_INT,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(0,
+ 0,
+ 1,
+ 1,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ kInvalidSharedMemoryId,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(0,
+ 0,
+ 1,
+ 1,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ kInvalidSharedMemoryOffset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(0,
+ 0,
+ 1,
+ 1,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ kInvalidSharedMemoryId,
+ result_shm_offset,
+ false);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(0,
+ 0,
+ 1,
+ 1,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ kInvalidSharedMemoryOffset,
+ false);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderManualInitTest, ReadPixelsAsyncError) {
+ InitState init;
+ init.extensions = "GL_ARB_sync";
+ init.gl_version = "opengl es 3.0";
+ init.has_alpha = true;
+ init.request_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ typedef ReadPixels::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+
+ const GLsizei kWidth = 4;
+ const GLsizei kHeight = 4;
+ uint32 result_shm_id = kSharedMemoryId;
+ uint32 result_shm_offset = kSharedMemoryOffset;
+ uint32 pixels_shm_id = kSharedMemoryId;
+ uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+
+ EXPECT_CALL(*gl_, GetError())
+ // first error check must pass to get to the test
+ .WillOnce(Return(GL_NO_ERROR))
+ // second check is after BufferData, simulate fail here
+ .WillOnce(Return(GL_INVALID_OPERATION))
+ // third error check is fall-through call to sync ReadPixels
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+
+ EXPECT_CALL(*gl_,
+ ReadPixels(0, 0, kWidth, kHeight, GL_RGB, GL_UNSIGNED_BYTE, _))
+ .Times(1);
+ EXPECT_CALL(*gl_, GenBuffersARB(1, _)).Times(1);
+ EXPECT_CALL(*gl_, BindBuffer(GL_PIXEL_PACK_BUFFER_ARB, _)).Times(2);
+ EXPECT_CALL(*gl_,
+ BufferData(GL_PIXEL_PACK_BUFFER_ARB, _, NULL, GL_STREAM_READ))
+ .Times(1);
+
+ ReadPixels cmd;
+ cmd.Init(0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ true);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+// Check that if a renderbuffer is attached and GL returns
+// GL_FRAMEBUFFER_COMPLETE that the buffer is cleared and state is restored.
+TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearColor) {
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ ClearColor color_cmd;
+ ColorMask color_mask_cmd;
+ Enable enable_cmd;
+ FramebufferRenderbuffer cmd;
+ color_cmd.Init(0.1f, 0.2f, 0.3f, 0.4f);
+ color_mask_cmd.Init(0, 1, 0, 1);
+ enable_cmd.Init(GL_SCISSOR_TEST);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ InSequence sequence;
+ EXPECT_CALL(*gl_, ClearColor(0.1f, 0.2f, 0.3f, 0.4f))
+ .Times(1)
+ .RetiresOnSaturation();
+ SetupExpectationsForEnableDisable(GL_SCISSOR_TEST, true);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(color_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(enable_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearDepth) {
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ ClearDepthf depth_cmd;
+ DepthMask depth_mask_cmd;
+ FramebufferRenderbuffer cmd;
+ depth_cmd.Init(0.5f);
+ depth_mask_cmd.Init(false);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_DEPTH_ATTACHMENT,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ InSequence sequence;
+ EXPECT_CALL(*gl_, ClearDepth(0.5f)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_DEPTH_ATTACHMENT,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(depth_mask_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearStencil) {
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ ClearStencil stencil_cmd;
+ StencilMaskSeparate stencil_mask_separate_cmd;
+ FramebufferRenderbuffer cmd;
+ stencil_cmd.Init(123);
+ stencil_mask_separate_cmd.Init(GL_BACK, 0x1234u);
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_STENCIL_ATTACHMENT,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ InSequence sequence;
+ EXPECT_CALL(*gl_, ClearStencil(123)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_STENCIL_ATTACHMENT,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_mask_separate_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+#if 0 // Turn this test on once we allow GL_DEPTH_STENCIL_ATTACHMENT
+TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearDepthStencil) {
+ DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
+ kServiceFramebufferId);
+ ClearDepthf depth_cmd;
+ ClearStencil stencil_cmd;
+ FramebufferRenderbuffer cmd;
+ depth_cmd.Init(0.5f);
+ stencil_cmd.Init(123);
+ cmd.Init(
+ GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ InSequence sequence;
+ EXPECT_CALL(*gl_, ClearDepth(0.5f))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ClearStencil(123))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(
+ GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(depth_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(stencil_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+#endif
+
+TEST_P(GLES2DecoderManualInitTest, ActualAlphaMatchesRequestedAlpha) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.request_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(8, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ActualAlphaDoesNotMatchRequestedAlpha) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_ALPHA_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_ALPHA_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_ALPHA_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(0, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ActualDepthMatchesRequestedDepth) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_depth = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(24))
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(24, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ActualDepthDoesNotMatchRequestedDepth) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(24))
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(0, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ActualStencilMatchesRequestedStencil) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_stencil = true;
+ init.request_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(8, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ActualStencilDoesNotMatchRequestedStencil) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(0, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilReportsCorrectValues) {
+ InitState init;
+ init.extensions = "GL_OES_packed_depth_stencil";
+ init.gl_version = "opengl es 2.0";
+ init.has_depth = true;
+ init.has_stencil = true;
+ init.request_depth = true;
+ init.request_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(8, result->GetData()[0]);
+ result->size = 0;
+ cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(24))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(24, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilNoRequestedStencil) {
+ InitState init;
+ init.extensions = "GL_OES_packed_depth_stencil";
+ init.gl_version = "opengl es 2.0";
+ init.has_depth = true;
+ init.has_stencil = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(0, result->GetData()[0]);
+ result->size = 0;
+ cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(24))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(24, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferDepth) {
+ InitState init;
+ init.extensions = "GL_OES_packed_depth_stencil";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR)) // for FramebufferRenderbuffer
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR)) // for GetIntegerv
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR)) // for GetIntegerv
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+
+ EXPECT_CALL(
+ *gl_,
+ RenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50))
+ .Times(1)
+ .RetiresOnSaturation();
+ RenderbufferStorage cmd;
+ cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_DEPTH_ATTACHMENT,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ FramebufferRenderbuffer fbrb_cmd;
+ fbrb_cmd.Init(GL_FRAMEBUFFER,
+ GL_DEPTH_ATTACHMENT,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
+
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(0, result->GetData()[0]);
+ result->size = 0;
+ cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(24))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(24, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferStencil) {
+ InitState init;
+ init.extensions = "GL_OES_packed_depth_stencil";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR)) // for RenderbufferStoage
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR)) // for FramebufferRenderbuffer
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR)) // for GetIntegerv
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR)) // for GetIntegerv
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+
+ EXPECT_CALL(
+ *gl_,
+ RenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50))
+ .Times(1)
+ .RetiresOnSaturation();
+ RenderbufferStorage cmd;
+ cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_STENCIL_ATTACHMENT,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ FramebufferRenderbuffer fbrb_cmd;
+ fbrb_cmd.Init(GL_FRAMEBUFFER,
+ GL_STENCIL_ATTACHMENT,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
+
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->size = 0;
+ GetIntegerv cmd2;
+ cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(8))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_STENCIL_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(8, result->GetData()[0]);
+ result->size = 0;
+ cmd2.Init(GL_DEPTH_BITS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
+ .WillOnce(SetArgumentPointee<1>(24))
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(GL_DEPTH_BITS),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(0, result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderTest, FramebufferRenderbufferGLError) {
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ FramebufferRenderbuffer cmd;
+ cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, FramebufferTexture2DGLError) {
+ const GLsizei kWidth = 5;
+ const GLsizei kHeight = 3;
+ const GLenum kFormat = GL_RGB;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ kFormat,
+ kWidth,
+ kHeight,
+ 0,
+ kFormat,
+ GL_UNSIGNED_BYTE,
+ 0,
+ 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferTexture2DEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kServiceTextureId,
+ 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ FramebufferTexture2D fbtex_cmd;
+ fbtex_cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, RenderbufferStorageGLError) {
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, RenderbufferStorageEXT(GL_RENDERBUFFER, GL_RGBA, 100, 50))
+ .Times(1)
+ .RetiresOnSaturation();
+ RenderbufferStorage cmd;
+ cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 100, 50);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, RenderbufferStorageBadArgs) {
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ RenderbufferStorage cmd;
+ cmd.Init(GL_RENDERBUFFER, GL_RGBA4, TestHelper::kMaxRenderbufferSize + 1, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 1, TestHelper::kMaxRenderbufferSize + 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest,
+ RenderbufferStorageMultisampleCHROMIUMGLError) {
+ InitState init;
+ init.extensions = "GL_EXT_framebuffer_multisample";
+ init.gl_version = "2.1";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ EXPECT_CALL(
+ *gl_,
+ RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, 1, GL_RGBA, 100, 50))
+ .Times(1)
+ .RetiresOnSaturation();
+ RenderbufferStorageMultisampleCHROMIUM cmd;
+ cmd.Init(GL_RENDERBUFFER, 1, GL_RGBA4, 100, 50);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest,
+ RenderbufferStorageMultisampleCHROMIUMBadArgs) {
+ InitState init;
+ init.extensions = "GL_EXT_framebuffer_multisample";
+ init.gl_version = "2.1";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ EXPECT_CALL(*gl_, RenderbufferStorageMultisampleEXT(_, _, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ RenderbufferStorageMultisampleCHROMIUM cmd;
+ cmd.Init(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples + 1,
+ GL_RGBA4,
+ TestHelper::kMaxRenderbufferSize,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA4,
+ TestHelper::kMaxRenderbufferSize + 1,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA4,
+ 1,
+ TestHelper::kMaxRenderbufferSize + 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, RenderbufferStorageMultisampleCHROMIUM) {
+ InitState init;
+ init.extensions = "GL_EXT_framebuffer_multisample";
+ init.gl_version = "2.1";
+ InitDecoder(init);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ InSequence sequence;
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(
+ *gl_,
+ RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA,
+ TestHelper::kMaxRenderbufferSize,
+ 1))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ RenderbufferStorageMultisampleCHROMIUM cmd;
+ cmd.Init(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA4,
+ TestHelper::kMaxRenderbufferSize,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest,
+ RenderbufferStorageMultisampleEXTNotSupported) {
+ InitState init;
+ init.extensions = "GL_EXT_framebuffer_multisample";
+ init.gl_version = "2.1";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ InSequence sequence;
+ // GL_EXT_framebuffer_multisample uses RenderbufferStorageMultisampleCHROMIUM.
+ RenderbufferStorageMultisampleEXT cmd;
+ cmd.Init(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA4,
+ TestHelper::kMaxRenderbufferSize,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+class GLES2DecoderMultisampledRenderToTextureTest
+ : public GLES2DecoderTestWithExtensionsOnGLES2 {
+ public:
+ void TestNotCompatibleWithRenderbufferStorageMultisampleCHROMIUM() {
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ RenderbufferStorageMultisampleCHROMIUM cmd;
+ cmd.Init(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA4,
+ TestHelper::kMaxRenderbufferSize,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ }
+
+ void TestRenderbufferStorageMultisampleEXT(const char* extension) {
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ InSequence sequence;
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ if (strstr(extension, "GL_IMG_multisampled_render_to_texture")) {
+ EXPECT_CALL(
+ *gl_,
+ RenderbufferStorageMultisampleIMG(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA,
+ TestHelper::kMaxRenderbufferSize,
+ 1))
+ .Times(1)
+ .RetiresOnSaturation();
+ } else {
+ EXPECT_CALL(
+ *gl_,
+ RenderbufferStorageMultisampleEXT(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA,
+ TestHelper::kMaxRenderbufferSize,
+ 1))
+ .Times(1)
+ .RetiresOnSaturation();
+ }
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ RenderbufferStorageMultisampleEXT cmd;
+ cmd.Init(GL_RENDERBUFFER,
+ TestHelper::kMaxSamples,
+ GL_RGBA4,
+ TestHelper::kMaxRenderbufferSize,
+ 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ }
+};
+
+INSTANTIATE_TEST_CASE_P(Service,
+ GLES2DecoderMultisampledRenderToTextureTest,
+ ::testing::Bool());
+
+TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
+ NotCompatibleWithRenderbufferStorageMultisampleCHROMIUM_EXT) {
+ Init("GL_EXT_multisampled_render_to_texture");
+ TestNotCompatibleWithRenderbufferStorageMultisampleCHROMIUM();
+}
+
+TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
+ NotCompatibleWithRenderbufferStorageMultisampleCHROMIUM_IMG) {
+ Init("GL_IMG_multisampled_render_to_texture");
+ TestNotCompatibleWithRenderbufferStorageMultisampleCHROMIUM();
+}
+
+TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
+ RenderbufferStorageMultisampleEXT_EXT) {
+ Init("GL_EXT_multisampled_render_to_texture");
+ TestRenderbufferStorageMultisampleEXT(
+ "GL_EXT_multisampled_render_to_texture");
+}
+
+TEST_P(GLES2DecoderMultisampledRenderToTextureTest,
+ RenderbufferStorageMultisampleEXT_IMG) {
+ Init("GL_IMG_multisampled_render_to_texture");
+ TestRenderbufferStorageMultisampleEXT(
+ "GL_IMG_multisampled_render_to_texture");
+}
+
+TEST_P(GLES2DecoderTest, ReadPixelsGLError) {
+ GLenum kFormat = GL_RGBA;
+ GLint x = 0;
+ GLint y = 0;
+ GLsizei width = 2;
+ GLsizei height = 4;
+ typedef ReadPixels::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ uint32 result_shm_id = kSharedMemoryId;
+ uint32 result_shm_offset = kSharedMemoryOffset;
+ uint32 pixels_shm_id = kSharedMemoryId;
+ uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ ReadPixels(x, y, width, height, kFormat, GL_UNSIGNED_BYTE, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ ReadPixels cmd;
+ cmd.Init(x,
+ y,
+ width,
+ height,
+ kFormat,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) {
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ // Setup "render from" texture.
+ SetupTexture();
+
+ SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target
+ GL_COLOR_BUFFER_BIT, // clear bits
+ 0,
+ 0,
+ 0,
+ 0, // color
+ 0, // stencil
+ 1.0f, // depth
+ false); // scissor test
+ SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1111, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, Clear(GL_COLOR_BUFFER_BIT)).Times(1).RetiresOnSaturation();
+
+ Clear cmd;
+ cmd.Init(GL_COLOR_BUFFER_BIT);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnReadPixels) {
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ // Setup "render from" texture.
+ SetupTexture();
+
+ SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target
+ GL_COLOR_BUFFER_BIT, // clear bits
+ 0,
+ 0,
+ 0,
+ 0, // color
+ 0, // stencil
+ 1.0f, // depth
+ false); // scissor test
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ typedef ReadPixels::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ uint32 result_shm_id = kSharedMemoryId;
+ uint32 result_shm_offset = kSharedMemoryOffset;
+ uint32 pixels_shm_id = kSharedMemoryId;
+ uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+ ReadPixels cmd;
+ cmd.Init(0,
+ 0,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest,
+ UnClearedAttachmentsGetClearedOnReadPixelsAndDrawBufferGetsRestored) {
+ InitState init;
+ init.extensions = "GL_EXT_framebuffer_multisample";
+ init.gl_version = "2.1";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render from" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_READ_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_READ_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ // Enable GL_SCISSOR_TEST to make sure we disable it in the clear,
+ // then re-enable after.
+ DoEnableDisable(GL_SCISSOR_TEST, true);
+
+ SetupExpectationsForFramebufferClearingMulti(
+ kServiceFramebufferId, // read framebuffer service id
+ 0, // backbuffer service id
+ GL_READ_FRAMEBUFFER, // target
+ GL_COLOR_BUFFER_BIT, // clear bits
+ 0,
+ 0,
+ 0,
+ 0, // color
+ 0, // stencil
+ 1.0f, // depth
+ true); // scissor test
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ typedef ReadPixels::Result Result;
+ uint32 result_shm_id = kSharedMemoryId;
+ uint32 result_shm_offset = kSharedMemoryOffset;
+ uint32 pixels_shm_id = kSharedMemoryId;
+ uint32 pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ ReadPixels cmd;
+ cmd.Init(0,
+ 0,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ pixels_shm_id,
+ pixels_shm_offset,
+ result_shm_id,
+ result_shm_offset,
+ false);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, CopyTexImageWithInCompleteFBOFails) {
+ GLenum target = GL_TEXTURE_2D;
+ GLint level = 0;
+ GLenum internal_format = GL_RGBA;
+ GLsizei width = 2;
+ GLsizei height = 4;
+ SetupTexture();
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 0, 0, GL_NO_ERROR);
+ DoFramebufferRenderbuffer(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_,
+ kServiceRenderbufferId,
+ GL_NO_ERROR);
+
+ EXPECT_CALL(*gl_, CopyTexImage2D(_, _, _, _, _, _, _, _))
+ .Times(0)
+ .RetiresOnSaturation();
+ CopyTexImage2D cmd;
+ cmd.Init(target, level, internal_format, 0, 0, width, height);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, GetGLError());
+}
+
+void GLES2DecoderWithShaderTest::CheckRenderbufferChangesMarkFBOAsNotComplete(
+ bool bound_fbo) {
+ FramebufferManager* framebuffer_manager = group().framebuffer_manager();
+ SetupTexture();
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 1, 1, GL_NO_ERROR);
+ DoFramebufferRenderbuffer(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_,
+ kServiceRenderbufferId,
+ GL_NO_ERROR);
+
+ if (!bound_fbo) {
+ DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
+ }
+
+ Framebuffer* framebuffer =
+ framebuffer_manager->GetFramebuffer(client_framebuffer_id_);
+ ASSERT_TRUE(framebuffer != NULL);
+ framebuffer_manager->MarkAsComplete(framebuffer);
+ EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
+
+ // Test that renderbufferStorage marks fbo as not complete.
+ DoRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 1, 1, GL_NO_ERROR);
+ EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
+ framebuffer_manager->MarkAsComplete(framebuffer);
+ EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
+
+ // Test deleting renderbuffer marks fbo as not complete.
+ DoDeleteRenderbuffer(client_renderbuffer_id_, kServiceRenderbufferId);
+ if (bound_fbo) {
+ EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
+ } else {
+ EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
+ }
+ // Cleanup
+ DoDeleteFramebuffer(client_framebuffer_id_,
+ kServiceFramebufferId,
+ bound_fbo,
+ GL_FRAMEBUFFER,
+ 0,
+ bound_fbo,
+ GL_FRAMEBUFFER,
+ 0);
+}
+
+TEST_P(GLES2DecoderWithShaderTest,
+ RenderbufferChangesMarkFBOAsNotCompleteBoundFBO) {
+ CheckRenderbufferChangesMarkFBOAsNotComplete(true);
+}
+
+TEST_P(GLES2DecoderWithShaderTest,
+ RenderbufferChangesMarkFBOAsNotCompleteUnboundFBO) {
+ CheckRenderbufferChangesMarkFBOAsNotComplete(false);
+}
+
+void GLES2DecoderWithShaderTest::CheckTextureChangesMarkFBOAsNotComplete(
+ bool bound_fbo) {
+ FramebufferManager* framebuffer_manager = group().framebuffer_manager();
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ SetupTexture();
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ DoBindRenderbuffer(
+ GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoRenderbufferStorage(GL_RENDERBUFFER,
+ GL_DEPTH_COMPONENT16,
+ GL_DEPTH_COMPONENT,
+ 1,
+ 1,
+ GL_NO_ERROR);
+ DoFramebufferRenderbuffer(GL_FRAMEBUFFER,
+ GL_DEPTH_ATTACHMENT,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_,
+ kServiceRenderbufferId,
+ GL_NO_ERROR);
+
+ if (!bound_fbo) {
+ DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0);
+ }
+
+ Framebuffer* framebuffer =
+ framebuffer_manager->GetFramebuffer(client_framebuffer_id_);
+ ASSERT_TRUE(framebuffer != NULL);
+ framebuffer_manager->MarkAsComplete(framebuffer);
+ EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
+
+ // Test TexImage2D marks fbo as not complete.
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, 0, 0);
+ EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
+ framebuffer_manager->MarkAsComplete(framebuffer);
+ EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
+
+ // Test CopyImage2D marks fbo as not complete.
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, 1, 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ CopyTexImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
+
+ // Test deleting texture marks fbo as not complete.
+ framebuffer_manager->MarkAsComplete(framebuffer);
+ EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
+ DoDeleteTexture(kFBOClientTextureId, kFBOServiceTextureId);
+
+ if (bound_fbo) {
+ EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
+ } else {
+ EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
+ }
+ // Cleanup
+ DoDeleteFramebuffer(client_framebuffer_id_,
+ kServiceFramebufferId,
+ bound_fbo,
+ GL_FRAMEBUFFER,
+ 0,
+ bound_fbo,
+ GL_FRAMEBUFFER,
+ 0);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, TextureChangesMarkFBOAsNotCompleteBoundFBO) {
+ CheckTextureChangesMarkFBOAsNotComplete(true);
+}
+
+TEST_P(GLES2DecoderWithShaderTest,
+ TextureChangesMarkFBOAsNotCompleteUnboundFBO) {
+ CheckTextureChangesMarkFBOAsNotComplete(false);
+}
+
+TEST_P(GLES2DecoderTest, CanChangeSurface) {
+ scoped_refptr<GLSurfaceMock> other_surface(new GLSurfaceMock);
+ EXPECT_CALL(*other_surface.get(), GetBackingFrameBufferObject())
+ .WillOnce(Return(7));
+ EXPECT_CALL(*gl_, BindFramebufferEXT(GL_FRAMEBUFFER_EXT, 7));
+
+ decoder_->SetSurface(other_surface);
+}
+
+TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateSuccceeds) {
+ const GLsizei count = 1;
+ const GLenum bufs[] = {GL_COLOR_ATTACHMENT0};
+ DrawBuffersEXTImmediate& cmd = *GetImmediateAs<DrawBuffersEXTImmediate>();
+ cmd.Init(count, bufs);
+
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EXPECT_CALL(*gl_, DrawBuffersARB(count, _)).Times(1).RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(bufs)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateFails) {
+ const GLsizei count = 1;
+ const GLenum bufs[] = {GL_COLOR_ATTACHMENT1_EXT};
+ DrawBuffersEXTImmediate& cmd = *GetImmediateAs<DrawBuffersEXTImmediate>();
+ cmd.Init(count, bufs);
+
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(bufs)));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateBackbuffer) {
+ const GLsizei count = 1;
+ const GLenum bufs[] = {GL_BACK};
+ DrawBuffersEXTImmediate& cmd = *GetImmediateAs<DrawBuffersEXTImmediate>();
+ cmd.Init(count, bufs);
+
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(bufs)));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ DoBindFramebuffer(GL_FRAMEBUFFER, 0, 0); // unbind
+
+ EXPECT_CALL(*gl_, DrawBuffersARB(count, _)).Times(1).RetiresOnSaturation();
+
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(bufs)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, InvalidateFramebufferBinding) {
+ InitState init;
+ init.gl_version = "opengl es 3.0";
+ InitDecoder(init);
+
+ // EXPECT_EQ can't be used to compare function pointers
+ EXPECT_TRUE(
+ gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") ==
+ gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn);
+ EXPECT_TRUE(
+ gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") !=
+ gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT"));
+}
+
+TEST_P(GLES2DecoderManualInitTest, DiscardFramebufferEXT) {
+ InitState init;
+ init.extensions = "GL_EXT_discard_framebuffer";
+ init.gl_version = "opengl es 2.0";
+ InitDecoder(init);
+
+ // EXPECT_EQ can't be used to compare function pointers
+ EXPECT_TRUE(
+ gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT") ==
+ gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn);
+
+ const GLenum target = GL_FRAMEBUFFER;
+ const GLsizei count = 1;
+ const GLenum attachments[] = {GL_COLOR_ATTACHMENT0};
+
+ SetupTexture();
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_,
+ kServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+ FramebufferManager* framebuffer_manager = group().framebuffer_manager();
+ Framebuffer* framebuffer =
+ framebuffer_manager->GetFramebuffer(client_framebuffer_id_);
+ EXPECT_TRUE(framebuffer->IsCleared());
+
+ EXPECT_CALL(*gl_, DiscardFramebufferEXT(target, count, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ DiscardFramebufferEXTImmediate& cmd =
+ *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ cmd.Init(target, count, attachments);
+
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(attachments)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_FALSE(framebuffer->IsCleared());
+}
+
+TEST_P(GLES2DecoderTest, DiscardFramebufferEXTUnsupported) {
+ const GLenum target = GL_FRAMEBUFFER;
+ const GLsizei count = 1;
+ const GLenum attachments[] = {GL_COLOR_EXT};
+ DiscardFramebufferEXTImmediate& cmd =
+ *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ cmd.Init(target, count, attachments);
+
+ // Should not result into a call into GL.
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(attachments)));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest,
+ DiscardedAttachmentsEXTMarksFramebufferIncomplete) {
+ InitState init;
+ init.extensions = "GL_EXT_discard_framebuffer";
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ // Setup "render from" texture.
+ SetupTexture();
+
+ SetupExpectationsForFramebufferClearing(GL_FRAMEBUFFER, // target
+ GL_COLOR_BUFFER_BIT, // clear bits
+ 0,
+ 0,
+ 0,
+ 0, // color
+ 0, // stencil
+ 1.0f, // depth
+ false); // scissor test
+ SetupExpectationsForApplyingDirtyState(false, // Framebuffer is RGB
+ false, // Framebuffer has depth
+ false, // Framebuffer has stencil
+ 0x1111, // color bits
+ false, // depth mask
+ false, // depth enabled
+ 0, // front stencil mask
+ 0, // back stencil mask
+ false); // stencil enabled
+
+ EXPECT_CALL(*gl_, Clear(GL_COLOR_BUFFER_BIT)).Times(1).RetiresOnSaturation();
+
+ Clear clear_cmd;
+ clear_cmd.Init(GL_COLOR_BUFFER_BIT);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(clear_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Check that framebuffer is cleared and complete.
+ FramebufferManager* framebuffer_manager = group().framebuffer_manager();
+ Framebuffer* framebuffer =
+ framebuffer_manager->GetFramebuffer(client_framebuffer_id_);
+ EXPECT_TRUE(framebuffer->IsCleared());
+ EXPECT_TRUE(framebuffer_manager->IsComplete(framebuffer));
+
+ // Check that Discard GL_COLOR_ATTACHMENT0, sets the attachment as uncleared
+ // and the framebuffer as incomplete.
+ EXPECT_TRUE(
+ gfx::MockGLInterface::GetGLProcAddress("glDiscardFramebufferEXT") ==
+ gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn);
+
+ const GLenum target = GL_FRAMEBUFFER;
+ const GLsizei count = 1;
+ const GLenum attachments[] = {GL_COLOR_ATTACHMENT0};
+
+ DiscardFramebufferEXTImmediate& discard_cmd =
+ *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ discard_cmd.Init(target, count, attachments);
+
+ EXPECT_CALL(*gl_, DiscardFramebufferEXT(target, count, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(discard_cmd, sizeof(attachments)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_FALSE(framebuffer->IsCleared());
+ EXPECT_FALSE(framebuffer_manager->IsComplete(framebuffer));
+}
+
+TEST_P(GLES2DecoderManualInitTest, ReadFormatExtension) {
+ InitState init;
+ init.extensions = "GL_OES_read_format";
+ init.gl_version = "2.1";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError()).Times(6).RetiresOnSaturation();
+
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ GetIntegerv cmd;
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ result->size = 0;
+ EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(1).RetiresOnSaturation();
+ cmd.Init(GL_IMPLEMENTATION_COLOR_READ_FORMAT,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(1, result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ result->size = 0;
+ EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(1).RetiresOnSaturation();
+ cmd.Init(GL_IMPLEMENTATION_COLOR_READ_TYPE,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(1, result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, NoReadFormatExtension) {
+ InitState init;
+ init.gl_version = "2.1";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ GetIntegerv cmd;
+ const GLuint kFBOClientTextureId = 4100;
+ const GLuint kFBOServiceTextureId = 4101;
+
+ // Register a texture id.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kFBOServiceTextureId))
+ .RetiresOnSaturation();
+ GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+
+ // Setup "render to" texture.
+ DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ DoFramebufferTexture2D(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kFBOClientTextureId,
+ kFBOServiceTextureId,
+ 0,
+ GL_NO_ERROR);
+
+ result->size = 0;
+ EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0).RetiresOnSaturation();
+ cmd.Init(GL_IMPLEMENTATION_COLOR_READ_FORMAT,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(1, result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ result->size = 0;
+ EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0).RetiresOnSaturation();
+ cmd.Init(GL_IMPLEMENTATION_COLOR_READ_TYPE,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(1, result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// TODO(gman): PixelStorei
+
+// TODO(gman): SwapBuffers
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
new file mode 100644
index 00000000000..ce123827fed
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
@@ -0,0 +1,1046 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
+#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/common/id_allocator.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
+#include "gpu/command_buffer/service/cmd_buffer_engine.h"
+#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/context_state.h"
+#include "gpu/command_buffer/service/gl_surface_mock.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
+
+#include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/command_buffer/service/image_manager.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/mocks.h"
+#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
+
+#if !defined(GL_DEPTH24_STENCIL8)
+#define GL_DEPTH24_STENCIL8 0x88F0
+#endif
+
+using ::gfx::MockGLInterface;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::InSequence;
+using ::testing::Invoke;
+using ::testing::MatcherCast;
+using ::testing::Mock;
+using ::testing::Pointee;
+using ::testing::Return;
+using ::testing::SaveArg;
+using ::testing::SetArrayArgument;
+using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
+using ::testing::StrEq;
+using ::testing::StrictMock;
+
+namespace gpu {
+namespace gles2 {
+
+using namespace cmds;
+
+TEST_P(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMValidArgs) {
+ const uint32 kBucketId = 123;
+ GetProgramInfoCHROMIUM cmd;
+ cmd.Init(client_program_id_, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
+ EXPECT_GT(bucket->size(), 0u);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) {
+ const uint32 kBucketId = 123;
+ CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
+ EXPECT_TRUE(bucket == NULL);
+ GetProgramInfoCHROMIUM cmd;
+ cmd.Init(kInvalidClientId, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ bucket = decoder_->GetBucket(kBucketId);
+ ASSERT_TRUE(bucket != NULL);
+ EXPECT_EQ(sizeof(ProgramInfoHeader), bucket->size());
+ ProgramInfoHeader* info =
+ bucket->GetDataAs<ProgramInfoHeader*>(0, sizeof(ProgramInfoHeader));
+ ASSERT_TRUE(info != 0);
+ EXPECT_EQ(0u, info->link_status);
+ EXPECT_EQ(0u, info->num_attribs);
+ EXPECT_EQ(0u, info->num_uniforms);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformivSucceeds) {
+ GetUniformiv::Result* result =
+ static_cast<GetUniformiv::Result*>(shared_memory_address_);
+ result->size = 0;
+ GetUniformiv cmd;
+ cmd.Init(client_program_id_,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetUniformiv(kServiceProgramId, kUniform2RealLocation, _))
+ .Times(1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GLES2Util::GetGLDataTypeSizeForUniforms(kUniform2Type),
+ result->size);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformivArrayElementSucceeds) {
+ GetUniformiv::Result* result =
+ static_cast<GetUniformiv::Result*>(shared_memory_address_);
+ result->size = 0;
+ GetUniformiv cmd;
+ cmd.Init(client_program_id_,
+ kUniform2ElementFakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_,
+ GetUniformiv(kServiceProgramId, kUniform2ElementRealLocation, _))
+ .Times(1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GLES2Util::GetGLDataTypeSizeForUniforms(kUniform2Type),
+ result->size);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadProgramFails) {
+ GetUniformiv::Result* result =
+ static_cast<GetUniformiv::Result*>(shared_memory_address_);
+ result->size = 0;
+ GetUniformiv cmd;
+ // non-existant program
+ cmd.Init(kInvalidClientId,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetUniformiv(_, _, _)).Times(0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+// Valid id that is not a program. The GL spec requires a different error for
+// this case.
+#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
+ result->size = kInitialResult;
+ cmd.Init(client_shader_id_,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
+ // Unlinked program
+ EXPECT_CALL(*gl_, CreateProgram())
+ .Times(1)
+ .WillOnce(Return(kNewServiceId))
+ .RetiresOnSaturation();
+ CreateProgram cmd2;
+ cmd2.Init(kNewClientId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ result->size = kInitialResult;
+ cmd.Init(kNewClientId,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadLocationFails) {
+ GetUniformiv::Result* result =
+ static_cast<GetUniformiv::Result*>(shared_memory_address_);
+ result->size = 0;
+ GetUniformiv cmd;
+ // invalid location
+ cmd.Init(client_program_id_,
+ kInvalidUniformLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetUniformiv(_, _, _)).Times(0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadSharedMemoryFails) {
+ GetUniformiv cmd;
+ cmd.Init(client_program_id_,
+ kUniform2FakeLocation,
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetUniformiv(_, _, _)).Times(0);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(client_program_id_,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+};
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformfvSucceeds) {
+ GetUniformfv::Result* result =
+ static_cast<GetUniformfv::Result*>(shared_memory_address_);
+ result->size = 0;
+ GetUniformfv cmd;
+ cmd.Init(client_program_id_,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetUniformfv(kServiceProgramId, kUniform2RealLocation, _))
+ .Times(1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GLES2Util::GetGLDataTypeSizeForUniforms(kUniform2Type),
+ result->size);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformfvArrayElementSucceeds) {
+ GetUniformfv::Result* result =
+ static_cast<GetUniformfv::Result*>(shared_memory_address_);
+ result->size = 0;
+ GetUniformfv cmd;
+ cmd.Init(client_program_id_,
+ kUniform2ElementFakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_,
+ GetUniformfv(kServiceProgramId, kUniform2ElementRealLocation, _))
+ .Times(1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GLES2Util::GetGLDataTypeSizeForUniforms(kUniform2Type),
+ result->size);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadProgramFails) {
+ GetUniformfv::Result* result =
+ static_cast<GetUniformfv::Result*>(shared_memory_address_);
+ result->size = 0;
+ GetUniformfv cmd;
+ // non-existant program
+ cmd.Init(kInvalidClientId,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetUniformfv(_, _, _)).Times(0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+// Valid id that is not a program. The GL spec requires a different error for
+// this case.
+#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
+ result->size = kInitialResult;
+ cmd.Init(client_shader_id_,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
+ // Unlinked program
+ EXPECT_CALL(*gl_, CreateProgram())
+ .Times(1)
+ .WillOnce(Return(kNewServiceId))
+ .RetiresOnSaturation();
+ CreateProgram cmd2;
+ cmd2.Init(kNewClientId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ result->size = kInitialResult;
+ cmd.Init(kNewClientId,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadLocationFails) {
+ GetUniformfv::Result* result =
+ static_cast<GetUniformfv::Result*>(shared_memory_address_);
+ result->size = 0;
+ GetUniformfv cmd;
+ // invalid location
+ cmd.Init(client_program_id_,
+ kInvalidUniformLocation,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetUniformfv(_, _, _)).Times(0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadSharedMemoryFails) {
+ GetUniformfv cmd;
+ cmd.Init(client_program_id_,
+ kUniform2FakeLocation,
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GetUniformfv(_, _, _)).Times(0);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(client_program_id_,
+ kUniform2FakeLocation,
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+};
+
+TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersSucceeds) {
+ GetAttachedShaders cmd;
+ typedef GetAttachedShaders::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->size = 0;
+ EXPECT_CALL(*gl_, GetAttachedShaders(kServiceProgramId, 1, _, _)).WillOnce(
+ DoAll(SetArgumentPointee<2>(1), SetArgumentPointee<3>(kServiceShaderId)));
+ cmd.Init(client_program_id_,
+ shared_memory_id_,
+ shared_memory_offset_,
+ Result::ComputeSize(1));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(1, result->GetNumResults());
+ EXPECT_EQ(client_shader_id_, result->GetData()[0]);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersResultNotInitFail) {
+ GetAttachedShaders cmd;
+ typedef GetAttachedShaders::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->size = 1;
+ EXPECT_CALL(*gl_, GetAttachedShaders(_, _, _, _)).Times(0);
+ cmd.Init(client_program_id_,
+ shared_memory_id_,
+ shared_memory_offset_,
+ Result::ComputeSize(1));
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersBadProgramFails) {
+ GetAttachedShaders cmd;
+ typedef GetAttachedShaders::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->size = 0;
+ EXPECT_CALL(*gl_, GetAttachedShaders(_, _, _, _)).Times(0);
+ cmd.Init(kInvalidClientId,
+ shared_memory_id_,
+ shared_memory_offset_,
+ Result::ComputeSize(1));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0U, result->size);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersBadSharedMemoryFails) {
+ GetAttachedShaders cmd;
+ typedef GetAttachedShaders::Result Result;
+ cmd.Init(client_program_id_,
+ kInvalidSharedMemoryId,
+ shared_memory_offset_,
+ Result::ComputeSize(1));
+ EXPECT_CALL(*gl_, GetAttachedShaders(_, _, _, _)).Times(0);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(client_program_id_,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset,
+ Result::ComputeSize(1));
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatSucceeds) {
+ ScopedGLImplementationSetter gl_impl(::gfx::kGLImplementationEGLGLES2);
+ GetShaderPrecisionFormat cmd;
+ typedef GetShaderPrecisionFormat::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 0;
+ const GLint range[2] = {62, 62};
+ const GLint precision = 16;
+ EXPECT_CALL(*gl_, GetShaderPrecisionFormat(_, _, _, _))
+ .WillOnce(DoAll(SetArrayArgument<2>(range, range + 2),
+ SetArgumentPointee<3>(precision)))
+ .RetiresOnSaturation();
+ cmd.Init(GL_VERTEX_SHADER,
+ GL_HIGH_FLOAT,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_NE(0, result->success);
+ EXPECT_EQ(range[0], result->min_range);
+ EXPECT_EQ(range[1], result->max_range);
+ EXPECT_EQ(precision, result->precision);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatResultNotInitFails) {
+ GetShaderPrecisionFormat cmd;
+ typedef GetShaderPrecisionFormat::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 1;
+ // NOTE: GL might not be called. There is no Desktop OpenGL equivalent
+ cmd.Init(GL_VERTEX_SHADER,
+ GL_HIGH_FLOAT,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatBadArgsFails) {
+ typedef GetShaderPrecisionFormat::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 0;
+ GetShaderPrecisionFormat cmd;
+ cmd.Init(
+ GL_TEXTURE_2D, GL_HIGH_FLOAT, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ result->success = 0;
+ cmd.Init(GL_VERTEX_SHADER,
+ GL_TEXTURE_2D,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest,
+ GetShaderPrecisionFormatBadSharedMemoryFails) {
+ GetShaderPrecisionFormat cmd;
+ cmd.Init(GL_VERTEX_SHADER,
+ GL_HIGH_FLOAT,
+ kInvalidSharedMemoryId,
+ shared_memory_offset_);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(GL_VERTEX_SHADER,
+ GL_TEXTURE_2D,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformSucceeds) {
+ const GLuint kUniformIndex = 1;
+ const uint32 kBucketId = 123;
+ GetActiveUniform cmd;
+ typedef GetActiveUniform::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 0;
+ cmd.Init(client_program_id_,
+ kUniformIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_NE(0, result->success);
+ EXPECT_EQ(kUniform2Size, result->size);
+ EXPECT_EQ(kUniform2Type, result->type);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
+ ASSERT_TRUE(bucket != NULL);
+ EXPECT_EQ(
+ 0,
+ memcmp(
+ bucket->GetData(0, bucket->size()), kUniform2Name, bucket->size()));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformResultNotInitFails) {
+ const GLuint kUniformIndex = 1;
+ const uint32 kBucketId = 123;
+ GetActiveUniform cmd;
+ typedef GetActiveUniform::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 1;
+ cmd.Init(client_program_id_,
+ kUniformIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadProgramFails) {
+ const GLuint kUniformIndex = 1;
+ const uint32 kBucketId = 123;
+ GetActiveUniform cmd;
+ typedef GetActiveUniform::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 0;
+ cmd.Init(kInvalidClientId,
+ kUniformIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->success);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
+ result->success = 0;
+ cmd.Init(client_shader_id_,
+ kUniformIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->success);
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadIndexFails) {
+ const uint32 kBucketId = 123;
+ GetActiveUniform cmd;
+ typedef GetActiveUniform::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 0;
+ cmd.Init(client_program_id_,
+ kBadUniformIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->success);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadSharedMemoryFails) {
+ const GLuint kUniformIndex = 1;
+ const uint32 kBucketId = 123;
+ GetActiveUniform cmd;
+ cmd.Init(client_program_id_,
+ kUniformIndex,
+ kBucketId,
+ kInvalidSharedMemoryId,
+ shared_memory_offset_);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(client_program_id_,
+ kUniformIndex,
+ kBucketId,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribSucceeds) {
+ const GLuint kAttribIndex = 1;
+ const uint32 kBucketId = 123;
+ GetActiveAttrib cmd;
+ typedef GetActiveAttrib::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 0;
+ cmd.Init(client_program_id_,
+ kAttribIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_NE(0, result->success);
+ EXPECT_EQ(kAttrib2Size, result->size);
+ EXPECT_EQ(kAttrib2Type, result->type);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
+ ASSERT_TRUE(bucket != NULL);
+ EXPECT_EQ(
+ 0,
+ memcmp(bucket->GetData(0, bucket->size()), kAttrib2Name, bucket->size()));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribResultNotInitFails) {
+ const GLuint kAttribIndex = 1;
+ const uint32 kBucketId = 123;
+ GetActiveAttrib cmd;
+ typedef GetActiveAttrib::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 1;
+ cmd.Init(client_program_id_,
+ kAttribIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribBadProgramFails) {
+ const GLuint kAttribIndex = 1;
+ const uint32 kBucketId = 123;
+ GetActiveAttrib cmd;
+ typedef GetActiveAttrib::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 0;
+ cmd.Init(kInvalidClientId,
+ kAttribIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->success);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
+ result->success = 0;
+ cmd.Init(client_shader_id_,
+ kAttribIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->success);
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribBadIndexFails) {
+ const uint32 kBucketId = 123;
+ GetActiveAttrib cmd;
+ typedef GetActiveAttrib::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ result->success = 0;
+ cmd.Init(client_program_id_,
+ kBadAttribIndex,
+ kBucketId,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(0, result->success);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribBadSharedMemoryFails) {
+ const GLuint kAttribIndex = 1;
+ const uint32 kBucketId = 123;
+ GetActiveAttrib cmd;
+ cmd.Init(client_program_id_,
+ kAttribIndex,
+ kBucketId,
+ kInvalidSharedMemoryId,
+ shared_memory_offset_);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(client_program_id_,
+ kAttribIndex,
+ kBucketId,
+ shared_memory_id_,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetShaderInfoLogValidArgs) {
+ const char* kInfo = "hello";
+ const uint32 kBucketId = 123;
+ CompileShader compile_cmd;
+ GetShaderInfoLog cmd;
+ EXPECT_CALL(*gl_, ShaderSource(kServiceShaderId, 1, _, _));
+ EXPECT_CALL(*gl_, CompileShader(kServiceShaderId));
+ EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_COMPILE_STATUS, _))
+ .WillOnce(SetArgumentPointee<2>(GL_FALSE))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_INFO_LOG_LENGTH, _))
+ .WillOnce(SetArgumentPointee<2>(strlen(kInfo) + 1))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetShaderInfoLog(kServiceShaderId, strlen(kInfo) + 1, _, _))
+ .WillOnce(DoAll(SetArgumentPointee<2>(strlen(kInfo)),
+ SetArrayArgument<3>(kInfo, kInfo + strlen(kInfo) + 1)));
+ compile_cmd.Init(client_shader_id_);
+ cmd.Init(client_shader_id_, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(compile_cmd));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
+ ASSERT_TRUE(bucket != NULL);
+ EXPECT_EQ(strlen(kInfo) + 1, bucket->size());
+ EXPECT_EQ(0,
+ memcmp(bucket->GetData(0, bucket->size()), kInfo, bucket->size()));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetShaderInfoLogInvalidArgs) {
+ const uint32 kBucketId = 123;
+ GetShaderInfoLog cmd;
+ cmd.Init(kInvalidClientId, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, CompileShaderValidArgs) {
+ EXPECT_CALL(*gl_, ShaderSource(kServiceShaderId, 1, _, _));
+ EXPECT_CALL(*gl_, CompileShader(kServiceShaderId));
+ EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_COMPILE_STATUS, _))
+ .WillOnce(SetArgumentPointee<2>(GL_TRUE))
+ .RetiresOnSaturation();
+ CompileShader cmd;
+ cmd.Init(client_shader_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest, CompileShaderInvalidArgs) {
+ CompileShader cmd;
+ cmd.Init(kInvalidClientId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
+ cmd.Init(client_program_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
+}
+
+TEST_P(GLES2DecoderTest, ShaderSourceBucketAndGetShaderSourceValidArgs) {
+ const uint32 kInBucketId = 123;
+ const uint32 kOutBucketId = 125;
+ const char kSource[] = "hello";
+ const uint32 kSourceSize = sizeof(kSource) - 1;
+ SetBucketAsCString(kInBucketId, kSource);
+ ShaderSourceBucket cmd;
+ cmd.Init(client_shader_id_, kInBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ ClearSharedMemory();
+ GetShaderSource get_cmd;
+ get_cmd.Init(client_shader_id_, kOutBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd));
+ CommonDecoder::Bucket* bucket = decoder_->GetBucket(kOutBucketId);
+ ASSERT_TRUE(bucket != NULL);
+ EXPECT_EQ(kSourceSize + 1, bucket->size());
+ EXPECT_EQ(
+ 0, memcmp(bucket->GetData(0, bucket->size()), kSource, bucket->size()));
+}
+
+TEST_P(GLES2DecoderTest, ShaderSourceBucketInvalidArgs) {
+ const uint32 kBucketId = 123;
+ const char kSource[] = "hello";
+ const uint32 kSourceSize = sizeof(kSource) - 1;
+ memcpy(shared_memory_address_, kSource, kSourceSize);
+ ShaderSourceBucket cmd;
+ // Test no bucket.
+ cmd.Init(client_texture_id_, kBucketId);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ // Test invalid client.
+ SetBucketAsCString(kBucketId, kSource);
+ cmd.Init(kInvalidClientId, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+#if GLES2_TEST_SHADER_VS_PROGRAM_IDS
+ SetBucketAsCString(kBucketId, kSource);
+ cmd.Init(
+ client_program_id_, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+#endif // GLES2_TEST_SHADER_VS_PROGRAM_IDS
+}
+
+TEST_P(GLES2DecoderTest, ShaderSourceStripComments) {
+ const uint32 kInBucketId = 123;
+ const char kSource[] = "hello/*te\ast*/world//a\ab";
+ SetBucketAsCString(kInBucketId, kSource);
+ ShaderSourceBucket cmd;
+ cmd.Init(client_shader_id_, kInBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, Uniform1iValidArgs) {
+ EXPECT_CALL(*gl_, Uniform1i(kUniform1RealLocation, 2));
+ Uniform1i cmd;
+ cmd.Init(kUniform1FakeLocation, 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, Uniform1ivImmediateValidArgs) {
+ Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ EXPECT_CALL(*gl_,
+ Uniform1iv(kUniform1RealLocation,
+ 1,
+ reinterpret_cast<GLint*>(ImmediateDataAddress(&cmd))));
+ GLint temp[1 * 2] = {
+ 0,
+ };
+ cmd.Init(kUniform1FakeLocation, 1, &temp[0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, Uniform1ivImmediateInvalidValidArgs) {
+ EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
+ Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ GLint temp[1 * 2] = {
+ 0,
+ };
+ cmd.Init(kUniform1FakeLocation, 2, &temp[0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, Uniform1ivZeroCount) {
+ EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
+ Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ GLint temp = 0;
+ cmd.Init(kUniform1FakeLocation, 0, &temp);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, Uniform1iSamplerIsLmited) {
+ EXPECT_CALL(*gl_, Uniform1i(_, _)).Times(0);
+ Uniform1i cmd;
+ cmd.Init(kUniform1FakeLocation, kNumTextureUnits);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, Uniform1ivSamplerIsLimited) {
+ EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
+ Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ GLint temp[] = {kNumTextureUnits};
+ cmd.Init(kUniform1FakeLocation, 1, &temp[0]);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, BindAttribLocationBucket) {
+ const uint32 kBucketId = 123;
+ const GLint kLocation = 2;
+ const char* kName = "testing";
+ EXPECT_CALL(*gl_,
+ BindAttribLocation(kServiceProgramId, kLocation, StrEq(kName)))
+ .Times(1);
+ SetBucketAsCString(kBucketId, kName);
+ BindAttribLocationBucket cmd;
+ cmd.Init(client_program_id_, kLocation, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest, BindAttribLocationBucketInvalidArgs) {
+ const uint32 kBucketId = 123;
+ const GLint kLocation = 2;
+ const char* kName = "testing";
+ EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0);
+ BindAttribLocationBucket cmd;
+ // check bucket does not exist.
+ cmd.Init(client_program_id_, kLocation, kBucketId);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ // check bucket is empty.
+ SetBucketAsCString(kBucketId, NULL);
+ cmd.Init(client_program_id_, kLocation, kBucketId);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ // Check bad program id
+ SetBucketAsCString(kBucketId, kName);
+ cmd.Init(kInvalidClientId, kLocation, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetAttribLocation) {
+ const uint32 kBucketId = 123;
+ const char* kNonExistentName = "foobar";
+ typedef GetAttribLocation::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ SetBucketAsCString(kBucketId, kAttrib2Name);
+ *result = -1;
+ GetAttribLocation cmd;
+ cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(kAttrib2Location, *result);
+ SetBucketAsCString(kBucketId, kNonExistentName);
+ *result = -1;
+ cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(-1, *result);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) {
+ const uint32 kBucketId = 123;
+ typedef GetAttribLocation::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ *result = -1;
+ GetAttribLocation cmd;
+ // Check no bucket
+ cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(-1, *result);
+ // Check bad program id.
+ SetBucketAsCString(kBucketId, kAttrib2Name);
+ cmd.Init(kInvalidClientId, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
+ *result = -1;
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(-1, *result);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ // Check bad memory
+ cmd.Init(client_program_id_,
+ kBucketId,
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(client_program_id_,
+ kBucketId,
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformLocation) {
+ const uint32 kBucketId = 123;
+ const char* kNonExistentName = "foobar";
+ typedef GetUniformLocation::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ SetBucketAsCString(kBucketId, kUniform2Name);
+ *result = -1;
+ GetUniformLocation cmd;
+ cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(kUniform2FakeLocation, *result);
+ SetBucketAsCString(kBucketId, kNonExistentName);
+ *result = -1;
+ cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(-1, *result);
+}
+
+TEST_P(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) {
+ const uint32 kBucketId = 123;
+ typedef GetUniformLocation::Result Result;
+ Result* result = GetSharedMemoryAs<Result*>();
+ *result = -1;
+ GetUniformLocation cmd;
+ // Check no bucket
+ cmd.Init(client_program_id_, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(-1, *result);
+ // Check bad program id.
+ SetBucketAsCString(kBucketId, kUniform2Name);
+ cmd.Init(kInvalidClientId, kBucketId, kSharedMemoryId, kSharedMemoryOffset);
+ *result = -1;
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(-1, *result);
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ // Check bad memory
+ cmd.Init(client_program_id_,
+ kBucketId,
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(client_program_id_,
+ kBucketId,
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderWithShaderTest, BindUniformLocationCHROMIUMBucket) {
+ const uint32 kBucketId = 123;
+ const GLint kLocation = 2;
+ const char* kName = "testing";
+ const char* kBadName1 = "gl_testing";
+ const char* kBadName2 = "testing[1]";
+
+ SetBucketAsCString(kBucketId, kName);
+ BindUniformLocationCHROMIUMBucket cmd;
+ cmd.Init(client_program_id_,
+ kLocation,
+ kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ // check negative location
+ SetBucketAsCString(kBucketId, kName);
+ cmd.Init(client_program_id_, -1, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ // check highest location
+ SetBucketAsCString(kBucketId, kName);
+ GLint kMaxLocation =
+ (kMaxFragmentUniformVectors + kMaxVertexUniformVectors) * 4 - 1;
+ cmd.Init(client_program_id_,
+ kMaxLocation,
+ kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ // check too high location
+ SetBucketAsCString(kBucketId, kName);
+ cmd.Init(client_program_id_,
+ kMaxLocation + 1,
+ kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ // check bad name "gl_..."
+ SetBucketAsCString(kBucketId, kBadName1);
+ cmd.Init(client_program_id_,
+ kLocation,
+ kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ // check bad name "name[1]" non zero
+ SetBucketAsCString(kBucketId, kBadName2);
+ cmd.Init(client_program_id_,
+ kLocation,
+ kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) {
+ CommandLine command_line(0, NULL);
+ command_line.AppendSwitchASCII(
+ switches::kGpuDriverBugWorkarounds,
+ base::IntToString(gpu::CLEAR_UNIFORMS_BEFORE_FIRST_PROGRAM_USE));
+ InitState init;
+ init.gl_version = "3.0";
+ init.has_alpha = true;
+ init.request_alpha = true;
+ init.bind_generates_resource = true;
+ InitDecoderWithCommandLine(init, &command_line);
+ {
+ static AttribInfo attribs[] = {
+ {
+ kAttrib1Name, kAttrib1Size, kAttrib1Type, kAttrib1Location,
+ },
+ {
+ kAttrib2Name, kAttrib2Size, kAttrib2Type, kAttrib2Location,
+ },
+ {
+ kAttrib3Name, kAttrib3Size, kAttrib3Type, kAttrib3Location,
+ },
+ };
+ static UniformInfo uniforms[] = {
+ {kUniform1Name, kUniform1Size, kUniform1Type, kUniform1FakeLocation,
+ kUniform1RealLocation, kUniform1DesiredLocation},
+ {kUniform2Name, kUniform2Size, kUniform2Type, kUniform2FakeLocation,
+ kUniform2RealLocation, kUniform2DesiredLocation},
+ {kUniform3Name, kUniform3Size, kUniform3Type, kUniform3FakeLocation,
+ kUniform3RealLocation, kUniform3DesiredLocation},
+ };
+ SetupShader(attribs,
+ arraysize(attribs),
+ uniforms,
+ arraysize(uniforms),
+ client_program_id_,
+ kServiceProgramId,
+ client_vertex_shader_id_,
+ kServiceVertexShaderId,
+ client_fragment_shader_id_,
+ kServiceFragmentShaderId);
+ TestHelper::SetupExpectationsForClearingUniforms(
+ gl_.get(), uniforms, arraysize(uniforms));
+ }
+
+ {
+ EXPECT_CALL(*gl_, UseProgram(kServiceProgramId))
+ .Times(1)
+ .RetiresOnSaturation();
+ cmds::UseProgram cmd;
+ cmd.Init(client_program_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ }
+}
+
+// TODO(gman): DeleteProgram
+
+// TODO(gman): UseProgram
+
+// TODO(gman): DeleteShader
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
new file mode 100644
index 00000000000..67618138982
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
@@ -0,0 +1,2831 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+
+#include "base/command_line.h"
+#include "base/strings/string_number_conversions.h"
+#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/common/id_allocator.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
+#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
+#include "gpu/command_buffer/service/cmd_buffer_engine.h"
+#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/context_state.h"
+#include "gpu/command_buffer/service/gl_surface_mock.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
+
+#include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/command_buffer/service/image_manager.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/mocks.h"
+#include "gpu/command_buffer/service/program_manager.h"
+#include "gpu/command_buffer/service/test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
+
+#if !defined(GL_DEPTH24_STENCIL8)
+#define GL_DEPTH24_STENCIL8 0x88F0
+#endif
+
+using ::gfx::MockGLInterface;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::InSequence;
+using ::testing::Invoke;
+using ::testing::MatcherCast;
+using ::testing::Mock;
+using ::testing::Pointee;
+using ::testing::Return;
+using ::testing::SaveArg;
+using ::testing::SetArrayArgument;
+using ::testing::SetArgumentPointee;
+using ::testing::SetArgPointee;
+using ::testing::StrEq;
+using ::testing::StrictMock;
+
+namespace gpu {
+namespace gles2 {
+
+using namespace cmds;
+
+TEST_P(GLES2DecoderTest, GenerateMipmapWrongFormatsFails) {
+ EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ GenerateMipmap cmd;
+ cmd.Init(GL_TEXTURE_2D);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, GenerateMipmapHandlesOutOfMemory) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ TextureManager* manager = group().texture_manager();
+ TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ GLint width = 0;
+ GLint height = 0;
+ EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height));
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 16,
+ 16,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D)).Times(1);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ GenerateMipmap cmd;
+ cmd.Init(GL_TEXTURE_2D);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+ EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, 2, &width, &height));
+}
+
+TEST_P(GLES2DecoderTest, GenerateMipmapClearsUnclearedTexture) {
+ EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 2,
+ 2);
+ EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ GenerateMipmap cmd;
+ cmd.Init(GL_TEXTURE_2D);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Same as GenerateMipmapClearsUnclearedTexture, but with workaround
+// |set_texture_filters_before_generating_mipmap|.
+TEST_P(GLES2DecoderManualInitTest, SetTextureFiltersBeforeGenerateMipmap) {
+ CommandLine command_line(0, NULL);
+ command_line.AppendSwitchASCII(
+ switches::kGpuDriverBugWorkarounds,
+ base::IntToString(gpu::SET_TEXTURE_FILTER_BEFORE_GENERATING_MIPMAP));
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoderWithCommandLine(init, &command_line);
+
+ EXPECT_CALL(*gl_, GenerateMipmapEXT(_)).Times(0);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 2,
+ 2);
+ EXPECT_CALL(
+ *gl_,
+ TexParameteri(
+ GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GenerateMipmapEXT(GL_TEXTURE_2D));
+ EXPECT_CALL(
+ *gl_,
+ TexParameteri(
+ GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ GenerateMipmap cmd;
+ cmd.Init(GL_TEXTURE_2D);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, ActiveTextureValidArgs) {
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
+ SpecializedSetup<ActiveTexture, 0>(true);
+ ActiveTexture cmd;
+ cmd.Init(GL_TEXTURE1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, ActiveTextureInvalidArgs) {
+ EXPECT_CALL(*gl_, ActiveTexture(_)).Times(0);
+ SpecializedSetup<ActiveTexture, 0>(false);
+ ActiveTexture cmd;
+ cmd.Init(GL_TEXTURE0 - 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(kNumTextureUnits);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, TexSubImage2DValidArgs) {
+ const int kWidth = 16;
+ const int kHeight = 8;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 1,
+ GL_RGBA,
+ kWidth,
+ kHeight,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 1,
+ 1,
+ 0,
+ kWidth - 1,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ TexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 1,
+ 0,
+ kWidth - 1,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, TexSubImage2DBadArgs) {
+ const int kWidth = 16;
+ const int kHeight = 8;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 1,
+ GL_RGBA,
+ kWidth,
+ kHeight,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 0,
+ 0);
+ TexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE0,
+ 1,
+ 0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_TRUE,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_INT,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ -1,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 1,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ -1,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 1,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 0,
+ kWidth + 1,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 0,
+ kWidth,
+ kHeight + 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGB,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_SHORT_4_4_4_4,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kInvalidSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ cmd.Init(GL_TEXTURE_2D,
+ 1,
+ 0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kInvalidSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest, CopyTexSubImage2DValidArgs) {
+ const int kWidth = 16;
+ const int kHeight = 8;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 1,
+ GL_RGBA,
+ kWidth,
+ kHeight,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_,
+ CopyTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight))
+ .Times(1)
+ .RetiresOnSaturation();
+ CopyTexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, CopyTexSubImage2DBadArgs) {
+ const int kWidth = 16;
+ const int kHeight = 8;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 1,
+ GL_RGBA,
+ kWidth,
+ kHeight,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 0,
+ 0);
+ CopyTexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE0, 1, 0, 0, 0, 0, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+ cmd.Init(GL_TEXTURE_2D, 1, -1, 0, 0, 0, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D, 1, 1, 0, 0, 0, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D, 1, 0, -1, 0, 0, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D, 1, 0, 1, 0, 0, kWidth, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth + 1, kHeight);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ cmd.Init(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight + 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, TexImage2DRedefinitionSucceeds) {
+ const int kWidth = 16;
+ const int kHeight = 8;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ EXPECT_CALL(*gl_, GetError()).WillRepeatedly(Return(GL_NO_ERROR));
+ for (int ii = 0; ii < 2; ++ii) {
+ TexImage2D cmd;
+ if (ii == 0) {
+ EXPECT_CALL(*gl_,
+ TexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ kWidth,
+ kHeight,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ _))
+ .Times(1)
+ .RetiresOnSaturation();
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ } else {
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kWidth,
+ kHeight);
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 0,
+ 0);
+ }
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 0,
+ 0,
+ kWidth,
+ kHeight - 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ // Consider this TexSubImage2D command part of the previous TexImage2D
+ // (last GL_TRUE argument). It will be skipped if there are bugs in the
+ // redefinition case.
+ TexSubImage2D cmd2;
+ cmd2.Init(GL_TEXTURE_2D,
+ 0,
+ 0,
+ 0,
+ kWidth,
+ kHeight - 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_TRUE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ }
+}
+
+TEST_P(GLES2DecoderTest, TexImage2DGLError) {
+ GLenum target = GL_TEXTURE_2D;
+ GLint level = 0;
+ GLenum internal_format = GL_RGBA;
+ GLsizei width = 2;
+ GLsizei height = 4;
+ GLint border = 0;
+ GLenum format = GL_RGBA;
+ GLenum type = GL_UNSIGNED_BYTE;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ TextureManager* manager = group().texture_manager();
+ TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ TexImage2D(target,
+ level,
+ internal_format,
+ width,
+ height,
+ border,
+ format,
+ type,
+ _))
+ .Times(1)
+ .RetiresOnSaturation();
+ TexImage2D cmd;
+ cmd.Init(target,
+ level,
+ internal_format,
+ width,
+ height,
+ format,
+ type,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+ EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
+}
+
+TEST_P(GLES2DecoderTest, CopyTexImage2DGLError) {
+ GLenum target = GL_TEXTURE_2D;
+ GLint level = 0;
+ GLenum internal_format = GL_RGBA;
+ GLsizei width = 2;
+ GLsizei height = 4;
+ GLint border = 0;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ TextureManager* manager = group().texture_manager();
+ TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_OUT_OF_MEMORY))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ CopyTexImage2D(
+ target, level, internal_format, 0, 0, width, height, border))
+ .Times(1)
+ .RetiresOnSaturation();
+ CopyTexImage2D cmd;
+ cmd.Init(target, level, internal_format, 0, 0, width, height);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
+ EXPECT_FALSE(texture->GetLevelSize(GL_TEXTURE_2D, level, &width, &height));
+}
+
+TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DBucketBadBucket) {
+ InitState init;
+ init.extensions = "GL_EXT_texture_compression_s3tc";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ const uint32 kBadBucketId = 123;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ CompressedTexImage2DBucket cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
+ 4,
+ 4,
+ kBadBucketId);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+ CompressedTexSubImage2DBucket cmd2;
+ cmd2.Init(GL_TEXTURE_2D,
+ 0,
+ 0,
+ 0,
+ 4,
+ 4,
+ GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
+ kBadBucketId);
+ EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
+}
+
+namespace {
+
+struct S3TCTestData {
+ GLenum format;
+ size_t block_size;
+};
+
+} // anonymous namespace.
+
+TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DS3TC) {
+ InitState init;
+ init.extensions = "GL_EXT_texture_compression_s3tc";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ const uint32 kBucketId = 123;
+ CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId);
+ ASSERT_TRUE(bucket != NULL);
+
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+
+ static const S3TCTestData test_data[] = {
+ {
+ GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 8,
+ },
+ {
+ GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 8,
+ },
+ {
+ GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 16,
+ },
+ {
+ GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 16,
+ },
+ };
+
+ for (size_t ii = 0; ii < arraysize(test_data); ++ii) {
+ const S3TCTestData& test = test_data[ii];
+ CompressedTexImage2DBucket cmd;
+ // test small width.
+ DoCompressedTexImage2D(
+ GL_TEXTURE_2D, 0, test.format, 2, 4, 0, test.block_size, kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // test bad width.
+ cmd.Init(GL_TEXTURE_2D, 0, test.format, 5, 4, kBucketId);
+ bucket->SetSize(test.block_size * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // test small height.
+ DoCompressedTexImage2D(
+ GL_TEXTURE_2D, 0, test.format, 4, 2, 0, test.block_size, kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // test too bad height.
+ cmd.Init(GL_TEXTURE_2D, 0, test.format, 4, 5, kBucketId);
+ bucket->SetSize(test.block_size * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // test small for level 0.
+ DoCompressedTexImage2D(
+ GL_TEXTURE_2D, 0, test.format, 1, 1, 0, test.block_size, kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // test small for level 0.
+ DoCompressedTexImage2D(
+ GL_TEXTURE_2D, 0, test.format, 2, 2, 0, test.block_size, kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // test size too large.
+ cmd.Init(GL_TEXTURE_2D, 0, test.format, 4, 4, kBucketId);
+ bucket->SetSize(test.block_size * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+
+ // test size too small.
+ cmd.Init(GL_TEXTURE_2D, 0, test.format, 4, 4, kBucketId);
+ bucket->SetSize(test.block_size / 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+
+ // test with 3 mips.
+ DoCompressedTexImage2D(
+ GL_TEXTURE_2D, 0, test.format, 4, 4, 0, test.block_size, kBucketId);
+ DoCompressedTexImage2D(
+ GL_TEXTURE_2D, 1, test.format, 2, 2, 0, test.block_size, kBucketId);
+ DoCompressedTexImage2D(
+ GL_TEXTURE_2D, 2, test.format, 1, 1, 0, test.block_size, kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Test a 16x16
+ DoCompressedTexImage2D(GL_TEXTURE_2D,
+ 0,
+ test.format,
+ 16,
+ 16,
+ 0,
+ test.block_size * 4 * 4,
+ kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ CompressedTexSubImage2DBucket sub_cmd;
+ bucket->SetSize(test.block_size);
+ // Test sub image bad xoffset
+ sub_cmd.Init(GL_TEXTURE_2D, 0, 1, 0, 4, 4, test.format, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // Test sub image bad yoffset
+ sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 2, 4, 4, test.format, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // Test sub image bad width
+ bucket->SetSize(test.block_size * 2);
+ sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 5, 4, test.format, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // Test sub image bad height
+ sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 5, test.format, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // Test sub image bad size
+ bucket->SetSize(test.block_size + 1);
+ sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, test.format, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+
+ for (GLint yoffset = 0; yoffset <= 8; yoffset += 4) {
+ for (GLint xoffset = 0; xoffset <= 8; xoffset += 4) {
+ for (GLsizei height = 4; height <= 8; height += 4) {
+ for (GLsizei width = 4; width <= 8; width += 4) {
+ GLsizei size = test.block_size * (width / 4) * (height / 4);
+ bucket->SetSize(size);
+ EXPECT_CALL(*gl_,
+ CompressedTexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ xoffset,
+ yoffset,
+ width,
+ height,
+ test.format,
+ size,
+ _))
+ .Times(1)
+ .RetiresOnSaturation();
+ sub_cmd.Init(GL_TEXTURE_2D,
+ 0,
+ xoffset,
+ yoffset,
+ width,
+ height,
+ test.format,
+ kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ }
+ }
+ }
+ }
+ }
+}
+
+TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DETC1) {
+ InitState init;
+ init.extensions = "GL_OES_compressed_ETC1_RGB8_texture";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ const uint32 kBucketId = 123;
+ CommonDecoder::Bucket* bucket = decoder_->CreateBucket(kBucketId);
+ ASSERT_TRUE(bucket != NULL);
+
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+
+ const GLenum kFormat = GL_ETC1_RGB8_OES;
+ const size_t kBlockSize = 8;
+
+ CompressedTexImage2DBucket cmd;
+ // test small width.
+ DoCompressedTexImage2D(GL_TEXTURE_2D, 0, kFormat, 4, 8, 0, 16, kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // test small height.
+ DoCompressedTexImage2D(GL_TEXTURE_2D, 0, kFormat, 8, 4, 0, 16, kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // test size too large.
+ cmd.Init(GL_TEXTURE_2D, 0, kFormat, 4, 4, kBucketId);
+ bucket->SetSize(kBlockSize * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+
+ // test size too small.
+ cmd.Init(GL_TEXTURE_2D, 0, kFormat, 4, 4, kBucketId);
+ bucket->SetSize(kBlockSize / 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+
+ // Test a 16x16
+ DoCompressedTexImage2D(
+ GL_TEXTURE_2D, 0, kFormat, 16, 16, 0, kBlockSize * 16, kBucketId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Test CompressedTexSubImage not allowed
+ CompressedTexSubImage2DBucket sub_cmd;
+ bucket->SetSize(kBlockSize);
+ sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, kFormat, kBucketId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(sub_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // Test TexSubImage not allowed for ETC1 compressed texture
+ TextureRef* texture_ref = GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ GLenum type, internal_format;
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
+ EXPECT_EQ(kFormat, internal_format);
+ TexSubImage2D texsub_cmd;
+ texsub_cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 0,
+ 0,
+ 4,
+ 4,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(texsub_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // Test CopyTexSubImage not allowed for ETC1 compressed texture
+ CopyTexSubImage2D copy_cmd;
+ copy_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 4, 4);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(copy_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, EGLImageExternalBindTexture) {
+ InitState init;
+ init.extensions = "GL_OES_EGL_image_external";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kNewServiceId));
+ EXPECT_CALL(*gl_, GenTextures(1, _))
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId));
+ BindTexture cmd;
+ cmd.Init(GL_TEXTURE_EXTERNAL_OES, kNewClientId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ TextureRef* texture_ref = GetTexture(kNewClientId);
+ EXPECT_TRUE(texture_ref != NULL);
+ EXPECT_TRUE(texture_ref->texture()->target() == GL_TEXTURE_EXTERNAL_OES);
+}
+
+TEST_P(GLES2DecoderManualInitTest, EGLImageExternalGetBinding) {
+ InitState init;
+ init.extensions = "GL_OES_EGL_image_external";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_,
+ GetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, result->GetData()))
+ .Times(0);
+ result->size = 0;
+ GetIntegerv cmd;
+ cmd.Init(GL_TEXTURE_BINDING_EXTERNAL_OES,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
+ GL_TEXTURE_BINDING_EXTERNAL_OES),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, EGLImageExternalTextureDefaults) {
+ InitState init;
+ init.extensions = "GL_OES_EGL_image_external";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
+
+ TextureRef* texture_ref = GetTexture(client_texture_id_);
+ EXPECT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
+ EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
+ EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
+ EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
+}
+
+TEST_P(GLES2DecoderManualInitTest, EGLImageExternalTextureParam) {
+ InitState init;
+ init.extensions = "GL_OES_EGL_image_external";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
+
+ EXPECT_CALL(*gl_,
+ TexParameteri(
+ GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
+ EXPECT_CALL(
+ *gl_,
+ TexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+ EXPECT_CALL(
+ *gl_,
+ TexParameteri(
+ GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
+ EXPECT_CALL(
+ *gl_,
+ TexParameteri(
+ GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
+ TexParameteri cmd;
+ cmd.Init(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ cmd.Init(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ cmd.Init(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ cmd.Init(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ TextureRef* texture_ref = GetTexture(client_texture_id_);
+ EXPECT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
+ EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
+ EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
+ EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
+}
+
+TEST_P(GLES2DecoderManualInitTest, EGLImageExternalTextureParamInvalid) {
+ InitState init;
+ init.extensions = "GL_OES_EGL_image_external";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
+
+ TexParameteri cmd;
+ cmd.Init(GL_TEXTURE_EXTERNAL_OES,
+ GL_TEXTURE_MIN_FILTER,
+ GL_NEAREST_MIPMAP_NEAREST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+
+ cmd.Init(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+
+ cmd.Init(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+
+ TextureRef* texture_ref = GetTexture(client_texture_id_);
+ EXPECT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_TRUE(texture->target() == GL_TEXTURE_EXTERNAL_OES);
+ EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
+ EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
+ EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
+}
+
+TEST_P(GLES2DecoderManualInitTest, EGLImageExternalTexImage2DError) {
+ InitState init;
+ init.extensions = "GL_OES_EGL_image_external";
+ init.gl_version = "opengl es 2.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ GLenum target = GL_TEXTURE_EXTERNAL_OES;
+ GLint level = 0;
+ GLenum internal_format = GL_RGBA;
+ GLsizei width = 2;
+ GLsizei height = 4;
+ GLenum format = GL_RGBA;
+ GLenum type = GL_UNSIGNED_BYTE;
+ DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
+ ASSERT_TRUE(GetTexture(client_texture_id_) != NULL);
+ TexImage2D cmd;
+ cmd.Init(target,
+ level,
+ internal_format,
+ width,
+ height,
+ format,
+ type,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+
+ // TexImage2D is not allowed with GL_TEXTURE_EXTERNAL_OES targets.
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, DefaultTextureZero) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_2D, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ BindTexture cmd2;
+ cmd2.Init(GL_TEXTURE_CUBE_MAP, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, DefaultTextureBGR) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_2D, 0);
+ EXPECT_CALL(
+ *gl_, BindTexture(GL_TEXTURE_2D, TestHelper::kServiceDefaultTexture2dId));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ BindTexture cmd2;
+ cmd2.Init(GL_TEXTURE_CUBE_MAP, 0);
+ EXPECT_CALL(*gl_,
+ BindTexture(GL_TEXTURE_CUBE_MAP,
+ TestHelper::kServiceDefaultTextureCubemapId));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// Test that default texture 0 is immutable.
+TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameterf) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ {
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_2D, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ TexParameterf cmd2;
+ cmd2.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ }
+
+ {
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_CUBE_MAP, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ TexParameterf cmd2;
+ cmd2.Init(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ }
+}
+
+TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteri) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ {
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_2D, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ TexParameteri cmd2;
+ cmd2.Init(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ }
+
+ {
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_CUBE_MAP, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ TexParameteri cmd2;
+ cmd2.Init(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ }
+}
+
+TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameterfv) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ {
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_2D, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ GLfloat data = GL_NEAREST;
+ TexParameterfvImmediate& cmd2 =
+ *GetImmediateAs<TexParameterfvImmediate>();
+ cmd2.Init(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ &data);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd2, sizeof(data)));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ }
+
+ {
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_CUBE_MAP, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ GLfloat data = GL_NEAREST;
+ TexParameterfvImmediate& cmd2 =
+ *GetImmediateAs<TexParameterfvImmediate>();
+ cmd2.Init(GL_TEXTURE_CUBE_MAP,
+ GL_TEXTURE_MAG_FILTER,
+ &data);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd2, sizeof(data)));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ }
+}
+
+TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteriv) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ {
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_2D, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ GLfloat data = GL_NEAREST;
+ TexParameterfvImmediate& cmd2 =
+ *GetImmediateAs<TexParameterfvImmediate>();
+ cmd2.Init(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ &data);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd2, sizeof(data)));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ }
+
+ {
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_CUBE_MAP, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ GLfloat data = GL_NEAREST;
+ TexParameterfvImmediate& cmd2 =
+ *GetImmediateAs<TexParameterfvImmediate>();
+ cmd2.Init(GL_TEXTURE_CUBE_MAP,
+ GL_TEXTURE_MAG_FILTER,
+ &data);
+ EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd2, sizeof(data)));
+ EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
+ }
+}
+
+TEST_P(GLES2DecoderManualInitTest, NoDefaultTexImage2D) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_2D, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ TexImage2D cmd2;
+ cmd2.Init(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 2,
+ 2,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, NoDefaultTexSubImage2D) {
+ InitState init;
+ init.gl_version = "3.0";
+ InitDecoder(init);
+
+ BindTexture cmd1;
+ cmd1.Init(GL_TEXTURE_2D, 0);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, 0));
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ TexSubImage2D cmd2;
+ cmd2.Init(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
+ InitState init;
+ init.extensions = "GL_ARB_texture_rectangle";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId));
+ EXPECT_CALL(*gl_, GenTextures(1, _))
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId));
+ BindTexture cmd;
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, kNewClientId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ Texture* texture = GetTexture(kNewClientId)->texture();
+ EXPECT_TRUE(texture != NULL);
+ EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) {
+ InitState init;
+ init.extensions = "GL_ARB_texture_rectangle";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindTexture(
+ GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ EXPECT_CALL(*gl_,
+ GetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, result->GetData()))
+ .Times(0);
+ result->size = 0;
+ GetIntegerv cmd;
+ cmd.Init(GL_TEXTURE_BINDING_RECTANGLE_ARB,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(
+ GL_TEXTURE_BINDING_RECTANGLE_ARB),
+ result->GetNumResults());
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ EXPECT_EQ(client_texture_id_, (uint32)result->GetData()[0]);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTextureDefaults) {
+ InitState init;
+ init.extensions = "GL_ARB_texture_rectangle";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindTexture(
+ GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
+
+ Texture* texture = GetTexture(client_texture_id_)->texture();
+ EXPECT_TRUE(texture != NULL);
+ EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
+ EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
+ EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
+ EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParam) {
+ InitState init;
+ init.extensions = "GL_ARB_texture_rectangle";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ DoBindTexture(
+ GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
+
+ EXPECT_CALL(*gl_,
+ TexParameteri(
+ GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
+ EXPECT_CALL(*gl_,
+ TexParameteri(
+ GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
+ EXPECT_CALL(
+ *gl_,
+ TexParameteri(
+ GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE));
+ EXPECT_CALL(
+ *gl_,
+ TexParameteri(
+ GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
+ TexParameteri cmd;
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ Texture* texture = GetTexture(client_texture_id_)->texture();
+ EXPECT_TRUE(texture != NULL);
+ EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
+ EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
+ EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
+ EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParamInvalid) {
+ InitState init;
+ init.extensions = "GL_ARB_texture_rectangle";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ DoBindTexture(
+ GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
+
+ TexParameteri cmd;
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
+ GL_TEXTURE_MIN_FILTER,
+ GL_NEAREST_MIPMAP_NEAREST);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+
+ cmd.Init(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+
+ Texture* texture = GetTexture(client_texture_id_)->texture();
+ EXPECT_TRUE(texture != NULL);
+ EXPECT_TRUE(texture->target() == GL_TEXTURE_RECTANGLE_ARB);
+ EXPECT_TRUE(texture->min_filter() == GL_LINEAR);
+ EXPECT_TRUE(texture->wrap_s() == GL_CLAMP_TO_EDGE);
+ EXPECT_TRUE(texture->wrap_t() == GL_CLAMP_TO_EDGE);
+}
+
+TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2DError) {
+ InitState init;
+ init.extensions = "GL_ARB_texture_rectangle";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ GLenum target = GL_TEXTURE_RECTANGLE_ARB;
+ GLint level = 0;
+ GLenum internal_format = GL_RGBA;
+ GLsizei width = 2;
+ GLsizei height = 4;
+ GLenum format = GL_RGBA;
+ GLenum type = GL_UNSIGNED_BYTE;
+ DoBindTexture(
+ GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
+ ASSERT_TRUE(GetTexture(client_texture_id_) != NULL);
+ TexImage2D cmd;
+ cmd.Init(target,
+ level,
+ internal_format,
+ width,
+ height,
+ format,
+ type,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+
+ // TexImage2D is not allowed with GL_TEXTURE_RECTANGLE_ARB targets.
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, TexSubImage2DClearsAfterTexImage2DNULL) {
+ InitState init;
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ InitDecoder(init);
+
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 2,
+ 2);
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ TexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ // Test if we call it again it does not clear.
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest, TexSubImage2DDoesNotClearAfterTexImage2DNULLThenData) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 2,
+ 2,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ TexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ // Test if we call it again it does not clear.
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(
+ GLES2DecoderManualInitTest,
+ TexSubImage2DDoesNotClearAfterTexImage2DNULLThenDataWithTexImage2DIsFaster) {
+ CommandLine command_line(0, NULL);
+ command_line.AppendSwitchASCII(
+ switches::kGpuDriverBugWorkarounds,
+ base::IntToString(gpu::TEXSUBIMAGE2D_FASTER_THAN_TEXIMAGE2D));
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoderWithCommandLine(init, &command_line);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+
+ {
+ // Uses texSubimage internally because the above workaround is active and
+ // the update is for the full size of the texture.
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(
+ GL_TEXTURE_2D, 0, 0, 0, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ cmds::TexImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 2,
+ 2,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ }
+
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ TexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ // Test if we call it again it does not clear.
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest, TexSubImage2DClearsAfterTexImage2DWithDataThenNULL) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ // Put in data (so it should be marked as cleared)
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 2,
+ 2,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ // Put in no data.
+ TexImage2D tex_cmd;
+ tex_cmd.Init(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ // It won't actually call TexImage2D, just mark it as uncleared.
+ EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
+ // Next call to TexSubImage2d should clear.
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 2,
+ 2);
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ TexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 1,
+ 1,
+ 1,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+
+ TextureManager* manager = group().texture_manager();
+ TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, CopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ CopyTexImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+
+ EXPECT_TRUE(texture->SafeToRenderFrom());
+}
+
+TEST_P(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedTexture) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ 2,
+ 2);
+ EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1))
+ .Times(1)
+ .RetiresOnSaturation();
+ CopyTexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+}
+
+TEST_P(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) {
+ InitState init;
+ init.extensions = "GL_EXT_texture_compression_s3tc";
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(
+ *gl_,
+ CompressedTexImage2D(
+ GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0, 8, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ CompressedTexImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
+ 4,
+ 4,
+ 8,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ TextureManager* manager = group().texture_manager();
+ TextureRef* texture_ref = manager->GetTexture(client_texture_id_);
+ EXPECT_TRUE(texture_ref->texture()->SafeToRenderFrom());
+}
+
+TEST_P(GLES2DecoderTest, TextureUsageAngleExtNotEnabledByDefault) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+
+ TexParameteri cmd;
+ cmd.Init(
+ GL_TEXTURE_2D, GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, ProduceAndConsumeTextureCHROMIUM) {
+ Mailbox mailbox = Mailbox::Generate();
+
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ TextureRef* texture_ref =
+ group().texture_manager()->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ ProduceTextureCHROMIUMImmediate& produce_cmd =
+ *GetImmediateAs<ProduceTextureCHROMIUMImmediate>();
+ produce_cmd.Init(GL_TEXTURE_2D, mailbox.name);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(produce_cmd, sizeof(mailbox.name)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Texture didn't change.
+ GLsizei width;
+ GLsizei height;
+ GLenum type;
+ GLenum internal_format;
+
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ EXPECT_EQ(3, width);
+ EXPECT_EQ(1, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
+ EXPECT_EQ(2, width);
+ EXPECT_EQ(4, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+
+ // Service ID has not changed.
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ // Create new texture for consume.
+ EXPECT_CALL(*gl_, GenTextures(_, _))
+ .WillOnce(SetArgumentPointee<1>(kNewServiceId))
+ .RetiresOnSaturation();
+ DoBindTexture(GL_TEXTURE_2D, kNewClientId, kNewServiceId);
+
+ // Assigns and binds original service size texture ID.
+ EXPECT_CALL(*gl_, DeleteTextures(1, _)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
+ .Times(1)
+ .RetiresOnSaturation();
+
+ ConsumeTextureCHROMIUMImmediate& consume_cmd =
+ *GetImmediateAs<ConsumeTextureCHROMIUMImmediate>();
+ consume_cmd.Init(GL_TEXTURE_2D, mailbox.name);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(consume_cmd, sizeof(mailbox.name)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Texture is redefined.
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ EXPECT_EQ(3, width);
+ EXPECT_EQ(1, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
+ EXPECT_EQ(2, width);
+ EXPECT_EQ(4, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+
+ // Service ID is restored.
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+}
+
+TEST_P(GLES2DecoderTest, ProduceAndConsumeDirectTextureCHROMIUM) {
+ Mailbox mailbox = Mailbox::Generate();
+
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 1, GL_RGBA, 2, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ TextureRef* texture_ref =
+ group().texture_manager()->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ ProduceTextureDirectCHROMIUMImmediate& produce_cmd =
+ *GetImmediateAs<ProduceTextureDirectCHROMIUMImmediate>();
+ produce_cmd.Init(client_texture_id_, GL_TEXTURE_2D, mailbox.name);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(produce_cmd, sizeof(mailbox.name)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Texture didn't change.
+ GLsizei width;
+ GLsizei height;
+ GLenum type;
+ GLenum internal_format;
+
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ EXPECT_EQ(3, width);
+ EXPECT_EQ(1, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
+ EXPECT_EQ(2, width);
+ EXPECT_EQ(4, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+
+ // Service ID has not changed.
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ // Consume the texture into a new client ID.
+ GLuint new_texture_id = kNewClientId;
+ CreateAndConsumeTextureCHROMIUMImmediate& consume_cmd =
+ *GetImmediateAs<CreateAndConsumeTextureCHROMIUMImmediate>();
+ consume_cmd.Init(GL_TEXTURE_2D, new_texture_id, mailbox.name);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(consume_cmd, sizeof(mailbox.name)));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Make sure the new client ID is associated with the produced service ID.
+ texture_ref = group().texture_manager()->GetTexture(new_texture_id);
+ ASSERT_TRUE(texture_ref != NULL);
+ texture = texture_ref->texture();
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ DoBindTexture(GL_TEXTURE_2D, kNewClientId, kServiceTextureId);
+
+ // Texture is redefined.
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ EXPECT_EQ(3, width);
+ EXPECT_EQ(1, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 1, &width, &height));
+ EXPECT_EQ(2, width);
+ EXPECT_EQ(4, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 1, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+}
+
+TEST_P(GLES2DecoderTest, ProduceTextureCHROMIUMInvalidTarget) {
+ Mailbox mailbox = Mailbox::Generate();
+
+ DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 3, 1, 0, GL_RGBA,
+ GL_UNSIGNED_BYTE, 0, 0);
+ TextureRef* texture_ref =
+ group().texture_manager()->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ ProduceTextureDirectCHROMIUMImmediate& produce_cmd =
+ *GetImmediateAs<ProduceTextureDirectCHROMIUMImmediate>();
+ produce_cmd.Init(client_texture_id_, GL_TEXTURE_2D, mailbox.name);
+ EXPECT_EQ(error::kNoError,
+ ExecuteImmediateCmd(produce_cmd, sizeof(mailbox.name)));
+
+ // ProduceTexture should fail it the texture and produce targets don't match.
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, DepthTextureBadArgs) {
+ InitState init;
+ init.extensions = "GL_ANGLE_depth_texture";
+ init.gl_version = "opengl es 2.0";
+ init.has_depth = true;
+ init.has_stencil = true;
+ init.request_depth = true;
+ init.request_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ // Check trying to upload data fails.
+ TexImage2D tex_cmd;
+ tex_cmd.Init(GL_TEXTURE_2D,
+ 0,
+ GL_DEPTH_COMPONENT,
+ 1,
+ 1,
+ GL_DEPTH_COMPONENT,
+ GL_UNSIGNED_INT,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ // Try level > 0.
+ tex_cmd.Init(GL_TEXTURE_2D,
+ 1,
+ GL_DEPTH_COMPONENT,
+ 1,
+ 1,
+ GL_DEPTH_COMPONENT,
+ GL_UNSIGNED_INT,
+ 0,
+ 0);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+ // Make a 1 pixel depth texture.
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_DEPTH_COMPONENT,
+ 1,
+ 1,
+ 0,
+ GL_DEPTH_COMPONENT,
+ GL_UNSIGNED_INT,
+ 0,
+ 0);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // Check that trying to update it fails.
+ TexSubImage2D tex_sub_cmd;
+ tex_sub_cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 0,
+ 0,
+ 1,
+ 1,
+ GL_DEPTH_COMPONENT,
+ GL_UNSIGNED_INT,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(tex_sub_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // Check that trying to CopyTexImage2D fails
+ CopyTexImage2D copy_tex_cmd;
+ copy_tex_cmd.Init(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, 1, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(copy_tex_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+
+ // Check that trying to CopyTexSubImage2D fails
+ CopyTexSubImage2D copy_sub_cmd;
+ copy_sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(copy_sub_cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, GenerateMipmapDepthTexture) {
+ InitState init;
+ init.extensions = "GL_ANGLE_depth_texture";
+ init.gl_version = "opengl es 2.0";
+ init.has_depth = true;
+ init.has_stencil = true;
+ init.request_depth = true;
+ init.request_stencil = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_DEPTH_COMPONENT,
+ 2,
+ 2,
+ 0,
+ GL_DEPTH_COMPONENT,
+ GL_UNSIGNED_INT,
+ 0,
+ 0);
+ GenerateMipmap cmd;
+ cmd.Init(GL_TEXTURE_2D);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, BindTexImage2DCHROMIUM) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ TextureRef* texture_ref =
+ group().texture_manager()->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1);
+ EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL);
+
+ GLsizei width;
+ GLsizei height;
+ GLenum type;
+ GLenum internal_format;
+
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ EXPECT_EQ(3, width);
+ EXPECT_EQ(1, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+ EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
+
+ // Bind image to texture.
+ // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
+ bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ // Image should now be set.
+ EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
+
+ // Define new texture image.
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ // Image should no longer be set.
+ EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
+}
+
+TEST_P(GLES2DecoderTest, BindTexImage2DCHROMIUMCubeMapNotAllowed) {
+ group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1);
+ DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
+
+ BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
+ bind_tex_image_2d_cmd.Init(GL_TEXTURE_CUBE_MAP, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+}
+
+TEST_P(GLES2DecoderTest, OrphanGLImageWithTexImage2D) {
+ group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1);
+ DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
+
+ BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
+ bind_tex_image_2d_cmd.Init(GL_TEXTURE_CUBE_MAP, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
+ EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
+
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ TextureRef* texture_ref =
+ group().texture_manager()->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
+}
+
+TEST_P(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA, 3, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0);
+ TextureRef* texture_ref =
+ group().texture_manager()->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ group().image_manager()->AddImage(gfx::GLImage::CreateGLImage(0).get(), 1);
+ EXPECT_FALSE(group().image_manager()->LookupImage(1) == NULL);
+
+ GLsizei width;
+ GLsizei height;
+ GLenum type;
+ GLenum internal_format;
+
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ EXPECT_EQ(3, width);
+ EXPECT_EQ(1, height);
+ EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
+ EXPECT_EQ(static_cast<GLenum>(GL_RGBA), internal_format);
+ EXPECT_EQ(static_cast<GLenum>(GL_UNSIGNED_BYTE), type);
+ EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
+
+ // Bind image to texture.
+ // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
+ bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ // Image should now be set.
+ EXPECT_FALSE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
+
+ // Release image from texture.
+ // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd;
+ release_tex_image_2d_cmd.Init(GL_TEXTURE_2D, 1);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(release_tex_image_2d_cmd));
+ EXPECT_TRUE(texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height));
+ // Image should no longer be set.
+ EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
+}
+
+class MockGLImage : public gfx::GLImage {
+ public:
+ MockGLImage() {}
+
+ // Overridden from gfx::GLImage:
+ MOCK_METHOD0(Destroy, void());
+ MOCK_METHOD0(GetSize, gfx::Size());
+ MOCK_METHOD1(BindTexImage, bool(unsigned));
+ MOCK_METHOD1(ReleaseTexImage, void(unsigned));
+ MOCK_METHOD0(WillUseTexImage, void());
+ MOCK_METHOD0(DidUseTexImage, void());
+ MOCK_METHOD0(WillModifyTexImage, void());
+ MOCK_METHOD0(DidModifyTexImage, void());
+
+ protected:
+ virtual ~MockGLImage() {}
+};
+
+TEST_P(GLES2DecoderWithShaderTest, UseTexImage) {
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 1,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ kSharedMemoryId,
+ kSharedMemoryOffset);
+
+ TextureRef* texture_ref =
+ group().texture_manager()->GetTexture(client_texture_id_);
+ ASSERT_TRUE(texture_ref != NULL);
+ Texture* texture = texture_ref->texture();
+ EXPECT_EQ(kServiceTextureId, texture->service_id());
+
+ const int32 kImageId = 1;
+ scoped_refptr<MockGLImage> image(new MockGLImage);
+ group().image_manager()->AddImage(image.get(), kImageId);
+
+ // Bind image to texture.
+ EXPECT_CALL(*image, BindTexImage(GL_TEXTURE_2D))
+ .Times(1)
+ .WillOnce(Return(true))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*image, GetSize())
+ .Times(1)
+ .WillOnce(Return(gfx::Size(1, 1)))
+ .RetiresOnSaturation();
+ // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
+ bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, kImageId);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
+
+ AddExpectationsForSimulatedAttrib0(kNumVertices, 0);
+ SetupExpectationsForApplyingDefaultDirtyState();
+
+ // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)).Times(3).RetiresOnSaturation();
+ EXPECT_CALL(*image, WillUseTexImage()).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*image, DidUseTexImage()).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
+ .Times(1)
+ .RetiresOnSaturation();
+ DrawArrays cmd;
+ cmd.Init(GL_TRIANGLES, 0, kNumVertices);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ DoBindFramebuffer(
+ GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
+ // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
+ .Times(2)
+ .RetiresOnSaturation();
+ // Image will be 'in use' as long as bound to a framebuffer.
+ EXPECT_CALL(*image, WillUseTexImage()).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferTexture2DEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ kServiceTextureId,
+ 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ FramebufferTexture2D fbtex_cmd;
+ fbtex_cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_TEXTURE_2D,
+ client_texture_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(fbtex_cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ // ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ FramebufferRenderbufferEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ kServiceRenderbufferId))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kServiceTextureId))
+ .Times(2)
+ .RetiresOnSaturation();
+ // Image should no longer be 'in use' after being unbound from framebuffer.
+ EXPECT_CALL(*image, DidUseTexImage()).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ FramebufferRenderbuffer fbrb_cmd;
+ fbrb_cmd.Init(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0,
+ GL_RENDERBUFFER,
+ client_renderbuffer_id_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(fbrb_cmd));
+}
+
+TEST_P(GLES2DecoderManualInitTest, DrawWithGLImageExternal) {
+ InitState init;
+ init.extensions = "GL_OES_EGL_image_external";
+ init.gl_version = "opengl es 2.0";
+ init.has_alpha = true;
+ init.has_depth = true;
+ init.request_alpha = true;
+ init.request_depth = true;
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ TextureRef* texture_ref = GetTexture(client_texture_id_);
+ scoped_refptr<MockGLImage> image(new MockGLImage);
+ group().texture_manager()->SetTarget(texture_ref, GL_TEXTURE_EXTERNAL_OES);
+ group().texture_manager()->SetLevelInfo(texture_ref,
+ GL_TEXTURE_EXTERNAL_OES,
+ 0,
+ GL_RGBA,
+ 0,
+ 0,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ group().texture_manager()->SetLevelImage(
+ texture_ref, GL_TEXTURE_EXTERNAL_OES, 0, image);
+
+ DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ SetupSamplerExternalProgram();
+ SetupIndexBuffer();
+ AddExpectationsForSimulatedAttrib0(kMaxValidIndex + 1, 0);
+ SetupExpectationsForApplyingDefaultDirtyState();
+ EXPECT_TRUE(group().texture_manager()->CanRender(texture_ref));
+
+ InSequence s;
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*image, WillUseTexImage()).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(1);
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*image, DidUseTexImage()).Times(1).RetiresOnSaturation();
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE0)).Times(1).RetiresOnSaturation();
+ DrawElements cmd;
+ cmd.Init(GL_TRIANGLES,
+ kValidIndexRangeCount,
+ GL_UNSIGNED_SHORT,
+ kValidIndexRangeStart * 2);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, TexImage2DFloatOnGLES2) {
+ InitState init;
+ init.extensions = "GL_OES_texture_float";
+ init.gl_version = "opengl es 2.0";
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0);
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, GL_LUMINANCE, GL_FLOAT, 0, 0);
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, GL_ALPHA, GL_FLOAT, 0, 0);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_LUMINANCE_ALPHA,
+ 16,
+ 17,
+ 0,
+ GL_LUMINANCE_ALPHA,
+ GL_FLOAT,
+ 0,
+ 0);
+}
+
+TEST_P(GLES2DecoderManualInitTest, TexImage2DFloatOnGLES3) {
+ InitState init;
+ init.extensions = "GL_OES_texture_float GL_EXT_color_buffer_float";
+ init.gl_version = "opengl es 3.0";
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0);
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_LUMINANCE, 16, 17, 0, GL_LUMINANCE, GL_FLOAT, 0, 0);
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 16, 17, 0, GL_ALPHA, GL_FLOAT, 0, 0);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_LUMINANCE_ALPHA,
+ 16,
+ 17,
+ 0,
+ GL_LUMINANCE_ALPHA,
+ GL_FLOAT,
+ 0,
+ 0);
+}
+
+TEST_P(GLES2DecoderManualInitTest, TexSubImage2DFloatOnGLES3) {
+ InitState init;
+ init.extensions = "GL_OES_texture_float GL_EXT_color_buffer_float";
+ init.gl_version = "opengl es 3.0";
+ InitDecoder(init);
+ const int kWidth = 8;
+ const int kHeight = 4;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA32F,
+ kWidth,
+ kHeight,
+ 0,
+ GL_RGBA,
+ GL_FLOAT,
+ 0,
+ 0);
+ EXPECT_CALL(*gl_,
+ TexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA32F,
+ kWidth,
+ kHeight,
+ 0,
+ GL_RGBA,
+ GL_FLOAT,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ TexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 0,
+ 0,
+ kWidth,
+ kHeight,
+ GL_RGBA,
+ GL_FLOAT,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, TexSubImage2DFloatDoesClearOnGLES3) {
+ InitState init;
+ init.extensions = "GL_OES_texture_float GL_EXT_color_buffer_float";
+ init.gl_version = "opengl es 3.0";
+ InitDecoder(init);
+ const int kWidth = 8;
+ const int kHeight = 4;
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA32F,
+ kWidth,
+ kHeight,
+ 0,
+ GL_RGBA,
+ GL_FLOAT,
+ 0,
+ 0);
+ SetupClearTextureExpectations(kServiceTextureId,
+ kServiceTextureId,
+ GL_TEXTURE_2D,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA32F,
+ GL_RGBA,
+ GL_FLOAT,
+ kWidth,
+ kHeight);
+ EXPECT_CALL(*gl_,
+ TexSubImage2D(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 0,
+ kWidth - 1,
+ kHeight,
+ GL_RGBA,
+ GL_FLOAT,
+ shared_memory_address_))
+ .Times(1)
+ .RetiresOnSaturation();
+ TexSubImage2D cmd;
+ cmd.Init(GL_TEXTURE_2D,
+ 0,
+ 1,
+ 0,
+ kWidth - 1,
+ kHeight,
+ GL_RGBA,
+ GL_FLOAT,
+ kSharedMemoryId,
+ kSharedMemoryOffset,
+ GL_FALSE);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, TexImage2DFloatConvertsFormatDesktop) {
+ InitState init;
+ init.extensions = "GL_ARB_texture_float";
+ init.gl_version = "2.1";
+ InitDecoder(init);
+ DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
+ DoTexImage2D(
+ GL_TEXTURE_2D, 0, GL_RGBA32F, 16, 17, 0, GL_RGBA, GL_FLOAT, 0, 0);
+ DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, 16, 17, 0, GL_RGB, GL_FLOAT, 0, 0);
+ DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 16,
+ 17,
+ 0,
+ GL_RGBA,
+ GL_FLOAT,
+ 0,
+ 0,
+ GL_RGBA32F_ARB);
+ DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D,
+ 0,
+ GL_RGB,
+ 16,
+ 17,
+ 0,
+ GL_RGB,
+ GL_FLOAT,
+ 0,
+ 0,
+ GL_RGB32F_ARB);
+ DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D,
+ 0,
+ GL_LUMINANCE,
+ 16,
+ 17,
+ 0,
+ GL_LUMINANCE,
+ GL_FLOAT,
+ 0,
+ 0,
+ GL_LUMINANCE32F_ARB);
+ DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D,
+ 0,
+ GL_ALPHA,
+ 16,
+ 17,
+ 0,
+ GL_ALPHA,
+ GL_FLOAT,
+ 0,
+ 0,
+ GL_ALPHA32F_ARB);
+ DoTexImage2DConvertInternalFormat(GL_TEXTURE_2D,
+ 0,
+ GL_LUMINANCE_ALPHA,
+ 16,
+ 17,
+ 0,
+ GL_LUMINANCE_ALPHA,
+ GL_FLOAT,
+ 0,
+ 0,
+ GL_LUMINANCE_ALPHA32F_ARB);
+}
+
+class GLES2DecoderCompressedFormatsTest : public GLES2DecoderManualInitTest {
+ public:
+ GLES2DecoderCompressedFormatsTest() {}
+
+ static bool ValueInArray(GLint value, GLint* array, GLint count) {
+ for (GLint ii = 0; ii < count; ++ii) {
+ if (array[ii] == value) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void CheckFormats(const char* extension, const GLenum* formats, int count) {
+ InitState init;
+ init.extensions = extension;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ GetIntegerv cmd;
+ result->size = 0;
+ EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0).RetiresOnSaturation();
+ cmd.Init(GL_NUM_COMPRESSED_TEXTURE_FORMATS,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(1, result->GetNumResults());
+ GLint num_formats = result->GetData()[0];
+ EXPECT_EQ(count, num_formats);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ result->size = 0;
+ cmd.Init(GL_COMPRESSED_TEXTURE_FORMATS,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(num_formats, result->GetNumResults());
+
+ for (int i = 0; i < count; ++i) {
+ EXPECT_TRUE(
+ ValueInArray(formats[i], result->GetData(), result->GetNumResults()));
+ }
+
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+ }
+};
+
+INSTANTIATE_TEST_CASE_P(Service,
+ GLES2DecoderCompressedFormatsTest,
+ ::testing::Bool());
+
+TEST_P(GLES2DecoderCompressedFormatsTest, GetCompressedTextureFormatsS3TC) {
+ const GLenum formats[] = {
+ GL_COMPRESSED_RGB_S3TC_DXT1_EXT, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
+ GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT};
+ CheckFormats("GL_EXT_texture_compression_s3tc", formats, 4);
+}
+
+TEST_P(GLES2DecoderCompressedFormatsTest, GetCompressedTextureFormatsATC) {
+ const GLenum formats[] = {GL_ATC_RGB_AMD, GL_ATC_RGBA_EXPLICIT_ALPHA_AMD,
+ GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD};
+ CheckFormats("GL_AMD_compressed_ATC_texture", formats, 3);
+}
+
+TEST_P(GLES2DecoderCompressedFormatsTest, GetCompressedTextureFormatsPVRTC) {
+ const GLenum formats[] = {
+ GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG,
+ GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG};
+ CheckFormats("GL_IMG_texture_compression_pvrtc", formats, 4);
+}
+
+TEST_P(GLES2DecoderCompressedFormatsTest, GetCompressedTextureFormatsETC1) {
+ const GLenum formats[] = {GL_ETC1_RGB8_OES};
+ CheckFormats("GL_OES_compressed_ETC1_RGB8_texture", formats, 1);
+}
+
+TEST_P(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) {
+ InitState init;
+ init.gl_version = "3.0";
+ init.bind_generates_resource = true;
+ InitDecoder(init);
+
+ EXPECT_CALL(*gl_, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+
+ typedef GetIntegerv::Result Result;
+ Result* result = static_cast<Result*>(shared_memory_address_);
+ GetIntegerv cmd;
+ result->size = 0;
+ EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0).RetiresOnSaturation();
+ cmd.Init(GL_NUM_COMPRESSED_TEXTURE_FORMATS,
+ shared_memory_id_,
+ shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(1, result->GetNumResults());
+ GLint num_formats = result->GetData()[0];
+ EXPECT_EQ(0, num_formats);
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+
+ result->size = 0;
+ cmd.Init(
+ GL_COMPRESSED_TEXTURE_FORMATS, shared_memory_id_, shared_memory_offset_);
+ EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+ EXPECT_EQ(num_formats, result->GetNumResults());
+
+ EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+// TODO(gman): Complete this test.
+// TEST_P(GLES2DecoderTest, CompressedTexImage2DGLError) {
+// }
+
+// TODO(gman): CompressedTexImage2D
+
+// TODO(gman): CompressedTexImage2DImmediate
+
+// TODO(gman): CompressedTexSubImage2DImmediate
+
+// TODO(gman): TexImage2D
+
+// TODO(gman): TexImage2DImmediate
+
+// TODO(gman): TexSubImage2DImmediate
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_validation_autogen.h b/chromium/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
index 7e417882471..cbdf48f79ae 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
@@ -1,9 +1,11 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_AUTOGEN_H_
@@ -23,7 +25,6 @@ ValueValidator<GLenum> dst_blend_factor;
ValueValidator<GLenum> equation;
ValueValidator<GLenum> face_mode;
ValueValidator<GLenum> face_type;
-ValueValidator<GLboolean> false_only;
ValueValidator<GLenum> frame_buffer_parameter;
ValueValidator<GLenum> frame_buffer_target;
ValueValidator<GLenum> g_l_state;
@@ -53,7 +54,6 @@ ValueValidator<GLenum> src_blend_factor;
ValueValidator<GLenum> stencil_op;
ValueValidator<GLenum> string_type;
ValueValidator<GLenum> texture_bind_target;
-ValueValidator<GLint> texture_border;
ValueValidator<GLenum> texture_format;
ValueValidator<GLenum> texture_internal_format;
ValueValidator<GLenum> texture_internal_format_storage;
@@ -68,7 +68,5 @@ ValueValidator<GLint> vertex_attrib_size;
ValueValidator<GLenum> vertex_attrib_type;
ValueValidator<GLenum> vertex_attribute;
ValueValidator<GLenum> vertex_pointer;
-ValueValidator<GLint> zero_only;
#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_AUTOGEN_H_
-
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/chromium/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
index 8975d202a6b..e344c30f875 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
@@ -1,675 +1,480 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file is auto-generated from
// gpu/command_buffer/build_gles2_cmd_buffer.py
+// It's formatted by clang-format using chromium coding style:
+// clang-format -i -style=chromium filename
// DO NOT EDIT!
-#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_ // NOLINT
-#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_ // NOLINT
+#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
+#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
static const GLenum valid_attachment_table[] = {
- GL_COLOR_ATTACHMENT0,
- GL_DEPTH_ATTACHMENT,
- GL_STENCIL_ATTACHMENT,
+ GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT,
};
static const GLenum valid_backbuffer_attachment_table[] = {
- GL_COLOR_EXT,
- GL_DEPTH_EXT,
- GL_STENCIL_EXT,
+ GL_COLOR_EXT, GL_DEPTH_EXT, GL_STENCIL_EXT,
};
static const GLenum valid_blit_filter_table[] = {
- GL_NEAREST,
- GL_LINEAR,
+ GL_NEAREST, GL_LINEAR,
};
static const GLenum valid_buffer_parameter_table[] = {
- GL_BUFFER_SIZE,
- GL_BUFFER_USAGE,
+ GL_BUFFER_SIZE, GL_BUFFER_USAGE,
};
static const GLenum valid_buffer_target_table[] = {
- GL_ARRAY_BUFFER,
- GL_ELEMENT_ARRAY_BUFFER,
+ GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER,
};
static const GLenum valid_buffer_usage_table[] = {
- GL_STREAM_DRAW,
- GL_STATIC_DRAW,
- GL_DYNAMIC_DRAW,
+ GL_STREAM_DRAW, GL_STATIC_DRAW, GL_DYNAMIC_DRAW,
};
static const GLenum valid_capability_table[] = {
- GL_BLEND,
- GL_CULL_FACE,
- GL_DEPTH_TEST,
- GL_DITHER,
- GL_POLYGON_OFFSET_FILL,
- GL_SAMPLE_ALPHA_TO_COVERAGE,
- GL_SAMPLE_COVERAGE,
- GL_SCISSOR_TEST,
- GL_STENCIL_TEST,
+ GL_BLEND, GL_CULL_FACE, GL_DEPTH_TEST,
+ GL_DITHER, GL_POLYGON_OFFSET_FILL, GL_SAMPLE_ALPHA_TO_COVERAGE,
+ GL_SAMPLE_COVERAGE, GL_SCISSOR_TEST, GL_STENCIL_TEST,
};
static const GLenum valid_cmp_function_table[] = {
- GL_NEVER,
- GL_LESS,
- GL_EQUAL,
- GL_LEQUAL,
- GL_GREATER,
- GL_NOTEQUAL,
- GL_GEQUAL,
- GL_ALWAYS,
+ GL_NEVER, GL_LESS, GL_EQUAL, GL_LEQUAL,
+ GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, GL_ALWAYS,
};
static const GLenum valid_draw_mode_table[] = {
- GL_POINTS,
- GL_LINE_STRIP,
- GL_LINE_LOOP,
- GL_LINES,
- GL_TRIANGLE_STRIP,
- GL_TRIANGLE_FAN,
- GL_TRIANGLES,
+ GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES,
+ GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES,
};
static const GLenum valid_dst_blend_factor_table[] = {
- GL_ZERO,
- GL_ONE,
- GL_SRC_COLOR,
- GL_ONE_MINUS_SRC_COLOR,
- GL_DST_COLOR,
- GL_ONE_MINUS_DST_COLOR,
- GL_SRC_ALPHA,
- GL_ONE_MINUS_SRC_ALPHA,
- GL_DST_ALPHA,
- GL_ONE_MINUS_DST_ALPHA,
- GL_CONSTANT_COLOR,
- GL_ONE_MINUS_CONSTANT_COLOR,
- GL_CONSTANT_ALPHA,
- GL_ONE_MINUS_CONSTANT_ALPHA,
+ GL_ZERO, GL_ONE,
+ GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR,
+ GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
+ GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
+ GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA,
+ GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR,
+ GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA,
};
static const GLenum valid_equation_table[] = {
- GL_FUNC_ADD,
- GL_FUNC_SUBTRACT,
- GL_FUNC_REVERSE_SUBTRACT,
+ GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT,
};
static const GLenum valid_face_mode_table[] = {
- GL_CW,
- GL_CCW,
+ GL_CW, GL_CCW,
};
static const GLenum valid_face_type_table[] = {
- GL_FRONT,
- GL_BACK,
- GL_FRONT_AND_BACK,
-};
-
-static const GLboolean valid_false_only_table[] = {
- false,
+ GL_FRONT, GL_BACK, GL_FRONT_AND_BACK,
};
static const GLenum valid_frame_buffer_parameter_table[] = {
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
- GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
- GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,
- GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
+ GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME,
+ GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL,
+ GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE,
};
static const GLenum valid_frame_buffer_target_table[] = {
- GL_FRAMEBUFFER,
+ GL_FRAMEBUFFER,
};
static const GLenum valid_g_l_state_table[] = {
- GL_ACTIVE_TEXTURE,
- GL_ALIASED_LINE_WIDTH_RANGE,
- GL_ALIASED_POINT_SIZE_RANGE,
- GL_ALPHA_BITS,
- GL_ARRAY_BUFFER_BINDING,
- GL_BLUE_BITS,
- GL_COMPRESSED_TEXTURE_FORMATS,
- GL_CURRENT_PROGRAM,
- GL_DEPTH_BITS,
- GL_DEPTH_RANGE,
- GL_ELEMENT_ARRAY_BUFFER_BINDING,
- GL_FRAMEBUFFER_BINDING,
- GL_GENERATE_MIPMAP_HINT,
- GL_GREEN_BITS,
- GL_IMPLEMENTATION_COLOR_READ_FORMAT,
- GL_IMPLEMENTATION_COLOR_READ_TYPE,
- GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,
- GL_MAX_CUBE_MAP_TEXTURE_SIZE,
- GL_MAX_FRAGMENT_UNIFORM_VECTORS,
- GL_MAX_RENDERBUFFER_SIZE,
- GL_MAX_TEXTURE_IMAGE_UNITS,
- GL_MAX_TEXTURE_SIZE,
- GL_MAX_VARYING_VECTORS,
- GL_MAX_VERTEX_ATTRIBS,
- GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,
- GL_MAX_VERTEX_UNIFORM_VECTORS,
- GL_MAX_VIEWPORT_DIMS,
- GL_NUM_COMPRESSED_TEXTURE_FORMATS,
- GL_NUM_SHADER_BINARY_FORMATS,
- GL_PACK_ALIGNMENT,
- GL_RED_BITS,
- GL_RENDERBUFFER_BINDING,
- GL_SAMPLE_BUFFERS,
- GL_SAMPLE_COVERAGE_INVERT,
- GL_SAMPLE_COVERAGE_VALUE,
- GL_SAMPLES,
- GL_SCISSOR_BOX,
- GL_SHADER_BINARY_FORMATS,
- GL_SHADER_COMPILER,
- GL_SUBPIXEL_BITS,
- GL_STENCIL_BITS,
- GL_TEXTURE_BINDING_2D,
- GL_TEXTURE_BINDING_CUBE_MAP,
- GL_UNPACK_ALIGNMENT,
- GL_UNPACK_FLIP_Y_CHROMIUM,
- GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM,
- GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
- GL_VERTEX_ARRAY_BINDING_OES,
- GL_VIEWPORT,
- GL_BLEND_COLOR,
- GL_BLEND_EQUATION_RGB,
- GL_BLEND_EQUATION_ALPHA,
- GL_BLEND_SRC_RGB,
- GL_BLEND_DST_RGB,
- GL_BLEND_SRC_ALPHA,
- GL_BLEND_DST_ALPHA,
- GL_COLOR_CLEAR_VALUE,
- GL_DEPTH_CLEAR_VALUE,
- GL_STENCIL_CLEAR_VALUE,
- GL_COLOR_WRITEMASK,
- GL_CULL_FACE_MODE,
- GL_DEPTH_FUNC,
- GL_DEPTH_WRITEMASK,
- GL_DEPTH_RANGE,
- GL_FRONT_FACE,
- GL_GENERATE_MIPMAP_HINT,
- GL_LINE_WIDTH,
- GL_PACK_ALIGNMENT,
- GL_UNPACK_ALIGNMENT,
- GL_POLYGON_OFFSET_FACTOR,
- GL_POLYGON_OFFSET_UNITS,
- GL_SAMPLE_COVERAGE_VALUE,
- GL_SAMPLE_COVERAGE_INVERT,
- GL_SCISSOR_BOX,
- GL_STENCIL_FUNC,
- GL_STENCIL_REF,
- GL_STENCIL_VALUE_MASK,
- GL_STENCIL_BACK_FUNC,
- GL_STENCIL_BACK_REF,
- GL_STENCIL_BACK_VALUE_MASK,
- GL_STENCIL_WRITEMASK,
- GL_STENCIL_BACK_WRITEMASK,
- GL_STENCIL_FAIL,
- GL_STENCIL_PASS_DEPTH_FAIL,
- GL_STENCIL_PASS_DEPTH_PASS,
- GL_STENCIL_BACK_FAIL,
- GL_STENCIL_BACK_PASS_DEPTH_FAIL,
- GL_STENCIL_BACK_PASS_DEPTH_PASS,
- GL_VIEWPORT,
- GL_BLEND,
- GL_CULL_FACE,
- GL_DEPTH_TEST,
- GL_DITHER,
- GL_POLYGON_OFFSET_FILL,
- GL_SAMPLE_ALPHA_TO_COVERAGE,
- GL_SAMPLE_COVERAGE,
- GL_SCISSOR_TEST,
- GL_STENCIL_TEST,
+ GL_ACTIVE_TEXTURE,
+ GL_ALIASED_LINE_WIDTH_RANGE,
+ GL_ALIASED_POINT_SIZE_RANGE,
+ GL_ALPHA_BITS,
+ GL_ARRAY_BUFFER_BINDING,
+ GL_BLUE_BITS,
+ GL_COMPRESSED_TEXTURE_FORMATS,
+ GL_CURRENT_PROGRAM,
+ GL_DEPTH_BITS,
+ GL_DEPTH_RANGE,
+ GL_ELEMENT_ARRAY_BUFFER_BINDING,
+ GL_FRAMEBUFFER_BINDING,
+ GL_GENERATE_MIPMAP_HINT,
+ GL_GREEN_BITS,
+ GL_IMPLEMENTATION_COLOR_READ_FORMAT,
+ GL_IMPLEMENTATION_COLOR_READ_TYPE,
+ GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,
+ GL_MAX_CUBE_MAP_TEXTURE_SIZE,
+ GL_MAX_FRAGMENT_UNIFORM_VECTORS,
+ GL_MAX_RENDERBUFFER_SIZE,
+ GL_MAX_TEXTURE_IMAGE_UNITS,
+ GL_MAX_TEXTURE_SIZE,
+ GL_MAX_VARYING_VECTORS,
+ GL_MAX_VERTEX_ATTRIBS,
+ GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS,
+ GL_MAX_VERTEX_UNIFORM_VECTORS,
+ GL_MAX_VIEWPORT_DIMS,
+ GL_NUM_COMPRESSED_TEXTURE_FORMATS,
+ GL_NUM_SHADER_BINARY_FORMATS,
+ GL_PACK_ALIGNMENT,
+ GL_RED_BITS,
+ GL_RENDERBUFFER_BINDING,
+ GL_SAMPLE_BUFFERS,
+ GL_SAMPLE_COVERAGE_INVERT,
+ GL_SAMPLE_COVERAGE_VALUE,
+ GL_SAMPLES,
+ GL_SCISSOR_BOX,
+ GL_SHADER_BINARY_FORMATS,
+ GL_SHADER_COMPILER,
+ GL_SUBPIXEL_BITS,
+ GL_STENCIL_BITS,
+ GL_TEXTURE_BINDING_2D,
+ GL_TEXTURE_BINDING_CUBE_MAP,
+ GL_UNPACK_ALIGNMENT,
+ GL_UNPACK_FLIP_Y_CHROMIUM,
+ GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM,
+ GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
+ GL_BIND_GENERATES_RESOURCE_CHROMIUM,
+ GL_VERTEX_ARRAY_BINDING_OES,
+ GL_VIEWPORT,
+ GL_BLEND_COLOR,
+ GL_BLEND_EQUATION_RGB,
+ GL_BLEND_EQUATION_ALPHA,
+ GL_BLEND_SRC_RGB,
+ GL_BLEND_DST_RGB,
+ GL_BLEND_SRC_ALPHA,
+ GL_BLEND_DST_ALPHA,
+ GL_COLOR_CLEAR_VALUE,
+ GL_DEPTH_CLEAR_VALUE,
+ GL_STENCIL_CLEAR_VALUE,
+ GL_COLOR_WRITEMASK,
+ GL_CULL_FACE_MODE,
+ GL_DEPTH_FUNC,
+ GL_DEPTH_WRITEMASK,
+ GL_FRONT_FACE,
+ GL_LINE_WIDTH,
+ GL_POLYGON_OFFSET_FACTOR,
+ GL_POLYGON_OFFSET_UNITS,
+ GL_STENCIL_FUNC,
+ GL_STENCIL_REF,
+ GL_STENCIL_VALUE_MASK,
+ GL_STENCIL_BACK_FUNC,
+ GL_STENCIL_BACK_REF,
+ GL_STENCIL_BACK_VALUE_MASK,
+ GL_STENCIL_WRITEMASK,
+ GL_STENCIL_BACK_WRITEMASK,
+ GL_STENCIL_FAIL,
+ GL_STENCIL_PASS_DEPTH_FAIL,
+ GL_STENCIL_PASS_DEPTH_PASS,
+ GL_STENCIL_BACK_FAIL,
+ GL_STENCIL_BACK_PASS_DEPTH_FAIL,
+ GL_STENCIL_BACK_PASS_DEPTH_PASS,
+ GL_BLEND,
+ GL_CULL_FACE,
+ GL_DEPTH_TEST,
+ GL_DITHER,
+ GL_POLYGON_OFFSET_FILL,
+ GL_SAMPLE_ALPHA_TO_COVERAGE,
+ GL_SAMPLE_COVERAGE,
+ GL_SCISSOR_TEST,
+ GL_STENCIL_TEST,
};
static const GLenum valid_get_max_index_type_table[] = {
- GL_UNSIGNED_BYTE,
- GL_UNSIGNED_SHORT,
- GL_UNSIGNED_INT,
+ GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, GL_UNSIGNED_INT,
};
static const GLenum valid_get_tex_param_target_table[] = {
- GL_TEXTURE_2D,
- GL_TEXTURE_CUBE_MAP,
+ GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP,
};
static const GLenum valid_hint_mode_table[] = {
- GL_FASTEST,
- GL_NICEST,
- GL_DONT_CARE,
+ GL_FASTEST, GL_NICEST, GL_DONT_CARE,
};
static const GLenum valid_hint_target_table[] = {
- GL_GENERATE_MIPMAP_HINT,
+ GL_GENERATE_MIPMAP_HINT,
};
static const GLenum valid_index_type_table[] = {
- GL_UNSIGNED_BYTE,
- GL_UNSIGNED_SHORT,
+ GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT,
};
static const GLenum valid_pixel_store_table[] = {
- GL_PACK_ALIGNMENT,
- GL_UNPACK_ALIGNMENT,
- GL_UNPACK_FLIP_Y_CHROMIUM,
- GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM,
- GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
+ GL_PACK_ALIGNMENT,
+ GL_UNPACK_ALIGNMENT,
+ GL_UNPACK_FLIP_Y_CHROMIUM,
+ GL_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM,
+ GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
};
static const GLint valid_pixel_store_alignment_table[] = {
- 1,
- 2,
- 4,
- 8,
+ 1, 2, 4, 8,
};
static const GLenum valid_pixel_type_table[] = {
- GL_UNSIGNED_BYTE,
- GL_UNSIGNED_SHORT_5_6_5,
- GL_UNSIGNED_SHORT_4_4_4_4,
- GL_UNSIGNED_SHORT_5_5_5_1,
+ GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_4_4_4_4,
+ GL_UNSIGNED_SHORT_5_5_5_1,
};
static const GLenum valid_program_parameter_table[] = {
- GL_DELETE_STATUS,
- GL_LINK_STATUS,
- GL_VALIDATE_STATUS,
- GL_INFO_LOG_LENGTH,
- GL_ATTACHED_SHADERS,
- GL_ACTIVE_ATTRIBUTES,
- GL_ACTIVE_ATTRIBUTE_MAX_LENGTH,
- GL_ACTIVE_UNIFORMS,
- GL_ACTIVE_UNIFORM_MAX_LENGTH,
+ GL_DELETE_STATUS, GL_LINK_STATUS,
+ GL_VALIDATE_STATUS, GL_INFO_LOG_LENGTH,
+ GL_ATTACHED_SHADERS, GL_ACTIVE_ATTRIBUTES,
+ GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, GL_ACTIVE_UNIFORMS,
+ GL_ACTIVE_UNIFORM_MAX_LENGTH,
};
static const GLenum valid_query_object_parameter_table[] = {
- GL_QUERY_RESULT_EXT,
- GL_QUERY_RESULT_AVAILABLE_EXT,
+ GL_QUERY_RESULT_EXT, GL_QUERY_RESULT_AVAILABLE_EXT,
};
static const GLenum valid_query_parameter_table[] = {
- GL_CURRENT_QUERY_EXT,
+ GL_CURRENT_QUERY_EXT,
};
static const GLenum valid_query_target_table[] = {
- GL_ANY_SAMPLES_PASSED_EXT,
- GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT,
- GL_COMMANDS_ISSUED_CHROMIUM,
- GL_LATENCY_QUERY_CHROMIUM,
- GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
- GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM,
+ GL_ANY_SAMPLES_PASSED_EXT,
+ GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT,
+ GL_COMMANDS_ISSUED_CHROMIUM,
+ GL_LATENCY_QUERY_CHROMIUM,
+ GL_ASYNC_PIXEL_UNPACK_COMPLETED_CHROMIUM,
+ GL_ASYNC_PIXEL_PACK_COMPLETED_CHROMIUM,
+ GL_COMMANDS_COMPLETED_CHROMIUM,
};
static const GLenum valid_read_pixel_format_table[] = {
- GL_ALPHA,
- GL_RGB,
- GL_RGBA,
+ GL_ALPHA, GL_RGB, GL_RGBA,
};
static const GLenum valid_read_pixel_type_table[] = {
- GL_UNSIGNED_BYTE,
- GL_UNSIGNED_SHORT_5_6_5,
- GL_UNSIGNED_SHORT_4_4_4_4,
- GL_UNSIGNED_SHORT_5_5_5_1,
+ GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_4_4_4_4,
+ GL_UNSIGNED_SHORT_5_5_5_1,
};
static const GLenum valid_render_buffer_format_table[] = {
- GL_RGBA4,
- GL_RGB565,
- GL_RGB5_A1,
- GL_DEPTH_COMPONENT16,
- GL_STENCIL_INDEX8,
+ GL_RGBA4, GL_RGB565, GL_RGB5_A1, GL_DEPTH_COMPONENT16, GL_STENCIL_INDEX8,
};
static const GLenum valid_render_buffer_parameter_table[] = {
- GL_RENDERBUFFER_RED_SIZE,
- GL_RENDERBUFFER_GREEN_SIZE,
- GL_RENDERBUFFER_BLUE_SIZE,
- GL_RENDERBUFFER_ALPHA_SIZE,
- GL_RENDERBUFFER_DEPTH_SIZE,
- GL_RENDERBUFFER_STENCIL_SIZE,
- GL_RENDERBUFFER_WIDTH,
- GL_RENDERBUFFER_HEIGHT,
- GL_RENDERBUFFER_INTERNAL_FORMAT,
+ GL_RENDERBUFFER_RED_SIZE, GL_RENDERBUFFER_GREEN_SIZE,
+ GL_RENDERBUFFER_BLUE_SIZE, GL_RENDERBUFFER_ALPHA_SIZE,
+ GL_RENDERBUFFER_DEPTH_SIZE, GL_RENDERBUFFER_STENCIL_SIZE,
+ GL_RENDERBUFFER_WIDTH, GL_RENDERBUFFER_HEIGHT,
+ GL_RENDERBUFFER_INTERNAL_FORMAT,
};
static const GLenum valid_render_buffer_target_table[] = {
- GL_RENDERBUFFER,
+ GL_RENDERBUFFER,
};
static const GLenum valid_reset_status_table[] = {
- GL_GUILTY_CONTEXT_RESET_ARB,
- GL_INNOCENT_CONTEXT_RESET_ARB,
- GL_UNKNOWN_CONTEXT_RESET_ARB,
+ GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB,
+ GL_UNKNOWN_CONTEXT_RESET_ARB,
};
static const GLenum valid_shader_parameter_table[] = {
- GL_SHADER_TYPE,
- GL_DELETE_STATUS,
- GL_COMPILE_STATUS,
- GL_INFO_LOG_LENGTH,
- GL_SHADER_SOURCE_LENGTH,
- GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
+ GL_SHADER_TYPE, GL_DELETE_STATUS,
+ GL_COMPILE_STATUS, GL_INFO_LOG_LENGTH,
+ GL_SHADER_SOURCE_LENGTH, GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
};
static const GLenum valid_shader_precision_table[] = {
- GL_LOW_FLOAT,
- GL_MEDIUM_FLOAT,
- GL_HIGH_FLOAT,
- GL_LOW_INT,
- GL_MEDIUM_INT,
- GL_HIGH_INT,
+ GL_LOW_FLOAT, GL_MEDIUM_FLOAT, GL_HIGH_FLOAT,
+ GL_LOW_INT, GL_MEDIUM_INT, GL_HIGH_INT,
};
static const GLenum valid_shader_type_table[] = {
- GL_VERTEX_SHADER,
- GL_FRAGMENT_SHADER,
+ GL_VERTEX_SHADER, GL_FRAGMENT_SHADER,
};
static const GLenum valid_src_blend_factor_table[] = {
- GL_ZERO,
- GL_ONE,
- GL_SRC_COLOR,
- GL_ONE_MINUS_SRC_COLOR,
- GL_DST_COLOR,
- GL_ONE_MINUS_DST_COLOR,
- GL_SRC_ALPHA,
- GL_ONE_MINUS_SRC_ALPHA,
- GL_DST_ALPHA,
- GL_ONE_MINUS_DST_ALPHA,
- GL_CONSTANT_COLOR,
- GL_ONE_MINUS_CONSTANT_COLOR,
- GL_CONSTANT_ALPHA,
- GL_ONE_MINUS_CONSTANT_ALPHA,
- GL_SRC_ALPHA_SATURATE,
+ GL_ZERO, GL_ONE,
+ GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR,
+ GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR,
+ GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
+ GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA,
+ GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR,
+ GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA,
+ GL_SRC_ALPHA_SATURATE,
};
static const GLenum valid_stencil_op_table[] = {
- GL_KEEP,
- GL_ZERO,
- GL_REPLACE,
- GL_INCR,
- GL_INCR_WRAP,
- GL_DECR,
- GL_DECR_WRAP,
- GL_INVERT,
+ GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR,
+ GL_INCR_WRAP, GL_DECR, GL_DECR_WRAP, GL_INVERT,
};
static const GLenum valid_string_type_table[] = {
- GL_VENDOR,
- GL_RENDERER,
- GL_VERSION,
- GL_SHADING_LANGUAGE_VERSION,
- GL_EXTENSIONS,
+ GL_VENDOR, GL_RENDERER, GL_VERSION,
+ GL_SHADING_LANGUAGE_VERSION, GL_EXTENSIONS,
};
static const GLenum valid_texture_bind_target_table[] = {
- GL_TEXTURE_2D,
- GL_TEXTURE_CUBE_MAP,
-};
-
-static const GLint valid_texture_border_table[] = {
- 0,
+ GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP,
};
static const GLenum valid_texture_format_table[] = {
- GL_ALPHA,
- GL_LUMINANCE,
- GL_LUMINANCE_ALPHA,
- GL_RGB,
- GL_RGBA,
+ GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA,
};
static const GLenum valid_texture_internal_format_table[] = {
- GL_ALPHA,
- GL_LUMINANCE,
- GL_LUMINANCE_ALPHA,
- GL_RGB,
- GL_RGBA,
+ GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA,
};
static const GLenum valid_texture_internal_format_storage_table[] = {
- GL_RGB565,
- GL_RGBA4,
- GL_RGB5_A1,
- GL_ALPHA8_EXT,
- GL_LUMINANCE8_EXT,
- GL_LUMINANCE8_ALPHA8_EXT,
- GL_RGB8_OES,
- GL_RGBA8_OES,
+ GL_RGB565, GL_RGBA4, GL_RGB5_A1, GL_ALPHA8_EXT,
+ GL_LUMINANCE8_EXT, GL_LUMINANCE8_ALPHA8_EXT, GL_RGB8_OES, GL_RGBA8_OES,
};
static const GLenum valid_texture_mag_filter_mode_table[] = {
- GL_NEAREST,
- GL_LINEAR,
+ GL_NEAREST, GL_LINEAR,
};
static const GLenum valid_texture_min_filter_mode_table[] = {
- GL_NEAREST,
- GL_LINEAR,
- GL_NEAREST_MIPMAP_NEAREST,
- GL_LINEAR_MIPMAP_NEAREST,
- GL_NEAREST_MIPMAP_LINEAR,
- GL_LINEAR_MIPMAP_LINEAR,
+ GL_NEAREST, GL_LINEAR,
+ GL_NEAREST_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_NEAREST,
+ GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_LINEAR,
};
static const GLenum valid_texture_parameter_table[] = {
- GL_TEXTURE_MAG_FILTER,
- GL_TEXTURE_MIN_FILTER,
- GL_TEXTURE_POOL_CHROMIUM,
- GL_TEXTURE_WRAP_S,
- GL_TEXTURE_WRAP_T,
+ GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_POOL_CHROMIUM,
+ GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T,
};
static const GLenum valid_texture_pool_table[] = {
- GL_TEXTURE_POOL_MANAGED_CHROMIUM,
- GL_TEXTURE_POOL_UNMANAGED_CHROMIUM,
+ GL_TEXTURE_POOL_MANAGED_CHROMIUM, GL_TEXTURE_POOL_UNMANAGED_CHROMIUM,
};
static const GLenum valid_texture_target_table[] = {
- GL_TEXTURE_2D,
- GL_TEXTURE_CUBE_MAP_POSITIVE_X,
- GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
- GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
- GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
- GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
- GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
+ GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_POSITIVE_X,
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
+ GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
};
static const GLenum valid_texture_usage_table[] = {
- GL_NONE,
- GL_FRAMEBUFFER_ATTACHMENT_ANGLE,
+ GL_NONE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE,
};
static const GLenum valid_texture_wrap_mode_table[] = {
- GL_CLAMP_TO_EDGE,
- GL_MIRRORED_REPEAT,
- GL_REPEAT,
+ GL_CLAMP_TO_EDGE, GL_MIRRORED_REPEAT, GL_REPEAT,
};
static const GLint valid_vertex_attrib_size_table[] = {
- 1,
- 2,
- 3,
- 4,
+ 1, 2, 3, 4,
};
static const GLenum valid_vertex_attrib_type_table[] = {
- GL_BYTE,
- GL_UNSIGNED_BYTE,
- GL_SHORT,
- GL_UNSIGNED_SHORT,
- GL_FLOAT,
+ GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_FLOAT,
};
static const GLenum valid_vertex_attribute_table[] = {
- GL_VERTEX_ATTRIB_ARRAY_NORMALIZED,
- GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
- GL_VERTEX_ATTRIB_ARRAY_ENABLED,
- GL_VERTEX_ATTRIB_ARRAY_SIZE,
- GL_VERTEX_ATTRIB_ARRAY_STRIDE,
- GL_VERTEX_ATTRIB_ARRAY_TYPE,
- GL_CURRENT_VERTEX_ATTRIB,
+ GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING,
+ GL_VERTEX_ATTRIB_ARRAY_ENABLED, GL_VERTEX_ATTRIB_ARRAY_SIZE,
+ GL_VERTEX_ATTRIB_ARRAY_STRIDE, GL_VERTEX_ATTRIB_ARRAY_TYPE,
+ GL_CURRENT_VERTEX_ATTRIB,
};
static const GLenum valid_vertex_pointer_table[] = {
- GL_VERTEX_ATTRIB_ARRAY_POINTER,
-};
-
-static const GLint valid_zero_only_table[] = {
- 0,
+ GL_VERTEX_ATTRIB_ARRAY_POINTER,
};
Validators::Validators()
- : attachment(
- valid_attachment_table, arraysize(valid_attachment_table)),
- backbuffer_attachment(
- valid_backbuffer_attachment_table, arraysize(
- valid_backbuffer_attachment_table)),
- blit_filter(
- valid_blit_filter_table, arraysize(valid_blit_filter_table)),
- buffer_parameter(
- valid_buffer_parameter_table, arraysize(
- valid_buffer_parameter_table)),
- buffer_target(
- valid_buffer_target_table, arraysize(valid_buffer_target_table)),
- buffer_usage(
- valid_buffer_usage_table, arraysize(valid_buffer_usage_table)),
- capability(
- valid_capability_table, arraysize(valid_capability_table)),
- cmp_function(
- valid_cmp_function_table, arraysize(valid_cmp_function_table)),
+ : attachment(valid_attachment_table, arraysize(valid_attachment_table)),
+ backbuffer_attachment(valid_backbuffer_attachment_table,
+ arraysize(valid_backbuffer_attachment_table)),
+ blit_filter(valid_blit_filter_table, arraysize(valid_blit_filter_table)),
+ buffer_parameter(valid_buffer_parameter_table,
+ arraysize(valid_buffer_parameter_table)),
+ buffer_target(valid_buffer_target_table,
+ arraysize(valid_buffer_target_table)),
+ buffer_usage(valid_buffer_usage_table,
+ arraysize(valid_buffer_usage_table)),
+ capability(valid_capability_table, arraysize(valid_capability_table)),
+ cmp_function(valid_cmp_function_table,
+ arraysize(valid_cmp_function_table)),
compressed_texture_format(),
- draw_mode(
- valid_draw_mode_table, arraysize(valid_draw_mode_table)),
- dst_blend_factor(
- valid_dst_blend_factor_table, arraysize(
- valid_dst_blend_factor_table)),
- equation(
- valid_equation_table, arraysize(valid_equation_table)),
- face_mode(
- valid_face_mode_table, arraysize(valid_face_mode_table)),
- face_type(
- valid_face_type_table, arraysize(valid_face_type_table)),
- false_only(
- valid_false_only_table, arraysize(valid_false_only_table)),
- frame_buffer_parameter(
- valid_frame_buffer_parameter_table, arraysize(
- valid_frame_buffer_parameter_table)),
- frame_buffer_target(
- valid_frame_buffer_target_table, arraysize(
- valid_frame_buffer_target_table)),
- g_l_state(
- valid_g_l_state_table, arraysize(valid_g_l_state_table)),
- get_max_index_type(
- valid_get_max_index_type_table, arraysize(
- valid_get_max_index_type_table)),
- get_tex_param_target(
- valid_get_tex_param_target_table, arraysize(
- valid_get_tex_param_target_table)),
- hint_mode(
- valid_hint_mode_table, arraysize(valid_hint_mode_table)),
- hint_target(
- valid_hint_target_table, arraysize(valid_hint_target_table)),
- index_type(
- valid_index_type_table, arraysize(valid_index_type_table)),
- pixel_store(
- valid_pixel_store_table, arraysize(valid_pixel_store_table)),
- pixel_store_alignment(
- valid_pixel_store_alignment_table, arraysize(
- valid_pixel_store_alignment_table)),
- pixel_type(
- valid_pixel_type_table, arraysize(valid_pixel_type_table)),
- program_parameter(
- valid_program_parameter_table, arraysize(
- valid_program_parameter_table)),
- query_object_parameter(
- valid_query_object_parameter_table, arraysize(
- valid_query_object_parameter_table)),
- query_parameter(
- valid_query_parameter_table, arraysize(valid_query_parameter_table)),
- query_target(
- valid_query_target_table, arraysize(valid_query_target_table)),
- read_pixel_format(
- valid_read_pixel_format_table, arraysize(
- valid_read_pixel_format_table)),
- read_pixel_type(
- valid_read_pixel_type_table, arraysize(valid_read_pixel_type_table)),
- render_buffer_format(
- valid_render_buffer_format_table, arraysize(
- valid_render_buffer_format_table)),
- render_buffer_parameter(
- valid_render_buffer_parameter_table, arraysize(
- valid_render_buffer_parameter_table)),
- render_buffer_target(
- valid_render_buffer_target_table, arraysize(
- valid_render_buffer_target_table)),
- reset_status(
- valid_reset_status_table, arraysize(valid_reset_status_table)),
+ draw_mode(valid_draw_mode_table, arraysize(valid_draw_mode_table)),
+ dst_blend_factor(valid_dst_blend_factor_table,
+ arraysize(valid_dst_blend_factor_table)),
+ equation(valid_equation_table, arraysize(valid_equation_table)),
+ face_mode(valid_face_mode_table, arraysize(valid_face_mode_table)),
+ face_type(valid_face_type_table, arraysize(valid_face_type_table)),
+ frame_buffer_parameter(valid_frame_buffer_parameter_table,
+ arraysize(valid_frame_buffer_parameter_table)),
+ frame_buffer_target(valid_frame_buffer_target_table,
+ arraysize(valid_frame_buffer_target_table)),
+ g_l_state(valid_g_l_state_table, arraysize(valid_g_l_state_table)),
+ get_max_index_type(valid_get_max_index_type_table,
+ arraysize(valid_get_max_index_type_table)),
+ get_tex_param_target(valid_get_tex_param_target_table,
+ arraysize(valid_get_tex_param_target_table)),
+ hint_mode(valid_hint_mode_table, arraysize(valid_hint_mode_table)),
+ hint_target(valid_hint_target_table, arraysize(valid_hint_target_table)),
+ index_type(valid_index_type_table, arraysize(valid_index_type_table)),
+ pixel_store(valid_pixel_store_table, arraysize(valid_pixel_store_table)),
+ pixel_store_alignment(valid_pixel_store_alignment_table,
+ arraysize(valid_pixel_store_alignment_table)),
+ pixel_type(valid_pixel_type_table, arraysize(valid_pixel_type_table)),
+ program_parameter(valid_program_parameter_table,
+ arraysize(valid_program_parameter_table)),
+ query_object_parameter(valid_query_object_parameter_table,
+ arraysize(valid_query_object_parameter_table)),
+ query_parameter(valid_query_parameter_table,
+ arraysize(valid_query_parameter_table)),
+ query_target(valid_query_target_table,
+ arraysize(valid_query_target_table)),
+ read_pixel_format(valid_read_pixel_format_table,
+ arraysize(valid_read_pixel_format_table)),
+ read_pixel_type(valid_read_pixel_type_table,
+ arraysize(valid_read_pixel_type_table)),
+ render_buffer_format(valid_render_buffer_format_table,
+ arraysize(valid_render_buffer_format_table)),
+ render_buffer_parameter(valid_render_buffer_parameter_table,
+ arraysize(valid_render_buffer_parameter_table)),
+ render_buffer_target(valid_render_buffer_target_table,
+ arraysize(valid_render_buffer_target_table)),
+ reset_status(valid_reset_status_table,
+ arraysize(valid_reset_status_table)),
shader_binary_format(),
- shader_parameter(
- valid_shader_parameter_table, arraysize(
- valid_shader_parameter_table)),
- shader_precision(
- valid_shader_precision_table, arraysize(
- valid_shader_precision_table)),
- shader_type(
- valid_shader_type_table, arraysize(valid_shader_type_table)),
- src_blend_factor(
- valid_src_blend_factor_table, arraysize(
- valid_src_blend_factor_table)),
- stencil_op(
- valid_stencil_op_table, arraysize(valid_stencil_op_table)),
- string_type(
- valid_string_type_table, arraysize(valid_string_type_table)),
- texture_bind_target(
- valid_texture_bind_target_table, arraysize(
- valid_texture_bind_target_table)),
- texture_border(
- valid_texture_border_table, arraysize(valid_texture_border_table)),
- texture_format(
- valid_texture_format_table, arraysize(valid_texture_format_table)),
- texture_internal_format(
- valid_texture_internal_format_table, arraysize(
- valid_texture_internal_format_table)),
+ shader_parameter(valid_shader_parameter_table,
+ arraysize(valid_shader_parameter_table)),
+ shader_precision(valid_shader_precision_table,
+ arraysize(valid_shader_precision_table)),
+ shader_type(valid_shader_type_table, arraysize(valid_shader_type_table)),
+ src_blend_factor(valid_src_blend_factor_table,
+ arraysize(valid_src_blend_factor_table)),
+ stencil_op(valid_stencil_op_table, arraysize(valid_stencil_op_table)),
+ string_type(valid_string_type_table, arraysize(valid_string_type_table)),
+ texture_bind_target(valid_texture_bind_target_table,
+ arraysize(valid_texture_bind_target_table)),
+ texture_format(valid_texture_format_table,
+ arraysize(valid_texture_format_table)),
+ texture_internal_format(valid_texture_internal_format_table,
+ arraysize(valid_texture_internal_format_table)),
texture_internal_format_storage(
- valid_texture_internal_format_storage_table, arraysize(
- valid_texture_internal_format_storage_table)),
- texture_mag_filter_mode(
- valid_texture_mag_filter_mode_table, arraysize(
- valid_texture_mag_filter_mode_table)),
- texture_min_filter_mode(
- valid_texture_min_filter_mode_table, arraysize(
- valid_texture_min_filter_mode_table)),
- texture_parameter(
- valid_texture_parameter_table, arraysize(
- valid_texture_parameter_table)),
- texture_pool(
- valid_texture_pool_table, arraysize(valid_texture_pool_table)),
- texture_target(
- valid_texture_target_table, arraysize(valid_texture_target_table)),
- texture_usage(
- valid_texture_usage_table, arraysize(valid_texture_usage_table)),
- texture_wrap_mode(
- valid_texture_wrap_mode_table, arraysize(
- valid_texture_wrap_mode_table)),
- vertex_attrib_size(
- valid_vertex_attrib_size_table, arraysize(
- valid_vertex_attrib_size_table)),
- vertex_attrib_type(
- valid_vertex_attrib_type_table, arraysize(
- valid_vertex_attrib_type_table)),
- vertex_attribute(
- valid_vertex_attribute_table, arraysize(
- valid_vertex_attribute_table)),
- vertex_pointer(
- valid_vertex_pointer_table, arraysize(valid_vertex_pointer_table)),
- zero_only(
- valid_zero_only_table, arraysize(valid_zero_only_table)) {
+ valid_texture_internal_format_storage_table,
+ arraysize(valid_texture_internal_format_storage_table)),
+ texture_mag_filter_mode(valid_texture_mag_filter_mode_table,
+ arraysize(valid_texture_mag_filter_mode_table)),
+ texture_min_filter_mode(valid_texture_min_filter_mode_table,
+ arraysize(valid_texture_min_filter_mode_table)),
+ texture_parameter(valid_texture_parameter_table,
+ arraysize(valid_texture_parameter_table)),
+ texture_pool(valid_texture_pool_table,
+ arraysize(valid_texture_pool_table)),
+ texture_target(valid_texture_target_table,
+ arraysize(valid_texture_target_table)),
+ texture_usage(valid_texture_usage_table,
+ arraysize(valid_texture_usage_table)),
+ texture_wrap_mode(valid_texture_wrap_mode_table,
+ arraysize(valid_texture_wrap_mode_table)),
+ vertex_attrib_size(valid_vertex_attrib_size_table,
+ arraysize(valid_vertex_attrib_size_table)),
+ vertex_attrib_type(valid_vertex_attrib_type_table,
+ arraysize(valid_vertex_attrib_type_table)),
+ vertex_attribute(valid_vertex_attribute_table,
+ arraysize(valid_vertex_attribute_table)),
+ vertex_pointer(valid_vertex_pointer_table,
+ arraysize(valid_vertex_pointer_table)) {
}
-#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_ // NOLINT
-
+#endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/service/gpu_control_service.cc b/chromium/gpu/command_buffer/service/gpu_control_service.cc
index 7c0eb8c8044..f9f19eb2592 100644
--- a/chromium/gpu/command_buffer/service/gpu_control_service.cc
+++ b/chromium/gpu/command_buffer/service/gpu_control_service.cc
@@ -4,84 +4,21 @@
#include "gpu/command_buffer/service/gpu_control_service.h"
-#include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
#include "gpu/command_buffer/service/gpu_memory_buffer_manager.h"
-#include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/query_manager.h"
namespace gpu {
GpuControlService::GpuControlService(
GpuMemoryBufferManagerInterface* gpu_memory_buffer_manager,
- GpuMemoryBufferFactory* gpu_memory_buffer_factory,
- gles2::MailboxManager* mailbox_manager,
- gles2::QueryManager* query_manager,
- const gpu::Capabilities& decoder_capabilities)
+ gles2::QueryManager* query_manager)
: gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
- gpu_memory_buffer_factory_(gpu_memory_buffer_factory),
- mailbox_manager_(mailbox_manager),
- query_manager_(query_manager),
- capabilities_(decoder_capabilities) {
- capabilities_.map_image =
- gpu_memory_buffer_manager_ && gpu_memory_buffer_factory_;
+ query_manager_(query_manager) {
}
GpuControlService::~GpuControlService() {
}
-gpu::Capabilities GpuControlService::GetCapabilities() {
- return capabilities_;
-}
-
-gfx::GpuMemoryBuffer* GpuControlService::CreateGpuMemoryBuffer(
- size_t width,
- size_t height,
- unsigned internalformat,
- int32* id) {
- *id = -1;
-
- CHECK(gpu_memory_buffer_factory_) << "No GPU memory buffer factory provided";
- linked_ptr<gfx::GpuMemoryBuffer> buffer = make_linked_ptr(
- gpu_memory_buffer_factory_->CreateGpuMemoryBuffer(width,
- height,
- internalformat));
- if (!buffer.get())
- return NULL;
-
- static int32 next_id = 1;
- *id = next_id++;
-
- if (!RegisterGpuMemoryBuffer(*id,
- buffer->GetHandle(),
- width,
- height,
- internalformat)) {
- *id = -1;
- return NULL;
- }
-
- gpu_memory_buffers_[*id] = buffer;
- return buffer.get();
-}
-
-void GpuControlService::DestroyGpuMemoryBuffer(int32 id) {
- GpuMemoryBufferMap::iterator it = gpu_memory_buffers_.find(id);
- if (it != gpu_memory_buffers_.end())
- gpu_memory_buffers_.erase(it);
-
- gpu_memory_buffer_manager_->DestroyGpuMemoryBuffer(id);
-}
-
-uint32 GpuControlService::InsertSyncPoint() {
- NOTREACHED();
- return 0u;
-}
-
-void GpuControlService::SignalSyncPoint(uint32 sync_point,
- const base::Closure& callback) {
- NOTREACHED();
-}
-
void GpuControlService::SignalQuery(uint32 query_id,
const base::Closure& callback) {
DCHECK(query_manager_);
@@ -92,42 +29,18 @@ void GpuControlService::SignalQuery(uint32 query_id,
query->AddCallback(callback);
}
-void GpuControlService::SetSurfaceVisible(bool visible) {
- NOTREACHED();
-}
-
-void GpuControlService::SendManagedMemoryStats(
- const ManagedMemoryStats& stats) {
- NOTREACHED();
-}
-
-void GpuControlService::Echo(const base::Closure& callback) {
- NOTREACHED();
-}
-
-bool GpuControlService::RegisterGpuMemoryBuffer(
+void GpuControlService::RegisterGpuMemoryBuffer(
int32 id,
gfx::GpuMemoryBufferHandle buffer,
size_t width,
size_t height,
unsigned internalformat) {
- return gpu_memory_buffer_manager_->RegisterGpuMemoryBuffer(id,
- buffer,
- width,
- height,
- internalformat);
+ gpu_memory_buffer_manager_->RegisterGpuMemoryBuffer(
+ id, buffer, width, height, internalformat);
}
-bool GpuControlService::GenerateMailboxNames(
- unsigned num, std::vector<gpu::Mailbox>* names) {
- DCHECK(names->empty());
- names->resize(num);
- for (unsigned i = 0; i < num; ++i) {
- gles2::MailboxName name;
- mailbox_manager_->GenerateMailboxName(&name);
- (*names)[i].SetName(name.key);
- }
- return true;
+void GpuControlService::UnregisterGpuMemoryBuffer(int32 id) {
+ gpu_memory_buffer_manager_->UnregisterGpuMemoryBuffer(id);
}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gpu_control_service.h b/chromium/gpu/command_buffer/service/gpu_control_service.h
index 3764ad42136..9a64946384f 100644
--- a/chromium/gpu/command_buffer/service/gpu_control_service.h
+++ b/chromium/gpu/command_buffer/service/gpu_control_service.h
@@ -5,67 +5,36 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_GPU_CONTROL_SERVICE_H_
#define GPU_COMMAND_BUFFER_SERVICE_GPU_CONTROL_SERVICE_H_
-#include <map>
-
-#include "base/memory/linked_ptr.h"
-#include "gpu/command_buffer/common/gpu_control.h"
+#include "base/callback.h"
+#include "gpu/command_buffer/common/capabilities.h"
+#include "gpu/gpu_export.h"
#include "ui/gfx/gpu_memory_buffer.h"
namespace gpu {
-class GpuMemoryBufferFactory;
class GpuMemoryBufferManagerInterface;
namespace gles2 {
-class MailboxManager;
class QueryManager;
}
-class GPU_EXPORT GpuControlService : public GpuControl {
+class GPU_EXPORT GpuControlService {
public:
GpuControlService(GpuMemoryBufferManagerInterface* gpu_memory_buffer_manager,
- GpuMemoryBufferFactory* gpu_memory_buffer_factory,
- gles2::MailboxManager* mailbox_manager,
- gles2::QueryManager* query_manager,
- const gpu::Capabilities& decoder_capabilities);
+ gles2::QueryManager* query_manager);
virtual ~GpuControlService();
+ void SignalQuery(uint32 query, const base::Closure& callback);
- // GpuControl implementation.
- virtual gpu::Capabilities GetCapabilities() OVERRIDE;
- virtual gfx::GpuMemoryBuffer* CreateGpuMemoryBuffer(
- size_t width,
- size_t height,
- unsigned internalformat,
- int32* id) OVERRIDE;
- virtual void DestroyGpuMemoryBuffer(int32 id) OVERRIDE;
- virtual bool GenerateMailboxNames(unsigned num,
- std::vector<gpu::Mailbox>* names) OVERRIDE;
- virtual uint32 InsertSyncPoint() OVERRIDE;
- virtual void SignalSyncPoint(uint32 sync_point,
- const base::Closure& callback) OVERRIDE;
- virtual void SignalQuery(uint32 query,
- const base::Closure& callback) OVERRIDE;
- virtual void SetSurfaceVisible(bool visible) OVERRIDE;
- virtual void SendManagedMemoryStats(const ManagedMemoryStats& stats)
- OVERRIDE;
- virtual void Echo(const base::Closure& callback) OVERRIDE;
-
- // Register an existing gpu memory buffer and get an ID that can be used
- // to identify it in the command buffer.
- bool RegisterGpuMemoryBuffer(int32 id,
+ void RegisterGpuMemoryBuffer(int32 id,
gfx::GpuMemoryBufferHandle buffer,
size_t width,
size_t height,
unsigned internalformat);
+ void UnregisterGpuMemoryBuffer(int32 id);
private:
GpuMemoryBufferManagerInterface* gpu_memory_buffer_manager_;
- GpuMemoryBufferFactory* gpu_memory_buffer_factory_;
- gles2::MailboxManager* mailbox_manager_;
gles2::QueryManager* query_manager_;
- typedef std::map<int32, linked_ptr<gfx::GpuMemoryBuffer> > GpuMemoryBufferMap;
- GpuMemoryBufferMap gpu_memory_buffers_;
- gpu::Capabilities capabilities_;
DISALLOW_COPY_AND_ASSIGN(GpuControlService);
};
diff --git a/chromium/gpu/command_buffer/service/gpu_memory_buffer_manager.h b/chromium/gpu/command_buffer/service/gpu_memory_buffer_manager.h
index fb44ede7ed5..3ddcaad9981 100644
--- a/chromium/gpu/command_buffer/service/gpu_memory_buffer_manager.h
+++ b/chromium/gpu/command_buffer/service/gpu_memory_buffer_manager.h
@@ -15,12 +15,12 @@ class GPU_EXPORT GpuMemoryBufferManagerInterface {
public:
virtual ~GpuMemoryBufferManagerInterface() {}
- virtual bool RegisterGpuMemoryBuffer(int32 id,
+ virtual void RegisterGpuMemoryBuffer(int32 id,
gfx::GpuMemoryBufferHandle buffer,
size_t width,
size_t height,
unsigned internalformat) = 0;
- virtual void DestroyGpuMemoryBuffer(int32 id) = 0;
+ virtual void UnregisterGpuMemoryBuffer(int32 id) = 0;
};
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gpu_scheduler.cc b/chromium/gpu/command_buffer/service/gpu_scheduler.cc
index a40e9899842..3d159b66768 100644
--- a/chromium/gpu/command_buffer/service/gpu_scheduler.cc
+++ b/chromium/gpu/command_buffer/service/gpu_scheduler.cc
@@ -28,7 +28,7 @@ const int64 kUnscheduleFenceTimeOutDelay = 10000;
const int64 kRescheduleTimeOutDelay = 1000;
#endif
-GpuScheduler::GpuScheduler(CommandBuffer* command_buffer,
+GpuScheduler::GpuScheduler(CommandBufferServiceBase* command_buffer,
AsyncAPIInterface* handler,
gles2::GLES2Decoder* decoder)
: command_buffer_(command_buffer),
@@ -47,7 +47,7 @@ void GpuScheduler::PutChanged() {
"gpu", "GpuScheduler:PutChanged",
"decoder", decoder_ ? decoder_->GetLogger()->GetLogPrefix() : "None");
- CommandBuffer::State state = command_buffer_->GetState();
+ CommandBuffer::State state = command_buffer_->GetLastState();
// If there is no parser, exit.
if (!parser_.get()) {
@@ -69,6 +69,8 @@ void GpuScheduler::PutChanged() {
base::TimeTicks begin_time(base::TimeTicks::HighResNow());
error::Error error = error::kNoError;
+ if (decoder_)
+ decoder_->BeginDecoding();
while (!parser_->IsEmpty()) {
if (IsPreempted())
break;
@@ -108,6 +110,7 @@ void GpuScheduler::PutChanged() {
command_buffer_->SetContextLostReason(decoder_->GetContextLostReason());
command_buffer_->SetParseError(error::kLostContext);
}
+ decoder_->EndDecoding();
decoder_->AddProcessingCommandsTime(
base::TimeTicks::HighResNow() - begin_time);
}
@@ -178,7 +181,7 @@ void GpuScheduler::SetSchedulingChangedCallback(
scheduling_changed_callback_ = callback;
}
-Buffer GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) {
+scoped_refptr<Buffer> GpuScheduler::GetSharedMemoryBuffer(int32 shm_id) {
return command_buffer_->GetTransferBuffer(shm_id);
}
@@ -187,8 +190,9 @@ void GpuScheduler::set_token(int32 token) {
}
bool GpuScheduler::SetGetBuffer(int32 transfer_buffer_id) {
- Buffer ring_buffer = command_buffer_->GetTransferBuffer(transfer_buffer_id);
- if (!ring_buffer.ptr) {
+ scoped_refptr<Buffer> ring_buffer =
+ command_buffer_->GetTransferBuffer(transfer_buffer_id);
+ if (!ring_buffer) {
return false;
}
@@ -197,10 +201,7 @@ bool GpuScheduler::SetGetBuffer(int32 transfer_buffer_id) {
}
parser_->SetBuffer(
- ring_buffer.ptr,
- ring_buffer.size,
- 0,
- ring_buffer.size);
+ ring_buffer->memory(), ring_buffer->size(), 0, ring_buffer->size());
SetGetOffset(0);
return true;
diff --git a/chromium/gpu/command_buffer/service/gpu_scheduler.h b/chromium/gpu/command_buffer/service/gpu_scheduler.h
index 8fb791cd3fd..5e073ca54e5 100644
--- a/chromium/gpu/command_buffer/service/gpu_scheduler.h
+++ b/chromium/gpu/command_buffer/service/gpu_scheduler.h
@@ -15,9 +15,9 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/shared_memory.h"
#include "base/memory/weak_ptr.h"
-#include "gpu/command_buffer/common/command_buffer.h"
#include "gpu/command_buffer/service/cmd_buffer_engine.h"
#include "gpu/command_buffer/service/cmd_parser.h"
+#include "gpu/command_buffer/service/command_buffer_service.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
#include "gpu/gpu_export.h"
@@ -52,7 +52,7 @@ class GPU_EXPORT GpuScheduler
: NON_EXPORTED_BASE(public CommandBufferEngine),
public base::SupportsWeakPtr<GpuScheduler> {
public:
- GpuScheduler(CommandBuffer* command_buffer,
+ GpuScheduler(CommandBufferServiceBase* command_buffer,
AsyncAPIInterface* handler,
gles2::GLES2Decoder* decoder);
@@ -83,7 +83,7 @@ class GPU_EXPORT GpuScheduler
void SetSchedulingChangedCallback(const SchedulingChangedCallback& callback);
// Implementation of CommandBufferEngine.
- virtual Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE;
+ virtual scoped_refptr<Buffer> GetSharedMemoryBuffer(int32 shm_id) OVERRIDE;
virtual void set_token(int32 token) OVERRIDE;
virtual bool SetGetBuffer(int32 transfer_buffer_id) OVERRIDE;
virtual bool SetGetOffset(int32 offset) OVERRIDE;
@@ -114,7 +114,7 @@ class GPU_EXPORT GpuScheduler
// The GpuScheduler holds a weak reference to the CommandBuffer. The
// CommandBuffer owns the GpuScheduler and holds a strong reference to it
// through the ProcessCommands callback.
- CommandBuffer* command_buffer_;
+ CommandBufferServiceBase* command_buffer_;
// The parser uses this to execute commands.
AsyncAPIInterface* handler_;
diff --git a/chromium/gpu/command_buffer/service/gpu_scheduler_unittest.cc b/chromium/gpu/command_buffer/service/gpu_scheduler_unittest.cc
index 84e40c7c658..80e177aa489 100644
--- a/chromium/gpu/command_buffer/service/gpu_scheduler_unittest.cc
+++ b/chromium/gpu/command_buffer/service/gpu_scheduler_unittest.cc
@@ -33,18 +33,18 @@ class GpuSchedulerTest : public testing::Test {
static const int32 kTransferBufferId = 123;
virtual void SetUp() {
- shared_memory_.reset(new ::base::SharedMemory);
- shared_memory_->CreateAndMapAnonymous(kRingBufferSize);
- buffer_ = static_cast<int32*>(shared_memory_->memory());
- shared_memory_buffer_.ptr = buffer_;
- shared_memory_buffer_.size = kRingBufferSize;
+ scoped_ptr<base::SharedMemory> shared_memory(new ::base::SharedMemory);
+ shared_memory->CreateAndMapAnonymous(kRingBufferSize);
+ buffer_ = static_cast<int32*>(shared_memory->memory());
+ shared_memory_buffer_ =
+ MakeBufferFromSharedMemory(shared_memory.Pass(), kRingBufferSize);
memset(buffer_, 0, kRingBufferSize);
command_buffer_.reset(new MockCommandBuffer);
CommandBuffer::State default_state;
default_state.num_entries = kRingBufferEntries;
- ON_CALL(*command_buffer_.get(), GetState())
+ ON_CALL(*command_buffer_.get(), GetLastState())
.WillByDefault(Return(default_state));
decoder_.reset(new gles2::MockGLES2Decoder());
@@ -64,7 +64,7 @@ class GpuSchedulerTest : public testing::Test {
}
error::Error GetError() {
- return command_buffer_->GetState().error;
+ return command_buffer_->GetLastState().error;
}
#if defined(OS_MACOSX)
@@ -72,8 +72,7 @@ class GpuSchedulerTest : public testing::Test {
#endif
base::MessageLoop message_loop;
scoped_ptr<MockCommandBuffer> command_buffer_;
- scoped_ptr<base::SharedMemory> shared_memory_;
- Buffer shared_memory_buffer_;
+ scoped_refptr<Buffer> shared_memory_buffer_;
int32* buffer_;
scoped_ptr<gles2::MockGLES2Decoder> decoder_;
scoped_ptr<GpuScheduler> scheduler_;
@@ -83,7 +82,7 @@ TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) {
CommandBuffer::State state;
state.put_offset = 0;
- EXPECT_CALL(*command_buffer_, GetState())
+ EXPECT_CALL(*command_buffer_, GetLastState())
.WillRepeatedly(Return(state));
EXPECT_CALL(*command_buffer_, SetParseError(_))
@@ -119,7 +118,7 @@ TEST_F(GpuSchedulerTest, ProcessesOneCommand) {
CommandBuffer::State state;
state.put_offset = 2;
- EXPECT_CALL(*command_buffer_, GetState())
+ EXPECT_CALL(*command_buffer_, GetLastState())
.WillRepeatedly(Return(state));
EXPECT_CALL(*command_buffer_, SetGetOffset(2));
@@ -143,7 +142,7 @@ TEST_F(GpuSchedulerTest, ProcessesTwoCommands) {
CommandBuffer::State state;
state.put_offset = 3;
- EXPECT_CALL(*command_buffer_, GetState())
+ EXPECT_CALL(*command_buffer_, GetLastState())
.WillRepeatedly(Return(state));
EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0]))
@@ -165,7 +164,7 @@ TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) {
CommandBuffer::State state;
state.put_offset = 1;
- EXPECT_CALL(*command_buffer_, GetState())
+ EXPECT_CALL(*command_buffer_, GetLastState())
.WillRepeatedly(Return(state));
EXPECT_CALL(*decoder_, DoCommand(7, 0, &buffer_[0]))
@@ -186,7 +185,7 @@ TEST_F(GpuSchedulerTest, ProcessCommandsDoesNothingAfterError) {
CommandBuffer::State state;
state.error = error::kGenericError;
- EXPECT_CALL(*command_buffer_, GetState())
+ EXPECT_CALL(*command_buffer_, GetLastState())
.WillRepeatedly(Return(state));
scheduler_->PutChanged();
@@ -196,7 +195,7 @@ TEST_F(GpuSchedulerTest, CanGetAddressOfSharedMemory) {
EXPECT_CALL(*command_buffer_.get(), GetTransferBuffer(7))
.WillOnce(Return(shared_memory_buffer_));
- EXPECT_EQ(&buffer_[0], scheduler_->GetSharedMemoryBuffer(7).ptr);
+ EXPECT_EQ(&buffer_[0], scheduler_->GetSharedMemoryBuffer(7)->memory());
}
ACTION_P2(SetPointee, address, value) {
@@ -207,7 +206,7 @@ TEST_F(GpuSchedulerTest, CanGetSizeOfSharedMemory) {
EXPECT_CALL(*command_buffer_.get(), GetTransferBuffer(7))
.WillOnce(Return(shared_memory_buffer_));
- EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7).size);
+ EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7)->size());
}
TEST_F(GpuSchedulerTest, SetTokenForwardsToCommandBuffer) {
diff --git a/chromium/gpu/command_buffer/service/gpu_service_test.cc b/chromium/gpu/command_buffer/service/gpu_service_test.cc
new file mode 100644
index 00000000000..a51a54c7a48
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gpu_service_test.cc
@@ -0,0 +1,50 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/gpu_service_test.h"
+
+#include "gpu/command_buffer/service/test_helper.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_context_stub_with_extensions.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface.h"
+
+namespace gpu {
+namespace gles2 {
+
+GpuServiceTest::GpuServiceTest() : ran_setup_(false), ran_teardown_(false) {
+}
+
+GpuServiceTest::~GpuServiceTest() {
+ DCHECK(ran_teardown_);
+}
+
+void GpuServiceTest::SetUp() {
+ testing::Test::SetUp();
+
+ gfx::SetGLGetProcAddressProc(gfx::MockGLInterface::GetGLProcAddress);
+ gfx::GLSurface::InitializeOneOffWithMockBindingsForTests();
+ gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
+ ::gfx::MockGLInterface::SetGLInterface(gl_.get());
+
+ context_ = new gfx::GLContextStubWithExtensions;
+ context_->AddExtensionsString(NULL);
+ context_->SetGLVersionString("3.0");
+ gfx::GLSurface::InitializeDynamicMockBindingsForTests(context_);
+ ran_setup_ = true;
+}
+
+void GpuServiceTest::TearDown() {
+ DCHECK(ran_setup_);
+ ::gfx::MockGLInterface::SetGLInterface(NULL);
+ gl_.reset();
+ gfx::ClearGLBindings();
+ ran_teardown_ = true;
+
+ testing::Test::TearDown();
+}
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gpu_service_test.h b/chromium/gpu/command_buffer/service/gpu_service_test.h
new file mode 100644
index 00000000000..f37178784b1
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gpu_service_test.h
@@ -0,0 +1,42 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_GPU_SERVICE_TEST_H_
+#define GPU_COMMAND_BUFFER_SERVICE_GPU_SERVICE_TEST_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_mock.h"
+
+namespace gfx {
+class GLContextStubWithExtensions;
+}
+
+namespace gpu {
+namespace gles2 {
+
+// Base class for tests that need mock GL bindings.
+class GpuServiceTest : public testing::Test {
+ public:
+ GpuServiceTest();
+ virtual ~GpuServiceTest();
+
+ protected:
+ virtual void SetUp() OVERRIDE;
+ virtual void TearDown() OVERRIDE;
+
+ scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
+
+ private:
+ bool ran_setup_;
+ bool ran_teardown_;
+ scoped_refptr<gfx::GLContextStubWithExtensions> context_;
+};
+
+} // namespace gles2
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_MAILBOX_SYNCHRONIZER_H_
diff --git a/chromium/gpu/command_buffer/service/gpu_switches.cc b/chromium/gpu/command_buffer/service/gpu_switches.cc
index bff23c31391..0491c413e5e 100644
--- a/chromium/gpu/command_buffer/service/gpu_switches.cc
+++ b/chromium/gpu/command_buffer/service/gpu_switches.cc
@@ -40,17 +40,9 @@ const char kDisableGpuProgramCache[] = "disable-gpu-program-cache";
// Enforce GL minimums.
const char kEnforceGLMinimums[] = "enforce-gl-minimums";
-// Force the use of a workaround for graphics hangs seen on certain
-// Mac OS systems. Enabled by default (and can't be disabled) on known
-// affected systems.
-const char kForceGLFinishWorkaround[] = "force-glfinish-workaround";
-
// Sets the total amount of memory that may be allocated for GPU resources
const char kForceGpuMemAvailableMb[] = "force-gpu-mem-available-mb";
-// Force the synchronous copy path in compositing_iosurface_mac.
-const char kForceSynchronousGLReadPixels[] = "force-synchronous-glreadpixels";
-
// Pass a set of GpuDriverBugWorkaroundType ids, seperated by ','.
const char kGpuDriverBugWorkarounds[] = "gpu-driver-bug-workarounds";
@@ -75,9 +67,7 @@ const char* kGpuSwitches[] = {
kEnableGPUServiceLoggingGPU,
kDisableGpuProgramCache,
kEnforceGLMinimums,
- kForceGLFinishWorkaround,
kForceGpuMemAvailableMb,
- kForceSynchronousGLReadPixels,
kGpuDriverBugWorkarounds,
kGpuProgramCacheSizeKb,
kDisableGpuShaderDiskCache,
diff --git a/chromium/gpu/command_buffer/service/gpu_switches.h b/chromium/gpu/command_buffer/service/gpu_switches.h
index 7916d690142..d582b7ae267 100644
--- a/chromium/gpu/command_buffer/service/gpu_switches.h
+++ b/chromium/gpu/command_buffer/service/gpu_switches.h
@@ -21,9 +21,7 @@ GPU_EXPORT extern const char kEnableGPUDebugging[];
GPU_EXPORT extern const char kEnableGPUServiceLoggingGPU[];
GPU_EXPORT extern const char kDisableGpuProgramCache[];
GPU_EXPORT extern const char kEnforceGLMinimums[];
-GPU_EXPORT extern const char kForceGLFinishWorkaround[];
GPU_EXPORT extern const char kForceGpuMemAvailableMb[];
-GPU_EXPORT extern const char kForceSynchronousGLReadPixels[];
GPU_EXPORT extern const char kGpuDriverBugWorkarounds[];
GPU_EXPORT extern const char kGpuProgramCacheSizeKb[];
GPU_EXPORT extern const char kDisableGpuShaderDiskCache[];
diff --git a/chromium/gpu/command_buffer/service/gpu_tracer.cc b/chromium/gpu/command_buffer/service/gpu_tracer.cc
index 413dc68739f..2cd38e79ca4 100644
--- a/chromium/gpu/command_buffer/service/gpu_tracer.cc
+++ b/chromium/gpu/command_buffer/service/gpu_tracer.cc
@@ -8,111 +8,62 @@
#include "base/bind.h"
#include "base/debug/trace_event.h"
-#include "base/memory/weak_ptr.h"
#include "base/strings/string_util.h"
-#include "base/threading/thread.h"
#include "base/time/time.h"
-#include "ui/gl/gl_bindings.h"
+#include "gpu/command_buffer/common/gles2_cmd_utils.h"
namespace gpu {
namespace gles2 {
-namespace {
-
-class Outputter;
static const unsigned int kProcessInterval = 16;
-static Outputter* g_outputter_thread = NULL;
+static TraceOutputter* g_outputter_thread = NULL;
-class Outputter
- : private base::Thread,
- public base::RefCounted<Outputter> {
- public:
- static scoped_refptr<Outputter> Create(const std::string& name) {
- if (!g_outputter_thread) {
- g_outputter_thread = new Outputter(name);
- g_outputter_thread->Start();
- g_outputter_thread->Stop();
- }
- return g_outputter_thread;
+scoped_refptr<TraceOutputter> TraceOutputter::Create(const std::string& name) {
+ if (!g_outputter_thread) {
+ g_outputter_thread = new TraceOutputter(name);
}
+ return g_outputter_thread;
+}
- uint64 Id() { return thread_id(); }
-
- private:
- friend class base::RefCounted<Outputter>;
-
- explicit Outputter(const std::string& name) : base::Thread(name.c_str()) {}
-
- virtual ~Outputter() {
- g_outputter_thread = NULL;
- }
-
- DISALLOW_COPY_AND_ASSIGN(Outputter);
-};
-
-class Trace : public base::RefCounted<Trace> {
- public:
- explicit Trace(const std::string& name) : name_(name) {}
-
- virtual void Start() = 0;
- virtual void End() = 0;
-
- // True if the the results of this query are available.
- virtual bool IsAvailable() = 0;
-
- virtual bool IsProcessable() { return true; }
- virtual void Process() = 0;
-
- virtual const std::string& name() {
- return name_;
- }
-
- protected:
- virtual ~Trace() {}
-
- private:
- friend class base::RefCounted<Trace>;
-
- std::string name_;
-
- DISALLOW_COPY_AND_ASSIGN(Trace);
-};
-
-class GLARBTimerTrace : public Trace {
- public:
- GLARBTimerTrace(scoped_refptr<Outputter> outputter, const std::string& name,
- int64 offset);
-
- // Implementation of Tracer
- virtual void Start() OVERRIDE;
- virtual void End() OVERRIDE;
- virtual bool IsAvailable() OVERRIDE;
- virtual void Process() OVERRIDE;
-
- private:
- virtual ~GLARBTimerTrace();
-
- void Output();
-
- scoped_refptr<Outputter> outputter_;
-
- int64 offset_;
- int64 start_time_;
- int64 end_time_;
- bool end_requested_;
-
- GLuint queries_[2];
+TraceOutputter::TraceOutputter(const std::string& name)
+ : named_thread_(name.c_str()), local_trace_id_(0) {
+ named_thread_.Start();
+ named_thread_.Stop();
+}
- DISALLOW_COPY_AND_ASSIGN(GLARBTimerTrace);
-};
+TraceOutputter::~TraceOutputter() { g_outputter_thread = NULL; }
+
+void TraceOutputter::Trace(const std::string& name,
+ int64 start_time,
+ int64 end_time) {
+ TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0(
+ TRACE_DISABLED_BY_DEFAULT("gpu.device"),
+ name.c_str(),
+ local_trace_id_,
+ named_thread_.thread_id(),
+ start_time);
+ TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0(
+ TRACE_DISABLED_BY_DEFAULT("gpu.device"),
+ name.c_str(),
+ local_trace_id_,
+ named_thread_.thread_id(),
+ end_time);
+ ++local_trace_id_;
+}
class NoopTrace : public Trace {
public:
explicit NoopTrace(const std::string& name) : Trace(name) {}
// Implementation of Tracer
- virtual void Start() OVERRIDE {}
- virtual void End() OVERRIDE {}
+ virtual void Start() OVERRIDE {
+ TRACE_EVENT_COPY_ASYNC_BEGIN0(
+ TRACE_DISABLED_BY_DEFAULT("gpu.service"), name().c_str(), this);
+ }
+ virtual void End() OVERRIDE {
+ TRACE_EVENT_COPY_ASYNC_END0(
+ TRACE_DISABLED_BY_DEFAULT("gpu.service"), name().c_str(), this);
+ }
virtual bool IsAvailable() OVERRIDE { return true; }
virtual bool IsProcessable() OVERRIDE { return false; }
virtual void Process() OVERRIDE {}
@@ -123,37 +74,57 @@ class NoopTrace : public Trace {
DISALLOW_COPY_AND_ASSIGN(NoopTrace);
};
+struct TraceMarker {
+ TraceMarker(const std::string& name, GpuTracerSource source)
+ : name_(name), source_(source) {}
+
+ std::string name_;
+ GpuTracerSource source_;
+ scoped_refptr<Trace> trace_;
+};
+
class GPUTracerImpl
: public GPUTracer,
public base::SupportsWeakPtr<GPUTracerImpl> {
public:
GPUTracerImpl()
- : gpu_category_enabled_(
- TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED("gpu")),
- process_posted_(false) {
- }
+ : gpu_trace_srv_category(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
+ TRACE_DISABLED_BY_DEFAULT("gpu.service"))),
+ gpu_trace_dev_category(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
+ TRACE_DISABLED_BY_DEFAULT("gpu.device"))),
+ gpu_executing_(false),
+ process_posted_(false) {}
virtual ~GPUTracerImpl() {}
// Implementation of gpu::gles2::GPUTracer
- virtual bool Begin(const std::string& name) OVERRIDE;
- virtual bool End() OVERRIDE;
+ virtual bool BeginDecoding() OVERRIDE;
+ virtual bool EndDecoding() OVERRIDE;
+ virtual bool Begin(const std::string& name, GpuTracerSource source) OVERRIDE;
+ virtual bool End(GpuTracerSource source) OVERRIDE;
virtual const std::string& CurrentName() const OVERRIDE;
+ virtual bool IsTracing() OVERRIDE {
+ return (*gpu_trace_srv_category != 0) || (*gpu_trace_dev_category != 0);
+ }
+ virtual void CalculateTimerOffset() {}
// Process any completed traces.
virtual void Process();
+ virtual void ProcessTraces();
protected:
// Create a new trace.
virtual scoped_refptr<Trace> CreateTrace(const std::string& name);
- const unsigned char* gpu_category_enabled_;
+ const unsigned char* gpu_trace_srv_category;
+ const unsigned char* gpu_trace_dev_category;
- private:
+ protected:
void IssueProcessTask();
- scoped_refptr<Trace> current_trace_;
+ std::vector<TraceMarker> markers_;
std::deque<scoped_refptr<Trace> > traces_;
+ bool gpu_executing_;
bool process_posted_;
DISALLOW_COPY_AND_ASSIGN(GPUTracerImpl);
@@ -161,28 +132,36 @@ class GPUTracerImpl
class GPUTracerARBTimerQuery : public GPUTracerImpl {
public:
- GPUTracerARBTimerQuery();
+ explicit GPUTracerARBTimerQuery(gles2::GLES2Decoder* decoder);
virtual ~GPUTracerARBTimerQuery();
// Implementation of GPUTracerImpl
- virtual void Process() OVERRIDE;
+ virtual void ProcessTraces() OVERRIDE;
- private:
+ protected:
// Implementation of GPUTracerImpl.
+ virtual bool BeginDecoding() OVERRIDE;
+ virtual bool EndDecoding() OVERRIDE;
virtual scoped_refptr<Trace> CreateTrace(const std::string& name) OVERRIDE;
-
- void CalculateTimerOffset();
+ virtual void CalculateTimerOffset() OVERRIDE;
scoped_refptr<Outputter> outputter_;
+ bool gpu_timing_synced_;
int64 timer_offset_;
- int64 last_offset_check_;
+
+ gles2::GLES2Decoder* decoder_;
DISALLOW_COPY_AND_ASSIGN(GPUTracerARBTimerQuery);
};
+bool Trace::IsProcessable() { return true; }
+
+const std::string& Trace::name() { return name_; }
+
GLARBTimerTrace::GLARBTimerTrace(scoped_refptr<Outputter> outputter,
- const std::string& name, int64 offset)
+ const std::string& name,
+ int64 offset)
: Trace(name),
outputter_(outputter),
offset_(offset),
@@ -192,16 +171,19 @@ GLARBTimerTrace::GLARBTimerTrace(scoped_refptr<Outputter> outputter,
glGenQueries(2, queries_);
}
-GLARBTimerTrace::~GLARBTimerTrace() {
-}
+GLARBTimerTrace::~GLARBTimerTrace() { glDeleteQueries(2, queries_); }
void GLARBTimerTrace::Start() {
+ TRACE_EVENT_COPY_ASYNC_BEGIN0(
+ TRACE_DISABLED_BY_DEFAULT("gpu.service"), name().c_str(), this);
glQueryCounter(queries_[0], GL_TIMESTAMP);
}
void GLARBTimerTrace::End() {
glQueryCounter(queries_[1], GL_TIMESTAMP);
end_requested_ = true;
+ TRACE_EVENT_COPY_ASYNC_END0(
+ TRACE_DISABLED_BY_DEFAULT("gpu.service"), name().c_str(), this);
}
bool GLARBTimerTrace::IsAvailable() {
@@ -216,63 +198,116 @@ bool GLARBTimerTrace::IsAvailable() {
void GLARBTimerTrace::Process() {
DCHECK(IsAvailable());
- GLint64 timestamp;
+ GLuint64 timestamp;
// TODO(dsinclair): It's possible for the timer to wrap during the start/end.
// We need to detect if the end is less then the start and correct for the
// wrapping.
- glGetQueryObjecti64v(queries_[0], GL_QUERY_RESULT, &timestamp);
+ glGetQueryObjectui64v(queries_[0], GL_QUERY_RESULT, &timestamp);
start_time_ = (timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_;
- glGetQueryObjecti64v(queries_[1], GL_QUERY_RESULT, &timestamp);
+ glGetQueryObjectui64v(queries_[1], GL_QUERY_RESULT, &timestamp);
end_time_ = (timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_;
glDeleteQueries(2, queries_);
+ outputter_->Trace(name(), start_time_, end_time_);
+}
+
+bool GPUTracerImpl::BeginDecoding() {
+ if (gpu_executing_)
+ return false;
- TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP0("gpu", name().c_str(),
- this, outputter_->Id(), start_time_);
- TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP0("gpu", name().c_str(),
- this, outputter_->Id(), end_time_);
+ gpu_executing_ = true;
+
+ if (IsTracing()) {
+ // Begin a Trace for all active markers
+ for (size_t i = 0; i < markers_.size(); i++) {
+ markers_[i].trace_ = CreateTrace(markers_[i].name_);
+ markers_[i].trace_->Start();
+ }
+ }
+ return true;
}
-bool GPUTracerImpl::Begin(const std::string& name) {
- // Make sure we are not nesting trace commands.
- if (current_trace_.get())
+bool GPUTracerImpl::EndDecoding() {
+ if (!gpu_executing_)
return false;
- current_trace_ = CreateTrace(name);
- current_trace_->Start();
+ // End Trace for all active markers
+ if (IsTracing()) {
+ for (size_t i = 0; i < markers_.size(); i++) {
+ if (markers_[i].trace_) {
+ markers_[i].trace_->End();
+ if (markers_[i].trace_->IsProcessable())
+ traces_.push_back(markers_[i].trace_);
+ markers_[i].trace_ = 0;
+ }
+ }
+ IssueProcessTask();
+ }
+
+ gpu_executing_ = false;
return true;
}
-bool GPUTracerImpl::End() {
- if (!current_trace_.get())
+bool GPUTracerImpl::Begin(const std::string& name, GpuTracerSource source) {
+ if (!gpu_executing_)
return false;
- current_trace_->End();
- if (current_trace_->IsProcessable())
- traces_.push_back(current_trace_);
- current_trace_ = NULL;
+ // Push new marker from given 'source'
+ markers_.push_back(TraceMarker(name, source));
- IssueProcessTask();
+ // Create trace
+ if (IsTracing()) {
+ scoped_refptr<Trace> trace = CreateTrace(name);
+ trace->Start();
+ markers_.back().trace_ = trace;
+ }
return true;
}
+bool GPUTracerImpl::End(GpuTracerSource source) {
+ if (!gpu_executing_)
+ return false;
+
+ // Pop last marker with matching 'source'
+ for (int i = markers_.size() - 1; i >= 0; i--) {
+ if (markers_[i].source_ == source) {
+ // End trace
+ if (IsTracing()) {
+ scoped_refptr<Trace> trace = markers_[i].trace_;
+ if (trace) {
+ trace->End();
+ if (trace->IsProcessable())
+ traces_.push_back(trace);
+ IssueProcessTask();
+ }
+ }
+
+ markers_.erase(markers_.begin() + i);
+ return true;
+ }
+ }
+ return false;
+}
+
void GPUTracerImpl::Process() {
process_posted_ = false;
+ ProcessTraces();
+ IssueProcessTask();
+}
+void GPUTracerImpl::ProcessTraces() {
while (!traces_.empty() && traces_.front()->IsAvailable()) {
traces_.front()->Process();
traces_.pop_front();
}
-
- IssueProcessTask();
}
const std::string& GPUTracerImpl::CurrentName() const {
- if (!current_trace_.get())
+ if (markers_.empty())
return base::EmptyString();
- return current_trace_->name();
+ return markers_.back().name_;
}
scoped_refptr<Trace> GPUTracerImpl::CreateTrace(const std::string& name) {
@@ -290,12 +325,9 @@ void GPUTracerImpl::IssueProcessTask() {
base::TimeDelta::FromMilliseconds(kProcessInterval));
}
-GPUTracerARBTimerQuery::GPUTracerARBTimerQuery()
- : GPUTracerImpl(),
- timer_offset_(0),
- last_offset_check_(0) {
- CalculateTimerOffset();
- outputter_ = Outputter::Create("GL_ARB_timer_query");
+GPUTracerARBTimerQuery::GPUTracerARBTimerQuery(gles2::GLES2Decoder* decoder)
+ : timer_offset_(0), decoder_(decoder) {
+ outputter_ = TraceOutputter::Create("GL_ARB_timer_query");
}
GPUTracerARBTimerQuery::~GPUTracerARBTimerQuery() {
@@ -303,43 +335,82 @@ GPUTracerARBTimerQuery::~GPUTracerARBTimerQuery() {
scoped_refptr<Trace> GPUTracerARBTimerQuery::CreateTrace(
const std::string& name) {
- if (*gpu_category_enabled_)
+ if (*gpu_trace_dev_category)
return new GLARBTimerTrace(outputter_, name, timer_offset_);
return GPUTracerImpl::CreateTrace(name);
}
-void GPUTracerARBTimerQuery::Process() {
- GPUTracerImpl::Process();
+bool GPUTracerARBTimerQuery::BeginDecoding() {
+ if (*gpu_trace_dev_category) {
+ // Make sure timing is synced before tracing
+ if (!gpu_timing_synced_) {
+ CalculateTimerOffset();
+ gpu_timing_synced_ = true;
+ }
+ } else {
+ // If GPU device category is off, invalidate timing sync
+ gpu_timing_synced_ = false;
+ }
- if (*gpu_category_enabled_ &&
- (last_offset_check_ + base::Time::kMicrosecondsPerSecond) <
- base::TimeTicks::NowFromSystemTraceTime().ToInternalValue())
- CalculateTimerOffset();
+ return GPUTracerImpl::BeginDecoding();
+}
+
+bool GPUTracerARBTimerQuery::EndDecoding() {
+ bool ret = GPUTracerImpl::EndDecoding();
+
+ // NOTE(vmiura_: glFlush() here can help give better trace results,
+ // but it distorts the normal device behavior.
+ return ret;
+}
+
+void GPUTracerARBTimerQuery::ProcessTraces() {
+ TRACE_EVENT0("gpu", "GPUTracerARBTimerQuery::ProcessTraces");
+
+ // Make owning decoder's GL context current
+ if (!decoder_->MakeCurrent()) {
+ // Skip subsequent GL calls if MakeCurrent fails
+ traces_.clear();
+ return;
+ }
+
+ while (!traces_.empty() && traces_.front()->IsAvailable()) {
+ traces_.front()->Process();
+ traces_.pop_front();
+ }
+
+ // Clear pending traces if there were are any errors
+ GLenum err = glGetError();
+ if (err != GL_NO_ERROR)
+ traces_.clear();
}
void GPUTracerARBTimerQuery::CalculateTimerOffset() {
- TRACE_EVENT0("gpu", "CalculateTimerOffset");
- // TODO(dsinclair): Change to glGetInteger64v.
+ TRACE_EVENT0("gpu", "GPUTracerARBTimerQuery::CalculateTimerOffset");
+
+ // NOTE(vmiura): It would be better to use glGetInteger64v, however
+ // it's not available everywhere.
GLuint64 gl_now = 0;
GLuint query;
+ glFinish();
glGenQueries(1, &query);
-
glQueryCounter(query, GL_TIMESTAMP);
+ glFinish();
glGetQueryObjectui64v(query, GL_QUERY_RESULT, &gl_now);
base::TimeTicks system_now = base::TimeTicks::NowFromSystemTraceTime();
gl_now /= base::Time::kNanosecondsPerMicrosecond;
timer_offset_ = system_now.ToInternalValue() - gl_now;
glDeleteQueries(1, &query);
-
- last_offset_check_ = system_now.ToInternalValue();
}
-} // namespace
+GPUTracer::GPUTracer() {}
+
+GPUTracer::~GPUTracer() {}
-scoped_ptr<GPUTracer> GPUTracer::Create() {
- if (gfx::g_driver_gl.ext.b_GL_ARB_timer_query)
- return scoped_ptr<GPUTracer>(new GPUTracerARBTimerQuery());
+scoped_ptr<GPUTracer> GPUTracer::Create(gles2::GLES2Decoder* decoder) {
+ if (gfx::g_driver_gl.ext.b_GL_ARB_timer_query) {
+ return scoped_ptr<GPUTracer>(new GPUTracerARBTimerQuery(decoder));
+ }
return scoped_ptr<GPUTracer>(new GPUTracerImpl());
}
diff --git a/chromium/gpu/command_buffer/service/gpu_tracer.h b/chromium/gpu/command_buffer/service/gpu_tracer.h
index f64455c0671..7daea897db6 100644
--- a/chromium/gpu/command_buffer/service/gpu_tracer.h
+++ b/chromium/gpu/command_buffer/service/gpu_tracer.h
@@ -10,23 +10,43 @@
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "base/threading/thread.h"
+#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+#include "gpu/gpu_export.h"
+#include "ui/gl/gl_bindings.h"
namespace gpu {
namespace gles2 {
+// Id used to keep trace namespaces separate
+enum GpuTracerSource {
+ kTraceGroupMarker = 0,
+ kTraceCHROMIUM = 1,
+ kTraceDecoder = 2,
+};
+
// Traces GPU Commands.
class GPUTracer {
public:
- static scoped_ptr<GPUTracer> Create();
+ static scoped_ptr<GPUTracer> Create(gles2::GLES2Decoder* decoder);
+
+ GPUTracer();
+ virtual ~GPUTracer();
+
+ // Scheduled processing in decoder begins.
+ virtual bool BeginDecoding() = 0;
+
+ // Scheduled processing in decoder ends.
+ virtual bool EndDecoding() = 0;
- GPUTracer() {}
- virtual ~GPUTracer() {}
+ // Begin a trace marker.
+ virtual bool Begin(const std::string& name, GpuTracerSource source) = 0;
- // Begin a trace.
- virtual bool Begin(const std::string& name) = 0;
+ // End the last started trace marker.
+ virtual bool End(GpuTracerSource source) = 0;
- // End the last started trace.
- virtual bool End() = 0;
+ virtual bool IsTracing() = 0;
// Retrieve the name of the current open trace.
// Returns empty string if no current open trace.
@@ -36,6 +56,90 @@ class GPUTracer {
DISALLOW_COPY_AND_ASSIGN(GPUTracer);
};
+class Outputter : public base::RefCounted<Outputter> {
+ public:
+ virtual void Trace(const std::string& name,
+ int64 start_time,
+ int64 end_time) = 0;
+
+ protected:
+ virtual ~Outputter() {}
+ friend class base::RefCounted<Outputter>;
+};
+
+class TraceOutputter : public Outputter {
+ public:
+ static scoped_refptr<TraceOutputter> Create(const std::string& name);
+ virtual void Trace(const std::string& name,
+ int64 start_time,
+ int64 end_time) OVERRIDE;
+
+ protected:
+ friend class base::RefCounted<Outputter>;
+ explicit TraceOutputter(const std::string& name);
+ virtual ~TraceOutputter();
+
+ base::Thread named_thread_;
+ uint64 local_trace_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(TraceOutputter);
+};
+
+class GPU_EXPORT Trace : public base::RefCounted<Trace> {
+ public:
+ explicit Trace(const std::string& name) : name_(name) {}
+
+ virtual void Start() = 0;
+ virtual void End() = 0;
+
+ // True if the the results of this query are available.
+ virtual bool IsAvailable() = 0;
+
+ virtual bool IsProcessable();
+ virtual void Process() = 0;
+
+ virtual const std::string& name();
+
+ protected:
+ virtual ~Trace() {}
+
+ private:
+ friend class base::RefCounted<Trace>;
+
+ std::string name_;
+
+ DISALLOW_COPY_AND_ASSIGN(Trace);
+};
+
+class GPU_EXPORT GLARBTimerTrace : public Trace {
+ public:
+ GLARBTimerTrace(scoped_refptr<Outputter> outputter,
+ const std::string& name,
+ int64 offset);
+
+ // Implementation of Tracer
+ virtual void Start() OVERRIDE;
+ virtual void End() OVERRIDE;
+ virtual bool IsAvailable() OVERRIDE;
+ virtual void Process() OVERRIDE;
+
+ private:
+ virtual ~GLARBTimerTrace();
+
+ void Output();
+
+ scoped_refptr<Outputter> outputter_;
+
+ int64 offset_;
+ int64 start_time_;
+ int64 end_time_;
+ bool end_requested_;
+
+ GLuint queries_[2];
+
+ DISALLOW_COPY_AND_ASSIGN(GLARBTimerTrace);
+};
+
} // namespace gles2
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/gpu_tracer_unittest.cc b/chromium/gpu/command_buffer/service/gpu_tracer_unittest.cc
new file mode 100644
index 00000000000..735498c87e5
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/gpu_tracer_unittest.cc
@@ -0,0 +1,209 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <map>
+#include <set>
+
+#include "gpu/command_buffer/service/gpu_service_test.h"
+#include "gpu/command_buffer/service/gpu_tracer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_mock.h"
+
+namespace gpu {
+namespace gles2 {
+
+using ::testing::InvokeWithoutArgs;
+using ::testing::Return;
+using ::testing::ReturnRef;
+using ::testing::ReturnPointee;
+using ::testing::NotNull;
+using ::testing::ElementsAreArray;
+using ::testing::ElementsAre;
+using ::testing::SetArrayArgument;
+using ::testing::AtLeast;
+using ::testing::SetArgPointee;
+using ::testing::Pointee;
+using ::testing::Unused;
+using ::testing::Invoke;
+using ::testing::_;
+
+class MockOutputter : public Outputter {
+ public:
+ MockOutputter() {}
+ MOCK_METHOD3(Trace,
+ void(const std::string& name, int64 start_time, int64 end_time));
+
+ protected:
+ ~MockOutputter() {}
+};
+
+class GlFakeQueries {
+ public:
+ GlFakeQueries() {}
+
+ void Reset() {
+ current_time_ = 0;
+ next_query_id_ = 23;
+ alloced_queries_.clear();
+ query_timestamp_.clear();
+ }
+
+ void SetCurrentGLTime(GLint64 current_time) { current_time_ = current_time; }
+
+ void GenQueries(GLsizei n, GLuint* ids) {
+ for (GLsizei i = 0; i < n; i++) {
+ ids[i] = next_query_id_++;
+ alloced_queries_.insert(ids[i]);
+ }
+ }
+
+ void DeleteQueries(GLsizei n, const GLuint* ids) {
+ for (GLsizei i = 0; i < n; i++) {
+ alloced_queries_.erase(ids[i]);
+ query_timestamp_.erase(ids[i]);
+ }
+ }
+
+ void GetQueryObjectiv(GLuint id, GLenum pname, GLint* params) {
+ switch (pname) {
+ case GL_QUERY_RESULT_AVAILABLE: {
+ std::map<GLuint, GLint64>::iterator it = query_timestamp_.find(id);
+ if (it != query_timestamp_.end() && it->second <= current_time_)
+ *params = 1;
+ else
+ *params = 0;
+ break;
+ }
+ default:
+ ASSERT_TRUE(false);
+ }
+ }
+
+ void QueryCounter(GLuint id, GLenum target) {
+ switch (target) {
+ case GL_TIMESTAMP:
+ ASSERT_TRUE(alloced_queries_.find(id) != alloced_queries_.end());
+ query_timestamp_[id] = current_time_;
+ break;
+ default:
+ ASSERT_TRUE(false);
+ }
+ }
+
+ void GetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params) {
+ switch (pname) {
+ case GL_QUERY_RESULT:
+ ASSERT_TRUE(query_timestamp_.find(id) != query_timestamp_.end());
+ *params = query_timestamp_.find(id)->second;
+ break;
+ default:
+ ASSERT_TRUE(false);
+ }
+ }
+
+ protected:
+ GLint64 current_time_;
+ GLuint next_query_id_;
+ std::set<GLuint> alloced_queries_;
+ std::map<GLuint, GLint64> query_timestamp_;
+};
+
+class GpuTracerTest : public GpuServiceTest {
+ public:
+ GpuTracerTest() {}
+
+ ///////////////////////////////////////////////////////////////////////////
+
+ protected:
+ virtual void SetUp() {
+ GpuServiceTest::SetUp();
+ gl_fake_queries_.Reset();
+ }
+
+ virtual void TearDown() {
+ gl_.reset();
+ gl_fake_queries_.Reset();
+ GpuServiceTest::TearDown();
+ }
+
+ void SetupTimerQueryMocks() {
+ // Delegate query APIs used by GLARBTimerTrace to a GlFakeQueries
+ EXPECT_CALL(*gl_, GenQueries(_, NotNull())).Times(AtLeast(1)).WillOnce(
+ Invoke(&gl_fake_queries_, &GlFakeQueries::GenQueries));
+
+ EXPECT_CALL(*gl_, GetQueryObjectiv(_, GL_QUERY_RESULT_AVAILABLE, NotNull()))
+ .Times(AtLeast(2))
+ .WillRepeatedly(
+ Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectiv));
+
+ EXPECT_CALL(*gl_, QueryCounter(_, GL_TIMESTAMP))
+ .Times(AtLeast(2))
+ .WillRepeatedly(
+ Invoke(&gl_fake_queries_, &GlFakeQueries::QueryCounter));
+
+ EXPECT_CALL(*gl_, GetQueryObjectui64v(_, GL_QUERY_RESULT, NotNull()))
+ .Times(AtLeast(2))
+ .WillRepeatedly(
+ Invoke(&gl_fake_queries_, &GlFakeQueries::GetQueryObjectui64v));
+
+ EXPECT_CALL(*gl_, DeleteQueries(2, NotNull()))
+ .Times(AtLeast(1))
+ .WillRepeatedly(
+ Invoke(&gl_fake_queries_, &GlFakeQueries::DeleteQueries));
+ }
+
+ GlFakeQueries gl_fake_queries_;
+};
+
+TEST_F(GpuTracerTest, GLARBTimerTrace) {
+ // Test basic timer query functionality
+ {
+ MockOutputter* outputter = new MockOutputter();
+ scoped_refptr<Outputter> outputter_ref = outputter;
+
+ SetupTimerQueryMocks();
+
+ // Expected results
+ const std::string trace_name("trace_test");
+ const int64 offset_time = 3231;
+ const GLint64 start_timestamp = 7 * base::Time::kNanosecondsPerMicrosecond;
+ const GLint64 end_timestamp = 32 * base::Time::kNanosecondsPerMicrosecond;
+ const int64 expect_start_time =
+ (start_timestamp / base::Time::kNanosecondsPerMicrosecond) +
+ offset_time;
+ const int64 expect_end_time =
+ (end_timestamp / base::Time::kNanosecondsPerMicrosecond) + offset_time;
+
+ // Expected Outputter::Trace call
+ EXPECT_CALL(*outputter,
+ Trace(trace_name, expect_start_time, expect_end_time));
+
+ scoped_refptr<GLARBTimerTrace> trace =
+ new GLARBTimerTrace(outputter_ref, trace_name, offset_time);
+
+ gl_fake_queries_.SetCurrentGLTime(start_timestamp);
+ trace->Start();
+
+ // Shouldn't be available before End() call
+ gl_fake_queries_.SetCurrentGLTime(end_timestamp);
+ EXPECT_FALSE(trace->IsAvailable());
+
+ trace->End();
+
+ // Shouldn't be available until the queries complete
+ gl_fake_queries_.SetCurrentGLTime(end_timestamp -
+ base::Time::kNanosecondsPerMicrosecond);
+ EXPECT_FALSE(trace->IsAvailable());
+
+ // Now it should be available
+ gl_fake_queries_.SetCurrentGLTime(end_timestamp);
+ EXPECT_TRUE(trace->IsAvailable());
+
+ // Proces should output expected Trace results to MockOutputter
+ trace->Process();
+ }
+}
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/image_manager.cc b/chromium/gpu/command_buffer/service/image_manager.cc
index f39eba21c8a..a3ac4350c87 100644
--- a/chromium/gpu/command_buffer/service/image_manager.cc
+++ b/chromium/gpu/command_buffer/service/image_manager.cc
@@ -15,19 +15,19 @@ ImageManager::ImageManager() : release_after_use_(false) {
ImageManager::~ImageManager() {
}
-bool ImageManager::RegisterGpuMemoryBuffer(int32 id,
+void ImageManager::RegisterGpuMemoryBuffer(int32 id,
gfx::GpuMemoryBufferHandle buffer,
size_t width,
size_t height,
unsigned internalformat) {
if (id <= 0) {
DVLOG(0) << "Cannot register GPU memory buffer with non-positive ID.";
- return false;
+ return;
}
if (LookupImage(id)) {
DVLOG(0) << "GPU memory buffer ID already in use.";
- return false;
+ return;
}
scoped_refptr<gfx::GLImage> gl_image =
@@ -35,16 +35,15 @@ bool ImageManager::RegisterGpuMemoryBuffer(int32 id,
gfx::Size(width, height),
internalformat);
if (!gl_image)
- return false;
+ return;
if (release_after_use_)
gl_image->SetReleaseAfterUse();
AddImage(gl_image.get(), id);
- return true;
}
-void ImageManager::DestroyGpuMemoryBuffer(int32 id) {
+void ImageManager::UnregisterGpuMemoryBuffer(int32 id) {
RemoveImage(id);
}
diff --git a/chromium/gpu/command_buffer/service/image_manager.h b/chromium/gpu/command_buffer/service/image_manager.h
index 51e006d7836..95d836f232e 100644
--- a/chromium/gpu/command_buffer/service/image_manager.h
+++ b/chromium/gpu/command_buffer/service/image_manager.h
@@ -26,12 +26,12 @@ class GPU_EXPORT ImageManager
ImageManager();
// Overridden from GpuMemoryBufferManagerInterface:
- virtual bool RegisterGpuMemoryBuffer(int32 id,
+ virtual void RegisterGpuMemoryBuffer(int32 id,
gfx::GpuMemoryBufferHandle buffer,
size_t width,
size_t height,
unsigned internalformat) OVERRIDE;
- virtual void DestroyGpuMemoryBuffer(int32 id) OVERRIDE;
+ virtual void UnregisterGpuMemoryBuffer(int32 id) OVERRIDE;
void AddImage(gfx::GLImage* gl_image, int32 service_id);
void RemoveImage(int32 service_id);
diff --git a/chromium/gpu/command_buffer/service/in_process_command_buffer.cc b/chromium/gpu/command_buffer/service/in_process_command_buffer.cc
index af14778de27..b1e59a85d3f 100644
--- a/chromium/gpu/command_buffer/service/in_process_command_buffer.cc
+++ b/chromium/gpu/command_buffer/service/in_process_command_buffer.cc
@@ -5,6 +5,7 @@
#include "gpu/command_buffer/service/in_process_command_buffer.h"
#include <queue>
+#include <set>
#include <utility>
#include <GLES2/gl2.h>
@@ -21,13 +22,16 @@
#include "base/memory/weak_ptr.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/sequence_checker.h"
+#include "base/synchronization/condition_variable.h"
#include "base/threading/thread.h"
+#include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/gl_context_virtual.h"
#include "gpu/command_buffer/service/gpu_control_service.h"
#include "gpu/command_buffer/service/gpu_scheduler.h"
#include "gpu/command_buffer/service/image_manager.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "ui/gfx/size.h"
#include "ui/gl/gl_context.h"
@@ -43,11 +47,6 @@ namespace gpu {
namespace {
-static base::LazyInstance<std::set<InProcessCommandBuffer*> >
- g_all_shared_contexts = LAZY_INSTANCE_INITIALIZER;
-
-static bool g_use_virtualized_gl_context = false;
-static bool g_uses_explicit_scheduling = false;
static GpuMemoryBufferFactory* g_gpu_memory_buffer_factory = NULL;
template <typename T>
@@ -60,14 +59,29 @@ static void RunTaskWithResult(base::Callback<T(void)> task,
class GpuInProcessThread
: public base::Thread,
+ public InProcessCommandBuffer::Service,
public base::RefCountedThreadSafe<GpuInProcessThread> {
public:
GpuInProcessThread();
+ virtual void AddRef() const OVERRIDE {
+ base::RefCountedThreadSafe<GpuInProcessThread>::AddRef();
+ }
+ virtual void Release() const OVERRIDE {
+ base::RefCountedThreadSafe<GpuInProcessThread>::Release();
+ }
+
+ virtual void ScheduleTask(const base::Closure& task) OVERRIDE;
+ virtual void ScheduleIdleWork(const base::Closure& callback) OVERRIDE;
+ virtual bool UseVirtualizedGLContexts() OVERRIDE { return false; }
+ virtual scoped_refptr<gles2::ShaderTranslatorCache> shader_translator_cache()
+ OVERRIDE;
+
private:
- friend class base::RefCountedThreadSafe<GpuInProcessThread>;
virtual ~GpuInProcessThread();
+ friend class base::RefCountedThreadSafe<GpuInProcessThread>;
+ scoped_refptr<gpu::gles2::ShaderTranslatorCache> shader_translator_cache_;
DISALLOW_COPY_AND_ASSIGN(GpuInProcessThread);
};
@@ -79,195 +93,134 @@ GpuInProcessThread::~GpuInProcessThread() {
Stop();
}
-// Used with explicit scheduling when there is no dedicated GPU thread.
-class GpuCommandQueue {
- public:
- GpuCommandQueue();
- ~GpuCommandQueue();
-
- void QueueTask(const base::Closure& task);
- void RunTasks();
- void SetScheduleCallback(const base::Closure& callback);
-
- private:
- base::Lock tasks_lock_;
- std::queue<base::Closure> tasks_;
- base::Closure schedule_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(GpuCommandQueue);
-};
-
-GpuCommandQueue::GpuCommandQueue() {}
-
-GpuCommandQueue::~GpuCommandQueue() {
- base::AutoLock lock(tasks_lock_);
- DCHECK(tasks_.empty());
+void GpuInProcessThread::ScheduleTask(const base::Closure& task) {
+ message_loop()->PostTask(FROM_HERE, task);
}
-void GpuCommandQueue::QueueTask(const base::Closure& task) {
- {
- base::AutoLock lock(tasks_lock_);
- tasks_.push(task);
- }
-
- DCHECK(!schedule_callback_.is_null());
- schedule_callback_.Run();
-}
-
-void GpuCommandQueue::RunTasks() {
- size_t num_tasks;
- {
- base::AutoLock lock(tasks_lock_);
- num_tasks = tasks_.size();
- }
-
- while (num_tasks) {
- base::Closure task;
- {
- base::AutoLock lock(tasks_lock_);
- task = tasks_.front();
- tasks_.pop();
- num_tasks = tasks_.size();
- }
-
- task.Run();
- }
+void GpuInProcessThread::ScheduleIdleWork(const base::Closure& callback) {
+ message_loop()->PostDelayedTask(
+ FROM_HERE, callback, base::TimeDelta::FromMilliseconds(5));
}
-void GpuCommandQueue::SetScheduleCallback(const base::Closure& callback) {
- DCHECK(schedule_callback_.is_null());
- schedule_callback_ = callback;
+scoped_refptr<gles2::ShaderTranslatorCache>
+GpuInProcessThread::shader_translator_cache() {
+ if (!shader_translator_cache_.get())
+ shader_translator_cache_ = new gpu::gles2::ShaderTranslatorCache;
+ return shader_translator_cache_;
}
-static base::LazyInstance<GpuCommandQueue> g_gpu_queue =
+base::LazyInstance<std::set<InProcessCommandBuffer*> > default_thread_clients_ =
+ LAZY_INSTANCE_INITIALIZER;
+base::LazyInstance<base::Lock> default_thread_clients_lock_ =
LAZY_INSTANCE_INITIALIZER;
-class SchedulerClientBase : public InProcessCommandBuffer::SchedulerClient {
+class ScopedEvent {
public:
- explicit SchedulerClientBase(bool need_thread);
- virtual ~SchedulerClientBase();
-
- static bool HasClients();
-
- protected:
- scoped_refptr<GpuInProcessThread> thread_;
+ ScopedEvent(base::WaitableEvent* event) : event_(event) {}
+ ~ScopedEvent() { event_->Signal(); }
private:
- static base::LazyInstance<std::set<SchedulerClientBase*> > all_clients_;
- static base::LazyInstance<base::Lock> all_clients_lock_;
+ base::WaitableEvent* event_;
};
-base::LazyInstance<std::set<SchedulerClientBase*> >
- SchedulerClientBase::all_clients_ = LAZY_INSTANCE_INITIALIZER;
-base::LazyInstance<base::Lock> SchedulerClientBase::all_clients_lock_ =
- LAZY_INSTANCE_INITIALIZER;
-
-SchedulerClientBase::SchedulerClientBase(bool need_thread) {
- base::AutoLock lock(all_clients_lock_.Get());
- if (need_thread) {
- if (!all_clients_.Get().empty()) {
- SchedulerClientBase* other = *all_clients_.Get().begin();
- thread_ = other->thread_;
- DCHECK(thread_.get());
- } else {
- thread_ = new GpuInProcessThread;
- }
- }
- all_clients_.Get().insert(this);
-}
-
-SchedulerClientBase::~SchedulerClientBase() {
- base::AutoLock lock(all_clients_lock_.Get());
- all_clients_.Get().erase(this);
-}
-
-bool SchedulerClientBase::HasClients() {
- base::AutoLock lock(all_clients_lock_.Get());
- return !all_clients_.Get().empty();
-}
-
-// A client that talks to the GPU thread
-class ThreadClient : public SchedulerClientBase {
+class SyncPointManager {
public:
- ThreadClient();
- virtual void QueueTask(const base::Closure& task) OVERRIDE;
- virtual void ScheduleIdleWork(const base::Closure& callback) OVERRIDE;
+ SyncPointManager();
+ ~SyncPointManager();
+
+ uint32 GenerateSyncPoint();
+ void RetireSyncPoint(uint32 sync_point);
+
+ bool IsSyncPointPassed(uint32 sync_point);
+ void WaitSyncPoint(uint32 sync_point);
+
+private:
+ // This lock protects access to pending_sync_points_ and next_sync_point_ and
+ // is used with the ConditionVariable to signal when a sync point is retired.
+ base::Lock lock_;
+ std::set<uint32> pending_sync_points_;
+ uint32 next_sync_point_;
+ base::ConditionVariable cond_var_;
};
-ThreadClient::ThreadClient() : SchedulerClientBase(true) {
- DCHECK(thread_.get());
-}
+SyncPointManager::SyncPointManager() : next_sync_point_(1), cond_var_(&lock_) {}
-void ThreadClient::QueueTask(const base::Closure& task) {
- thread_->message_loop()->PostTask(FROM_HERE, task);
+SyncPointManager::~SyncPointManager() {
+ DCHECK_EQ(pending_sync_points_.size(), 0U);
}
-void ThreadClient::ScheduleIdleWork(const base::Closure& callback) {
- thread_->message_loop()->PostDelayedTask(
- FROM_HERE, callback, base::TimeDelta::FromMilliseconds(5));
+uint32 SyncPointManager::GenerateSyncPoint() {
+ base::AutoLock lock(lock_);
+ uint32 sync_point = next_sync_point_++;
+ DCHECK_EQ(pending_sync_points_.count(sync_point), 0U);
+ pending_sync_points_.insert(sync_point);
+ return sync_point;
}
-// A client that talks to the GpuCommandQueue
-class QueueClient : public SchedulerClientBase {
- public:
- QueueClient();
- virtual void QueueTask(const base::Closure& task) OVERRIDE;
- virtual void ScheduleIdleWork(const base::Closure& callback) OVERRIDE;
-};
-
-QueueClient::QueueClient() : SchedulerClientBase(false) {
- DCHECK(!thread_.get());
+void SyncPointManager::RetireSyncPoint(uint32 sync_point) {
+ base::AutoLock lock(lock_);
+ DCHECK(pending_sync_points_.count(sync_point));
+ pending_sync_points_.erase(sync_point);
+ cond_var_.Broadcast();
}
-void QueueClient::QueueTask(const base::Closure& task) {
- g_gpu_queue.Get().QueueTask(task);
+bool SyncPointManager::IsSyncPointPassed(uint32 sync_point) {
+ base::AutoLock lock(lock_);
+ return pending_sync_points_.count(sync_point) == 0;
}
-void QueueClient::ScheduleIdleWork(const base::Closure& callback) {
- // TODO(sievers): Should this do anything?
+void SyncPointManager::WaitSyncPoint(uint32 sync_point) {
+ base::AutoLock lock(lock_);
+ while (pending_sync_points_.count(sync_point)) {
+ cond_var_.Wait();
+ }
}
-static scoped_ptr<InProcessCommandBuffer::SchedulerClient>
-CreateSchedulerClient() {
- scoped_ptr<InProcessCommandBuffer::SchedulerClient> client;
- if (g_uses_explicit_scheduling)
- client.reset(new QueueClient);
- else
- client.reset(new ThreadClient);
+base::LazyInstance<SyncPointManager> g_sync_point_manager =
+ LAZY_INSTANCE_INITIALIZER;
- return client.Pass();
+bool WaitSyncPoint(uint32 sync_point) {
+ g_sync_point_manager.Get().WaitSyncPoint(sync_point);
+ return true;
}
-class ScopedEvent {
- public:
- ScopedEvent(base::WaitableEvent* event) : event_(event) {}
- ~ScopedEvent() { event_->Signal(); }
+} // anonyous namespace
- private:
- base::WaitableEvent* event_;
-};
+InProcessCommandBuffer::Service::Service() {}
-} // anonyous namespace
+InProcessCommandBuffer::Service::~Service() {}
-InProcessCommandBuffer::InProcessCommandBuffer()
+scoped_refptr<InProcessCommandBuffer::Service>
+InProcessCommandBuffer::GetDefaultService() {
+ base::AutoLock lock(default_thread_clients_lock_.Get());
+ scoped_refptr<Service> service;
+ if (!default_thread_clients_.Get().empty()) {
+ InProcessCommandBuffer* other = *default_thread_clients_.Get().begin();
+ service = other->service_;
+ DCHECK(service.get());
+ } else {
+ service = new GpuInProcessThread;
+ }
+ return service;
+}
+
+InProcessCommandBuffer::InProcessCommandBuffer(
+ const scoped_refptr<Service>& service)
: context_lost_(false),
- share_group_id_(0),
last_put_offset_(-1),
flush_event_(false, false),
- queue_(CreateSchedulerClient()),
- gpu_thread_weak_ptr_factory_(this) {}
+ service_(service.get() ? service : GetDefaultService()),
+ gpu_thread_weak_ptr_factory_(this) {
+ if (!service) {
+ base::AutoLock lock(default_thread_clients_lock_.Get());
+ default_thread_clients_.Get().insert(this);
+ }
+}
InProcessCommandBuffer::~InProcessCommandBuffer() {
Destroy();
-}
-
-bool InProcessCommandBuffer::IsContextLost() {
- CheckSequencedThread();
- if (context_lost_ || !command_buffer_) {
- return true;
- }
- CommandBuffer::State state = GetState();
- return error::IsError(state.error);
+ base::AutoLock lock(default_thread_clients_lock_.Get());
+ default_thread_clients_.Get().erase(this);
}
void InProcessCommandBuffer::OnResizeView(gfx::Size size, float scale_factor) {
@@ -308,17 +261,14 @@ bool InProcessCommandBuffer::GetBufferChanged(int32 transfer_buffer_id) {
bool InProcessCommandBuffer::Initialize(
scoped_refptr<gfx::GLSurface> surface,
bool is_offscreen,
- bool share_resources,
gfx::AcceleratedWidget window,
const gfx::Size& size,
const std::vector<int32>& attribs,
gfx::GpuPreference gpu_preference,
const base::Closure& context_lost_callback,
- unsigned int share_group_id) {
-
- share_resources_ = share_resources;
+ InProcessCommandBuffer* share_group) {
+ DCHECK(!share_group || service_ == share_group->service_);
context_lost_callback_ = WrapCallback(context_lost_callback);
- share_group_id_ = share_group_id;
if (surface) {
// GPU thread must be the same as client thread due to GLSurface not being
@@ -328,8 +278,13 @@ bool InProcessCommandBuffer::Initialize(
}
gpu::Capabilities capabilities;
- InitializeOnGpuThreadParams params(
- is_offscreen, window, size, attribs, gpu_preference, &capabilities);
+ InitializeOnGpuThreadParams params(is_offscreen,
+ window,
+ size,
+ attribs,
+ gpu_preference,
+ &capabilities,
+ share_group);
base::Callback<bool(void)> init_task =
base::Bind(&InProcessCommandBuffer::InitializeOnGpuThread,
@@ -342,8 +297,11 @@ bool InProcessCommandBuffer::Initialize(
base::Bind(&RunTaskWithResult<bool>, init_task, &result, &completion));
completion.Wait();
- if (result)
+ if (result) {
capabilities_ = capabilities;
+ capabilities_.map_image =
+ capabilities_.map_image && g_gpu_memory_buffer_factory;
+ }
return result;
}
@@ -351,9 +309,6 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
const InitializeOnGpuThreadParams& params) {
CheckSequencedThread();
gpu_thread_weak_ptr_ = gpu_thread_weak_ptr_factory_.GetWeakPtr();
- // Use one share group for all contexts.
- CR_DEFINE_STATIC_LOCAL(scoped_refptr<gfx::GLShareGroup>, share_group,
- (new gfx::GLShareGroup));
DCHECK(params.size.width() >= 0 && params.size.height() >= 0);
@@ -374,41 +329,24 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
return false;
}
- InProcessCommandBuffer* context_group = NULL;
-
- if (share_resources_ && !g_all_shared_contexts.Get().empty()) {
- DCHECK(share_group_id_);
- for (std::set<InProcessCommandBuffer*>::iterator it =
- g_all_shared_contexts.Get().begin();
- it != g_all_shared_contexts.Get().end();
- ++it) {
- if ((*it)->share_group_id_ == share_group_id_) {
- context_group = *it;
- DCHECK(context_group->share_resources_);
- context_lost_ = context_group->IsContextLost();
- break;
- }
- }
- if (!context_group)
- share_group = new gfx::GLShareGroup;
- }
+ gl_share_group_ = params.context_group
+ ? params.context_group->gl_share_group_.get()
+ : new gfx::GLShareGroup;
- StreamTextureManager* stream_texture_manager = NULL;
#if defined(OS_ANDROID)
- stream_texture_manager = stream_texture_manager_ =
- context_group ? context_group->stream_texture_manager_.get()
- : new StreamTextureManagerInProcess;
+ stream_texture_manager_.reset(new StreamTextureManagerInProcess);
#endif
bool bind_generates_resource = false;
decoder_.reset(gles2::GLES2Decoder::Create(
- context_group ? context_group->decoder_->GetContextGroup()
- : new gles2::ContextGroup(NULL,
- NULL,
- NULL,
- stream_texture_manager,
- NULL,
- bind_generates_resource)));
+ params.context_group
+ ? params.context_group->decoder_->GetContextGroup()
+ : new gles2::ContextGroup(NULL,
+ NULL,
+ NULL,
+ service_->shader_translator_cache(),
+ NULL,
+ bind_generates_resource)));
gpu_scheduler_.reset(
new GpuScheduler(command_buffer.get(), decoder_.get(), decoder_.get()));
@@ -431,16 +369,16 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
return false;
}
- if (g_use_virtualized_gl_context) {
- context_ = share_group->GetSharedContext();
+ if (service_->UseVirtualizedGLContexts()) {
+ context_ = gl_share_group_->GetSharedContext();
if (!context_.get()) {
context_ = gfx::GLContext::CreateGLContext(
- share_group.get(), surface_.get(), params.gpu_preference);
- share_group->SetSharedContext(context_.get());
+ gl_share_group_.get(), surface_.get(), params.gpu_preference);
+ gl_share_group_->SetSharedContext(context_.get());
}
context_ = new GLContextVirtual(
- share_group.get(), context_.get(), decoder_->AsWeakPtr());
+ gl_share_group_.get(), context_.get(), decoder_->AsWeakPtr());
if (context_->Initialize(surface_.get(), params.gpu_preference)) {
VLOG(1) << "Created virtual GL context.";
} else {
@@ -448,7 +386,7 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
}
} else {
context_ = gfx::GLContext::CreateGLContext(
- share_group.get(), surface_.get(), params.gpu_preference);
+ gl_share_group_.get(), surface_.get(), params.gpu_preference);
}
if (!context_.get()) {
@@ -475,24 +413,17 @@ bool InProcessCommandBuffer::InitializeOnGpuThread(
DestroyOnGpuThread();
return false;
}
+ *params.capabilities = decoder_->GetCapabilities();
gpu_control_.reset(
new GpuControlService(decoder_->GetContextGroup()->image_manager(),
- g_gpu_memory_buffer_factory,
- decoder_->GetContextGroup()->mailbox_manager(),
- decoder_->GetQueryManager(),
- decoder_->GetCapabilities()));
-
- *params.capabilities = gpu_control_->GetCapabilities();
+ decoder_->GetQueryManager()));
if (!params.is_offscreen) {
decoder_->SetResizeCallback(base::Bind(
&InProcessCommandBuffer::OnResizeView, gpu_thread_weak_ptr_));
}
-
- if (share_resources_) {
- g_all_shared_contexts.Pointer()->insert(this);
- }
+ decoder_->SetWaitSyncPointCallback(base::Bind(&WaitSyncPoint));
return true;
}
@@ -521,8 +452,11 @@ bool InProcessCommandBuffer::DestroyOnGpuThread() {
}
context_ = NULL;
surface_ = NULL;
+ gl_share_group_ = NULL;
+#if defined(OS_ANDROID)
+ stream_texture_manager_.reset();
+#endif
- g_all_shared_contexts.Pointer()->erase(this);
return true;
}
@@ -539,14 +473,6 @@ void InProcessCommandBuffer::OnContextLost() {
}
context_lost_ = true;
- if (share_resources_) {
- for (std::set<InProcessCommandBuffer*>::iterator it =
- g_all_shared_contexts.Get().begin();
- it != g_all_shared_contexts.Get().end();
- ++it) {
- (*it)->context_lost_ = true;
- }
- }
}
CommandBuffer::State InProcessCommandBuffer::GetStateFast() {
@@ -557,11 +483,6 @@ CommandBuffer::State InProcessCommandBuffer::GetStateFast() {
return last_state_;
}
-CommandBuffer::State InProcessCommandBuffer::GetState() {
- CheckSequencedThread();
- return GetStateFast();
-}
-
CommandBuffer::State InProcessCommandBuffer::GetLastState() {
CheckSequencedThread();
return last_state_;
@@ -581,7 +502,7 @@ void InProcessCommandBuffer::FlushOnGpuThread(int32 put_offset) {
{
// Update state before signaling the flush event.
base::AutoLock lock(state_after_last_flush_lock_);
- state_after_last_flush_ = command_buffer_->GetState();
+ state_after_last_flush_ = command_buffer_->GetLastState();
}
DCHECK((!error::IsError(state_after_last_flush_.error) && !context_lost_) ||
(error::IsError(state_after_last_flush_.error) && context_lost_));
@@ -590,7 +511,7 @@ void InProcessCommandBuffer::FlushOnGpuThread(int32 put_offset) {
// pump idle work until the query is passed.
if (put_offset == state_after_last_flush_.get_offset &&
gpu_scheduler_->HasMoreWork()) {
- queue_->ScheduleIdleWork(
+ service_->ScheduleIdleWork(
base::Bind(&InProcessCommandBuffer::ScheduleMoreIdleWork,
gpu_thread_weak_ptr_));
}
@@ -601,7 +522,7 @@ void InProcessCommandBuffer::ScheduleMoreIdleWork() {
base::AutoLock lock(command_buffer_lock_);
if (gpu_scheduler_->HasMoreWork()) {
gpu_scheduler_->PerformIdleWork();
- queue_->ScheduleIdleWork(
+ service_->ScheduleIdleWork(
base::Bind(&InProcessCommandBuffer::ScheduleMoreIdleWork,
gpu_thread_weak_ptr_));
}
@@ -622,21 +543,22 @@ void InProcessCommandBuffer::Flush(int32 put_offset) {
QueueTask(task);
}
-CommandBuffer::State InProcessCommandBuffer::FlushSync(int32 put_offset,
- int32 last_known_get) {
+void InProcessCommandBuffer::WaitForTokenInRange(int32 start, int32 end) {
+ CheckSequencedThread();
+ while (!InRange(start, end, GetLastToken()) &&
+ last_state_.error == gpu::error::kNoError)
+ flush_event_.Wait();
+}
+
+void InProcessCommandBuffer::WaitForGetOffsetInRange(int32 start, int32 end) {
CheckSequencedThread();
- if (put_offset == last_known_get || last_state_.error != gpu::error::kNoError)
- return last_state_;
- Flush(put_offset);
GetStateFast();
- while (last_known_get == last_state_.get_offset &&
+ while (!InRange(start, end, last_state_.get_offset) &&
last_state_.error == gpu::error::kNoError) {
flush_event_.Wait();
GetStateFast();
}
-
- return last_state_;
}
void InProcessCommandBuffer::SetGetBuffer(int32 shm_id) {
@@ -651,12 +573,12 @@ void InProcessCommandBuffer::SetGetBuffer(int32 shm_id) {
}
{
base::AutoLock lock(state_after_last_flush_lock_);
- state_after_last_flush_ = command_buffer_->GetState();
+ state_after_last_flush_ = command_buffer_->GetLastState();
}
}
-gpu::Buffer InProcessCommandBuffer::CreateTransferBuffer(size_t size,
- int32* id) {
+scoped_refptr<Buffer> InProcessCommandBuffer::CreateTransferBuffer(size_t size,
+ int32* id) {
CheckSequencedThread();
base::AutoLock lock(command_buffer_lock_);
return command_buffer_->CreateTransferBuffer(size, id);
@@ -664,16 +586,17 @@ gpu::Buffer InProcessCommandBuffer::CreateTransferBuffer(size_t size,
void InProcessCommandBuffer::DestroyTransferBuffer(int32 id) {
CheckSequencedThread();
- base::Closure task = base::Bind(&CommandBuffer::DestroyTransferBuffer,
- base::Unretained(command_buffer_.get()),
- id);
+ base::Closure task =
+ base::Bind(&InProcessCommandBuffer::DestroyTransferBufferOnGputhread,
+ base::Unretained(this),
+ id);
QueueTask(task);
}
-gpu::Buffer InProcessCommandBuffer::GetTransferBuffer(int32 id) {
- NOTREACHED();
- return gpu::Buffer();
+void InProcessCommandBuffer::DestroyTransferBufferOnGputhread(int32 id) {
+ base::AutoLock lock(command_buffer_lock_);
+ command_buffer_->DestroyTransferBuffer(id);
}
gpu::Capabilities InProcessCommandBuffer::GetCapabilities() {
@@ -684,45 +607,96 @@ gfx::GpuMemoryBuffer* InProcessCommandBuffer::CreateGpuMemoryBuffer(
size_t width,
size_t height,
unsigned internalformat,
+ unsigned usage,
int32* id) {
CheckSequencedThread();
- base::AutoLock lock(command_buffer_lock_);
- return gpu_control_->CreateGpuMemoryBuffer(width,
- height,
- internalformat,
- id);
+
+ *id = -1;
+ linked_ptr<gfx::GpuMemoryBuffer> buffer =
+ make_linked_ptr(g_gpu_memory_buffer_factory->CreateGpuMemoryBuffer(
+ width, height, internalformat, usage));
+ if (!buffer.get())
+ return NULL;
+
+ static int32 next_id = 1;
+ *id = next_id++;
+
+ base::Closure task = base::Bind(&GpuControlService::RegisterGpuMemoryBuffer,
+ base::Unretained(gpu_control_.get()),
+ *id,
+ buffer->GetHandle(),
+ width,
+ height,
+ internalformat);
+
+ QueueTask(task);
+
+ gpu_memory_buffers_[*id] = buffer;
+ return buffer.get();
}
void InProcessCommandBuffer::DestroyGpuMemoryBuffer(int32 id) {
CheckSequencedThread();
- base::Closure task = base::Bind(&GpuControl::DestroyGpuMemoryBuffer,
+ GpuMemoryBufferMap::iterator it = gpu_memory_buffers_.find(id);
+ if (it != gpu_memory_buffers_.end())
+ gpu_memory_buffers_.erase(it);
+ base::Closure task = base::Bind(&GpuControlService::UnregisterGpuMemoryBuffer,
base::Unretained(gpu_control_.get()),
id);
QueueTask(task);
}
-bool InProcessCommandBuffer::GenerateMailboxNames(
- unsigned num, std::vector<gpu::Mailbox>* names) {
- CheckSequencedThread();
- base::AutoLock lock(command_buffer_lock_);
- return gpu_control_->GenerateMailboxNames(num, names);
-}
-
uint32 InProcessCommandBuffer::InsertSyncPoint() {
- return 0;
+ uint32 sync_point = g_sync_point_manager.Get().GenerateSyncPoint();
+ QueueTask(base::Bind(&InProcessCommandBuffer::RetireSyncPointOnGpuThread,
+ base::Unretained(this),
+ sync_point));
+ return sync_point;
+}
+
+void InProcessCommandBuffer::RetireSyncPointOnGpuThread(uint32 sync_point) {
+ gles2::MailboxManager* mailbox_manager =
+ decoder_->GetContextGroup()->mailbox_manager();
+ if (mailbox_manager->UsesSync()) {
+ bool make_current_success = false;
+ {
+ base::AutoLock lock(command_buffer_lock_);
+ make_current_success = MakeCurrent();
+ }
+ if (make_current_success)
+ mailbox_manager->PushTextureUpdates();
+ }
+ g_sync_point_manager.Get().RetireSyncPoint(sync_point);
}
void InProcessCommandBuffer::SignalSyncPoint(unsigned sync_point,
const base::Closure& callback) {
CheckSequencedThread();
- QueueTask(WrapCallback(callback));
+ QueueTask(base::Bind(&InProcessCommandBuffer::SignalSyncPointOnGpuThread,
+ base::Unretained(this),
+ sync_point,
+ WrapCallback(callback)));
+}
+
+void InProcessCommandBuffer::SignalSyncPointOnGpuThread(
+ unsigned sync_point,
+ const base::Closure& callback) {
+ if (g_sync_point_manager.Get().IsSyncPointPassed(sync_point)) {
+ callback.Run();
+ } else {
+ service_->ScheduleIdleWork(
+ base::Bind(&InProcessCommandBuffer::SignalSyncPointOnGpuThread,
+ gpu_thread_weak_ptr_,
+ sync_point,
+ callback));
+ }
}
void InProcessCommandBuffer::SignalQuery(unsigned query,
const base::Closure& callback) {
CheckSequencedThread();
- QueueTask(base::Bind(&GpuControl::SignalQuery,
+ QueueTask(base::Bind(&GpuControlService::SignalQuery,
base::Unretained(gpu_control_.get()),
query,
WrapCallback(callback)));
@@ -730,14 +704,33 @@ void InProcessCommandBuffer::SignalQuery(unsigned query,
void InProcessCommandBuffer::SetSurfaceVisible(bool visible) {}
-void InProcessCommandBuffer::SendManagedMemoryStats(
- const gpu::ManagedMemoryStats& stats) {
-}
-
void InProcessCommandBuffer::Echo(const base::Closure& callback) {
QueueTask(WrapCallback(callback));
}
+uint32 InProcessCommandBuffer::CreateStreamTexture(uint32 texture_id) {
+ base::WaitableEvent completion(true, false);
+ uint32 stream_id = 0;
+ base::Callback<uint32(void)> task =
+ base::Bind(&InProcessCommandBuffer::CreateStreamTextureOnGpuThread,
+ base::Unretained(this),
+ texture_id);
+ QueueTask(
+ base::Bind(&RunTaskWithResult<uint32>, task, &stream_id, &completion));
+ completion.Wait();
+ return stream_id;
+}
+
+uint32 InProcessCommandBuffer::CreateStreamTextureOnGpuThread(
+ uint32 client_texture_id) {
+#if defined(OS_ANDROID)
+ return stream_texture_manager_->CreateStreamTexture(
+ client_texture_id, decoder_->GetContextGroup()->texture_manager());
+#else
+ return 0;
+#endif
+}
+
gpu::error::Error InProcessCommandBuffer::GetLastError() {
CheckSequencedThread();
return last_state_.error;
@@ -748,19 +741,6 @@ bool InProcessCommandBuffer::Initialize() {
return false;
}
-void InProcessCommandBuffer::SetGetOffset(int32 get_offset) { NOTREACHED(); }
-
-void InProcessCommandBuffer::SetToken(int32 token) { NOTREACHED(); }
-
-void InProcessCommandBuffer::SetParseError(gpu::error::Error error) {
- NOTREACHED();
-}
-
-void InProcessCommandBuffer::SetContextLostReason(
- gpu::error::ContextLostReason reason) {
- NOTREACHED();
-}
-
namespace {
void PostCallback(const scoped_refptr<base::MessageLoopProxy>& loop,
@@ -801,25 +781,6 @@ InProcessCommandBuffer::GetSurfaceTexture(uint32 stream_id) {
#endif
// static
-void InProcessCommandBuffer::EnableVirtualizedContext() {
- g_use_virtualized_gl_context = true;
-}
-
-// static
-void InProcessCommandBuffer::SetScheduleCallback(
- const base::Closure& callback) {
- DCHECK(!g_uses_explicit_scheduling);
- DCHECK(!SchedulerClientBase::HasClients());
- g_uses_explicit_scheduling = true;
- g_gpu_queue.Get().SetScheduleCallback(callback);
-}
-
-// static
-void InProcessCommandBuffer::ProcessGpuWorkOnCurrentThread() {
- g_gpu_queue.Get().RunTasks();
-}
-
-// static
void InProcessCommandBuffer::SetGpuMemoryBufferFactory(
GpuMemoryBufferFactory* factory) {
g_gpu_memory_buffer_factory = factory;
diff --git a/chromium/gpu/command_buffer/service/in_process_command_buffer.h b/chromium/gpu/command_buffer/service/in_process_command_buffer.h
index b00f25be97e..f8986d81ab0 100644
--- a/chromium/gpu/command_buffer/service/in_process_command_buffer.h
+++ b/chromium/gpu/command_buffer/service/in_process_command_buffer.h
@@ -5,17 +5,19 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_
#define GPU_COMMAND_BUFFER_SERVICE_IN_PROCESS_COMMAND_BUFFER_H_
+#include <map>
#include <vector>
#include "base/callback.h"
#include "base/compiler_specific.h"
+#include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/synchronization/lock.h"
#include "base/synchronization/waitable_event.h"
+#include "gpu/command_buffer/client/gpu_control.h"
#include "gpu/command_buffer/common/command_buffer.h"
-#include "gpu/command_buffer/common/gpu_control.h"
#include "gpu/gpu_export.h"
#include "ui/gfx/gpu_memory_buffer.h"
#include "ui/gfx/native_widget_types.h"
@@ -28,6 +30,7 @@ class SequenceChecker;
namespace gfx {
class GLContext;
+class GLShareGroup;
class GLSurface;
class Size;
}
@@ -45,8 +48,11 @@ namespace gpu {
namespace gles2 {
class GLES2Decoder;
+class ShaderTranslatorCache;
}
+class CommandBufferServiceBase;
+class GpuControlService;
class GpuMemoryBufferFactory;
class GpuScheduler;
class TransferBufferManagerInterface;
@@ -58,21 +64,10 @@ class TransferBufferManagerInterface;
class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer,
public GpuControl {
public:
- InProcessCommandBuffer();
+ class Service;
+ explicit InProcessCommandBuffer(const scoped_refptr<Service>& service);
virtual ~InProcessCommandBuffer();
- // Used to override the GPU thread with explicit scheduling.
- // (By default an internal GPU thread will be spawned to handle all GL work
- // and the two functions are unused.)
- // The callback will be called from different client threads. After the
- // callback is issued, the client is expected to eventually call
- // ProcessGpuWorkOnCurrentThread(). The latter cannot be called from different
- // threads.
- // The callback needs to be set before any context is created.
- static void SetScheduleCallback(const base::Closure& callback);
- static void ProcessGpuWorkOnCurrentThread();
-
- static void EnableVirtualizedContext();
static void SetGpuMemoryBufferFactory(GpuMemoryBufferFactory* factory);
// If |surface| is not NULL, use it directly; in this case, the command
@@ -80,64 +75,63 @@ class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer,
// a new GLSurface.
bool Initialize(scoped_refptr<gfx::GLSurface> surface,
bool is_offscreen,
- bool share_resources,
gfx::AcceleratedWidget window,
const gfx::Size& size,
const std::vector<int32>& attribs,
gfx::GpuPreference gpu_preference,
const base::Closure& context_lost_callback,
- unsigned int share_group_id);
+ InProcessCommandBuffer* share_group);
void Destroy();
// CommandBuffer implementation:
virtual bool Initialize() OVERRIDE;
- virtual State GetState() OVERRIDE;
virtual State GetLastState() OVERRIDE;
virtual int32 GetLastToken() OVERRIDE;
virtual void Flush(int32 put_offset) OVERRIDE;
- virtual State FlushSync(int32 put_offset, int32 last_known_get) OVERRIDE;
+ virtual void WaitForTokenInRange(int32 start, int32 end) OVERRIDE;
+ virtual void WaitForGetOffsetInRange(int32 start, int32 end) OVERRIDE;
virtual void SetGetBuffer(int32 shm_id) OVERRIDE;
- virtual void SetGetOffset(int32 get_offset) OVERRIDE;
- virtual gpu::Buffer CreateTransferBuffer(size_t size, int32* id) OVERRIDE;
+ virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
+ int32* id) OVERRIDE;
virtual void DestroyTransferBuffer(int32 id) OVERRIDE;
- virtual gpu::Buffer GetTransferBuffer(int32 id) OVERRIDE;
- virtual void SetToken(int32 token) OVERRIDE;
- virtual void SetParseError(gpu::error::Error error) OVERRIDE;
- virtual void SetContextLostReason(
- gpu::error::ContextLostReason reason) OVERRIDE;
virtual gpu::error::Error GetLastError() OVERRIDE;
// GpuControl implementation:
virtual gpu::Capabilities GetCapabilities() OVERRIDE;
- virtual gfx::GpuMemoryBuffer* CreateGpuMemoryBuffer(
- size_t width,
- size_t height,
- unsigned internalformat,
- int32* id) OVERRIDE;
+ virtual gfx::GpuMemoryBuffer* CreateGpuMemoryBuffer(size_t width,
+ size_t height,
+ unsigned internalformat,
+ unsigned usage,
+ int32* id) OVERRIDE;
virtual void DestroyGpuMemoryBuffer(int32 id) OVERRIDE;
- virtual bool GenerateMailboxNames(unsigned num,
- std::vector<gpu::Mailbox>* names) OVERRIDE;
virtual uint32 InsertSyncPoint() OVERRIDE;
virtual void SignalSyncPoint(uint32 sync_point,
const base::Closure& callback) OVERRIDE;
virtual void SignalQuery(uint32 query,
const base::Closure& callback) OVERRIDE;
virtual void SetSurfaceVisible(bool visible) OVERRIDE;
- virtual void SendManagedMemoryStats(const gpu::ManagedMemoryStats& stats)
- OVERRIDE;
virtual void Echo(const base::Closure& callback) OVERRIDE;
+ virtual uint32 CreateStreamTexture(uint32 texture_id) OVERRIDE;
// The serializer interface to the GPU service (i.e. thread).
- class SchedulerClient {
+ class Service {
public:
- virtual ~SchedulerClient() {}
+ Service();
+ virtual ~Service();
- // Queues a task to run as soon as possible.
- virtual void QueueTask(const base::Closure& task) = 0;
+ virtual void AddRef() const = 0;
+ virtual void Release() const = 0;
- // Schedules |callback| to run at an appropriate time for performing idle
- // work.
- virtual void ScheduleIdleWork(const base::Closure& task) = 0;
+ // Queues a task to run as soon as possible.
+ virtual void ScheduleTask(const base::Closure& task) = 0;
+
+ // Schedules |callback| to run at an appropriate time for performing idle
+ // work.
+ virtual void ScheduleIdleWork(const base::Closure& task) = 0;
+
+ virtual bool UseVirtualizedGLContexts() = 0;
+ virtual scoped_refptr<gles2::ShaderTranslatorCache>
+ shader_translator_cache() = 0;
};
#if defined(OS_ANDROID)
@@ -153,30 +147,37 @@ class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer,
const std::vector<int32>& attribs;
gfx::GpuPreference gpu_preference;
gpu::Capabilities* capabilities; // Ouptut.
+ InProcessCommandBuffer* context_group;
InitializeOnGpuThreadParams(bool is_offscreen,
gfx::AcceleratedWidget window,
const gfx::Size& size,
const std::vector<int32>& attribs,
gfx::GpuPreference gpu_preference,
- gpu::Capabilities* capabilities)
+ gpu::Capabilities* capabilities,
+ InProcessCommandBuffer* share_group)
: is_offscreen(is_offscreen),
window(window),
size(size),
attribs(attribs),
gpu_preference(gpu_preference),
- capabilities(capabilities) {}
+ capabilities(capabilities),
+ context_group(share_group) {}
};
bool InitializeOnGpuThread(const InitializeOnGpuThreadParams& params);
bool DestroyOnGpuThread();
void FlushOnGpuThread(int32 put_offset);
+ uint32 CreateStreamTextureOnGpuThread(uint32 client_texture_id);
bool MakeCurrent();
- bool IsContextLost();
base::Closure WrapCallback(const base::Closure& callback);
State GetStateFast();
- void QueueTask(const base::Closure& task) { queue_->QueueTask(task); }
+ void QueueTask(const base::Closure& task) { service_->ScheduleTask(task); }
void CheckSequencedThread();
+ void RetireSyncPointOnGpuThread(uint32 sync_point);
+ void SignalSyncPointOnGpuThread(uint32 sync_point,
+ const base::Closure& callback);
+ void DestroyTransferBufferOnGputhread(int32 id);
// Callbacks:
void OnContextLost();
@@ -185,34 +186,37 @@ class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer,
void PumpCommands();
void ScheduleMoreIdleWork();
+ static scoped_refptr<Service> GetDefaultService();
+
// Members accessed on the gpu thread (possibly with the exception of
// creation):
bool context_lost_;
- bool share_resources_;
scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
scoped_ptr<GpuScheduler> gpu_scheduler_;
scoped_ptr<gles2::GLES2Decoder> decoder_;
scoped_refptr<gfx::GLContext> context_;
scoped_refptr<gfx::GLSurface> surface_;
base::Closure context_lost_callback_;
- unsigned int share_group_id_;
// Members accessed on the client thread:
State last_state_;
int32 last_put_offset_;
gpu::Capabilities capabilities_;
+ typedef std::map<int32, linked_ptr<gfx::GpuMemoryBuffer> > GpuMemoryBufferMap;
+ GpuMemoryBufferMap gpu_memory_buffers_;
// Accessed on both threads:
- scoped_ptr<CommandBuffer> command_buffer_;
+ scoped_ptr<CommandBufferServiceBase> command_buffer_;
base::Lock command_buffer_lock_;
base::WaitableEvent flush_event_;
- scoped_ptr<SchedulerClient> queue_;
+ scoped_refptr<Service> service_;
State state_after_last_flush_;
base::Lock state_after_last_flush_lock_;
- scoped_ptr<GpuControl> gpu_control_;
+ scoped_ptr<GpuControlService> gpu_control_;
+ scoped_refptr<gfx::GLShareGroup> gl_share_group_;
#if defined(OS_ANDROID)
- scoped_refptr<StreamTextureManagerInProcess> stream_texture_manager_;
+ scoped_ptr<StreamTextureManagerInProcess> stream_texture_manager_;
#endif
// Only used with explicit scheduling and the gpu thread is the same as
diff --git a/chromium/gpu/command_buffer/service/mailbox_manager.cc b/chromium/gpu/command_buffer/service/mailbox_manager.cc
index bb2f7262a2f..12a13fbac4c 100644
--- a/chromium/gpu/command_buffer/service/mailbox_manager.cc
+++ b/chromium/gpu/command_buffer/service/mailbox_manager.cc
@@ -6,26 +6,16 @@
#include <algorithm>
-#include "base/rand_util.h"
-#include "crypto/hmac.h"
+#include "crypto/random.h"
+#include "gpu/command_buffer/service/mailbox_synchronizer.h"
#include "gpu/command_buffer/service/texture_manager.h"
namespace gpu {
namespace gles2 {
-MailboxName::MailboxName() {
- std::fill(key, key + sizeof(key), 0);
- std::fill(signature, signature + sizeof(signature), 0);
-}
-
MailboxManager::MailboxManager()
- : hmac_(crypto::HMAC::SHA256),
- mailbox_to_textures_(std::ptr_fun(&MailboxManager::TargetNameLess)) {
- base::RandBytes(private_key_, sizeof(private_key_));
- bool success = hmac_.Init(
- base::StringPiece(private_key_, sizeof(private_key_)));
- DCHECK(success);
- DCHECK(!IsMailboxNameValid(MailboxName()));
+ : mailbox_to_textures_(std::ptr_fun(&MailboxManager::TargetNameLess)),
+ sync_(MailboxSynchronizer::GetInstance()) {
}
MailboxManager::~MailboxManager() {
@@ -33,42 +23,49 @@ MailboxManager::~MailboxManager() {
DCHECK(textures_to_mailboxes_.empty());
}
-void MailboxManager::GenerateMailboxName(MailboxName* name) {
- base::RandBytes(name->key, sizeof(name->key));
- SignMailboxName(name);
-}
-
Texture* MailboxManager::ConsumeTexture(unsigned target,
- const MailboxName& name) {
+ const Mailbox& mailbox) {
+ TargetName target_name(target, mailbox);
MailboxToTextureMap::iterator it =
- mailbox_to_textures_.find(TargetName(target, name));
- if (it == mailbox_to_textures_.end())
- return NULL;
+ mailbox_to_textures_.find(target_name);
+ if (it != mailbox_to_textures_.end())
+ return it->second->first;
+
+ if (sync_) {
+ // See if it's visible in another mailbox manager, and if so make it visible
+ // here too.
+ Texture* texture = sync_->CreateTextureFromMailbox(target, mailbox);
+ if (texture) {
+ InsertTexture(target_name, texture);
+ DCHECK_EQ(0U, texture->refs_.size());
+ }
+ return texture;
+ }
- DCHECK(IsMailboxNameValid(name));
- return it->second->first;
+ return NULL;
}
-bool MailboxManager::ProduceTexture(unsigned target,
- const MailboxName& name,
+void MailboxManager::ProduceTexture(unsigned target,
+ const Mailbox& mailbox,
Texture* texture) {
- if (!IsMailboxNameValid(name))
- return false;
-
- texture->SetMailboxManager(this);
- TargetName target_name(target, name);
+ TargetName target_name(target, mailbox);
MailboxToTextureMap::iterator it = mailbox_to_textures_.find(target_name);
if (it != mailbox_to_textures_.end()) {
+ if (it->second->first == texture)
+ return;
TextureToMailboxMap::iterator texture_it = it->second;
mailbox_to_textures_.erase(it);
textures_to_mailboxes_.erase(texture_it);
}
+ InsertTexture(target_name, texture);
+}
+
+void MailboxManager::InsertTexture(TargetName target_name, Texture* texture) {
+ texture->SetMailboxManager(this);
TextureToMailboxMap::iterator texture_it =
textures_to_mailboxes_.insert(std::make_pair(texture, target_name));
mailbox_to_textures_.insert(std::make_pair(target_name, texture_it));
DCHECK_EQ(mailbox_to_textures_.size(), textures_to_mailboxes_.size());
-
- return true;
}
void MailboxManager::TextureDeleted(Texture* texture) {
@@ -82,27 +79,24 @@ void MailboxManager::TextureDeleted(Texture* texture) {
}
textures_to_mailboxes_.erase(range.first, range.second);
DCHECK_EQ(mailbox_to_textures_.size(), textures_to_mailboxes_.size());
+
+ if (sync_)
+ sync_->TextureDeleted(texture);
}
-void MailboxManager::SignMailboxName(MailboxName* name) {
- bool success = hmac_.Sign(
- base::StringPiece(reinterpret_cast<char*>(name->key), sizeof(name->key)),
- reinterpret_cast<unsigned char*>(name->signature),
- sizeof(name->signature));
- DCHECK(success);
+void MailboxManager::PushTextureUpdates() {
+ if (sync_)
+ sync_->PushTextureUpdates(this);
}
-bool MailboxManager::IsMailboxNameValid(const MailboxName& name) {
- return hmac_.Verify(
- base::StringPiece(reinterpret_cast<const char*>(name.key),
- sizeof(name.key)),
- base::StringPiece(reinterpret_cast<const char*>(name.signature),
- sizeof(name.signature)));
+void MailboxManager::PullTextureUpdates() {
+ if (sync_)
+ sync_->PullTextureUpdates(this);
}
-MailboxManager::TargetName::TargetName(unsigned target, const MailboxName& name)
+MailboxManager::TargetName::TargetName(unsigned target, const Mailbox& mailbox)
: target(target),
- name(name) {
+ mailbox(mailbox) {
}
bool MailboxManager::TargetNameLess(const MailboxManager::TargetName& lhs,
diff --git a/chromium/gpu/command_buffer/service/mailbox_manager.h b/chromium/gpu/command_buffer/service/mailbox_manager.h
index c97302813a0..e1b36cb934e 100644
--- a/chromium/gpu/command_buffer/service/mailbox_manager.h
+++ b/chromium/gpu/command_buffer/service/mailbox_manager.h
@@ -10,68 +10,55 @@
#include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h"
-#include "crypto/hmac.h"
#include "gpu/command_buffer/common/constants.h"
+#include "gpu/command_buffer/common/mailbox.h"
#include "gpu/gpu_export.h"
-// From gl2/gl2ext.h.
-#ifndef GL_MAILBOX_SIZE_CHROMIUM
-#define GL_MAILBOX_SIZE_CHROMIUM 64
-#endif
-
typedef signed char GLbyte;
namespace gpu {
namespace gles2 {
+class MailboxSynchronizer;
class Texture;
class TextureManager;
-// Identifies a mailbox where a texture definition can be stored for
-// transferring textures between contexts that are not in the same context
-// group. It is a random key signed with a hash of a private key.
-struct GPU_EXPORT MailboxName {
- MailboxName();
- GLbyte key[GL_MAILBOX_SIZE_CHROMIUM / 2];
- GLbyte signature[GL_MAILBOX_SIZE_CHROMIUM / 2];
-};
-
// Manages resources scoped beyond the context or context group level.
class GPU_EXPORT MailboxManager : public base::RefCounted<MailboxManager> {
public:
MailboxManager();
- // Generate a unique mailbox name signed with the manager's private key.
- void GenerateMailboxName(MailboxName* name);
-
// Look up the texture definition from the named mailbox.
- Texture* ConsumeTexture(unsigned target, const MailboxName& name);
+ Texture* ConsumeTexture(unsigned target, const Mailbox& mailbox);
// Put the texture into the named mailbox.
- bool ProduceTexture(unsigned target,
- const MailboxName& name,
+ void ProduceTexture(unsigned target,
+ const Mailbox& mailbox,
Texture* texture);
+ // Returns whether this manager synchronizes with other instances.
+ bool UsesSync() { return sync_ != NULL; }
+
+ // Used with the MailboxSynchronizer to push/pull texture state to/from
+ // other manager instances.
+ void PushTextureUpdates();
+ void PullTextureUpdates();
+
// Destroy any mailbox that reference the given texture.
void TextureDeleted(Texture* texture);
- std::string private_key() {
- return std::string(private_key_, sizeof(private_key_));
- }
-
private:
friend class base::RefCounted<MailboxManager>;
+ friend class MailboxSynchronizer;
~MailboxManager();
- void SignMailboxName(MailboxName* name);
- bool IsMailboxNameValid(const MailboxName& name);
-
struct TargetName {
- TargetName(unsigned target, const MailboxName& name);
+ TargetName(unsigned target, const Mailbox& mailbox);
unsigned target;
- MailboxName name;
+ Mailbox mailbox;
};
+ void InsertTexture(TargetName target_name, Texture* texture);
static bool TargetNameLess(const TargetName& lhs, const TargetName& rhs);
@@ -80,17 +67,17 @@ class GPU_EXPORT MailboxManager : public base::RefCounted<MailboxManager> {
// iterator in the MailboxToTextureMap to be able to manage changes to
// the TextureToMailboxMap efficiently.
typedef std::multimap<Texture*, TargetName> TextureToMailboxMap;
- typedef std::map<
- TargetName,
- TextureToMailboxMap::iterator,
- std::pointer_to_binary_function<
- const TargetName&, const TargetName&, bool> > MailboxToTextureMap;
-
- char private_key_[GL_MAILBOX_SIZE_CHROMIUM / 2];
- crypto::HMAC hmac_;
+ typedef std::map<TargetName,
+ TextureToMailboxMap::iterator,
+ std::pointer_to_binary_function<const TargetName&,
+ const TargetName&,
+ bool> > MailboxToTextureMap;
+
MailboxToTextureMap mailbox_to_textures_;
TextureToMailboxMap textures_to_mailboxes_;
+ MailboxSynchronizer* sync_;
+
DISALLOW_COPY_AND_ASSIGN(MailboxManager);
};
} // namespage gles2
@@ -98,4 +85,3 @@ class GPU_EXPORT MailboxManager : public base::RefCounted<MailboxManager> {
#endif // GPU_COMMAND_BUFFER_SERVICE_MAILBOX_MANAGER_H_
-
diff --git a/chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc b/chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc
index 8864843571d..8e57faa96c0 100644
--- a/chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc
@@ -4,20 +4,81 @@
#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
+#include "gpu/command_buffer/service/mailbox_synchronizer.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_context_stub.h"
+#include "ui/gl/gl_mock.h"
+#include "ui/gl/gl_surface_stub.h"
namespace gpu {
namespace gles2 {
-class MailboxManagerTest : public testing::Test {
+using namespace ::testing;
+
+class MailboxManagerTest : public GpuServiceTest {
public:
- MailboxManagerTest() : manager_(new MailboxManager()) {}
+ MailboxManagerTest() : initialized_synchronizer_(false) {}
virtual ~MailboxManagerTest() {}
protected:
+ virtual void SetUp() {
+ GpuServiceTest::SetUp();
+ feature_info_ = new FeatureInfo;
+ manager_ = new MailboxManager;
+ }
+
+ virtual void SetUpWithSynchronizer() {
+ GpuServiceTest::SetUp();
+ MailboxSynchronizer::Initialize();
+ initialized_synchronizer_ = true;
+ feature_info_ = new FeatureInfo;
+ manager_ = new MailboxManager;
+ }
+
+ virtual void TearDown() {
+ if (initialized_synchronizer_)
+ MailboxSynchronizer::Terminate();
+ GpuServiceTest::TearDown();
+ }
+
Texture* CreateTexture() {
- return new Texture(0);
+ return new Texture(1);
+ }
+
+ void SetTarget(Texture* texture, GLenum target, GLuint max_level) {
+ texture->SetTarget(NULL, target, max_level);
+ }
+
+ void SetLevelInfo(
+ Texture* texture,
+ GLenum target,
+ GLint level,
+ GLenum internal_format,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ bool cleared) {
+ texture->SetLevelInfo(NULL,
+ target,
+ level,
+ internal_format,
+ width,
+ height,
+ depth,
+ border,
+ format,
+ type,
+ cleared);
+ }
+
+ GLenum SetParameter(Texture* texture, GLenum pname, GLint param) {
+ return texture->SetParameteri(feature_info_, pname, param);
}
void DestroyTexture(Texture* texture) {
@@ -27,6 +88,9 @@ class MailboxManagerTest : public testing::Test {
scoped_refptr<MailboxManager> manager_;
private:
+ bool initialized_synchronizer_;
+ scoped_refptr<FeatureInfo> feature_info_;
+
DISALLOW_COPY_AND_ASSIGN(MailboxManagerTest);
};
@@ -34,9 +98,8 @@ class MailboxManagerTest : public testing::Test {
TEST_F(MailboxManagerTest, Basic) {
Texture* texture = CreateTexture();
- MailboxName name;
- manager_->GenerateMailboxName(&name);
- EXPECT_TRUE(manager_->ProduceTexture(0, name, texture));
+ Mailbox name = Mailbox::Generate();
+ manager_->ProduceTexture(0, name, texture);
EXPECT_EQ(texture, manager_->ConsumeTexture(0, name));
// We can consume multiple times.
@@ -50,34 +113,22 @@ TEST_F(MailboxManagerTest, Basic) {
EXPECT_EQ(NULL, manager_->ConsumeTexture(0, name));
}
-// Should fail to produce or consume with an invalid mailbox.
-TEST_F(MailboxManagerTest, InvalidName) {
- Texture* texture = CreateTexture();
- MailboxName name;
- memset(&name, 0, sizeof(name));
- EXPECT_FALSE(manager_->ProduceTexture(0, name, texture));
- EXPECT_EQ(NULL, manager_->ConsumeTexture(0, name));
- DestroyTexture(texture);
-}
-
// Tests behavior with multiple produce on the same texture.
TEST_F(MailboxManagerTest, ProduceMultipleMailbox) {
Texture* texture = CreateTexture();
- MailboxName name1;
- manager_->GenerateMailboxName(&name1);
+ Mailbox name1 = Mailbox::Generate();
- EXPECT_TRUE(manager_->ProduceTexture(0, name1, texture));
+ manager_->ProduceTexture(0, name1, texture);
EXPECT_EQ(texture, manager_->ConsumeTexture(0, name1));
// Can produce a second time with the same mailbox.
- EXPECT_TRUE(manager_->ProduceTexture(0, name1, texture));
+ manager_->ProduceTexture(0, name1, texture);
EXPECT_EQ(texture, manager_->ConsumeTexture(0, name1));
// Can produce again, with a different mailbox.
- MailboxName name2;
- manager_->GenerateMailboxName(&name2);
- EXPECT_TRUE(manager_->ProduceTexture(0, name2, texture));
+ Mailbox name2 = Mailbox::Generate();
+ manager_->ProduceTexture(0, name2, texture);
// Still available under all mailboxes.
EXPECT_EQ(texture, manager_->ConsumeTexture(0, name1));
@@ -95,14 +146,13 @@ TEST_F(MailboxManagerTest, ProduceMultipleTexture) {
Texture* texture1 = CreateTexture();
Texture* texture2 = CreateTexture();
- MailboxName name;
- manager_->GenerateMailboxName(&name);
+ Mailbox name = Mailbox::Generate();
- EXPECT_TRUE(manager_->ProduceTexture(0, name, texture1));
+ manager_->ProduceTexture(0, name, texture1);
EXPECT_EQ(texture1, manager_->ConsumeTexture(0, name));
// Can produce a second time with the same mailbox, but different texture.
- EXPECT_TRUE(manager_->ProduceTexture(0, name, texture2));
+ manager_->ProduceTexture(0, name, texture2);
EXPECT_EQ(texture2, manager_->ConsumeTexture(0, name));
// Destroying the texture that's under no mailbox shouldn't have an effect.
@@ -117,19 +167,17 @@ TEST_F(MailboxManagerTest, ProduceMultipleTexture) {
TEST_F(MailboxManagerTest, ProduceMultipleTextureMailbox) {
Texture* texture1 = CreateTexture();
Texture* texture2 = CreateTexture();
- MailboxName name1;
- manager_->GenerateMailboxName(&name1);
- MailboxName name2;
- manager_->GenerateMailboxName(&name2);
+ Mailbox name1 = Mailbox::Generate();
+ Mailbox name2 = Mailbox::Generate();
// Put texture1 on name1 and name2.
- EXPECT_TRUE(manager_->ProduceTexture(0, name1, texture1));
- EXPECT_TRUE(manager_->ProduceTexture(0, name2, texture1));
+ manager_->ProduceTexture(0, name1, texture1);
+ manager_->ProduceTexture(0, name2, texture1);
EXPECT_EQ(texture1, manager_->ConsumeTexture(0, name1));
EXPECT_EQ(texture1, manager_->ConsumeTexture(0, name2));
// Put texture2 on name2.
- EXPECT_TRUE(manager_->ProduceTexture(0, name2, texture2));
+ manager_->ProduceTexture(0, name2, texture2);
EXPECT_EQ(texture1, manager_->ConsumeTexture(0, name1));
EXPECT_EQ(texture2, manager_->ConsumeTexture(0, name2));
@@ -142,5 +190,290 @@ TEST_F(MailboxManagerTest, ProduceMultipleTextureMailbox) {
EXPECT_EQ(NULL, manager_->ConsumeTexture(0, name2));
}
+const GLsizei kMaxTextureWidth = 64;
+const GLsizei kMaxTextureHeight = 64;
+const GLsizei kMaxTextureDepth = 1;
+
+class MailboxManagerSyncTest : public MailboxManagerTest {
+ public:
+ MailboxManagerSyncTest() {}
+ virtual ~MailboxManagerSyncTest() {}
+
+ protected:
+ virtual void SetUp() {
+ MailboxManagerTest::SetUpWithSynchronizer();
+ manager2_ = new MailboxManager;
+ context_ = new gfx::GLContextStub();
+ surface_ = new gfx::GLSurfaceStub();
+ context_->MakeCurrent(surface_);
+ }
+
+ Texture* DefineTexture() {
+ Texture* texture = CreateTexture();
+ const GLsizei levels_needed = TextureManager::ComputeMipMapCount(
+ GL_TEXTURE_2D, kMaxTextureWidth, kMaxTextureHeight, kMaxTextureDepth);
+ SetTarget(texture, GL_TEXTURE_2D, levels_needed);
+ SetLevelInfo(texture,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 1,
+ 1,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ SetParameter(texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ SetParameter(texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ return texture;
+ }
+
+ void SetupUpdateTexParamExpectations(GLuint texture_id,
+ GLenum min,
+ GLenum mag,
+ GLenum wrap_s,
+ GLenum wrap_t) {
+ DCHECK(texture_id);
+ const GLuint kCurrentTexture = 0;
+ EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_2D, _))
+ .WillOnce(SetArgPointee<1>(kCurrentTexture))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, texture_id))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_,
+ TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, Flush())
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, kCurrentTexture))
+ .Times(1)
+ .RetiresOnSaturation();
+ }
+
+ virtual void TearDown() {
+ context_->ReleaseCurrent(NULL);
+ MailboxManagerTest::TearDown();
+ }
+
+ scoped_refptr<MailboxManager> manager2_;
+ scoped_refptr<gfx::GLContext> context_;
+ scoped_refptr<gfx::GLSurface> surface_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MailboxManagerSyncTest);
+};
+
+TEST_F(MailboxManagerSyncTest, ProduceDestroy) {
+ Texture* texture = DefineTexture();
+ Mailbox name = Mailbox::Generate();
+
+ InSequence sequence;
+ manager_->ProduceTexture(GL_TEXTURE_2D, name, texture);
+ EXPECT_EQ(texture, manager_->ConsumeTexture(GL_TEXTURE_2D, name));
+
+ DestroyTexture(texture);
+ EXPECT_EQ(NULL, manager_->ConsumeTexture(GL_TEXTURE_2D, name));
+ EXPECT_EQ(NULL, manager2_->ConsumeTexture(GL_TEXTURE_2D, name));
+}
+
+TEST_F(MailboxManagerSyncTest, ProduceSyncDestroy) {
+ InSequence sequence;
+
+ Texture* texture = DefineTexture();
+ Mailbox name = Mailbox::Generate();
+
+ manager_->ProduceTexture(GL_TEXTURE_2D, name, texture);
+ EXPECT_EQ(texture, manager_->ConsumeTexture(GL_TEXTURE_2D, name));
+
+ // Synchronize
+ manager_->PushTextureUpdates();
+ manager2_->PullTextureUpdates();
+
+ DestroyTexture(texture);
+ EXPECT_EQ(NULL, manager_->ConsumeTexture(GL_TEXTURE_2D, name));
+ EXPECT_EQ(NULL, manager2_->ConsumeTexture(GL_TEXTURE_2D, name));
+}
+
+// Duplicates a texture into a second manager instance, and then
+// makes sure a redefinition becomes visible there too.
+TEST_F(MailboxManagerSyncTest, ProduceConsumeResize) {
+ const GLuint kNewTextureId = 1234;
+ InSequence sequence;
+
+ Texture* texture = DefineTexture();
+ Mailbox name = Mailbox::Generate();
+
+ manager_->ProduceTexture(GL_TEXTURE_2D, name, texture);
+ EXPECT_EQ(texture, manager_->ConsumeTexture(GL_TEXTURE_2D, name));
+
+ // Synchronize
+ manager_->PushTextureUpdates();
+ manager2_->PullTextureUpdates();
+
+ EXPECT_CALL(*gl_, GenTextures(1, _))
+ .WillOnce(SetArgPointee<1>(kNewTextureId));
+ SetupUpdateTexParamExpectations(
+ kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
+ Texture* new_texture = manager2_->ConsumeTexture(GL_TEXTURE_2D, name);
+ EXPECT_FALSE(new_texture == NULL);
+ EXPECT_NE(texture, new_texture);
+ EXPECT_EQ(kNewTextureId, new_texture->service_id());
+
+ // Resize original texture
+ SetLevelInfo(texture,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 16,
+ 32,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ // Should have been orphaned
+ EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) == NULL);
+
+ // Synchronize again
+ manager_->PushTextureUpdates();
+ SetupUpdateTexParamExpectations(
+ kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
+ manager2_->PullTextureUpdates();
+ GLsizei width, height;
+ new_texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height);
+ EXPECT_EQ(16, width);
+ EXPECT_EQ(32, height);
+
+ // Should have gotten a new attachment
+ EXPECT_TRUE(texture->GetLevelImage(GL_TEXTURE_2D, 0) != NULL);
+ // Resize original texture again....
+ SetLevelInfo(texture,
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 64,
+ 64,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ // ...and immediately delete the texture which should save the changes.
+ SetupUpdateTexParamExpectations(
+ kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
+ DestroyTexture(texture);
+
+ // Should be still around since there is a ref from manager2
+ EXPECT_EQ(new_texture, manager2_->ConsumeTexture(GL_TEXTURE_2D, name));
+
+ // The last change to the texture should be visible without a sync point (i.e.
+ // push).
+ manager2_->PullTextureUpdates();
+ new_texture->GetLevelSize(GL_TEXTURE_2D, 0, &width, &height);
+ EXPECT_EQ(64, width);
+ EXPECT_EQ(64, height);
+
+ DestroyTexture(new_texture);
+ EXPECT_EQ(NULL, manager_->ConsumeTexture(GL_TEXTURE_2D, name));
+ EXPECT_EQ(NULL, manager2_->ConsumeTexture(GL_TEXTURE_2D, name));
+}
+
+// Makes sure changes are correctly published even when updates are
+// pushed in both directions, i.e. makes sure we don't clobber a shared
+// texture definition with an older version.
+TEST_F(MailboxManagerSyncTest, ProduceConsumeBidirectional) {
+ const GLuint kNewTextureId1 = 1234;
+ const GLuint kNewTextureId2 = 4321;
+
+ Texture* texture1 = DefineTexture();
+ Mailbox name1 = Mailbox::Generate();
+ Texture* texture2 = DefineTexture();
+ Mailbox name2 = Mailbox::Generate();
+ Texture* new_texture1 = NULL;
+ Texture* new_texture2 = NULL;
+
+ manager_->ProduceTexture(GL_TEXTURE_2D, name1, texture1);
+ manager2_->ProduceTexture(GL_TEXTURE_2D, name2, texture2);
+
+ // Make visible.
+ manager_->PushTextureUpdates();
+ manager2_->PushTextureUpdates();
+
+ // Create textures in the other manager instances for texture1 and texture2,
+ // respectively to create a real sharing scenario. Otherwise, there would
+ // never be conflicting updates/pushes.
+ {
+ InSequence sequence;
+ EXPECT_CALL(*gl_, GenTextures(1, _))
+ .WillOnce(SetArgPointee<1>(kNewTextureId1));
+ SetupUpdateTexParamExpectations(
+ kNewTextureId1, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
+ new_texture1 = manager2_->ConsumeTexture(GL_TEXTURE_2D, name1);
+ EXPECT_CALL(*gl_, GenTextures(1, _))
+ .WillOnce(SetArgPointee<1>(kNewTextureId2));
+ SetupUpdateTexParamExpectations(
+ kNewTextureId2, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
+ new_texture2 = manager_->ConsumeTexture(GL_TEXTURE_2D, name2);
+ }
+ EXPECT_EQ(kNewTextureId1, new_texture1->service_id());
+ EXPECT_EQ(kNewTextureId2, new_texture2->service_id());
+
+ // Make a change to texture1
+ DCHECK_EQ(static_cast<GLuint>(GL_LINEAR), texture1->min_filter());
+ EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR),
+ SetParameter(texture1, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
+
+ // Make sure this does not clobber it with the previous version we pushed.
+ manager_->PullTextureUpdates();
+
+ // Make a change to texture2
+ DCHECK_EQ(static_cast<GLuint>(GL_LINEAR), texture2->mag_filter());
+ EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR),
+ SetParameter(texture2, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
+
+ Mock::VerifyAndClearExpectations(gl_.get());
+
+ // Synchronize in both directions
+ manager_->PushTextureUpdates();
+ manager2_->PushTextureUpdates();
+ // manager1 should see the change to texture2 mag_filter being applied.
+ SetupUpdateTexParamExpectations(
+ new_texture2->service_id(), GL_LINEAR, GL_NEAREST, GL_REPEAT, GL_REPEAT);
+ manager_->PullTextureUpdates();
+ // manager2 should see the change to texture1 min_filter being applied.
+ SetupUpdateTexParamExpectations(
+ new_texture1->service_id(), GL_NEAREST, GL_LINEAR, GL_REPEAT, GL_REPEAT);
+ manager2_->PullTextureUpdates();
+
+ DestroyTexture(texture1);
+ DestroyTexture(texture2);
+ DestroyTexture(new_texture1);
+ DestroyTexture(new_texture2);
+}
+
+// TODO: different texture into same mailbox
+
+// TODO: same texture, multiple mailboxes
+
+// TODO: Produce incomplete texture
+
+// TODO: Texture::level_infos_[][].size()
+
+// TODO: unsupported targets and formats
+
} // namespace gles2
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/mailbox_synchronizer.cc b/chromium/gpu/command_buffer/service/mailbox_synchronizer.cc
new file mode 100644
index 00000000000..d25368ab096
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/mailbox_synchronizer.cc
@@ -0,0 +1,226 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/mailbox_synchronizer.h"
+
+#include "base/bind.h"
+#include "gpu/command_buffer/service/mailbox_manager.h"
+#include "gpu/command_buffer/service/texture_manager.h"
+#include "ui/gl/gl_implementation.h"
+
+namespace gpu {
+namespace gles2 {
+
+namespace {
+
+MailboxSynchronizer* g_instance = NULL;
+
+} // anonymous namespace
+
+// static
+bool MailboxSynchronizer::Initialize() {
+ DCHECK(!g_instance);
+ DCHECK(gfx::GetGLImplementation() != gfx::kGLImplementationNone)
+ << "GL bindings not initialized";
+ switch (gfx::GetGLImplementation()) {
+ case gfx::kGLImplementationMockGL:
+ break;
+ case gfx::kGLImplementationEGLGLES2:
+#if !defined(OS_MACOSX)
+ {
+ if (!gfx::g_driver_egl.ext.b_EGL_KHR_image_base ||
+ !gfx::g_driver_egl.ext.b_EGL_KHR_gl_texture_2D_image ||
+ !gfx::g_driver_gl.ext.b_GL_OES_EGL_image ||
+ !gfx::g_driver_egl.ext.b_EGL_KHR_fence_sync) {
+ LOG(WARNING) << "MailboxSync not supported due to missing EGL "
+ "image/fence support";
+ return false;
+ }
+ }
+ break;
+#endif
+ default:
+ NOTREACHED();
+ return false;
+ }
+ g_instance = new MailboxSynchronizer;
+ return true;
+}
+
+// static
+void MailboxSynchronizer::Terminate() {
+ DCHECK(g_instance);
+ delete g_instance;
+ g_instance = NULL;
+}
+
+// static
+MailboxSynchronizer* MailboxSynchronizer::GetInstance() {
+ return g_instance;
+}
+
+MailboxSynchronizer::TargetName::TargetName(unsigned target,
+ const Mailbox& mailbox)
+ : target(target), mailbox(mailbox) {}
+
+MailboxSynchronizer::TextureGroup::TextureGroup(
+ const TextureDefinition& definition)
+ : definition(definition) {}
+
+MailboxSynchronizer::TextureGroup::~TextureGroup() {}
+
+MailboxSynchronizer::TextureVersion::TextureVersion(
+ linked_ptr<TextureGroup> group)
+ : version(group->definition.version()), group(group) {}
+
+MailboxSynchronizer::TextureVersion::~TextureVersion() {}
+
+MailboxSynchronizer::MailboxSynchronizer() {}
+
+MailboxSynchronizer::~MailboxSynchronizer() {
+ DCHECK_EQ(0U, textures_.size());
+}
+
+void MailboxSynchronizer::ReassociateMailboxLocked(
+ const TargetName& target_name,
+ TextureGroup* group) {
+ lock_.AssertAcquired();
+ for (TextureMap::iterator it = textures_.begin(); it != textures_.end();
+ it++) {
+ std::set<TargetName>::iterator mb_it =
+ it->second.group->mailboxes.find(target_name);
+ if (it->second.group != group &&
+ mb_it != it->second.group->mailboxes.end()) {
+ it->second.group->mailboxes.erase(mb_it);
+ }
+ }
+ group->mailboxes.insert(target_name);
+}
+
+linked_ptr<MailboxSynchronizer::TextureGroup>
+MailboxSynchronizer::GetGroupForMailboxLocked(const TargetName& target_name) {
+ lock_.AssertAcquired();
+ for (TextureMap::iterator it = textures_.begin(); it != textures_.end();
+ it++) {
+ std::set<TargetName>::const_iterator mb_it =
+ it->second.group->mailboxes.find(target_name);
+ if (mb_it != it->second.group->mailboxes.end())
+ return it->second.group;
+ }
+ return make_linked_ptr<MailboxSynchronizer::TextureGroup>(NULL);
+}
+
+Texture* MailboxSynchronizer::CreateTextureFromMailbox(unsigned target,
+ const Mailbox& mailbox) {
+ base::AutoLock lock(lock_);
+ TargetName target_name(target, mailbox);
+ linked_ptr<TextureGroup> group = GetGroupForMailboxLocked(target_name);
+ if (group.get()) {
+ Texture* new_texture = group->definition.CreateTexture();
+ if (new_texture)
+ textures_.insert(std::make_pair(new_texture, TextureVersion(group)));
+ return new_texture;
+ }
+
+ return NULL;
+}
+
+void MailboxSynchronizer::TextureDeleted(Texture* texture) {
+ base::AutoLock lock(lock_);
+ TextureMap::iterator it = textures_.find(texture);
+ if (it != textures_.end()) {
+ // TODO: We could avoid the update if this was the last ref.
+ UpdateTextureLocked(it->first, it->second);
+ textures_.erase(it);
+ }
+}
+
+void MailboxSynchronizer::PushTextureUpdates(MailboxManager* manager) {
+ base::AutoLock lock(lock_);
+ for (MailboxManager::MailboxToTextureMap::const_iterator texture_it =
+ manager->mailbox_to_textures_.begin();
+ texture_it != manager->mailbox_to_textures_.end();
+ texture_it++) {
+ TargetName target_name(texture_it->first.target, texture_it->first.mailbox);
+ Texture* texture = texture_it->second->first;
+ // TODO(sievers): crbug.com/352274
+ // Should probably only fail if it already *has* mipmaps, while allowing
+ // incomplete textures here. Also reconsider how to fail otherwise.
+ bool needs_mips = texture->min_filter() != GL_NEAREST &&
+ texture->min_filter() != GL_LINEAR;
+ if (target_name.target != GL_TEXTURE_2D || needs_mips)
+ continue;
+
+ TextureMap::iterator it = textures_.find(texture);
+ if (it != textures_.end()) {
+ TextureVersion& texture_version = it->second;
+ TextureGroup* group = texture_version.group.get();
+ std::set<TargetName>::const_iterator mb_it =
+ group->mailboxes.find(target_name);
+ if (mb_it == group->mailboxes.end()) {
+ // We previously did not associate this texture with the given mailbox.
+ // Unlink other texture groups from the mailbox.
+ ReassociateMailboxLocked(target_name, group);
+ }
+ UpdateTextureLocked(texture, texture_version);
+
+ } else {
+ linked_ptr<TextureGroup> group = make_linked_ptr(new TextureGroup(
+ TextureDefinition(target_name.target, texture, 1, NULL)));
+
+ // Unlink other textures from this mailbox in case the name is not new.
+ ReassociateMailboxLocked(target_name, group.get());
+ textures_.insert(std::make_pair(texture, TextureVersion(group)));
+ }
+ }
+}
+
+void MailboxSynchronizer::UpdateTextureLocked(Texture* texture,
+ TextureVersion& texture_version) {
+ lock_.AssertAcquired();
+ gfx::GLImage* gl_image = texture->GetLevelImage(texture->target(), 0);
+ TextureGroup* group = texture_version.group.get();
+ scoped_refptr<NativeImageBuffer> image_buffer = group->definition.image();
+
+ // Make sure we don't clobber with an older version
+ if (!group->definition.IsOlderThan(texture_version.version))
+ return;
+
+ // Also don't push redundant updates. Note that it would break the
+ // versioning.
+ if (group->definition.Matches(texture))
+ return;
+
+ if (gl_image && !image_buffer->IsClient(gl_image)) {
+ LOG(ERROR) << "MailboxSync: Incompatible attachment";
+ return;
+ }
+
+ group->definition = TextureDefinition(texture->target(),
+ texture,
+ ++texture_version.version,
+ gl_image ? image_buffer : NULL);
+}
+
+void MailboxSynchronizer::PullTextureUpdates(MailboxManager* manager) {
+ base::AutoLock lock(lock_);
+ for (MailboxManager::MailboxToTextureMap::const_iterator texture_it =
+ manager->mailbox_to_textures_.begin();
+ texture_it != manager->mailbox_to_textures_.end();
+ texture_it++) {
+ Texture* texture = texture_it->second->first;
+ TextureMap::iterator it = textures_.find(texture);
+ if (it != textures_.end()) {
+ TextureDefinition& definition = it->second.group->definition;
+ if (it->second.version == definition.version() ||
+ definition.IsOlderThan(it->second.version))
+ continue;
+ it->second.version = definition.version();
+ definition.UpdateTexture(texture);
+ }
+ }
+}
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/mailbox_synchronizer.h b/chromium/gpu/command_buffer/service/mailbox_synchronizer.h
new file mode 100644
index 00000000000..a845963bbbf
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/mailbox_synchronizer.h
@@ -0,0 +1,96 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_MAILBOX_SYNCHRONIZER_H_
+#define GPU_COMMAND_BUFFER_SERVICE_MAILBOX_SYNCHRONIZER_H_
+
+#include "gpu/command_buffer/common/mailbox.h"
+
+#include <map>
+#include <set>
+
+#include "base/memory/linked_ptr.h"
+#include "base/synchronization/lock.h"
+#include "gpu/command_buffer/service/texture_definition.h"
+#include "gpu/gpu_export.h"
+
+namespace gpu {
+namespace gles2 {
+
+class MailboxManager;
+class Texture;
+
+// A thread-safe proxy that can be used to emulate texture sharing across
+// share-groups.
+class MailboxSynchronizer {
+ public:
+ ~MailboxSynchronizer();
+
+ GPU_EXPORT static bool Initialize();
+ GPU_EXPORT static void Terminate();
+ static MailboxSynchronizer* GetInstance();
+
+ // Create a texture from a globally visible mailbox.
+ Texture* CreateTextureFromMailbox(unsigned target, const Mailbox& mailbox);
+
+ void PushTextureUpdates(MailboxManager* manager);
+ void PullTextureUpdates(MailboxManager* manager);
+
+ void TextureDeleted(Texture* texture);
+
+ private:
+ MailboxSynchronizer();
+
+ struct TargetName {
+ TargetName(unsigned target, const Mailbox& mailbox);
+ bool operator<(const TargetName& rhs) const {
+ return memcmp(this, &rhs, sizeof(rhs)) < 0;
+ }
+ bool operator!=(const TargetName& rhs) const {
+ return memcmp(this, &rhs, sizeof(rhs)) != 0;
+ }
+ bool operator==(const TargetName& rhs) const {
+ return !operator!=(rhs);
+ }
+ unsigned target;
+ Mailbox mailbox;
+ };
+
+ base::Lock lock_;
+
+ struct TextureGroup {
+ explicit TextureGroup(const TextureDefinition& definition);
+ ~TextureGroup();
+
+ TextureDefinition definition;
+ std::set<TargetName> mailboxes;
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TextureGroup);
+ };
+
+ struct TextureVersion {
+ explicit TextureVersion(linked_ptr<TextureGroup> group);
+ ~TextureVersion();
+
+ unsigned int version;
+ linked_ptr<TextureGroup> group;
+ };
+ typedef std::map<Texture*, TextureVersion> TextureMap;
+ TextureMap textures_;
+
+ linked_ptr<TextureGroup> GetGroupForMailboxLocked(
+ const TargetName& target_name);
+ void ReassociateMailboxLocked(
+ const TargetName& target_name,
+ TextureGroup* group);
+ void UpdateTextureLocked(Texture* texture, TextureVersion& texture_version);
+
+ DISALLOW_COPY_AND_ASSIGN(MailboxSynchronizer);
+};
+
+} // namespage gles2
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_MAILBOX_SYNCHRONIZER_H_
+
diff --git a/chromium/gpu/command_buffer/service/memory_program_cache_unittest.cc b/chromium/gpu/command_buffer/service/memory_program_cache_unittest.cc
index 6c6b099a20e..6973e67afe4 100644
--- a/chromium/gpu/command_buffer/service/memory_program_cache_unittest.cc
+++ b/chromium/gpu/command_buffer/service/memory_program_cache_unittest.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "gpu/command_buffer/common/gles2_cmd_format.h"
#include "gpu/command_buffer/service/gl_utils.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/shader_manager.h"
#include "gpu/command_buffer/service/shader_translator.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -65,7 +66,7 @@ class ProgramBinaryEmulator {
const char* binary_;
};
-class MemoryProgramCacheTest : public testing::Test {
+class MemoryProgramCacheTest : public GpuServiceTest {
public:
static const size_t kCacheSizeBytes = 1024;
static const GLuint kVertexShaderClientId = 90;
@@ -92,8 +93,7 @@ class MemoryProgramCacheTest : public testing::Test {
protected:
virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock<gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ GpuServiceTest::SetUp();
vertex_shader_ = shader_manager_.CreateShader(kVertexShaderClientId,
kVertexShaderServiceId,
@@ -137,11 +137,6 @@ class MemoryProgramCacheTest : public testing::Test {
fragment_shader_->SetStatus(true, NULL, NULL);
}
- virtual void TearDown() {
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
- }
-
void SetExpectationsForSaveLinkedProgram(
const GLint program_id,
ProgramBinaryEmulator* emulator) const {
@@ -181,8 +176,6 @@ class MemoryProgramCacheTest : public testing::Test {
.WillOnce(SetArgPointee<2>(GL_FALSE));
}
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock<gfx::MockGLInterface> > gl_;
scoped_ptr<MemoryProgramCache> cache_;
ShaderManager shader_manager_;
Shader* vertex_shader_;
@@ -481,7 +474,6 @@ TEST_F(MemoryProgramCacheTest, LoadFailOnDifferentMap) {
}
TEST_F(MemoryProgramCacheTest, MemoryProgramCacheEviction) {
- typedef ShaderTranslator::VariableMap VariableMap;
const GLenum kFormat = 1;
const int kProgramId = 10;
const int kBinaryLength = 20;
diff --git a/chromium/gpu/command_buffer/service/mocks.h b/chromium/gpu/command_buffer/service/mocks.h
index 2a95db5f3c8..b64305149e7 100644
--- a/chromium/gpu/command_buffer/service/mocks.h
+++ b/chromium/gpu/command_buffer/service/mocks.h
@@ -93,7 +93,7 @@ class MockShaderTranslator : public ShaderTranslatorInterface {
MOCK_CONST_METHOD0(varying_map, const VariableMap&());
MOCK_CONST_METHOD0(name_map, const NameMap&());
MOCK_CONST_METHOD0(
- GetStringForOptionsThatWouldEffectCompilation, std::string());
+ GetStringForOptionsThatWouldAffectCompilation, std::string());
};
class MockProgramCache : public ProgramCache {
diff --git a/chromium/gpu/command_buffer/service/program_cache.cc b/chromium/gpu/command_buffer/service/program_cache.cc
index 6599d4ad3d9..ad395c7f476 100644
--- a/chromium/gpu/command_buffer/service/program_cache.cc
+++ b/chromium/gpu/command_buffer/service/program_cache.cc
@@ -74,7 +74,7 @@ void ProgramCache::ComputeShaderHash(
const ShaderTranslatorInterface* translator,
char* result) const {
std::string s((
- translator ? translator->GetStringForOptionsThatWouldEffectCompilation() :
+ translator ? translator->GetStringForOptionsThatWouldAffectCompilation() :
std::string()) + str);
base::SHA1HashBytes(reinterpret_cast<const unsigned char*>(s.c_str()),
s.length(), reinterpret_cast<unsigned char*>(result));
diff --git a/chromium/gpu/command_buffer/service/program_manager.cc b/chromium/gpu/command_buffer/service/program_manager.cc
index d6e121a5da6..44169b8e197 100644
--- a/chromium/gpu/command_buffer/service/program_manager.cc
+++ b/chromium/gpu/command_buffer/service/program_manager.cc
@@ -125,16 +125,77 @@ Program::UniformInfo::UniformInfo()
is_array(false) {
}
-Program::UniformInfo::UniformInfo(
- GLsizei _size,
- GLenum _type,
- int _fake_location_base,
- const std::string& _name)
+Program::UniformInfo::UniformInfo(GLsizei _size,
+ GLenum _type,
+ int _fake_location_base,
+ const std::string& _name)
: size(_size),
type(_type),
+ accepts_api_type(0),
fake_location_base(_fake_location_base),
is_array(false),
name(_name) {
+ switch (type) {
+ case GL_INT:
+ accepts_api_type = kUniform1i;
+ break;
+ case GL_INT_VEC2:
+ accepts_api_type = kUniform2i;
+ break;
+ case GL_INT_VEC3:
+ accepts_api_type = kUniform3i;
+ break;
+ case GL_INT_VEC4:
+ accepts_api_type = kUniform4i;
+ break;
+
+ case GL_BOOL:
+ accepts_api_type = kUniform1i | kUniform1f;
+ break;
+ case GL_BOOL_VEC2:
+ accepts_api_type = kUniform2i | kUniform2f;
+ break;
+ case GL_BOOL_VEC3:
+ accepts_api_type = kUniform3i | kUniform3f;
+ break;
+ case GL_BOOL_VEC4:
+ accepts_api_type = kUniform4i | kUniform4f;
+ break;
+
+ case GL_FLOAT:
+ accepts_api_type = kUniform1f;
+ break;
+ case GL_FLOAT_VEC2:
+ accepts_api_type = kUniform2f;
+ break;
+ case GL_FLOAT_VEC3:
+ accepts_api_type = kUniform3f;
+ break;
+ case GL_FLOAT_VEC4:
+ accepts_api_type = kUniform4f;
+ break;
+
+ case GL_FLOAT_MAT2:
+ accepts_api_type = kUniformMatrix2f;
+ break;
+ case GL_FLOAT_MAT3:
+ accepts_api_type = kUniformMatrix3f;
+ break;
+ case GL_FLOAT_MAT4:
+ accepts_api_type = kUniformMatrix4f;
+ break;
+
+ case GL_SAMPLER_2D:
+ case GL_SAMPLER_2D_RECT_ARB:
+ case GL_SAMPLER_CUBE:
+ case GL_SAMPLER_3D_OES:
+ case GL_SAMPLER_EXTERNAL_OES:
+ accepts_api_type = kUniform1i;
+ break;
+ default:
+ NOTREACHED() << "Unhandled UniformInfo type " << type;
+ break;
+ }
}
Program::UniformInfo::~UniformInfo() {}
@@ -179,7 +240,7 @@ std::string Program::ProcessLogInfo(
std::string prior_log;
std::string hashed_name;
while (RE2::Consume(&input,
- "(.*)(webgl_[0123456789abcdefABCDEF]+)",
+ "(.*?)(webgl_[0123456789abcdefABCDEF]+)",
&prior_log,
&hashed_name)) {
output += prior_log;
@@ -357,13 +418,13 @@ void Program::Update() {
#if !defined(NDEBUG)
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableGPUServiceLoggingGPU)) {
- DLOG(INFO) << "----: attribs for service_id: " << service_id();
+ DVLOG(1) << "----: attribs for service_id: " << service_id();
for (size_t ii = 0; ii < attrib_infos_.size(); ++ii) {
const VertexAttrib& info = attrib_infos_[ii];
- DLOG(INFO) << ii << ": loc = " << info.location
- << ", size = " << info.size
- << ", type = " << GLES2Util::GetStringEnum(info.type)
- << ", name = " << info.name;
+ DVLOG(1) << ii << ": loc = " << info.location
+ << ", size = " << info.size
+ << ", type = " << GLES2Util::GetStringEnum(info.type)
+ << ", name = " << info.name;
}
}
#endif
@@ -435,14 +496,14 @@ void Program::Update() {
#if !defined(NDEBUG)
if (CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableGPUServiceLoggingGPU)) {
- DLOG(INFO) << "----: uniforms for service_id: " << service_id();
+ DVLOG(1) << "----: uniforms for service_id: " << service_id();
for (size_t ii = 0; ii < uniform_infos_.size(); ++ii) {
const UniformInfo& info = uniform_infos_[ii];
if (info.IsValid()) {
- DLOG(INFO) << ii << ": loc = " << info.element_locations[0]
- << ", size = " << info.size
- << ", type = " << GLES2Util::GetStringEnum(info.type)
- << ", name = " << info.name;
+ DVLOG(1) << ii << ": loc = " << info.element_locations[0]
+ << ", size = " << info.size
+ << ", type = " << GLES2Util::GetStringEnum(info.type)
+ << ", name = " << info.name;
}
}
}
@@ -533,18 +594,24 @@ bool Program::Link(ShaderManager* manager,
set_log_info("glBindAttribLocation() conflicts");
return false;
}
- if (DetectUniformsMismatch()) {
- set_log_info("Uniforms with the same name but different type/precision");
+ std::string conflicting_name;
+ if (DetectUniformsMismatch(&conflicting_name)) {
+ std::string info_log = "Uniforms with the same name but different "
+ "type/precision: " + conflicting_name;
+ set_log_info(ProcessLogInfo(info_log).c_str());
return false;
}
- if (DetectVaryingsMismatch()) {
- set_log_info("Varyings with the same name but different type, "
- "or statically used varyings in fragment shader are not "
- "declared in vertex shader");
+ if (DetectVaryingsMismatch(&conflicting_name)) {
+ std::string info_log = "Varyings with the same name but different type, "
+ "or statically used varyings in fragment shader are "
+ "not declared in vertex shader: " + conflicting_name;
+ set_log_info(ProcessLogInfo(info_log).c_str());
return false;
}
- if (DetectGlobalNameConflicts()) {
- set_log_info("Name conflicts between an uniform and an attribute");
+ if (DetectGlobalNameConflicts(&conflicting_name)) {
+ std::string info_log = "Name conflicts between an uniform and an "
+ "attribute: " + conflicting_name;
+ set_log_info(ProcessLogInfo(info_log).c_str());
return false;
}
if (!CheckVaryingsPacking(varyings_packing_option)) {
@@ -1005,7 +1072,7 @@ bool Program::DetectAttribLocationBindingConflicts() const {
return false;
}
-bool Program::DetectUniformsMismatch() const {
+bool Program::DetectUniformsMismatch(std::string* conflicting_name) const {
typedef std::map<std::string, UniformType> UniformMap;
UniformMap uniform_map;
for (int ii = 0; ii < kMaxAttachedShaders; ++ii) {
@@ -1024,6 +1091,7 @@ bool Program::DetectUniformsMismatch() const {
// declared by other shader, then the type and precision must match.
if (map_entry->second == type)
continue;
+ *conflicting_name = name;
return true;
}
}
@@ -1031,7 +1099,7 @@ bool Program::DetectUniformsMismatch() const {
return false;
}
-bool Program::DetectVaryingsMismatch() const {
+bool Program::DetectVaryingsMismatch(std::string* conflicting_name) const {
DCHECK(attached_shaders_[0] &&
attached_shaders_[0]->shader_type() == GL_VERTEX_SHADER &&
attached_shaders_[1] &&
@@ -1051,20 +1119,24 @@ bool Program::DetectVaryingsMismatch() const {
ShaderTranslator::VariableMap::const_iterator hit =
vertex_varyings->find(name);
if (hit == vertex_varyings->end()) {
- if (iter->second.static_use)
+ if (iter->second.static_use) {
+ *conflicting_name = name;
return true;
+ }
continue;
}
if (hit->second.type != iter->second.type ||
- hit->second.size != iter->second.size)
+ hit->second.size != iter->second.size) {
+ *conflicting_name = name;
return true;
+ }
}
return false;
}
-bool Program::DetectGlobalNameConflicts() const {
+bool Program::DetectGlobalNameConflicts(std::string* conflicting_name) const {
DCHECK(attached_shaders_[0] &&
attached_shaders_[0]->shader_type() == GL_VERTEX_SHADER &&
attached_shaders_[1] &&
@@ -1078,8 +1150,10 @@ bool Program::DetectGlobalNameConflicts() const {
for (ShaderTranslator::VariableMap::const_iterator iter =
attribs->begin(); iter != attribs->end(); ++iter) {
for (int ii = 0; ii < 2; ++ii) {
- if (uniforms[ii]->find(iter->first) != uniforms[ii]->end())
+ if (uniforms[ii]->find(iter->first) != uniforms[ii]->end()) {
+ *conflicting_name = iter->first;
return true;
+ }
}
}
return false;
diff --git a/chromium/gpu/command_buffer/service/program_manager.h b/chromium/gpu/command_buffer/service/program_manager.h
index 50dd0ff1b80..c1bf3a44d4e 100644
--- a/chromium/gpu/command_buffer/service/program_manager.h
+++ b/chromium/gpu/command_buffer/service/program_manager.h
@@ -38,6 +38,20 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
kCountAll
};
+ enum UniformApiType {
+ kUniform1i = 1 << 0,
+ kUniform2i = 1 << 1,
+ kUniform3i = 1 << 2,
+ kUniform4i = 1 << 3,
+ kUniform1f = 1 << 4,
+ kUniform2f = 1 << 5,
+ kUniform3f = 1 << 6,
+ kUniform4f = 1 << 7,
+ kUniformMatrix2f = 1 << 8,
+ kUniformMatrix3f = 1 << 9,
+ kUniformMatrix4f = 1 << 10,
+ };
+
struct UniformInfo {
UniformInfo();
UniformInfo(
@@ -56,6 +70,7 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
GLsizei size;
GLenum type;
+ uint32 accepts_api_type;
GLint fake_location_base;
bool is_array;
std::string name;
@@ -192,15 +207,16 @@ class GPU_EXPORT Program : public base::RefCounted<Program> {
// Detects if there are uniforms of the same name but different type
// or precision in vertex/fragment shaders.
- // Return true if such cases are detected.
- bool DetectUniformsMismatch() const;
+ // Return true and set the first found conflicting hashed name to
+ // conflicting_name if such cases are detected.
+ bool DetectUniformsMismatch(std::string* conflicting_name) const;
// Return true if a varying is statically used in fragment shader, but it
// is not declared in vertex shader.
- bool DetectVaryingsMismatch() const;
+ bool DetectVaryingsMismatch(std::string* conflicting_name) const;
// Return true if an uniform and an attribute share the same name.
- bool DetectGlobalNameConflicts() const;
+ bool DetectGlobalNameConflicts(std::string* conflicting_name) const;
// Return false if varyings can't be packed into the max available
// varying registers.
diff --git a/chromium/gpu/command_buffer/service/program_manager_unittest.cc b/chromium/gpu/command_buffer/service/program_manager_unittest.cc
index 0823d096452..326486108b1 100644
--- a/chromium/gpu/command_buffer/service/program_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/program_manager_unittest.cc
@@ -13,13 +13,13 @@
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
#include "gpu/command_buffer/service/common_decoder.h"
#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/mocks.h"
#include "gpu/command_buffer/service/shader_manager.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
-using ::gfx::MockGLInterface;
using ::testing::_;
using ::testing::DoAll;
using ::testing::InSequence;
@@ -30,7 +30,6 @@ using ::testing::ReturnRef;
using ::testing::SetArrayArgument;
using ::testing::SetArgumentPointee;
using ::testing::StrEq;
-using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
@@ -41,7 +40,7 @@ const uint32 kMaxVaryingVectors = 8;
void ShaderCacheCb(const std::string& key, const std::string& shader) {}
} // namespace anonymous
-class ProgramManagerTest : public testing::Test {
+class ProgramManagerTest : public GpuServiceTest {
public:
ProgramManagerTest() : manager_(NULL, kMaxVaryingVectors) { }
virtual ~ProgramManagerTest() {
@@ -49,18 +48,6 @@ class ProgramManagerTest : public testing::Test {
}
protected:
- virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
- }
-
- virtual void TearDown() {
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
- }
-
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
ProgramManager manager_;
};
@@ -138,7 +125,7 @@ TEST_F(ProgramManagerTest, Program) {
EXPECT_TRUE(program1->log_info() == NULL);
}
-class ProgramManagerWithShaderTest : public testing::Test {
+class ProgramManagerWithShaderTest : public GpuServiceTest {
public:
ProgramManagerWithShaderTest()
: manager_(NULL, kMaxVaryingVectors), program_(NULL) {
@@ -228,8 +215,7 @@ class ProgramManagerWithShaderTest : public testing::Test {
} VarInfo;
virtual void SetUp() {
- gl_.reset(new StrictMock<gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ GpuServiceTest::SetUp();
SetupDefaultShaderExpectations();
@@ -272,10 +258,6 @@ class ProgramManagerWithShaderTest : public testing::Test {
gl_.get(), uniforms, num_uniforms);
}
- virtual void TearDown() {
- ::gfx::GLInterface::SetGLInterface(NULL);
- }
-
// Return true if link status matches expected_link_status
bool LinkAsExpected(Program* program,
bool expected_link_status) {
@@ -398,8 +380,6 @@ class ProgramManagerWithShaderTest : public testing::Test {
static AttribInfo kAttribs[];
static UniformInfo kUniforms[];
- scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_;
-
ProgramManager manager_;
Program* program_;
ShaderManager shader_manager_;
@@ -1260,7 +1240,10 @@ TEST_F(ProgramManagerWithShaderTest, UniformsPrecisionMismatch) {
EXPECT_TRUE(program->AttachShader(&shader_manager_, vshader));
EXPECT_TRUE(program->AttachShader(&shader_manager_, fshader));
- EXPECT_TRUE(program->DetectUniformsMismatch());
+ std::string conflicting_name;
+
+ EXPECT_TRUE(program->DetectUniformsMismatch(&conflicting_name));
+ EXPECT_EQ("a", conflicting_name);
EXPECT_TRUE(LinkAsExpected(program, false));
}
@@ -1274,7 +1257,10 @@ TEST_F(ProgramManagerWithShaderTest, VaryingTypeMismatch) {
Program* program = SetupShaderVariableTest(
&kVertexVarying, 1, &kFragmentVarying, 1);
- EXPECT_TRUE(program->DetectVaryingsMismatch());
+ std::string conflicting_name;
+
+ EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name));
+ EXPECT_EQ("a", conflicting_name);
EXPECT_TRUE(LinkAsExpected(program, false));
}
@@ -1288,7 +1274,10 @@ TEST_F(ProgramManagerWithShaderTest, VaryingArraySizeMismatch) {
Program* program = SetupShaderVariableTest(
&kVertexVarying, 1, &kFragmentVarying, 1);
- EXPECT_TRUE(program->DetectVaryingsMismatch());
+ std::string conflicting_name;
+
+ EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name));
+ EXPECT_EQ("a", conflicting_name);
EXPECT_TRUE(LinkAsExpected(program, false));
}
@@ -1302,7 +1291,10 @@ TEST_F(ProgramManagerWithShaderTest, VaryingPrecisionMismatch) {
Program* program = SetupShaderVariableTest(
&kVertexVarying, 1, &kFragmentVarying, 1);
- EXPECT_FALSE(program->DetectVaryingsMismatch());
+ std::string conflicting_name;
+
+ EXPECT_FALSE(program->DetectVaryingsMismatch(&conflicting_name));
+ EXPECT_TRUE(conflicting_name.empty());
EXPECT_TRUE(LinkAsExpected(program, true));
}
@@ -1314,7 +1306,10 @@ TEST_F(ProgramManagerWithShaderTest, VaryingMissing) {
Program* program = SetupShaderVariableTest(
NULL, 0, &kFragmentVarying, 1);
- EXPECT_TRUE(program->DetectVaryingsMismatch());
+ std::string conflicting_name;
+
+ EXPECT_TRUE(program->DetectVaryingsMismatch(&conflicting_name));
+ EXPECT_EQ("a", conflicting_name);
EXPECT_TRUE(LinkAsExpected(program, false));
}
@@ -1327,7 +1322,10 @@ TEST_F(ProgramManagerWithShaderTest, InactiveVarying) {
Program* program = SetupShaderVariableTest(
NULL, 0, &kFragmentVarying, 1);
- EXPECT_FALSE(program->DetectVaryingsMismatch());
+ std::string conflicting_name;
+
+ EXPECT_FALSE(program->DetectVaryingsMismatch(&conflicting_name));
+ EXPECT_TRUE(conflicting_name.empty());
EXPECT_TRUE(LinkAsExpected(program, true));
}
@@ -1342,7 +1340,10 @@ TEST_F(ProgramManagerWithShaderTest, AttribUniformNameConflict) {
Program* program = SetupShaderVariableTest(
&kVertexAttribute, 1, &kFragmentUniform, 1);
- EXPECT_TRUE(program->DetectGlobalNameConflicts());
+ std::string conflicting_name;
+
+ EXPECT_TRUE(program->DetectGlobalNameConflicts(&conflicting_name));
+ EXPECT_EQ("a", conflicting_name);
EXPECT_TRUE(LinkAsExpected(program, false));
}
@@ -1548,7 +1549,7 @@ TEST_F(ProgramManagerWithShaderTest, BindUniformLocation) {
program->GetUniformFakeLocation(kUniform3GoodName));
}
-class ProgramManagerWithCacheTest : public testing::Test {
+class ProgramManagerWithCacheTest : public GpuServiceTest {
public:
static const GLuint kClientProgramId = 1;
static const GLuint kServiceProgramId = 10;
@@ -1571,8 +1572,7 @@ class ProgramManagerWithCacheTest : public testing::Test {
protected:
virtual void SetUp() {
- gl_.reset(new StrictMock<gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ GpuServiceTest::SetUp();
vertex_shader_ = shader_manager_.CreateShader(
kVertexShaderClientId, kVertexShaderServiceId, GL_VERTEX_SHADER);
@@ -1591,10 +1591,6 @@ class ProgramManagerWithCacheTest : public testing::Test {
program_->AttachShader(&shader_manager_, fragment_shader_);
}
- virtual void TearDown() {
- ::gfx::GLInterface::SetGLInterface(NULL);
- }
-
void SetShadersCompiled() {
vertex_shader_->SetStatus(true, NULL, NULL);
fragment_shader_->SetStatus(true, NULL, NULL);
@@ -1736,8 +1732,6 @@ class ProgramManagerWithCacheTest : public testing::Test {
.Times(1);
}
- scoped_ptr<StrictMock<gfx::MockGLInterface> > gl_;
-
scoped_ptr<MockProgramCache> cache_;
ProgramManager manager_;
diff --git a/chromium/gpu/command_buffer/service/query_manager.cc b/chromium/gpu/command_buffer/service/query_manager.cc
index db508e0a7f7..ffb54cca514 100644
--- a/chromium/gpu/command_buffer/service/query_manager.cc
+++ b/chromium/gpu/command_buffer/service/query_manager.cc
@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/logging.h"
#include "base/memory/shared_memory.h"
+#include "base/numerics/safe_math.h"
#include "base/synchronization/lock.h"
#include "base/time/time.h"
#include "gpu/command_buffer/common/gles2_cmd_format.h"
@@ -15,6 +16,7 @@
#include "gpu/command_buffer/service/error_state.h"
#include "gpu/command_buffer/service/feature_info.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
+#include "ui/gl/gl_fence.h"
namespace gpu {
namespace gles2 {
@@ -24,9 +26,8 @@ namespace {
class AsyncPixelTransferCompletionObserverImpl
: public AsyncPixelTransferCompletionObserver {
public:
- AsyncPixelTransferCompletionObserverImpl(uint32 submit_count)
- : submit_count_(submit_count),
- cancelled_(false) {}
+ AsyncPixelTransferCompletionObserverImpl(base::subtle::Atomic32 submit_count)
+ : submit_count_(submit_count), cancelled_(false) {}
void Cancel() {
base::AutoLock locked(lock_);
@@ -36,23 +37,17 @@ class AsyncPixelTransferCompletionObserverImpl
virtual void DidComplete(const AsyncMemoryParams& mem_params) OVERRIDE {
base::AutoLock locked(lock_);
if (!cancelled_) {
- DCHECK(mem_params.shared_memory);
- DCHECK(mem_params.shared_memory->memory());
- void* data = static_cast<int8*>(mem_params.shared_memory->memory()) +
- mem_params.shm_data_offset;
+ DCHECK(mem_params.buffer());
+ void* data = mem_params.GetDataAddress();
QuerySync* sync = static_cast<QuerySync*>(data);
-
- // Need a MemoryBarrier here to ensure that upload completed before
- // submit_count was written to sync->process_count.
- base::subtle::MemoryBarrier();
- sync->process_count = submit_count_;
+ base::subtle::Release_Store(&sync->process_count, submit_count_);
}
}
private:
virtual ~AsyncPixelTransferCompletionObserverImpl() {}
- uint32 submit_count_;
+ base::subtle::Atomic32 submit_count_;
base::Lock lock_;
bool cancelled_;
@@ -68,7 +63,7 @@ class AsyncPixelTransfersCompletedQuery
QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
virtual bool Begin() OVERRIDE;
- virtual bool End(uint32 submit_count) OVERRIDE;
+ virtual bool End(base::subtle::Atomic32 submit_count) OVERRIDE;
virtual bool Process() OVERRIDE;
virtual void Destroy(bool have_context) OVERRIDE;
@@ -87,19 +82,16 @@ bool AsyncPixelTransfersCompletedQuery::Begin() {
return true;
}
-bool AsyncPixelTransfersCompletedQuery::End(uint32 submit_count) {
- AsyncMemoryParams mem_params;
+bool AsyncPixelTransfersCompletedQuery::End(
+ base::subtle::Atomic32 submit_count) {
// Get the real shared memory since it might need to be duped to prevent
// use-after-free of the memory.
- Buffer buffer = manager()->decoder()->GetSharedMemoryBuffer(shm_id());
- if (!buffer.shared_memory)
+ scoped_refptr<Buffer> buffer =
+ manager()->decoder()->GetSharedMemoryBuffer(shm_id());
+ if (!buffer)
return false;
- mem_params.shared_memory = buffer.shared_memory;
- mem_params.shm_size = buffer.size;
- mem_params.shm_data_offset = shm_offset();
- mem_params.shm_data_size = sizeof(QuerySync);
- uint32 end = mem_params.shm_data_offset + mem_params.shm_data_size;
- if (end > mem_params.shm_size || end < mem_params.shm_data_offset)
+ AsyncMemoryParams mem_params(buffer, shm_offset(), sizeof(QuerySync));
+ if (!mem_params.GetDataAddress())
return false;
observer_ = new AsyncPixelTransferCompletionObserverImpl(submit_count);
@@ -122,7 +114,7 @@ bool AsyncPixelTransfersCompletedQuery::Process() {
// Check if completion callback has been run. sync->process_count atomicity
// is guaranteed as this is already used to notify client of a completed
// query.
- if (sync->process_count != submit_count())
+ if (base::subtle::Acquire_Load(&sync->process_count) != submit_count())
return true;
UnmarkAsPending();
@@ -148,7 +140,7 @@ class AllSamplesPassedQuery : public QueryManager::Query {
QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset,
GLuint service_id);
virtual bool Begin() OVERRIDE;
- virtual bool End(uint32 submit_count) OVERRIDE;
+ virtual bool End(base::subtle::Atomic32 submit_count) OVERRIDE;
virtual bool Process() OVERRIDE;
virtual void Destroy(bool have_context) OVERRIDE;
@@ -172,7 +164,7 @@ bool AllSamplesPassedQuery::Begin() {
return true;
}
-bool AllSamplesPassedQuery::End(uint32 submit_count) {
+bool AllSamplesPassedQuery::End(base::subtle::Atomic32 submit_count) {
EndQueryHelper(target());
return AddToPendingQueue(submit_count);
}
@@ -207,7 +199,7 @@ class CommandsIssuedQuery : public QueryManager::Query {
QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
virtual bool Begin() OVERRIDE;
- virtual bool End(uint32 submit_count) OVERRIDE;
+ virtual bool End(base::subtle::Atomic32 submit_count) OVERRIDE;
virtual bool Process() OVERRIDE;
virtual void Destroy(bool have_context) OVERRIDE;
@@ -228,7 +220,7 @@ bool CommandsIssuedQuery::Begin() {
return true;
}
-bool CommandsIssuedQuery::End(uint32 submit_count) {
+bool CommandsIssuedQuery::End(base::subtle::Atomic32 submit_count) {
base::TimeDelta elapsed = base::TimeTicks::HighResNow() - begin_time_;
MarkAsPending(submit_count);
return MarkAsCompleted(elapsed.InMicroseconds());
@@ -254,7 +246,7 @@ class CommandLatencyQuery : public QueryManager::Query {
QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
virtual bool Begin() OVERRIDE;
- virtual bool End(uint32 submit_count) OVERRIDE;
+ virtual bool End(base::subtle::Atomic32 submit_count) OVERRIDE;
virtual bool Process() OVERRIDE;
virtual void Destroy(bool have_context) OVERRIDE;
@@ -271,7 +263,7 @@ bool CommandLatencyQuery::Begin() {
return true;
}
-bool CommandLatencyQuery::End(uint32 submit_count) {
+bool CommandLatencyQuery::End(base::subtle::Atomic32 submit_count) {
base::TimeDelta now = base::TimeTicks::HighResNow() - base::TimeTicks();
MarkAsPending(submit_count);
return MarkAsCompleted(now.InMicroseconds());
@@ -300,25 +292,31 @@ class AsyncReadPixelsCompletedQuery
QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
virtual bool Begin() OVERRIDE;
- virtual bool End(uint32 submit_count) OVERRIDE;
+ virtual bool End(base::subtle::Atomic32 submit_count) OVERRIDE;
virtual bool Process() OVERRIDE;
virtual void Destroy(bool have_context) OVERRIDE;
protected:
void Complete();
virtual ~AsyncReadPixelsCompletedQuery();
+
+ private:
+ bool completed_;
+ bool complete_result_;
};
AsyncReadPixelsCompletedQuery::AsyncReadPixelsCompletedQuery(
QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset)
- : Query(manager, target, shm_id, shm_offset) {
+ : Query(manager, target, shm_id, shm_offset),
+ completed_(false),
+ complete_result_(false) {
}
bool AsyncReadPixelsCompletedQuery::Begin() {
return true;
}
-bool AsyncReadPixelsCompletedQuery::End(uint32 submit_count) {
+bool AsyncReadPixelsCompletedQuery::End(base::subtle::Atomic32 submit_count) {
if (!AddToPendingQueue(submit_count)) {
return false;
}
@@ -326,15 +324,16 @@ bool AsyncReadPixelsCompletedQuery::End(uint32 submit_count) {
base::Bind(&AsyncReadPixelsCompletedQuery::Complete,
AsWeakPtr()));
- return true;
+ return Process();
}
void AsyncReadPixelsCompletedQuery::Complete() {
- MarkAsCompleted(1);
+ completed_ = true;
+ complete_result_ = MarkAsCompleted(1);
}
bool AsyncReadPixelsCompletedQuery::Process() {
- return true;
+ return !completed_ || complete_result_;
}
void AsyncReadPixelsCompletedQuery::Destroy(bool /* have_context */) {
@@ -353,7 +352,7 @@ class GetErrorQuery : public QueryManager::Query {
QueryManager* manager, GLenum target, int32 shm_id, uint32 shm_offset);
virtual bool Begin() OVERRIDE;
- virtual bool End(uint32 submit_count) OVERRIDE;
+ virtual bool End(base::subtle::Atomic32 submit_count) OVERRIDE;
virtual bool Process() OVERRIDE;
virtual void Destroy(bool have_context) OVERRIDE;
@@ -372,7 +371,7 @@ bool GetErrorQuery::Begin() {
return true;
}
-bool GetErrorQuery::End(uint32 submit_count) {
+bool GetErrorQuery::End(base::subtle::Atomic32 submit_count) {
MarkAsPending(submit_count);
return MarkAsCompleted(manager()->decoder()->GetErrorState()->GetGLError());
}
@@ -391,6 +390,55 @@ void GetErrorQuery::Destroy(bool /* have_context */) {
GetErrorQuery::~GetErrorQuery() {
}
+class CommandsCompletedQuery : public QueryManager::Query {
+ public:
+ CommandsCompletedQuery(QueryManager* manager,
+ GLenum target,
+ int32 shm_id,
+ uint32 shm_offset);
+
+ // Overridden from QueryManager::Query:
+ virtual bool Begin() OVERRIDE;
+ virtual bool End(base::subtle::Atomic32 submit_count) OVERRIDE;
+ virtual bool Process() OVERRIDE;
+ virtual void Destroy(bool have_context) OVERRIDE;
+
+ protected:
+ virtual ~CommandsCompletedQuery();
+
+ private:
+ scoped_ptr<gfx::GLFence> fence_;
+};
+
+CommandsCompletedQuery::CommandsCompletedQuery(QueryManager* manager,
+ GLenum target,
+ int32 shm_id,
+ uint32 shm_offset)
+ : Query(manager, target, shm_id, shm_offset) {}
+
+bool CommandsCompletedQuery::Begin() { return true; }
+
+bool CommandsCompletedQuery::End(base::subtle::Atomic32 submit_count) {
+ fence_.reset(gfx::GLFence::Create());
+ DCHECK(fence_);
+ return AddToPendingQueue(submit_count);
+}
+
+bool CommandsCompletedQuery::Process() {
+ if (fence_ && !fence_->HasCompleted())
+ return true;
+ return MarkAsCompleted(0);
+}
+
+void CommandsCompletedQuery::Destroy(bool have_context) {
+ if (have_context && !IsDeleted()) {
+ fence_.reset();
+ MarkAsDeleted();
+ }
+}
+
+CommandsCompletedQuery::~CommandsCompletedQuery() {}
+
QueryManager::QueryManager(
GLES2Decoder* decoder,
FeatureInfo* feature_info)
@@ -446,6 +494,9 @@ QueryManager::Query* QueryManager::CreateQuery(
case GL_GET_ERROR_QUERY_CHROMIUM:
query = new GetErrorQuery(this, target, shm_id, shm_offset);
break;
+ case GL_COMMANDS_COMPLETED_CHROMIUM:
+ query = new CommandsCompletedQuery(this, target, shm_id, shm_offset);
+ break;
default: {
GLuint service_id = 0;
glGenQueriesARB(1, &service_id);
@@ -461,6 +512,18 @@ QueryManager::Query* QueryManager::CreateQuery(
return query.get();
}
+void QueryManager::GenQueries(GLsizei n, const GLuint* queries) {
+ DCHECK_GE(n, 0);
+ for (GLsizei i = 0; i < n; ++i) {
+ generated_query_ids_.insert(queries[i]);
+ }
+}
+
+bool QueryManager::IsValidQuery(GLuint id) {
+ GeneratedQueryIds::iterator it = generated_query_ids_.find(id);
+ return it != generated_query_ids_.end();
+}
+
QueryManager::Query* QueryManager::GetQuery(
GLuint client_id) {
QueryMap::iterator it = queries_.find(client_id);
@@ -475,6 +538,7 @@ void QueryManager::RemoveQuery(GLuint client_id) {
query->MarkAsDeleted();
queries_.erase(it);
}
+ generated_query_ids_.erase(client_id);
}
void QueryManager::StartTracking(QueryManager::Query* /* query */) {
@@ -566,10 +630,7 @@ bool QueryManager::Query::MarkAsCompleted(uint64 result) {
pending_ = false;
sync->result = result;
- // Need a MemoryBarrier here so that sync->result is written before
- // sync->process_count.
- base::subtle::MemoryBarrier();
- sync->process_count = submit_count_;
+ base::subtle::Release_Store(&sync->process_count, submit_count_);
return true;
}
@@ -614,7 +675,8 @@ bool QueryManager::HavePendingTransferQueries() {
return !pending_transfer_queries_.empty();
}
-bool QueryManager::AddPendingQuery(Query* query, uint32 submit_count) {
+bool QueryManager::AddPendingQuery(Query* query,
+ base::subtle::Atomic32 submit_count) {
DCHECK(query);
DCHECK(!query->IsDeleted());
if (!RemovePendingQuery(query)) {
@@ -625,7 +687,9 @@ bool QueryManager::AddPendingQuery(Query* query, uint32 submit_count) {
return true;
}
-bool QueryManager::AddPendingTransferQuery(Query* query, uint32 submit_count) {
+bool QueryManager::AddPendingTransferQuery(
+ Query* query,
+ base::subtle::Atomic32 submit_count) {
DCHECK(query);
DCHECK(!query->IsDeleted());
if (!RemovePendingQuery(query)) {
@@ -671,7 +735,7 @@ bool QueryManager::BeginQuery(Query* query) {
return query->Begin();
}
-bool QueryManager::EndQuery(Query* query, uint32 submit_count) {
+bool QueryManager::EndQuery(Query* query, base::subtle::Atomic32 submit_count) {
DCHECK(query);
if (!RemovePendingQuery(query)) {
return false;
diff --git a/chromium/gpu/command_buffer/service/query_manager.h b/chromium/gpu/command_buffer/service/query_manager.h
index d77982b897f..36d424cefb3 100644
--- a/chromium/gpu/command_buffer/service/query_manager.h
+++ b/chromium/gpu/command_buffer/service/query_manager.h
@@ -7,6 +7,7 @@
#include <deque>
#include <vector>
+#include "base/atomicops.h"
#include "base/basictypes.h"
#include "base/containers/hash_tables.h"
#include "base/logging.h"
@@ -61,7 +62,7 @@ class GPU_EXPORT QueryManager {
virtual bool Begin() = 0;
// Returns false if shared memory for sync is invalid.
- virtual bool End(uint32 submit_count) = 0;
+ virtual bool End(base::subtle::Atomic32 submit_count) = 0;
// Returns false if shared memory for sync is invalid.
virtual bool Process() = 0;
@@ -84,7 +85,7 @@ class GPU_EXPORT QueryManager {
// Returns false if shared memory for sync is invalid.
bool MarkAsCompleted(uint64 result);
- void MarkAsPending(uint32 submit_count) {
+ void MarkAsPending(base::subtle::Atomic32 submit_count) {
DCHECK(!pending_);
pending_ = true;
submit_count_ = submit_count;
@@ -96,12 +97,12 @@ class GPU_EXPORT QueryManager {
}
// Returns false if shared memory for sync is invalid.
- bool AddToPendingQueue(uint32 submit_count) {
+ bool AddToPendingQueue(base::subtle::Atomic32 submit_count) {
return manager_->AddPendingQuery(this, submit_count);
}
// Returns false if shared memory for sync is invalid.
- bool AddToPendingTransferQueue(uint32 submit_count) {
+ bool AddToPendingTransferQueue(base::subtle::Atomic32 submit_count) {
return manager_->AddPendingTransferQuery(this, submit_count);
}
@@ -113,9 +114,7 @@ class GPU_EXPORT QueryManager {
manager_->EndQueryHelper(target);
}
- uint32 submit_count() const {
- return submit_count_;
- }
+ base::subtle::Atomic32 submit_count() const { return submit_count_; }
private:
friend class QueryManager;
@@ -135,7 +134,7 @@ class GPU_EXPORT QueryManager {
uint32 shm_offset_;
// Count to set process count do when completed.
- uint32 submit_count_;
+ base::subtle::Atomic32 submit_count_;
// True if in the queue.
bool pending_;
@@ -169,7 +168,7 @@ class GPU_EXPORT QueryManager {
bool BeginQuery(Query* query);
// Returns false if any query is pointing to invalid shared memory.
- bool EndQuery(Query* query, uint32 submit_count);
+ bool EndQuery(Query* query, base::subtle::Atomic32 submit_count);
// Processes pending queries. Returns false if any queries are pointing
// to invalid shared memory.
@@ -189,6 +188,9 @@ class GPU_EXPORT QueryManager {
return decoder_;
}
+ void GenQueries(GLsizei n, const GLuint* queries);
+ bool IsValidQuery(GLuint id);
+
private:
void StartTracking(Query* query);
void StopTracking(Query* query);
@@ -200,11 +202,12 @@ class GPU_EXPORT QueryManager {
// Adds to queue of queries waiting for completion.
// Returns false if any query is pointing to invalid shared memory.
- bool AddPendingQuery(Query* query, uint32 submit_count);
+ bool AddPendingQuery(Query* query, base::subtle::Atomic32 submit_count);
// Adds to queue of transfer queries waiting for completion.
// Returns false if any query is pointing to invalid shared memory.
- bool AddPendingTransferQuery(Query* query, uint32 submit_count);
+ bool AddPendingTransferQuery(Query* query,
+ base::subtle::Atomic32 submit_count);
// Removes a query from the queue of pending queries.
// Returns false if any query is pointing to invalid shared memory.
@@ -228,6 +231,9 @@ class GPU_EXPORT QueryManager {
typedef base::hash_map<GLuint, scoped_refptr<Query> > QueryMap;
QueryMap queries_;
+ typedef base::hash_set<GLuint> GeneratedQueryIds;
+ GeneratedQueryIds generated_query_ids_;
+
// Queries waiting for completion.
typedef std::deque<scoped_refptr<Query> > QueryQueue;
QueryQueue pending_queries_;
diff --git a/chromium/gpu/command_buffer/service/query_manager_unittest.cc b/chromium/gpu/command_buffer/service/query_manager_unittest.cc
index 0c0829346a6..9f0156f791a 100644
--- a/chromium/gpu/command_buffer/service/query_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/query_manager_unittest.cc
@@ -6,9 +6,10 @@
#include "gpu/command_buffer/common/gles2_cmd_format.h"
#include "gpu/command_buffer/service/cmd_buffer_engine.h"
#include "gpu/command_buffer/service/error_state_mock.h"
+#include "gpu/command_buffer/service/feature_info.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
-#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
@@ -21,7 +22,7 @@ using ::testing::SetArgumentPointee;
namespace gpu {
namespace gles2 {
-class QueryManagerTest : public testing::Test {
+class QueryManagerTest : public GpuServiceTest {
public:
static const int32 kSharedMemoryId = 401;
static const size_t kSharedBufferSize = 2048;
@@ -38,8 +39,7 @@ class QueryManagerTest : public testing::Test {
protected:
virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ GpuServiceTest::SetUp();
engine_.reset(new MockCommandBufferEngine());
decoder_.reset(new MockGLES2Decoder());
decoder_->set_engine(engine_.get());
@@ -56,8 +56,7 @@ class QueryManagerTest : public testing::Test {
manager_->Destroy(false);
manager_.reset();
engine_.reset();
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
+ GpuServiceTest::TearDown();
}
QueryManager::Query* CreateQuery(
@@ -69,8 +68,9 @@ class QueryManagerTest : public testing::Test {
return manager_->CreateQuery(target, client_id, shm_id, shm_offset);
}
- void QueueQuery(
- QueryManager::Query* query, GLuint service_id, uint32 submit_count) {
+ void QueueQuery(QueryManager::Query* query,
+ GLuint service_id,
+ base::subtle::Atomic32 submit_count) {
EXPECT_CALL(*gl_, BeginQueryARB(query->target(), service_id))
.Times(1)
.RetiresOnSaturation();
@@ -81,8 +81,6 @@ class QueryManagerTest : public testing::Test {
EXPECT_TRUE(manager_->EndQuery(query, submit_count));
}
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_ptr<MockGLES2Decoder> decoder_;
scoped_ptr<QueryManager> manager_;
@@ -90,21 +88,24 @@ class QueryManagerTest : public testing::Test {
class MockCommandBufferEngine : public CommandBufferEngine {
public:
MockCommandBufferEngine() {
- data_.reset(new int8[kSharedBufferSize]);
+ scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
+ shared_memory->CreateAndMapAnonymous(kSharedBufferSize);
+ valid_buffer_ =
+ MakeBufferFromSharedMemory(shared_memory.Pass(), kSharedBufferSize);
+ data_ = static_cast<uint8*>(valid_buffer_->memory());
ClearSharedMemory();
- valid_buffer_.ptr = data_.get();
- valid_buffer_.size = kSharedBufferSize;
}
virtual ~MockCommandBufferEngine() {
}
- virtual gpu::Buffer GetSharedMemoryBuffer(int32 shm_id) OVERRIDE {
+ virtual scoped_refptr<gpu::Buffer> GetSharedMemoryBuffer(int32 shm_id)
+ OVERRIDE {
return shm_id == kSharedMemoryId ? valid_buffer_ : invalid_buffer_;
}
void ClearSharedMemory() {
- memset(data_.get(), kInitialMemoryValue, kSharedBufferSize);
+ memset(data_, kInitialMemoryValue, kSharedBufferSize);
}
virtual void set_token(int32 token) OVERRIDE {
@@ -129,9 +130,9 @@ class QueryManagerTest : public testing::Test {
}
private:
- scoped_ptr<int8[]> data_;
- gpu::Buffer valid_buffer_;
- gpu::Buffer invalid_buffer_;
+ uint8* data_;
+ scoped_refptr<gpu::Buffer> valid_buffer_;
+ scoped_refptr<gpu::Buffer> invalid_buffer_;
};
scoped_ptr<MockCommandBufferEngine> engine_;
@@ -214,7 +215,7 @@ TEST_F(QueryManagerTest, ProcessPendingQuery) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
- const uint32 kSubmitCount = 123;
+ const base::subtle::Atomic32 kSubmitCount = 123;
const GLuint kResult = 1;
// Check nothing happens if there are no pending queries.
@@ -245,7 +246,7 @@ TEST_F(QueryManagerTest, ProcessPendingQuery) {
.RetiresOnSaturation();
EXPECT_TRUE(manager_->ProcessPendingQueries());
EXPECT_TRUE(query->pending());
- EXPECT_EQ(0u, sync->process_count);
+ EXPECT_EQ(0, sync->process_count);
EXPECT_EQ(0u, sync->result);
// Process with return available.
@@ -277,9 +278,9 @@ TEST_F(QueryManagerTest, ProcessPendingQueries) {
const GLuint kClient3Id = 3;
const GLuint kService3Id = 13;
const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
- const uint32 kSubmitCount1 = 123;
- const uint32 kSubmitCount2 = 123;
- const uint32 kSubmitCount3 = 123;
+ const base::subtle::Atomic32 kSubmitCount1 = 123;
+ const base::subtle::Atomic32 kSubmitCount2 = 123;
+ const base::subtle::Atomic32 kSubmitCount3 = 123;
const GLuint kResult1 = 1;
const GLuint kResult2 = 1;
const GLuint kResult3 = 1;
@@ -355,7 +356,7 @@ TEST_F(QueryManagerTest, ProcessPendingQueries) {
EXPECT_EQ(kSubmitCount2, sync2->process_count);
EXPECT_EQ(kResult1, sync1->result);
EXPECT_EQ(kResult2, sync2->result);
- EXPECT_EQ(0u, sync3->process_count);
+ EXPECT_EQ(0, sync3->process_count);
EXPECT_EQ(0u, sync3->result);
EXPECT_TRUE(manager_->HavePendingQueries());
@@ -367,7 +368,7 @@ TEST_F(QueryManagerTest, ProcessPendingQueries) {
.RetiresOnSaturation();
EXPECT_TRUE(manager_->ProcessPendingQueries());
EXPECT_TRUE(query3->pending());
- EXPECT_EQ(0u, sync3->process_count);
+ EXPECT_EQ(0, sync3->process_count);
EXPECT_EQ(0u, sync3->result);
EXPECT_TRUE(manager_->HavePendingQueries());
@@ -392,7 +393,7 @@ TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryId) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
- const uint32 kSubmitCount = 123;
+ const base::subtle::Atomic32 kSubmitCount = 123;
const GLuint kResult = 1;
// Create Query.
@@ -421,7 +422,7 @@ TEST_F(QueryManagerTest, ProcessPendingBadSharedMemoryOffset) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
- const uint32 kSubmitCount = 123;
+ const base::subtle::Atomic32 kSubmitCount = 123;
const GLuint kResult = 1;
// Create Query.
@@ -450,7 +451,7 @@ TEST_F(QueryManagerTest, ExitWithPendingQuery) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
- const uint32 kSubmitCount = 123;
+ const base::subtle::Atomic32 kSubmitCount = 123;
// Create Query.
scoped_refptr<QueryManager::Query> query(
@@ -468,7 +469,7 @@ TEST_F(QueryManagerTest, ARBOcclusionQuery2) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
const GLenum kTarget = GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT;
- const uint32 kSubmitCount = 123;
+ const base::subtle::Atomic32 kSubmitCount = 123;
TestHelper::SetupFeatureInfoInitExpectations(
gl_.get(),
@@ -502,7 +503,7 @@ TEST_F(QueryManagerTest, ARBOcclusionQuery) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
const GLenum kTarget = GL_ANY_SAMPLES_PASSED_EXT;
- const uint32 kSubmitCount = 123;
+ const base::subtle::Atomic32 kSubmitCount = 123;
TestHelper::SetupFeatureInfoInitExpectations(
gl_.get(),
@@ -533,7 +534,7 @@ TEST_F(QueryManagerTest, ARBOcclusionQuery) {
TEST_F(QueryManagerTest, GetErrorQuery) {
const GLuint kClient1Id = 1;
const GLenum kTarget = GL_GET_ERROR_QUERY_CHROMIUM;
- const uint32 kSubmitCount = 123;
+ const base::subtle::Atomic32 kSubmitCount = 123;
TestHelper::SetupFeatureInfoInitExpectations(gl_.get(), "");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
diff --git a/chromium/gpu/command_buffer/service/renderbuffer_manager_unittest.cc b/chromium/gpu/command_buffer/service/renderbuffer_manager_unittest.cc
index 87fde79bf09..ba0ebea8700 100644
--- a/chromium/gpu/command_buffer/service/renderbuffer_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/renderbuffer_manager_unittest.cc
@@ -6,6 +6,7 @@
#include <set>
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/mocks.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_implementation.h"
@@ -16,15 +17,14 @@ using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
-class RenderbufferManagerTestBase : public testing::Test {
+class RenderbufferManagerTestBase : public GpuServiceTest {
public:
static const GLint kMaxSize = 128;
static const GLint kMaxSamples = 4;
protected:
void SetUpBase(MemoryTracker* memory_tracker, bool depth24_supported) {
- gl_.reset(new ::testing::StrictMock<gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ GpuServiceTest::SetUp();
manager_.reset(new RenderbufferManager(
memory_tracker, kMaxSize, kMaxSamples, depth24_supported));
}
@@ -32,12 +32,9 @@ class RenderbufferManagerTestBase : public testing::Test {
virtual void TearDown() {
manager_->Destroy(true);
manager_.reset();
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
+ GpuServiceTest::TearDown();
}
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_ptr<RenderbufferManager> manager_;
};
diff --git a/chromium/gpu/command_buffer/service/safe_shared_memory_pool.cc b/chromium/gpu/command_buffer/service/safe_shared_memory_pool.cc
deleted file mode 100644
index 9ba5390d200..00000000000
--- a/chromium/gpu/command_buffer/service/safe_shared_memory_pool.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "gpu/command_buffer/service/safe_shared_memory_pool.h"
-
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/process/process_handle.h"
-#include "build/build_config.h"
-
-using base::SharedMemory;
-using base::SharedMemoryHandle;
-
-namespace gpu {
-
-ScopedSafeSharedMemory::ScopedSafeSharedMemory(SafeSharedMemoryPool* pool,
- base::SharedMemory* memory,
- size_t shm_size) {
- DCHECK(pool);
- DCHECK(memory);
- DCHECK(memory->memory());
- pool_ = pool;
- original_handle_ = memory->handle();
- safe_shared_memory_ = pool->AcquireSafeSharedMemory(memory, shm_size);
- CHECK(safe_shared_memory_);
-}
-
-ScopedSafeSharedMemory::~ScopedSafeSharedMemory() {
- // Release the handle. The pool will delete the SharedMemory
- // object when it is no longer referenced.
- pool_->ReleaseSafeSharedMemory(original_handle_);
-}
-
-base::SharedMemory* ScopedSafeSharedMemory::shared_memory() {
- return safe_shared_memory_;
-}
-
-SafeSharedMemoryPool::SafeSharedMemoryPool()
- : handles_acquired_(0),
- handles_consumed_(0),
- address_space_consumed_(0),
- max_handles_acquired_(0),
- max_handles_consumed_(0),
- max_address_space_consumed_(0) {
-}
-
-SafeSharedMemoryPool::~SafeSharedMemoryPool() {
-}
-
-base::SharedMemory* SafeSharedMemoryPool::
- AcquireSafeSharedMemory(base::SharedMemory* shared_memory,
- size_t shm_size) {
- DCHECK(shared_memory);
- DCHECK(shared_memory->memory());
- base::AutoLock scoped_lock(lock_);
-
- // Adjust stats.
- handles_acquired_++;
- max_handles_acquired_ = std::max(max_handles_acquired_,
- handles_acquired_);
-
- MemoryMap::iterator it = memory_.find(shared_memory->handle());
- // If we don't already have it, duplicated it.
- if (it == memory_.end()) {
- // Duplicate a new shared memory and track it.
- TrackedMemory tracker;
- tracker.safe_shared_memory = DuplicateSharedMemory(shared_memory, shm_size);
- tracker.reference_count = 1;
- tracker.shm_size = shm_size;
- memory_[shared_memory->handle()] = tracker;
-
- // Adjust stats.
- handles_consumed_++;
- address_space_consumed_ += shm_size;
- max_handles_consumed_ = std::max(max_handles_consumed_,
- handles_consumed_);
- max_address_space_consumed_ = std::max(max_address_space_consumed_,
- address_space_consumed_);
- return tracker.safe_shared_memory;
- }
-
- // Otherwise, add a reference and return the existing one.
- DCHECK(it->second.reference_count);
- DCHECK(it->second.safe_shared_memory);
- DCHECK(it->second.safe_shared_memory->memory());
- it->second.reference_count++;
- return it->second.safe_shared_memory;
-}
-
-void SafeSharedMemoryPool::
- ReleaseSafeSharedMemory(const base::SharedMemoryHandle& handle) {
- base::AutoLock scoped_lock(lock_);
-
- // Adjust stats.
- DCHECK_GT(handles_acquired_, 0);
- handles_acquired_--;
-
- MemoryMap::iterator it = memory_.find(handle);
- CHECK(it != memory_.end());
- CHECK(it->second.reference_count);
- CHECK(it->second.safe_shared_memory);
- if (--it->second.reference_count == 0) {
- // Adjust stats.
- DCHECK_GT(handles_consumed_, 0);
- handles_consumed_--;
- DCHECK_LE(it->second.shm_size, address_space_consumed_);
- address_space_consumed_ -= it->second.shm_size;
- // Delete the safe memory and remove it.
- delete it->second.safe_shared_memory;
- memory_.erase(it);
- }
-}
-
-SharedMemory* SafeSharedMemoryPool::DuplicateSharedMemory(
- SharedMemory* shared_memory, size_t size) {
- // Duplicate the handle.
- SharedMemoryHandle duped_shared_memory_handle;
- if (!shared_memory->ShareToProcess(
- base::GetCurrentProcessHandle(),
- &duped_shared_memory_handle)) {
- PLOG(ERROR) << "Failed SharedMemory::ShareToProcess";
- LOG(ERROR) << "Total handles acquired " << handles_acquired_;
- LOG(ERROR) << "Total handles open " << handles_consumed_;
- LOG(ERROR) << "Total address space " << address_space_consumed_;
- LOG(ERROR) << "Max handles acquired " << max_handles_acquired_;
- LOG(ERROR) << "Max handles open " << max_handles_consumed_;
- LOG(ERROR) << "Max address space " << max_address_space_consumed_;
- CHECK(false); // Diagnosing a crash.
- return NULL;
- }
- scoped_ptr<SharedMemory> duped_shared_memory(
- new SharedMemory(duped_shared_memory_handle, false));
- // Map the shared memory into this process. This validates the size.
- if (!duped_shared_memory->Map(size)) {
- PLOG(ERROR) << "Failed SharedMemory::Map(" << size << ")";
- LOG(ERROR) << "Total handles acquired " << handles_acquired_;
- LOG(ERROR) << "Total handles open " << handles_consumed_;
- LOG(ERROR) << "Total address space " << address_space_consumed_;
- LOG(ERROR) << "Max handles acquired " << max_handles_acquired_;
- LOG(ERROR) << "Max handles open " << max_handles_consumed_;
- LOG(ERROR) << "Max address space " << max_address_space_consumed_;
- CHECK(false); // Diagnosing a crash.
- return NULL;
- }
- return duped_shared_memory.release();
-}
-
-} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/safe_shared_memory_pool.h b/chromium/gpu/command_buffer/service/safe_shared_memory_pool.h
deleted file mode 100644
index fed17ff3726..00000000000
--- a/chromium/gpu/command_buffer/service/safe_shared_memory_pool.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef GPU_COMMAND_BUFFER_SERVICE_SAFE_SHARED_MEMORY_POOL_H_
-#define GPU_COMMAND_BUFFER_SERVICE_SAFE_SHARED_MEMORY_POOL_H_
-
-#include <map>
-
-#include "base/basictypes.h"
-#include "base/memory/shared_memory.h"
-#include "base/synchronization/lock.h"
-#include "build/build_config.h"
-
-namespace gpu {
-class SafeSharedMemoryPool;
-
-// These classes exist to help protect against deletion of shared
-// memory that is being used on a worker thread. It's mainly a
-// security measure to prevent use-after-free in the browser, due
-// to a misbehaving client. That said, this should be removed
-// in favor of higher-level reference counting of an appropriate
-// opaque 'memory blob' data-structure.
-
-class ScopedSafeSharedMemory {
- public:
- base::SharedMemory* shared_memory();
- ScopedSafeSharedMemory(SafeSharedMemoryPool* pool,
- base::SharedMemory* memory,
- size_t shm_size);
- ~ScopedSafeSharedMemory();
- private:
- base::SharedMemory* safe_shared_memory_;
- base::SharedMemoryHandle original_handle_;
- SafeSharedMemoryPool* pool_;
-
- DISALLOW_COPY_AND_ASSIGN(ScopedSafeSharedMemory);
-};
-
-class SafeSharedMemoryPool {
- public:
- SafeSharedMemoryPool();
- virtual ~SafeSharedMemoryPool();
-
- private:
- friend class ScopedSafeSharedMemory;
-
- // Acquires and release shared memory. The acquired shared memory
- // is guaranteed to live until it is released.
- base::SharedMemory* AcquireSafeSharedMemory(base::SharedMemory*, size_t size);
- void ReleaseSafeSharedMemory(const base::SharedMemoryHandle&);
-
- // Utility function to duplicate shared memory.
- base::SharedMemory* DuplicateSharedMemory(base::SharedMemory*, size_t size);
-
- // Track all SharedMemory's that we have already duplicated.
- struct TrackedMemory {
- base::SharedMemory* safe_shared_memory;
- size_t shm_size;
- int reference_count;
- };
-
- typedef std::map<base::SharedMemoryHandle, TrackedMemory> MemoryMap;
- MemoryMap memory_;
-
- // Track usage to diagnose crashes.
- int handles_acquired_;
- int handles_consumed_;
- size_t address_space_consumed_;
- int max_handles_acquired_;
- int max_handles_consumed_;
- size_t max_address_space_consumed_;
-
- base::Lock lock_;
-
- DISALLOW_COPY_AND_ASSIGN(SafeSharedMemoryPool);
-};
-
-} // namespace gfx
-
-#endif // GPU_COMMAND_BUFFER_SERVICE_SAFE_SHARED_MEMORY_POOL_H_
-
diff --git a/chromium/gpu/command_buffer/service/shader_manager_unittest.cc b/chromium/gpu/command_buffer/service/shader_manager_unittest.cc
index d86aca48bcf..b5b7b383984 100644
--- a/chromium/gpu/command_buffer/service/shader_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/shader_manager_unittest.cc
@@ -5,6 +5,7 @@
#include "gpu/command_buffer/service/shader_manager.h"
#include "base/memory/scoped_ptr.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/mocks.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
@@ -15,7 +16,7 @@ using ::testing::ReturnRef;
namespace gpu {
namespace gles2 {
-class ShaderManagerTest : public testing::Test {
+class ShaderManagerTest : public GpuServiceTest {
public:
ShaderManagerTest() {
}
@@ -25,18 +26,6 @@ class ShaderManagerTest : public testing::Test {
}
protected:
- virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
- }
-
- virtual void TearDown() {
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
- }
-
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
ShaderManager manager_;
};
diff --git a/chromium/gpu/command_buffer/service/shader_translator.cc b/chromium/gpu/command_buffer/service/shader_translator.cc
index 37e2dc64d33..3964c2db16b 100644
--- a/chromium/gpu/command_buffer/service/shader_translator.cc
+++ b/chromium/gpu/command_buffer/service/shader_translator.cc
@@ -9,6 +9,7 @@
#include "base/at_exit.h"
#include "base/debug/trace_event.h"
+#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
@@ -16,21 +17,21 @@ namespace {
using gpu::gles2::ShaderTranslator;
-void FinalizeShaderTranslator(void* /* dummy */) {
- TRACE_EVENT0("gpu", "ShFinalize");
- ShFinalize();
-}
-
-bool InitializeShaderTranslator() {
- static bool initialized = false;
- if (!initialized) {
+class ShaderTranslatorInitializer {
+ public:
+ ShaderTranslatorInitializer() {
TRACE_EVENT0("gpu", "ShInitialize");
CHECK(ShInitialize());
- base::AtExitManager::RegisterCallback(&FinalizeShaderTranslator, NULL);
- initialized = true;
}
- return initialized;
-}
+
+ ~ShaderTranslatorInitializer() {
+ TRACE_EVENT0("gpu", "ShFinalize");
+ ShFinalize();
+ }
+};
+
+base::LazyInstance<ShaderTranslatorInitializer> g_translator_initializer =
+ LAZY_INSTANCE_INITIALIZER;
#if !defined(ANGLE_SH_VERSION) || ANGLE_SH_VERSION < 108
typedef int ANGLEGetInfoType;
@@ -133,8 +134,7 @@ bool ShaderTranslator::Init(
DCHECK(shader_spec == SH_GLES2_SPEC || shader_spec == SH_WEBGL_SPEC);
DCHECK(resources != NULL);
- if (!InitializeShaderTranslator())
- return false;
+ g_translator_initializer.Get();
ShShaderOutput shader_output =
(glsl_implementation_type == kGlslES ? SH_ESSL_OUTPUT : SH_GLSL_OUTPUT);
@@ -152,11 +152,9 @@ bool ShaderTranslator::Init(
int ShaderTranslator::GetCompileOptions() const {
int compile_options =
- SH_OBJECT_CODE | SH_VARIABLES |
- SH_MAP_LONG_VARIABLE_NAMES | SH_ENFORCE_PACKING_RESTRICTIONS |
- SH_LIMIT_EXPRESSION_COMPLEXITY | SH_LIMIT_CALL_STACK_DEPTH;
-
- compile_options |= SH_CLAMP_INDIRECT_ARRAY_BOUNDS;
+ SH_OBJECT_CODE | SH_VARIABLES | SH_ENFORCE_PACKING_RESTRICTIONS |
+ SH_LIMIT_EXPRESSION_COMPLEXITY | SH_LIMIT_CALL_STACK_DEPTH |
+ SH_CLAMP_INDIRECT_ARRAY_BOUNDS;
compile_options |= driver_bug_workarounds_;
@@ -203,9 +201,29 @@ bool ShaderTranslator::Translate(const char* shader) {
return success;
}
-std::string ShaderTranslator::GetStringForOptionsThatWouldEffectCompilation()
+std::string ShaderTranslator::GetStringForOptionsThatWouldAffectCompilation()
const {
+#if ANGLE_SH_VERSION >= 124
+ DCHECK(compiler_ != NULL);
+
+ ANGLEGetInfoType resource_len = 0;
+ ShGetInfo(compiler_, SH_RESOURCES_STRING_LENGTH, &resource_len);
+ DCHECK(resource_len > 1);
+ scoped_ptr<char[]> resource_str(new char[resource_len]);
+
+ ShGetBuiltInResourcesString(compiler_, resource_len, resource_str.get());
+
+ return std::string(":CompileOptions:" +
+ base::IntToString(GetCompileOptions())) +
+ std::string(resource_str.get());
+#else
+#if ANGLE_SH_VERSION >= 123
+ const size_t kNumIntFields = 21;
+#elif ANGLE_SH_VERSION >= 122
+ const size_t kNumIntFields = 20;
+#else
const size_t kNumIntFields = 16;
+#endif
const size_t kNumEnumFields = 1;
const size_t kNumFunctionPointerFields = 1;
struct MustMatchShBuiltInResource {
@@ -256,7 +274,24 @@ std::string ShaderTranslator::GetStringForOptionsThatWouldEffectCompilation()
":MaxCallStackDepth:" +
base::IntToString(compiler_options_.MaxCallStackDepth) +
":EXT_frag_depth:" +
+#if ANGLE_SH_VERSION >= 122
+ base::IntToString(compiler_options_.EXT_frag_depth) +
+#if ANGLE_SH_VERSION >= 123
+ ":EXT_shader_texture_lod:" +
+ base::IntToString(compiler_options_.EXT_shader_texture_lod) +
+#endif
+ ":MaxVertexOutputVectors:" +
+ base::IntToString(compiler_options_.MaxVertexOutputVectors) +
+ ":MaxFragmentInputVectors:" +
+ base::IntToString(compiler_options_.MaxFragmentInputVectors) +
+ ":MinProgramTexelOffset:" +
+ base::IntToString(compiler_options_.MinProgramTexelOffset) +
+ ":MaxProgramTexelOffset:" +
+ base::IntToString(compiler_options_.MaxProgramTexelOffset));
+#else // ANGLE_SH_VERSION < 122
base::IntToString(compiler_options_.EXT_frag_depth));
+#endif
+#endif
}
const char* ShaderTranslator::translated_shader() const {
diff --git a/chromium/gpu/command_buffer/service/shader_translator.h b/chromium/gpu/command_buffer/service/shader_translator.h
index b9bacf155e6..d993967da9b 100644
--- a/chromium/gpu/command_buffer/service/shader_translator.h
+++ b/chromium/gpu/command_buffer/service/shader_translator.h
@@ -89,8 +89,8 @@ class ShaderTranslatorInterface {
virtual const NameMap& name_map() const = 0;
// Return a string that is unique for a specfic set of options that would
- // possibly effect compilation.
- virtual std::string GetStringForOptionsThatWouldEffectCompilation() const = 0;
+ // possibly affect compilation.
+ virtual std::string GetStringForOptionsThatWouldAffectCompilation() const = 0;
protected:
virtual ~ShaderTranslatorInterface() {}
@@ -135,7 +135,7 @@ class GPU_EXPORT ShaderTranslator
virtual const VariableMap& varying_map() const OVERRIDE;
virtual const NameMap& name_map() const OVERRIDE;
- virtual std::string GetStringForOptionsThatWouldEffectCompilation() const
+ virtual std::string GetStringForOptionsThatWouldAffectCompilation() const
OVERRIDE;
void AddDestructionObserver(DestructionObserver* observer);
diff --git a/chromium/gpu/command_buffer/service/shader_translator_cache.cc b/chromium/gpu/command_buffer/service/shader_translator_cache.cc
index 9626a0e25ef..f204186c7e7 100644
--- a/chromium/gpu/command_buffer/service/shader_translator_cache.cc
+++ b/chromium/gpu/command_buffer/service/shader_translator_cache.cc
@@ -7,14 +7,11 @@
namespace gpu {
namespace gles2 {
-ShaderTranslatorCache* ShaderTranslatorCache::GetInstance() {
- return Singleton<ShaderTranslatorCache>::get();
-}
-
ShaderTranslatorCache::ShaderTranslatorCache() {
}
ShaderTranslatorCache::~ShaderTranslatorCache() {
+ DCHECK(cache_.empty());
}
void ShaderTranslatorCache::OnDestruct(ShaderTranslator* translator) {
diff --git a/chromium/gpu/command_buffer/service/shader_translator_cache.h b/chromium/gpu/command_buffer/service/shader_translator_cache.h
index 8439d533987..32b7f5f84a1 100644
--- a/chromium/gpu/command_buffer/service/shader_translator_cache.h
+++ b/chromium/gpu/command_buffer/service/shader_translator_cache.h
@@ -10,22 +10,23 @@
#include <map>
#include "base/memory/ref_counted.h"
-#include "base/memory/singleton.h"
#include "gpu/command_buffer/service/shader_translator.h"
#include "third_party/angle/include/GLSLANG/ShaderLang.h"
namespace gpu {
namespace gles2 {
-// This singleton and the cache that it implements is NOT thread safe.
-// We're relying on the fact that the all GLES2DecoderImpl's are used
-// on one thread.
+// This class is not thread safe and can only be created and destroyed
+// on a single thread. But it is safe to use two independent instances on two
+// threads without synchronization.
//
// TODO(backer): Investigate using glReleaseShaderCompiler as an alternative to
// to this cache.
-class ShaderTranslatorCache : public ShaderTranslator::DestructionObserver {
+class GPU_EXPORT ShaderTranslatorCache
+ : public base::RefCounted<ShaderTranslatorCache>,
+ public NON_EXPORTED_BASE(ShaderTranslator::DestructionObserver) {
public:
- static ShaderTranslatorCache* GetInstance();
+ ShaderTranslatorCache();
// ShaderTranslator::DestructionObserver implementation
virtual void OnDestruct(ShaderTranslator* translator) OVERRIDE;
@@ -39,11 +40,9 @@ class ShaderTranslatorCache : public ShaderTranslator::DestructionObserver {
ShCompileOptions driver_bug_workarounds);
private:
- ShaderTranslatorCache();
+ friend class base::RefCounted<ShaderTranslatorCache>;
virtual ~ShaderTranslatorCache();
- friend struct DefaultSingletonTraits<ShaderTranslatorCache>;
-
// Parameters passed into ShaderTranslator::Init
struct ShaderTranslatorInitParams {
ShShaderType shader_type;
diff --git a/chromium/gpu/command_buffer/service/shader_translator_unittest.cc b/chromium/gpu/command_buffer/service/shader_translator_unittest.cc
index 1b53c2b768b..233b412024c 100644
--- a/chromium/gpu/command_buffer/service/shader_translator_unittest.cc
+++ b/chromium/gpu/command_buffer/service/shader_translator_unittest.cc
@@ -19,9 +19,10 @@ class ShaderTranslatorTest : public testing::Test {
protected:
virtual void SetUp() {
ShBuiltInResources resources;
+ ShInitBuiltInResources(&resources);
resources.MaxExpressionComplexity = 32;
resources.MaxCallStackDepth = 32;
- ShInitBuiltInResources(&resources);
+
vertex_translator_ = new ShaderTranslator();
fragment_translator_ = new ShaderTranslator();
@@ -244,13 +245,13 @@ TEST_F(ShaderTranslatorTest, OptionsString) {
SH_EMULATE_BUILT_IN_FUNCTIONS));
std::string options_1(
- translator_1->GetStringForOptionsThatWouldEffectCompilation());
+ translator_1->GetStringForOptionsThatWouldAffectCompilation());
std::string options_2(
- translator_1->GetStringForOptionsThatWouldEffectCompilation());
+ translator_1->GetStringForOptionsThatWouldAffectCompilation());
std::string options_3(
- translator_2->GetStringForOptionsThatWouldEffectCompilation());
+ translator_2->GetStringForOptionsThatWouldAffectCompilation());
std::string options_4(
- translator_3->GetStringForOptionsThatWouldEffectCompilation());
+ translator_3->GetStringForOptionsThatWouldAffectCompilation());
EXPECT_EQ(options_1, options_2);
EXPECT_NE(options_1, options_3);
diff --git a/chromium/gpu/command_buffer/service/stream_texture.h b/chromium/gpu/command_buffer/service/stream_texture.h
deleted file mode 100644
index bcddc82dd82..00000000000
--- a/chromium/gpu/command_buffer/service/stream_texture.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_H_
-#define GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_H_
-
-#include "base/basictypes.h"
-#include "ui/gfx/size.h"
-
-namespace gpu {
-
-class StreamTexture {
- public:
- StreamTexture() {
- }
-
- virtual ~StreamTexture() {
- }
-
- virtual void Update() = 0;
-
- // Get the size of the StreamTexture.
- virtual gfx::Size GetSize() = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(StreamTexture);
-};
-
-} // namespace gpu
-
-#endif // GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_H_
diff --git a/chromium/gpu/command_buffer/service/stream_texture_manager.h b/chromium/gpu/command_buffer/service/stream_texture_manager.h
deleted file mode 100644
index 51119fad528..00000000000
--- a/chromium/gpu/command_buffer/service/stream_texture_manager.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MANAGER_H_
-#define GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MANAGER_H_
-
-#include "base/basictypes.h"
-
-namespace gpu {
-
-class StreamTexture;
-
-// Interface used by the cmd decoder to create and lookup stream textures.
-class StreamTextureManager {
- public:
- StreamTextureManager() {
- }
-
- virtual ~StreamTextureManager() {
- }
-
- // Returns an identifier for the object, or NULL if not successful.
- virtual uint32 CreateStreamTexture(uint32 service_id, uint32 client_id) = 0;
-
- virtual void DestroyStreamTexture(uint32 service_id) = 0;
-
- virtual StreamTexture* LookupStreamTexture(uint32 service_id) = 0;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(StreamTextureManager);
-};
-
-} // namespace gpu
-
-#endif // GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MANAGER_H_
diff --git a/chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.cc b/chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.cc
index 2fd55358b4a..a8ece57ebcd 100644
--- a/chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.cc
+++ b/chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.cc
@@ -5,41 +5,76 @@
#include "gpu/command_buffer/service/stream_texture_manager_in_process_android.h"
#include "base/bind.h"
+#include "base/callback.h"
+#include "gpu/command_buffer/service/texture_manager.h"
#include "ui/gfx/size.h"
#include "ui/gl/android/surface_texture.h"
#include "ui/gl/gl_bindings.h"
+#include "ui/gl/gl_image.h"
namespace gpu {
-StreamTextureManagerInProcess::StreamTextureImpl::StreamTextureImpl(
- uint32 service_id,
- uint32 stream_id)
- : surface_texture_(new gfx::SurfaceTexture(service_id)),
- stream_id_(stream_id) {}
+namespace {
-StreamTextureManagerInProcess::StreamTextureImpl::~StreamTextureImpl() {}
+// Simply wraps a SurfaceTexture reference as a GLImage.
+class GLImageImpl : public gfx::GLImage {
+ public:
+ GLImageImpl(const scoped_refptr<gfx::SurfaceTexture>& surface_texture,
+ const base::Closure& release_callback);
-void StreamTextureManagerInProcess::StreamTextureImpl::Update() {
- GLint texture_id = 0;
- glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, &texture_id);
+ // implement gfx::GLImage
+ virtual void Destroy() OVERRIDE;
+ virtual gfx::Size GetSize() OVERRIDE;
+ virtual bool BindTexImage(unsigned target) OVERRIDE;
+ virtual void ReleaseTexImage(unsigned target) OVERRIDE;
+ virtual void WillUseTexImage() OVERRIDE;
+ virtual void DidUseTexImage() OVERRIDE {}
+ virtual void WillModifyTexImage() OVERRIDE {}
+ virtual void DidModifyTexImage() OVERRIDE {}
+
+ private:
+ virtual ~GLImageImpl();
+
+ scoped_refptr<gfx::SurfaceTexture> surface_texture_;
+ base::Closure release_callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(GLImageImpl);
+};
+
+GLImageImpl::GLImageImpl(
+ const scoped_refptr<gfx::SurfaceTexture>& surface_texture,
+ const base::Closure& release_callback)
+ : surface_texture_(surface_texture), release_callback_(release_callback) {}
+
+GLImageImpl::~GLImageImpl() {
+ release_callback_.Run();
+}
+
+void GLImageImpl::Destroy() {
+ NOTREACHED();
+}
+
+void GLImageImpl::WillUseTexImage() {
surface_texture_->UpdateTexImage();
- glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_id);
}
-gfx::Size StreamTextureManagerInProcess::StreamTextureImpl::GetSize() {
- return size_;
+bool GLImageImpl::BindTexImage(unsigned target) {
+ NOTREACHED();
+ return false;
}
-void StreamTextureManagerInProcess::StreamTextureImpl::SetSize(gfx::Size size) {
- size_ = size;
+void GLImageImpl::ReleaseTexImage(unsigned target) {
+ NOTREACHED();
}
-scoped_refptr<gfx::SurfaceTexture>
-StreamTextureManagerInProcess::StreamTextureImpl::GetSurfaceTexture() {
- return surface_texture_;
+gfx::Size GLImageImpl::GetSize() {
+ return gfx::Size();
}
-StreamTextureManagerInProcess::StreamTextureManagerInProcess() : next_id_(1) {}
+} // anonymous namespace
+
+StreamTextureManagerInProcess::StreamTextureManagerInProcess()
+ : next_id_(1), weak_factory_(this) {}
StreamTextureManagerInProcess::~StreamTextureManagerInProcess() {
if (!textures_.empty()) {
@@ -48,13 +83,47 @@ StreamTextureManagerInProcess::~StreamTextureManagerInProcess() {
}
}
-GLuint StreamTextureManagerInProcess::CreateStreamTexture(uint32 service_id,
- uint32 client_id) {
- base::AutoLock lock(map_lock_);
+GLuint StreamTextureManagerInProcess::CreateStreamTexture(
+ uint32 client_texture_id,
+ gles2::TextureManager* texture_manager) {
+ CalledOnValidThread();
+
+ gles2::TextureRef* texture = texture_manager->GetTexture(client_texture_id);
+
+ if (!texture || (texture->texture()->target() &&
+ texture->texture()->target() != GL_TEXTURE_EXTERNAL_OES)) {
+ return 0;
+ }
+
+ scoped_refptr<gfx::SurfaceTexture> surface_texture(
+ gfx::SurfaceTexture::Create(texture->service_id()));
+
uint32 stream_id = next_id_++;
- linked_ptr<StreamTextureImpl> texture(
- new StreamTextureImpl(service_id, stream_id));
- textures_[service_id] = texture;
+ base::Closure release_callback =
+ base::Bind(&StreamTextureManagerInProcess::OnReleaseStreamTexture,
+ weak_factory_.GetWeakPtr(), stream_id);
+ scoped_refptr<gfx::GLImage> gl_image(new GLImageImpl(surface_texture,
+ release_callback));
+
+ gfx::Size size = gl_image->GetSize();
+ texture_manager->SetTarget(texture, GL_TEXTURE_EXTERNAL_OES);
+ texture_manager->SetLevelInfo(texture,
+ GL_TEXTURE_EXTERNAL_OES,
+ 0,
+ GL_RGBA,
+ size.width(),
+ size.height(),
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ texture_manager->SetLevelImage(texture, GL_TEXTURE_EXTERNAL_OES, 0, gl_image);
+
+ {
+ base::AutoLock lock(map_lock_);
+ textures_[stream_id] = surface_texture;
+ }
if (next_id_ == 0)
next_id_++;
@@ -62,29 +131,19 @@ GLuint StreamTextureManagerInProcess::CreateStreamTexture(uint32 service_id,
return stream_id;
}
-void StreamTextureManagerInProcess::DestroyStreamTexture(uint32 service_id) {
+void StreamTextureManagerInProcess::OnReleaseStreamTexture(uint32 stream_id) {
+ CalledOnValidThread();
base::AutoLock lock(map_lock_);
- textures_.erase(service_id);
-}
-
-gpu::StreamTexture* StreamTextureManagerInProcess::LookupStreamTexture(
- uint32 service_id) {
- base::AutoLock lock(map_lock_);
- TextureMap::const_iterator it = textures_.find(service_id);
- if (it != textures_.end())
- return it->second.get();
-
- return NULL;
+ textures_.erase(stream_id);
}
+// This can get called from any thread.
scoped_refptr<gfx::SurfaceTexture>
StreamTextureManagerInProcess::GetSurfaceTexture(uint32 stream_id) {
base::AutoLock lock(map_lock_);
- for (TextureMap::iterator it = textures_.begin(); it != textures_.end();
- it++) {
- if (it->second->stream_id() == stream_id)
- return it->second->GetSurfaceTexture();
- }
+ TextureMap::const_iterator it = textures_.find(stream_id);
+ if (it != textures_.end())
+ return it->second;
return NULL;
}
diff --git a/chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.h b/chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.h
index 6753c139989..8b507b058fc 100644
--- a/chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.h
+++ b/chromium/gpu/command_buffer/service/stream_texture_manager_in_process_android.h
@@ -7,66 +7,41 @@
#include <map>
-#include "base/memory/linked_ptr.h"
#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
#include "base/synchronization/lock.h"
-#include "gpu/command_buffer/service/stream_texture.h"
-#include "gpu/command_buffer/service/stream_texture_manager.h"
+#include "base/threading/non_thread_safe.h"
namespace gfx {
-class Size;
class SurfaceTexture;
}
namespace gpu {
-class StreamTextureManagerInProcess
- : public gpu::StreamTextureManager,
- public base::RefCountedThreadSafe<StreamTextureManagerInProcess> {
+namespace gles2 {
+class TextureManager;
+}
+
+class StreamTextureManagerInProcess : public base::NonThreadSafe {
public:
StreamTextureManagerInProcess();
+ ~StreamTextureManagerInProcess();
- // implement gpu::StreamTextureManager:
- virtual uint32 CreateStreamTexture(uint32 service_id,
- uint32 client_id) OVERRIDE;
- virtual void DestroyStreamTexture(uint32 service_id) OVERRIDE;
- virtual gpu::StreamTexture* LookupStreamTexture(uint32 service_id) OVERRIDE;
+ uint32 CreateStreamTexture(uint32 client_texture_id,
+ gles2::TextureManager* texture_manager);
+ // This method can be called from any thread.
scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture(uint32 stream_id);
private:
- class StreamTextureImpl : public gpu::StreamTexture {
- public:
- StreamTextureImpl(uint32 service_id, uint32 stream_id);
- virtual ~StreamTextureImpl();
-
- // implement gpu::StreamTexture
- virtual void Update() OVERRIDE;
- virtual gfx::Size GetSize() OVERRIDE;
-
- void SetSize(gfx::Size size);
-
- scoped_refptr<gfx::SurfaceTexture> GetSurfaceTexture();
- uint32 stream_id() { return stream_id_; }
-
- private:
- scoped_refptr<gfx::SurfaceTexture> surface_texture_;
- uint32 stream_id_;
- gfx::Size size_;
+ void OnReleaseStreamTexture(uint32 stream_id);
- DISALLOW_COPY_AND_ASSIGN(StreamTextureImpl);
- };
-
- friend class base::RefCountedThreadSafe<StreamTextureManagerInProcess>;
- virtual ~StreamTextureManagerInProcess();
-
- typedef std::map<uint32, linked_ptr<StreamTextureImpl> > TextureMap;
+ typedef std::map<uint32, scoped_refptr<gfx::SurfaceTexture> > TextureMap;
TextureMap textures_;
-
- uint32 next_id_;
-
base::Lock map_lock_;
+ uint32 next_id_;
+ base::WeakPtrFactory<StreamTextureManagerInProcess> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(StreamTextureManagerInProcess);
};
diff --git a/chromium/gpu/command_buffer/service/stream_texture_manager_mock.cc b/chromium/gpu/command_buffer/service/stream_texture_manager_mock.cc
deleted file mode 100644
index 75268b86205..00000000000
--- a/chromium/gpu/command_buffer/service/stream_texture_manager_mock.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "gpu/command_buffer/service/stream_texture_manager_mock.h"
-
-namespace gpu {
-
-MockStreamTextureManager::MockStreamTextureManager() {
-}
-
-MockStreamTextureManager::~MockStreamTextureManager() {
-}
-
-} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/stream_texture_manager_mock.h b/chromium/gpu/command_buffer/service/stream_texture_manager_mock.h
deleted file mode 100644
index 4b744f21b1e..00000000000
--- a/chromium/gpu/command_buffer/service/stream_texture_manager_mock.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MANAGER_MOCK_H_
-#define GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MANAGER_MOCK_H_
-
-#include "base/basictypes.h"
-#include "gpu/command_buffer/service/stream_texture_manager.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace gpu {
-
-class StreamTexture;
-
-class MockStreamTextureManager : public StreamTextureManager {
- public:
- MockStreamTextureManager();
- virtual ~MockStreamTextureManager();
-
- MOCK_METHOD2(CreateStreamTexture,
- uint32(uint32 service_id, uint32 client_id));
- MOCK_METHOD1(DestroyStreamTexture, void(uint32 service_id));
- MOCK_METHOD1(LookupStreamTexture, StreamTexture*(uint32 service_id));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockStreamTextureManager);
-};
-
-} // namespace gpu
-
-#endif // GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MANAGER_MOCK_H_
diff --git a/chromium/gpu/command_buffer/service/stream_texture_mock.cc b/chromium/gpu/command_buffer/service/stream_texture_mock.cc
deleted file mode 100644
index 742a4f71ec0..00000000000
--- a/chromium/gpu/command_buffer/service/stream_texture_mock.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "gpu/command_buffer/service/stream_texture_mock.h"
-
-namespace gpu {
-
-MockStreamTexture::MockStreamTexture() {
-}
-
-MockStreamTexture::~MockStreamTexture() {
-}
-
-} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/stream_texture_mock.h b/chromium/gpu/command_buffer/service/stream_texture_mock.h
deleted file mode 100644
index cd951d22618..00000000000
--- a/chromium/gpu/command_buffer/service/stream_texture_mock.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MOCK_H_
-#define GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MOCK_H_
-
-#include "base/memory/ref_counted.h"
-#include "gpu/command_buffer/service/stream_texture.h"
-#include "testing/gmock/include/gmock/gmock.h"
-
-namespace gpu {
-
-class MockStreamTexture : public StreamTexture {
- public:
- MockStreamTexture();
- virtual ~MockStreamTexture();
-
- MOCK_METHOD0(Update, void());
- MOCK_METHOD0(GetSize, gfx::Size(void));
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockStreamTexture);
-};
-
-} // namespace gpu
-
-#endif // GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_MOCK_H_
diff --git a/chromium/gpu/command_buffer/service/test_helper.cc b/chromium/gpu/command_buffer/service/test_helper.cc
index 92c5ec456ef..c589be4326a 100644
--- a/chromium/gpu/command_buffer/service/test_helper.cc
+++ b/chromium/gpu/command_buffer/service/test_helper.cc
@@ -9,7 +9,6 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_tokenizer.h"
-#include "gpu/command_buffer/common/types.h"
#include "gpu/command_buffer/service/buffer_manager.h"
#include "gpu/command_buffer/service/error_state_mock.h"
#include "gpu/command_buffer/service/gl_utils.h"
@@ -61,7 +60,9 @@ const GLint TestHelper::kMaxVertexUniformComponents;
#endif
void TestHelper::SetupTextureInitializationExpectations(
- ::gfx::MockGLInterface* gl, GLenum target) {
+ ::gfx::MockGLInterface* gl,
+ GLenum target,
+ bool use_default_textures) {
InSequence sequence;
bool needs_initialization = (target != GL_TEXTURE_EXTERNAL_OES);
@@ -98,7 +99,7 @@ void TestHelper::SetupTextureInitializationExpectations(
NOTREACHED();
}
- int array_size = 2;
+ int array_size = use_default_textures ? 2 : 1;
EXPECT_CALL(*gl, GenTextures(array_size, _))
.WillOnce(SetArrayArgument<1>(texture_ids,
@@ -139,11 +140,14 @@ void TestHelper::SetupTextureInitializationExpectations(
void TestHelper::SetupTextureManagerInitExpectations(
::gfx::MockGLInterface* gl,
- const char* extensions) {
+ const char* extensions,
+ bool use_default_textures) {
InSequence sequence;
- SetupTextureInitializationExpectations(gl, GL_TEXTURE_2D);
- SetupTextureInitializationExpectations(gl, GL_TEXTURE_CUBE_MAP);
+ SetupTextureInitializationExpectations(
+ gl, GL_TEXTURE_2D, use_default_textures);
+ SetupTextureInitializationExpectations(
+ gl, GL_TEXTURE_CUBE_MAP, use_default_textures);
bool ext_image_external = false;
bool arb_texture_rectangle = false;
@@ -160,15 +164,22 @@ void TestHelper::SetupTextureManagerInitExpectations(
}
if (ext_image_external) {
- SetupTextureInitializationExpectations(gl, GL_TEXTURE_EXTERNAL_OES);
+ SetupTextureInitializationExpectations(
+ gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures);
}
if (arb_texture_rectangle) {
- SetupTextureInitializationExpectations(gl, GL_TEXTURE_RECTANGLE_ARB);
+ SetupTextureInitializationExpectations(
+ gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures);
}
}
void TestHelper::SetupTextureDestructionExpectations(
- ::gfx::MockGLInterface* gl, GLenum target) {
+ ::gfx::MockGLInterface* gl,
+ GLenum target,
+ bool use_default_textures) {
+ if (!use_default_textures)
+ return;
+
GLuint texture_id = 0;
switch (target) {
case GL_TEXTURE_2D:
@@ -194,9 +205,11 @@ void TestHelper::SetupTextureDestructionExpectations(
void TestHelper::SetupTextureManagerDestructionExpectations(
::gfx::MockGLInterface* gl,
- const char* extensions) {
- SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D);
- SetupTextureDestructionExpectations(gl, GL_TEXTURE_CUBE_MAP);
+ const char* extensions,
+ bool use_default_textures) {
+ SetupTextureDestructionExpectations(gl, GL_TEXTURE_2D, use_default_textures);
+ SetupTextureDestructionExpectations(
+ gl, GL_TEXTURE_CUBE_MAP, use_default_textures);
bool ext_image_external = false;
bool arb_texture_rectangle = false;
@@ -213,10 +226,12 @@ void TestHelper::SetupTextureManagerDestructionExpectations(
}
if (ext_image_external) {
- SetupTextureDestructionExpectations(gl, GL_TEXTURE_EXTERNAL_OES);
+ SetupTextureDestructionExpectations(
+ gl, GL_TEXTURE_EXTERNAL_OES, use_default_textures);
}
if (arb_texture_rectangle) {
- SetupTextureDestructionExpectations(gl, GL_TEXTURE_RECTANGLE_ARB);
+ SetupTextureDestructionExpectations(
+ gl, GL_TEXTURE_RECTANGLE_ARB, use_default_textures);
}
EXPECT_CALL(*gl, DeleteTextures(4, _))
@@ -225,18 +240,23 @@ void TestHelper::SetupTextureManagerDestructionExpectations(
}
void TestHelper::SetupContextGroupInitExpectations(
- ::gfx::MockGLInterface* gl,
- const DisallowedFeatures& disallowed_features,
- const char* extensions) {
+ ::gfx::MockGLInterface* gl,
+ const DisallowedFeatures& disallowed_features,
+ const char* extensions,
+ const char* gl_version,
+ bool bind_generates_resource) {
InSequence sequence;
- SetupFeatureInfoInitExpectations(gl, extensions);
+ SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", gl_version);
+
+ std::string l_version(StringToLowerASCII(std::string(gl_version)));
+ bool is_es3 = (l_version.substr(0, 12) == "opengl es 3.");
EXPECT_CALL(*gl, GetIntegerv(GL_MAX_RENDERBUFFER_SIZE, _))
.WillOnce(SetArgumentPointee<1>(kMaxRenderbufferSize))
.RetiresOnSaturation();
if (strstr(extensions, "GL_EXT_framebuffer_multisample") ||
- strstr(extensions, "GL_EXT_multisampled_render_to_texture")) {
+ strstr(extensions, "GL_EXT_multisampled_render_to_texture") || is_es3) {
EXPECT_CALL(*gl, GetIntegerv(GL_MAX_SAMPLES, _))
.WillOnce(SetArgumentPointee<1>(kMaxSamples))
.RetiresOnSaturation();
@@ -273,7 +293,8 @@ void TestHelper::SetupContextGroupInitExpectations(
.WillOnce(SetArgumentPointee<1>(kMaxVertexUniformComponents))
.RetiresOnSaturation();
- SetupTextureManagerInitExpectations(gl, extensions);
+ bool use_default_textures = bind_generates_resource;
+ SetupTextureManagerInitExpectations(gl, extensions, use_default_textures);
}
void TestHelper::SetupFeatureInfoInitExpectations(
@@ -297,6 +318,78 @@ void TestHelper::SetupFeatureInfoInitExpectationsWithGLVersion(
EXPECT_CALL(*gl, GetString(GL_VERSION))
.WillOnce(Return(reinterpret_cast<const uint8*>(gl_version)))
.RetiresOnSaturation();
+
+ std::string l_version(StringToLowerASCII(std::string(gl_version)));
+ bool is_es3 = (l_version.substr(0, 12) == "opengl es 3.");
+
+ if (strstr(extensions, "GL_ARB_texture_float") ||
+ (is_es3 && strstr(extensions, "GL_EXT_color_buffer_float"))) {
+ static const GLuint gl_ids[] = {101, 102};
+ const GLsizei width = 16;
+ EXPECT_CALL(*gl, GetIntegerv(GL_FRAMEBUFFER_BINDING, _))
+ .WillOnce(SetArgumentPointee<1>(gl_ids[0]))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, GetIntegerv(GL_TEXTURE_BINDING_2D, _))
+ .WillOnce(SetArgumentPointee<1>(gl_ids[0]))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, GenTextures(1, _))
+ .WillOnce(SetArrayArgument<1>(gl_ids + 1, gl_ids + 2))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, GenFramebuffersEXT(1, _))
+ .WillOnce(SetArrayArgument<1>(gl_ids + 1, gl_ids + 2))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BindTexture(GL_TEXTURE_2D, gl_ids[1]))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
+ GL_NEAREST))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, width, 0,
+ GL_RGBA, GL_FLOAT, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BindFramebufferEXT(GL_FRAMEBUFFER, gl_ids[1]))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, FramebufferTexture2DEXT(GL_FRAMEBUFFER,
+ GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gl_ids[1], 0))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, TexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, width, width, 0,
+ GL_RGB, GL_FLOAT, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ if (is_es3) {
+ EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT))
+ .RetiresOnSaturation();
+ } else {
+ EXPECT_CALL(*gl, CheckFramebufferStatusEXT(GL_FRAMEBUFFER))
+ .WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
+ .RetiresOnSaturation();
+ }
+ EXPECT_CALL(*gl, DeleteFramebuffersEXT(1, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, DeleteTextures(1, _))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BindFramebufferEXT(GL_FRAMEBUFFER, gl_ids[0]))
+ .Times(1)
+ .RetiresOnSaturation();
+ EXPECT_CALL(*gl, BindTexture(GL_TEXTURE_2D, gl_ids[0]))
+ .Times(1)
+ .RetiresOnSaturation();
+#if DCHECK_IS_ON
+ EXPECT_CALL(*gl, GetError())
+ .WillOnce(Return(GL_NO_ERROR))
+ .RetiresOnSaturation();
+#endif
+ }
}
void TestHelper::SetupExpectationsForClearingUniforms(
@@ -524,7 +617,7 @@ void TestHelper::DoBufferData(
manager->DoBufferData(error_state, buffer, size, usage, data);
}
-void TestHelper::SetTexParameterWithExpectations(
+void TestHelper::SetTexParameteriWithExpectations(
::gfx::MockGLInterface* gl, MockErrorState* error_state,
TextureManager* manager, TextureRef* texture_ref,
GLenum pname, GLint value, GLenum error) {
@@ -540,11 +633,11 @@ void TestHelper::SetTexParameterWithExpectations(
.Times(1)
.RetiresOnSaturation();
} else {
- EXPECT_CALL(*error_state, SetGLErrorInvalidParam(_, _, error, _, _, _))
+ EXPECT_CALL(*error_state, SetGLErrorInvalidParami(_, _, error, _, _, _))
.Times(1)
.RetiresOnSaturation();
}
- manager->SetParameter("", error_state, texture_ref, pname, value);
+ manager->SetParameteri("", error_state, texture_ref, pname, value);
}
ScopedGLImplementationSetter::ScopedGLImplementationSetter(
diff --git a/chromium/gpu/command_buffer/service/test_helper.h b/chromium/gpu/command_buffer/service/test_helper.h
index a619073878f..d0ae758aae7 100644
--- a/chromium/gpu/command_buffer/service/test_helper.h
+++ b/chromium/gpu/command_buffer/service/test_helper.h
@@ -65,7 +65,9 @@ class TestHelper {
static void SetupContextGroupInitExpectations(
::gfx::MockGLInterface* gl,
const DisallowedFeatures& disallowed_features,
- const char* extensions);
+ const char* extensions,
+ const char* gl_version,
+ bool bind_generates_resource);
static void SetupFeatureInfoInitExpectations(
::gfx::MockGLInterface* gl, const char* extensions);
static void SetupFeatureInfoInitExpectationsWithGLVersion(
@@ -73,10 +75,13 @@ class TestHelper {
const char* extensions,
const char* gl_renderer,
const char* gl_version);
- static void SetupTextureManagerInitExpectations(
- ::gfx::MockGLInterface* gl, const char* extensions);
+ static void SetupTextureManagerInitExpectations(::gfx::MockGLInterface* gl,
+ const char* extensions,
+ bool use_default_textures);
static void SetupTextureManagerDestructionExpectations(
- ::gfx::MockGLInterface* gl, const char* extensions);
+ ::gfx::MockGLInterface* gl,
+ const char* extensions,
+ bool use_default_textures);
static void SetupExpectationsForClearingUniforms(
::gfx::MockGLInterface* gl, UniformInfo* uniforms, size_t num_uniforms);
@@ -97,16 +102,18 @@ class TestHelper {
BufferManager* manager, Buffer* buffer, GLsizeiptr size, GLenum usage,
const GLvoid* data, GLenum error);
- static void SetTexParameterWithExpectations(
+ static void SetTexParameteriWithExpectations(
::gfx::MockGLInterface* gl, MockErrorState* error_state,
TextureManager* manager, TextureRef* texture_ref,
GLenum pname, GLint value, GLenum error);
private:
- static void SetupTextureInitializationExpectations(
- ::gfx::MockGLInterface* gl, GLenum target);
- static void SetupTextureDestructionExpectations(
- ::gfx::MockGLInterface* gl, GLenum target);
+ static void SetupTextureInitializationExpectations(::gfx::MockGLInterface* gl,
+ GLenum target,
+ bool use_default_textures);
+ static void SetupTextureDestructionExpectations(::gfx::MockGLInterface* gl,
+ GLenum target,
+ bool use_default_textures);
};
// This object temporaritly Sets what gfx::GetGLImplementation returns. During
diff --git a/chromium/gpu/command_buffer/service/texture_definition.cc b/chromium/gpu/command_buffer/service/texture_definition.cc
new file mode 100644
index 00000000000..3703f14b511
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/texture_definition.cc
@@ -0,0 +1,456 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gpu/command_buffer/service/texture_definition.h"
+
+#include "gpu/command_buffer/service/texture_manager.h"
+#include "ui/gl/gl_image.h"
+#include "ui/gl/gl_implementation.h"
+#include "ui/gl/scoped_binders.h"
+
+#if !defined(OS_MACOSX)
+#include "ui/gl/gl_surface_egl.h"
+#endif
+
+namespace gpu {
+namespace gles2 {
+
+namespace {
+
+class GLImageSync : public gfx::GLImage {
+ public:
+ explicit GLImageSync(const scoped_refptr<NativeImageBuffer>& buffer,
+ const gfx::Size& size);
+
+ // Implement GLImage.
+ virtual void Destroy() OVERRIDE;
+ virtual gfx::Size GetSize() OVERRIDE;
+ virtual bool BindTexImage(unsigned target) OVERRIDE;
+ virtual void ReleaseTexImage(unsigned target) OVERRIDE;
+ virtual void WillUseTexImage() OVERRIDE;
+ virtual void WillModifyTexImage() OVERRIDE;
+ virtual void DidModifyTexImage() OVERRIDE;
+
+ virtual void DidUseTexImage() OVERRIDE;
+ virtual void SetReleaseAfterUse() OVERRIDE;
+
+ protected:
+ virtual ~GLImageSync();
+
+ private:
+ scoped_refptr<NativeImageBuffer> buffer_;
+ gfx::Size size_;
+
+ DISALLOW_COPY_AND_ASSIGN(GLImageSync);
+};
+
+GLImageSync::GLImageSync(const scoped_refptr<NativeImageBuffer>& buffer,
+ const gfx::Size& size)
+ : buffer_(buffer), size_(size) {
+ if (buffer)
+ buffer->AddClient(this);
+}
+
+GLImageSync::~GLImageSync() {
+ if (buffer_)
+ buffer_->RemoveClient(this);
+}
+
+void GLImageSync::Destroy() {}
+
+gfx::Size GLImageSync::GetSize() {
+ return size_;
+}
+
+bool GLImageSync::BindTexImage(unsigned target) {
+ NOTREACHED();
+ return false;
+}
+
+void GLImageSync::ReleaseTexImage(unsigned target) {
+ NOTREACHED();
+}
+
+void GLImageSync::WillUseTexImage() {
+ if (buffer_)
+ buffer_->WillRead(this);
+}
+
+void GLImageSync::DidUseTexImage() {
+ if (buffer_)
+ buffer_->DidRead(this);
+}
+
+void GLImageSync::WillModifyTexImage() {
+ if (buffer_)
+ buffer_->WillWrite(this);
+}
+
+void GLImageSync::DidModifyTexImage() {
+ if (buffer_)
+ buffer_->DidWrite(this);
+}
+
+void GLImageSync::SetReleaseAfterUse() {
+ NOTREACHED();
+}
+
+#if !defined(OS_MACOSX)
+class NativeImageBufferEGL : public NativeImageBuffer {
+ public:
+ static scoped_refptr<NativeImageBufferEGL> Create(GLuint texture_id);
+
+ private:
+ NativeImageBufferEGL(scoped_ptr<gfx::GLFence> write_fence,
+ EGLDisplay display,
+ EGLImageKHR image);
+ virtual ~NativeImageBufferEGL();
+ virtual void BindToTexture(GLenum target) OVERRIDE;
+
+ EGLDisplay egl_display_;
+ EGLImageKHR egl_image_;
+
+ DISALLOW_COPY_AND_ASSIGN(NativeImageBufferEGL);
+};
+
+scoped_refptr<NativeImageBufferEGL> NativeImageBufferEGL::Create(
+ GLuint texture_id) {
+ EGLDisplay egl_display = gfx::GLSurfaceEGL::GetHardwareDisplay();
+ EGLContext egl_context = eglGetCurrentContext();
+
+ DCHECK_NE(EGL_NO_CONTEXT, egl_context);
+ DCHECK_NE(EGL_NO_DISPLAY, egl_display);
+ DCHECK(glIsTexture(texture_id));
+
+ DCHECK(gfx::g_driver_egl.ext.b_EGL_KHR_image_base &&
+ gfx::g_driver_egl.ext.b_EGL_KHR_gl_texture_2D_image &&
+ gfx::g_driver_gl.ext.b_GL_OES_EGL_image &&
+ gfx::g_driver_egl.ext.b_EGL_KHR_fence_sync);
+
+ const EGLint egl_attrib_list[] = {
+ EGL_GL_TEXTURE_LEVEL_KHR, 0, EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE};
+ EGLClientBuffer egl_buffer = reinterpret_cast<EGLClientBuffer>(texture_id);
+ EGLenum egl_target = EGL_GL_TEXTURE_2D_KHR; // TODO
+
+ EGLImageKHR egl_image = eglCreateImageKHR(
+ egl_display, egl_context, egl_target, egl_buffer, egl_attrib_list);
+
+ if (egl_image == EGL_NO_IMAGE_KHR)
+ return NULL;
+
+ return new NativeImageBufferEGL(
+ make_scoped_ptr(gfx::GLFence::Create()), egl_display, egl_image);
+}
+
+NativeImageBufferEGL::NativeImageBufferEGL(scoped_ptr<gfx::GLFence> write_fence,
+ EGLDisplay display,
+ EGLImageKHR image)
+ : NativeImageBuffer(write_fence.Pass()),
+ egl_display_(display),
+ egl_image_(image) {
+ DCHECK(egl_display_ != EGL_NO_DISPLAY);
+ DCHECK(egl_image_ != EGL_NO_IMAGE_KHR);
+}
+
+NativeImageBufferEGL::~NativeImageBufferEGL() {
+ if (egl_image_ != EGL_NO_IMAGE_KHR)
+ eglDestroyImageKHR(egl_display_, egl_image_);
+}
+
+void NativeImageBufferEGL::BindToTexture(GLenum target) {
+ DCHECK(egl_image_ != EGL_NO_IMAGE_KHR);
+ glEGLImageTargetTexture2DOES(target, egl_image_);
+ DCHECK_EQ(static_cast<EGLint>(EGL_SUCCESS), eglGetError());
+ DCHECK_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
+}
+#endif
+
+class NativeImageBufferStub : public NativeImageBuffer {
+ public:
+ NativeImageBufferStub() : NativeImageBuffer(scoped_ptr<gfx::GLFence>()) {}
+
+ private:
+ virtual ~NativeImageBufferStub() {}
+ virtual void BindToTexture(GLenum target) OVERRIDE {}
+
+ DISALLOW_COPY_AND_ASSIGN(NativeImageBufferStub);
+};
+
+} // anonymous namespace
+
+// static
+scoped_refptr<NativeImageBuffer> NativeImageBuffer::Create(GLuint texture_id) {
+ switch (gfx::GetGLImplementation()) {
+#if !defined(OS_MACOSX)
+ case gfx::kGLImplementationEGLGLES2:
+ return NativeImageBufferEGL::Create(texture_id);
+#endif
+ case gfx::kGLImplementationMockGL:
+ return new NativeImageBufferStub;
+ default:
+ NOTREACHED();
+ return NULL;
+ }
+}
+
+NativeImageBuffer::ClientInfo::ClientInfo(gfx::GLImage* client)
+ : client(client), needs_wait_before_read(true) {}
+
+NativeImageBuffer::ClientInfo::~ClientInfo() {}
+
+NativeImageBuffer::NativeImageBuffer(scoped_ptr<gfx::GLFence> write_fence)
+ : write_fence_(write_fence.Pass()), write_client_(NULL) {
+}
+
+NativeImageBuffer::~NativeImageBuffer() {
+ DCHECK(client_infos_.empty());
+}
+
+void NativeImageBuffer::AddClient(gfx::GLImage* client) {
+ base::AutoLock lock(lock_);
+ client_infos_.push_back(ClientInfo(client));
+}
+
+void NativeImageBuffer::RemoveClient(gfx::GLImage* client) {
+ base::AutoLock lock(lock_);
+ if (write_client_ == client)
+ write_client_ = NULL;
+ for (std::list<ClientInfo>::iterator it = client_infos_.begin();
+ it != client_infos_.end();
+ it++) {
+ if (it->client == client) {
+ client_infos_.erase(it);
+ return;
+ }
+ }
+ NOTREACHED();
+}
+
+bool NativeImageBuffer::IsClient(gfx::GLImage* client) {
+ base::AutoLock lock(lock_);
+ for (std::list<ClientInfo>::iterator it = client_infos_.begin();
+ it != client_infos_.end();
+ it++) {
+ if (it->client == client)
+ return true;
+ }
+ return false;
+}
+
+void NativeImageBuffer::WillRead(gfx::GLImage* client) {
+ base::AutoLock lock(lock_);
+ if (!write_fence_.get() || write_client_ == client)
+ return;
+
+ for (std::list<ClientInfo>::iterator it = client_infos_.begin();
+ it != client_infos_.end();
+ it++) {
+ if (it->client == client) {
+ if (it->needs_wait_before_read) {
+ it->needs_wait_before_read = false;
+ write_fence_->ServerWait();
+ }
+ return;
+ }
+ }
+ NOTREACHED();
+}
+
+void NativeImageBuffer::WillWrite(gfx::GLImage* client) {
+ base::AutoLock lock(lock_);
+ if (write_client_ != client)
+ write_fence_->ServerWait();
+
+ for (std::list<ClientInfo>::iterator it = client_infos_.begin();
+ it != client_infos_.end();
+ it++) {
+ if (it->read_fence.get() && it->client != client)
+ it->read_fence->ServerWait();
+ }
+}
+
+void NativeImageBuffer::DidRead(gfx::GLImage* client) {
+ base::AutoLock lock(lock_);
+ for (std::list<ClientInfo>::iterator it = client_infos_.begin();
+ it != client_infos_.end();
+ it++) {
+ if (it->client == client) {
+ it->read_fence = make_linked_ptr(gfx::GLFence::Create());
+ return;
+ }
+ }
+ NOTREACHED();
+}
+
+void NativeImageBuffer::DidWrite(gfx::GLImage* client) {
+ base::AutoLock lock(lock_);
+ // Sharing semantics require the client to flush in order to make changes
+ // visible to other clients.
+ write_fence_.reset(gfx::GLFence::CreateWithoutFlush());
+ write_client_ = client;
+ for (std::list<ClientInfo>::iterator it = client_infos_.begin();
+ it != client_infos_.end();
+ it++) {
+ it->needs_wait_before_read = true;
+ }
+}
+
+TextureDefinition::LevelInfo::LevelInfo(GLenum target,
+ GLenum internal_format,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ bool cleared)
+ : target(target),
+ internal_format(internal_format),
+ width(width),
+ height(height),
+ depth(depth),
+ border(border),
+ format(format),
+ type(type),
+ cleared(cleared) {}
+
+TextureDefinition::LevelInfo::~LevelInfo() {}
+
+TextureDefinition::TextureDefinition(
+ GLenum target,
+ Texture* texture,
+ unsigned int version,
+ const scoped_refptr<NativeImageBuffer>& image_buffer)
+ : version_(version),
+ target_(target),
+ image_buffer_(image_buffer ? image_buffer : NativeImageBuffer::Create(
+ texture->service_id())),
+ min_filter_(texture->min_filter()),
+ mag_filter_(texture->mag_filter()),
+ wrap_s_(texture->wrap_s()),
+ wrap_t_(texture->wrap_t()),
+ usage_(texture->usage()),
+ immutable_(texture->IsImmutable()) {
+
+ // TODO
+ DCHECK(!texture->level_infos_.empty());
+ DCHECK(!texture->level_infos_[0].empty());
+ DCHECK(!texture->NeedsMips());
+ DCHECK(texture->level_infos_[0][0].width);
+ DCHECK(texture->level_infos_[0][0].height);
+
+ scoped_refptr<gfx::GLImage> gl_image(
+ new GLImageSync(image_buffer_,
+ gfx::Size(texture->level_infos_[0][0].width,
+ texture->level_infos_[0][0].height)));
+ texture->SetLevelImage(NULL, target, 0, gl_image);
+
+ // TODO: all levels
+ level_infos_.clear();
+ const Texture::LevelInfo& level = texture->level_infos_[0][0];
+ LevelInfo info(level.target,
+ level.internal_format,
+ level.width,
+ level.height,
+ level.depth,
+ level.border,
+ level.format,
+ level.type,
+ level.cleared);
+ std::vector<LevelInfo> infos;
+ infos.push_back(info);
+ level_infos_.push_back(infos);
+}
+
+TextureDefinition::~TextureDefinition() {
+}
+
+Texture* TextureDefinition::CreateTexture() const {
+ if (!image_buffer_)
+ return NULL;
+
+ GLuint texture_id;
+ glGenTextures(1, &texture_id);
+
+ Texture* texture(new Texture(texture_id));
+ UpdateTexture(texture);
+
+ return texture;
+}
+
+void TextureDefinition::UpdateTexture(Texture* texture) const {
+ gfx::ScopedTextureBinder texture_binder(target_, texture->service_id());
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter_);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter_);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s_);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t_);
+ if (image_buffer_)
+ image_buffer_->BindToTexture(target_);
+ // We have to make sure the changes are visible to other clients in this share
+ // group. As far as the clients are concerned, the mailbox semantics only
+ // demand a single flush from the client after changes are first made,
+ // and it is not visible to them when another share group boundary is crossed.
+ // We could probably track this and be a bit smarter about when to flush
+ // though.
+ glFlush();
+
+ texture->level_infos_.resize(1);
+ for (size_t i = 0; i < level_infos_.size(); i++) {
+ const LevelInfo& base_info = level_infos_[i][0];
+ const size_t levels_needed = TextureManager::ComputeMipMapCount(
+ base_info.target, base_info.width, base_info.height, base_info.depth);
+ DCHECK(level_infos_.size() <= levels_needed);
+ texture->level_infos_[0].resize(levels_needed);
+ for (size_t n = 0; n < level_infos_.size(); n++) {
+ const LevelInfo& info = level_infos_[i][n];
+ texture->SetLevelInfo(NULL,
+ info.target,
+ i,
+ info.internal_format,
+ info.width,
+ info.height,
+ info.depth,
+ info.border,
+ info.format,
+ info.type,
+ info.cleared);
+ }
+ }
+ if (image_buffer_) {
+ texture->SetLevelImage(
+ NULL,
+ target_,
+ 0,
+ new GLImageSync(
+ image_buffer_,
+ gfx::Size(level_infos_[0][0].width, level_infos_[0][0].height)));
+ }
+
+ texture->target_ = target_;
+ texture->SetImmutable(immutable_);
+ texture->min_filter_ = min_filter_;
+ texture->mag_filter_ = mag_filter_;
+ texture->wrap_s_ = wrap_s_;
+ texture->wrap_t_ = wrap_t_;
+ texture->usage_ = usage_;
+}
+
+bool TextureDefinition::Matches(const Texture* texture) const {
+ DCHECK(target_ == texture->target());
+ if (texture->min_filter_ != min_filter_ ||
+ texture->mag_filter_ != mag_filter_ ||
+ texture->wrap_s_ != wrap_s_ ||
+ texture->wrap_t_ != wrap_t_) {
+ return false;
+ }
+
+ // All structural changes should have orphaned the texture.
+ if (image_buffer_ && !texture->GetLevelImage(texture->target(), 0))
+ return false;
+
+ return true;
+}
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/texture_definition.h b/chromium/gpu/command_buffer/service/texture_definition.h
new file mode 100644
index 00000000000..7708902fab4
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/texture_definition.h
@@ -0,0 +1,127 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
+#define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
+
+#include <list>
+#include <vector>
+
+#include "base/callback.h"
+#include "base/memory/linked_ptr.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/synchronization/lock.h"
+#include "gpu/command_buffer/service/gl_utils.h"
+#include "ui/gl/gl_fence.h"
+
+namespace gfx {
+class GLFence;
+class GLImage;
+}
+
+namespace gpu {
+namespace gles2 {
+
+class Texture;
+
+class NativeImageBuffer : public base::RefCountedThreadSafe<NativeImageBuffer> {
+ public:
+ static scoped_refptr<NativeImageBuffer> Create(GLuint texture_id);
+ virtual void BindToTexture(GLenum target) = 0;
+
+ void AddClient(gfx::GLImage* client);
+ void RemoveClient(gfx::GLImage* client);
+ bool IsClient(gfx::GLImage* client);
+
+ void WillRead(gfx::GLImage* client);
+ void WillWrite(gfx::GLImage* client);
+ void DidRead(gfx::GLImage* client);
+ void DidWrite(gfx::GLImage* client);
+
+ protected:
+ friend class base::RefCountedThreadSafe<NativeImageBuffer>;
+ explicit NativeImageBuffer(scoped_ptr<gfx::GLFence> write_fence);
+ virtual ~NativeImageBuffer();
+
+ base::Lock lock_;
+
+ struct ClientInfo {
+ ClientInfo(gfx::GLImage* client);
+ ~ClientInfo();
+
+ gfx::GLImage* client;
+ bool needs_wait_before_read;
+ linked_ptr<gfx::GLFence> read_fence;
+ };
+ std::list<ClientInfo> client_infos_;
+ scoped_ptr<gfx::GLFence> write_fence_;
+ gfx::GLImage* write_client_;
+
+ DISALLOW_COPY_AND_ASSIGN(NativeImageBuffer);
+};
+
+// An immutable description that can be used to create a texture that shares
+// the underlying image buffer(s).
+class TextureDefinition {
+ public:
+ TextureDefinition(GLenum target,
+ Texture* texture,
+ unsigned int version,
+ const scoped_refptr<NativeImageBuffer>& image);
+ virtual ~TextureDefinition();
+
+ Texture* CreateTexture() const;
+ void UpdateTexture(Texture* texture) const;
+
+ unsigned int version() const { return version_; }
+ bool IsOlderThan(unsigned int version) const {
+ return (version - version_) < 0x80000000;
+ }
+ bool Matches(const Texture* texture) const;
+
+ scoped_refptr<NativeImageBuffer> image() { return image_buffer_; }
+
+ private:
+ struct LevelInfo {
+ LevelInfo(GLenum target,
+ GLenum internal_format,
+ GLsizei width,
+ GLsizei height,
+ GLsizei depth,
+ GLint border,
+ GLenum format,
+ GLenum type,
+ bool cleared);
+ ~LevelInfo();
+
+ GLenum target;
+ GLenum internal_format;
+ GLsizei width;
+ GLsizei height;
+ GLsizei depth;
+ GLint border;
+ GLenum format;
+ GLenum type;
+ bool cleared;
+ };
+
+ typedef std::vector<std::vector<LevelInfo> > LevelInfos;
+
+ unsigned int version_;
+ GLenum target_;
+ scoped_refptr<NativeImageBuffer> image_buffer_;
+ GLenum min_filter_;
+ GLenum mag_filter_;
+ GLenum wrap_s_;
+ GLenum wrap_t_;
+ GLenum usage_;
+ bool immutable_;
+ LevelInfos level_infos_;
+};
+
+} // namespage gles2
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_DEFINITION_H_
diff --git a/chromium/gpu/command_buffer/service/texture_manager.cc b/chromium/gpu/command_buffer/service/texture_manager.cc
index 64ead827edd..76863c62a5e 100644
--- a/chromium/gpu/command_buffer/service/texture_manager.cc
+++ b/chromium/gpu/command_buffer/service/texture_manager.cc
@@ -13,7 +13,6 @@
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
#include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/memory_tracking.h"
-#include "gpu/command_buffer/service/stream_texture_manager.h"
namespace gpu {
namespace gles2 {
@@ -67,9 +66,8 @@ TextureManager::DestructionObserver::DestructionObserver() {}
TextureManager::DestructionObserver::~DestructionObserver() {}
TextureManager::~TextureManager() {
- FOR_EACH_OBSERVER(DestructionObserver,
- destruction_observers_,
- OnTextureManagerDestroying(this));
+ for (unsigned int i = 0; i < destruction_observers_.size(); i++)
+ destruction_observers_[i]->OnTextureManagerDestroying(this);
DCHECK(textures_.empty());
@@ -117,11 +115,11 @@ Texture::Texture(GLuint service_id)
npot_(false),
has_been_bound_(false),
framebuffer_attachment_count_(0),
- stream_texture_(false),
immutable_(false),
has_images_(false),
estimated_size_(0),
- can_render_condition_(CAN_RENDER_ALWAYS) {
+ can_render_condition_(CAN_RENDER_ALWAYS),
+ texture_max_anisotropy_initialized_(false) {
}
Texture::~Texture() {
@@ -401,6 +399,13 @@ void Texture::UpdateCleared() {
}
}
}
+
+ // If texture is uncleared and is attached to a framebuffer,
+ // that framebuffer must be marked possibly incomplete.
+ if (!cleared && IsAttachedToFramebuffer()) {
+ IncAllFramebufferStateChangeCount();
+ }
+
UpdateSafeToRenderFrom(cleared);
}
@@ -519,7 +524,6 @@ bool Texture::ValidForTexture(
GLint yoffset,
GLsizei width,
GLsizei height,
- GLenum format,
GLenum type) const {
size_t face_index = GLTargetToFaceIndex(target);
if (level >= 0 && face_index < level_infos_.size() &&
@@ -533,7 +537,6 @@ bool Texture::ValidForTexture(
yoffset >= 0 &&
right <= info.width &&
top <= info.height &&
- format == info.internal_format &&
type == info.type;
}
return false;
@@ -573,7 +576,7 @@ bool Texture::GetLevelType(
return false;
}
-GLenum Texture::SetParameter(
+GLenum Texture::SetParameteri(
const FeatureInfo* feature_info, GLenum pname, GLint param) {
DCHECK(feature_info);
@@ -641,6 +644,31 @@ GLenum Texture::SetParameter(
return GL_NO_ERROR;
}
+GLenum Texture::SetParameterf(
+ const FeatureInfo* feature_info, GLenum pname, GLfloat param) {
+ switch (pname) {
+ case GL_TEXTURE_MIN_FILTER:
+ case GL_TEXTURE_MAG_FILTER:
+ case GL_TEXTURE_POOL_CHROMIUM:
+ case GL_TEXTURE_WRAP_S:
+ case GL_TEXTURE_WRAP_T:
+ case GL_TEXTURE_USAGE_ANGLE:
+ {
+ GLint iparam = static_cast<GLint>(param);
+ return SetParameteri(feature_info, pname, iparam);
+ }
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ if (param < 1.f) {
+ return GL_INVALID_VALUE;
+ }
+ break;
+ default:
+ NOTREACHED();
+ return GL_INVALID_ENUM;
+ }
+ return GL_NO_ERROR;
+}
+
void Texture::Update(const FeatureInfo* feature_info) {
// Update npot status.
// Assume GL_TEXTURE_EXTERNAL_OES textures are npot, all others
@@ -759,6 +787,14 @@ bool Texture::IsLevelCleared(GLenum target, GLint level) const {
return info.cleared;
}
+void Texture::InitTextureMaxAnisotropyIfNeeded(GLenum target) {
+ if (texture_max_anisotropy_initialized_)
+ return;
+ texture_max_anisotropy_initialized_ = true;
+ GLfloat params[] = { 1.0f };
+ glTexParameterfv(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, params);
+}
+
bool Texture::ClearLevel(
GLES2Decoder* decoder, GLenum target, GLint level) {
DCHECK(decoder);
@@ -784,8 +820,8 @@ bool Texture::ClearLevel(
// but only the decoder knows all the state (like unpack_alignment_) that's
// needed to be able to call GL correctly.
bool cleared = decoder->ClearLevel(
- service_id_, target_, info.target, info.level, info.format, info.type,
- info.width, info.height, immutable_);
+ service_id_, target_, info.target, info.level, info.internal_format,
+ info.format, info.type, info.width, info.height, immutable_);
UpdateMipCleared(&info, cleared);
return info.cleared;
}
@@ -810,6 +846,11 @@ void Texture::SetLevelImage(
}
gfx::GLImage* Texture::GetLevelImage(GLint target, GLint level) const {
+ if (target != GL_TEXTURE_2D && target != GL_TEXTURE_EXTERNAL_OES &&
+ target != GL_TEXTURE_RECTANGLE_ARB) {
+ return NULL;
+ }
+
size_t face_index = GLTargetToFaceIndex(target);
if (level >= 0 && face_index < level_infos_.size() &&
static_cast<size_t>(level) < level_infos_[face_index].size()) {
@@ -821,6 +862,17 @@ gfx::GLImage* Texture::GetLevelImage(GLint target, GLint level) const {
return 0;
}
+void Texture::OnWillModifyPixels() {
+ gfx::GLImage* image = GetLevelImage(target(), 0);
+ if (image)
+ image->WillModifyTexImage();
+}
+
+void Texture::OnDidModifyPixels() {
+ gfx::GLImage* image = GetLevelImage(target(), 0);
+ if (image)
+ image->DidModifyTexImage();
+}
TextureRef::TextureRef(TextureManager* manager,
GLuint client_id,
@@ -828,7 +880,7 @@ TextureRef::TextureRef(TextureManager* manager,
: manager_(manager),
texture_(texture),
client_id_(client_id),
- is_stream_texture_owner_(false) {
+ num_observers_(0) {
DCHECK(manager_);
DCHECK(texture_);
texture_->AddTextureRef(this);
@@ -850,14 +902,14 @@ TextureRef::~TextureRef() {
TextureManager::TextureManager(MemoryTracker* memory_tracker,
FeatureInfo* feature_info,
GLint max_texture_size,
- GLint max_cube_map_texture_size)
- : memory_tracker_managed_(new MemoryTypeTracker(memory_tracker,
- MemoryTracker::kManaged)),
+ GLint max_cube_map_texture_size,
+ bool use_default_textures)
+ : memory_tracker_managed_(
+ new MemoryTypeTracker(memory_tracker, MemoryTracker::kManaged)),
memory_tracker_unmanaged_(
new MemoryTypeTracker(memory_tracker, MemoryTracker::kUnmanaged)),
feature_info_(feature_info),
framebuffer_manager_(NULL),
- stream_texture_manager_(NULL),
max_texture_size_(max_texture_size),
max_cube_map_texture_size_(max_cube_map_texture_size),
max_levels_(ComputeMipMapCount(GL_TEXTURE_2D,
@@ -868,6 +920,7 @@ TextureManager::TextureManager(MemoryTracker* memory_tracker,
max_cube_map_texture_size,
max_cube_map_texture_size,
max_cube_map_texture_size)),
+ use_default_textures_(use_default_textures),
num_unrenderable_textures_(0),
num_unsafe_textures_(0),
num_uncleared_mips_(0),
@@ -915,8 +968,9 @@ scoped_refptr<TextureRef>
// Make default textures and texture for replacing non-renderable textures.
GLuint ids[2];
- glGenTextures(arraysize(ids), ids);
- for (unsigned long ii = 0; ii < arraysize(ids); ++ii) {
+ const unsigned long num_ids = use_default_textures_ ? 2 : 1;
+ glGenTextures(num_ids, ids);
+ for (unsigned long ii = 0; ii < num_ids; ++ii) {
glBindTexture(target, ids[ii]);
if (needs_initialization) {
if (needs_faces) {
@@ -932,48 +986,50 @@ scoped_refptr<TextureRef>
}
glBindTexture(target, 0);
- scoped_refptr<TextureRef> default_texture(
- TextureRef::Create(this, 0, ids[1]));
- SetTarget(default_texture.get(), target);
- if (needs_faces) {
- for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) {
- SetLevelInfo(default_texture.get(),
- GLES2Util::IndexToGLFaceTarget(ii),
- 0,
- GL_RGBA,
- 1,
- 1,
- 1,
- 0,
- GL_RGBA,
- GL_UNSIGNED_BYTE,
- true);
- }
- } else {
- if (needs_initialization) {
- SetLevelInfo(default_texture.get(),
- GL_TEXTURE_2D,
- 0,
- GL_RGBA,
- 1,
- 1,
- 1,
- 0,
- GL_RGBA,
- GL_UNSIGNED_BYTE,
- true);
+ scoped_refptr<TextureRef> default_texture;
+ if (use_default_textures_) {
+ default_texture = TextureRef::Create(this, 0, ids[1]);
+ SetTarget(default_texture.get(), target);
+ if (needs_faces) {
+ for (int ii = 0; ii < GLES2Util::kNumFaces; ++ii) {
+ SetLevelInfo(default_texture.get(),
+ GLES2Util::IndexToGLFaceTarget(ii),
+ 0,
+ GL_RGBA,
+ 1,
+ 1,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ }
} else {
- SetLevelInfo(default_texture.get(),
- GL_TEXTURE_EXTERNAL_OES,
- 0,
- GL_RGBA,
- 1,
- 1,
- 1,
- 0,
- GL_RGBA,
- GL_UNSIGNED_BYTE,
- true);
+ if (needs_initialization) {
+ SetLevelInfo(default_texture.get(),
+ GL_TEXTURE_2D,
+ 0,
+ GL_RGBA,
+ 1,
+ 1,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ } else {
+ SetLevelInfo(default_texture.get(),
+ GL_TEXTURE_EXTERNAL_OES,
+ 0,
+ GL_RGBA,
+ 1,
+ 1,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ }
}
}
@@ -1006,19 +1062,6 @@ void TextureManager::SetTarget(TextureRef* ref, GLenum target) {
->SetTarget(feature_info_.get(), target, MaxLevelsForTarget(target));
}
-void TextureManager::SetStreamTexture(TextureRef* ref, bool stream_texture) {
- DCHECK(ref);
- // Only the owner can mark as non-stream texture.
- DCHECK_EQ(stream_texture, !ref->is_stream_texture_owner_);
- ref->texture()->SetStreamTexture(stream_texture);
- ref->set_is_stream_texture_owner(stream_texture);
-}
-
-bool TextureManager::IsStreamTextureOwner(TextureRef* ref) {
- DCHECK(ref);
- return ref->is_stream_texture_owner();
-}
-
void TextureManager::SetLevelCleared(TextureRef* ref,
GLenum target,
GLint level,
@@ -1091,20 +1134,20 @@ TextureRef* TextureManager::Consume(
return ref.get();
}
-void TextureManager::SetParameter(
+void TextureManager::SetParameteri(
const char* function_name, ErrorState* error_state,
TextureRef* ref, GLenum pname, GLint param) {
DCHECK(error_state);
DCHECK(ref);
Texture* texture = ref->texture();
- GLenum result = texture->SetParameter(feature_info_.get(), pname, param);
+ GLenum result = texture->SetParameteri(feature_info_.get(), pname, param);
if (result != GL_NO_ERROR) {
if (result == GL_INVALID_ENUM) {
ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
error_state, function_name, param, "param");
} else {
- ERRORSTATE_SET_GL_ERROR_INVALID_PARAM(
- error_state, result, function_name, pname, static_cast<GLint>(param));
+ ERRORSTATE_SET_GL_ERROR_INVALID_PARAMI(
+ error_state, result, function_name, pname, param);
}
} else {
// Texture tracking pools exist only for the command decoder, so
@@ -1115,6 +1158,30 @@ void TextureManager::SetParameter(
}
}
+void TextureManager::SetParameterf(
+ const char* function_name, ErrorState* error_state,
+ TextureRef* ref, GLenum pname, GLfloat param) {
+ DCHECK(error_state);
+ DCHECK(ref);
+ Texture* texture = ref->texture();
+ GLenum result = texture->SetParameterf(feature_info_.get(), pname, param);
+ if (result != GL_NO_ERROR) {
+ if (result == GL_INVALID_ENUM) {
+ ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
+ error_state, function_name, param, "param");
+ } else {
+ ERRORSTATE_SET_GL_ERROR_INVALID_PARAMF(
+ error_state, result, function_name, pname, param);
+ }
+ } else {
+ // Texture tracking pools exist only for the command decoder, so
+ // do not pass them on to the native GL implementation.
+ if (pname != GL_TEXTURE_POOL_CHROMIUM) {
+ glTexParameterf(texture->target(), pname, param);
+ }
+ }
+}
+
bool TextureManager::MarkMipmapsGenerated(TextureRef* ref) {
DCHECK(ref);
Texture* texture = ref->texture();
@@ -1162,15 +1229,14 @@ void TextureManager::StartTracking(TextureRef* ref) {
}
void TextureManager::StopTracking(TextureRef* ref) {
- FOR_EACH_OBSERVER(DestructionObserver,
- destruction_observers_,
- OnTextureRefDestroying(ref));
+ if (ref->num_observers()) {
+ for (unsigned int i = 0; i < destruction_observers_.size(); i++) {
+ destruction_observers_[i]->OnTextureRefDestroying(ref);
+ }
+ DCHECK_EQ(ref->num_observers(), 0);
+ }
Texture* texture = ref->texture();
- if (ref->is_stream_texture_owner_ && stream_texture_manager_) {
- DCHECK(texture->IsStreamTexture());
- stream_texture_manager_->DestroyStreamTexture(texture->service_id());
- }
--texture_count_;
if (texture->HasImages()) {
@@ -1280,20 +1346,10 @@ void TextureManager::IncFramebufferStateChangeCount() {
framebuffer_manager_->IncFramebufferStateChangeCount();
}
-bool TextureManager::ValidateTextureParameters(
- ErrorState* error_state, const char* function_name,
- GLenum target, GLenum format, GLenum type, GLint level) {
+bool TextureManager::ValidateFormatAndTypeCombination(
+ ErrorState* error_state, const char* function_name, GLenum format,
+ GLenum type) {
if (!feature_info_->GetTextureFormatValidator(format).IsValid(type)) {
- ERRORSTATE_SET_GL_ERROR(
- error_state, GL_INVALID_OPERATION, function_name,
- (std::string("invalid type ") +
- GLES2Util::GetStringEnum(type) + " for format " +
- GLES2Util::GetStringEnum(format)).c_str());
- return false;
- }
-
- uint32 channels = GLES2Util::GetChannelsForFormat(format);
- if ((channels & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0 && level) {
ERRORSTATE_SET_GL_ERROR(
error_state, GL_INVALID_OPERATION, function_name,
(std::string("invalid type ") +
@@ -1304,6 +1360,40 @@ bool TextureManager::ValidateTextureParameters(
return true;
}
+bool TextureManager::ValidateTextureParameters(
+ ErrorState* error_state, const char* function_name,
+ GLenum format, GLenum type, GLenum internal_format, GLint level) {
+ const Validators* validators = feature_info_->validators();
+ if (!validators->texture_format.IsValid(format)) {
+ ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
+ error_state, function_name, format, "format");
+ return false;
+ }
+ if (!validators->pixel_type.IsValid(type)) {
+ ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
+ error_state, function_name, type, "type");
+ return false;
+ }
+ if (format != internal_format &&
+ !((internal_format == GL_RGBA32F && format == GL_RGBA) ||
+ (internal_format == GL_RGB32F && format == GL_RGB))) {
+ ERRORSTATE_SET_GL_ERROR(
+ error_state, GL_INVALID_OPERATION, function_name,
+ "format != internalformat");
+ return false;
+ }
+ uint32 channels = GLES2Util::GetChannelsForFormat(format);
+ if ((channels & (GLES2Util::kDepth | GLES2Util::kStencil)) != 0 && level) {
+ ERRORSTATE_SET_GL_ERROR(
+ error_state, GL_INVALID_OPERATION, function_name,
+ (std::string("invalid format ") + GLES2Util::GetStringEnum(format) +
+ " for level != 0").c_str());
+ return false;
+ }
+ return ValidateFormatAndTypeCombination(error_state, function_name,
+ format, type);
+}
+
// Gets the texture id for a given target.
TextureRef* TextureManager::GetTextureInfoForTarget(
ContextState* state, GLenum target) {
@@ -1357,31 +1447,15 @@ bool TextureManager::ValidateTexImage2D(
error_state, function_name, args.target, "target");
return false;
}
- if (!validators->texture_format.IsValid(args.internal_format)) {
+ if (!validators->texture_internal_format.IsValid(args.internal_format)) {
ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
error_state, function_name, args.internal_format,
- "internal_format");
- return false;
- }
- if (!validators->texture_format.IsValid(args.format)) {
- ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
- error_state, function_name, args.format, "format");
- return false;
- }
- if (!validators->pixel_type.IsValid(args.type)) {
- ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
- error_state, function_name, args.type, "type");
- return false;
- }
- if (args.format != args.internal_format) {
- ERRORSTATE_SET_GL_ERROR(
- error_state, GL_INVALID_OPERATION, function_name,
- "format != internalFormat");
+ "internalformat");
return false;
}
if (!ValidateTextureParameters(
- error_state, function_name, args.target, args.format, args.type,
- args.level)) {
+ error_state, function_name, args.format, args.type,
+ args.internal_format, args.level)) {
return false;
}
if (!ValidForTarget(args.target, args.level, args.width, args.height, 1) ||
@@ -1417,7 +1491,7 @@ bool TextureManager::ValidateTexImage2D(
// They both use the same MemoryTracker, and this call just re-routes
// to it.
if (!memory_tracker_managed_->EnsureGPUMemoryAvailable(args.pixels_size)) {
- ERRORSTATE_SET_GL_ERROR(error_state, GL_OUT_OF_MEMORY, "glTexImage2D",
+ ERRORSTATE_SET_GL_ERROR(error_state, GL_OUT_OF_MEMORY, function_name,
"out of memory");
return false;
}
diff --git a/chromium/gpu/command_buffer/service/texture_manager.h b/chromium/gpu/command_buffer/service/texture_manager.h
index bd9e3dab410..6b3a32ebf39 100644
--- a/chromium/gpu/command_buffer/service/texture_manager.h
+++ b/chromium/gpu/command_buffer/service/texture_manager.h
@@ -13,7 +13,6 @@
#include "base/containers/hash_tables.h"
#include "base/logging.h"
#include "base/memory/ref_counted.h"
-#include "base/observer_list.h"
#include "gpu/command_buffer/service/async_pixel_transfer_delegate.h"
#include "gpu/command_buffer/service/gl_utils.h"
#include "gpu/command_buffer/service/memory_tracking.h"
@@ -21,9 +20,6 @@
#include "ui/gl/gl_image.h"
namespace gpu {
-
-class StreamTextureManager;
-
namespace gles2 {
class GLES2Decoder;
@@ -77,7 +73,7 @@ class GPU_EXPORT Texture {
}
bool CanRenderTo() const {
- return !stream_texture_ && target_ != GL_TEXTURE_EXTERNAL_OES;
+ return target_ != GL_TEXTURE_EXTERNAL_OES;
}
// The service side OpenGL id of the texture.
@@ -119,7 +115,7 @@ class GPU_EXPORT Texture {
}
// Returns true of the given dimensions are inside the dimensions of the
- // level and if the format and type match the level.
+ // level and if the type matches the level.
bool ValidForTexture(
GLint target,
GLint level,
@@ -127,7 +123,6 @@ class GPU_EXPORT Texture {
GLint yoffset,
GLsizei width,
GLsizei height,
- GLenum format,
GLenum type) const;
bool IsValid() const {
@@ -147,10 +142,6 @@ class GPU_EXPORT Texture {
--framebuffer_attachment_count_;
}
- bool IsStreamTexture() const {
- return stream_texture_;
- }
-
void SetImmutable(bool immutable) {
immutable_ = immutable;
}
@@ -167,9 +158,16 @@ class GPU_EXPORT Texture {
return estimated_size() > 0;
}
+ // Initialize TEXTURE_MAX_ANISOTROPY to 1 if we haven't done so yet.
+ void InitTextureMaxAnisotropyIfNeeded(GLenum target);
+
+ void OnWillModifyPixels();
+ void OnDidModifyPixels();
+
private:
friend class MailboxManager;
friend class MailboxManagerTest;
+ friend class TextureDefinition;
friend class TextureManager;
friend class TextureRef;
friend class TextureTestHelper;
@@ -242,11 +240,6 @@ class GPU_EXPORT Texture {
return npot_;
}
- void SetStreamTexture(bool stream_texture) {
- stream_texture_ = stream_texture;
- UpdateCanRenderCondition();
- }
-
// Marks a particular level as cleared or uncleared.
void SetLevelCleared(GLenum target, GLint level, bool cleared);
@@ -262,10 +255,12 @@ class GPU_EXPORT Texture {
bool ClearLevel(GLES2Decoder* decoder, GLenum target, GLint level);
// Sets a texture parameter.
- // TODO(gman): Expand to SetParameteri,f,iv,fv
+ // TODO(gman): Expand to SetParameteriv,fv
// Returns GL_NO_ERROR on success. Otherwise the error to generate.
- GLenum SetParameter(
+ GLenum SetParameteri(
const FeatureInfo* feature_info, GLenum pname, GLint param);
+ GLenum SetParameterf(
+ const FeatureInfo* feature_info, GLenum pname, GLfloat param);
// Makes each of the mip levels as though they were generated.
bool MarkMipmapsGenerated(const FeatureInfo* feature_info);
@@ -379,9 +374,6 @@ class GPU_EXPORT Texture {
// The number of framebuffers this texture is attached to.
int framebuffer_attachment_count_;
- // Whether this is a special streaming texture.
- bool stream_texture_;
-
// Whether the texture is immutable and no further changes to the format
// or dimensions of the texture object can be made.
bool immutable_;
@@ -395,6 +387,9 @@ class GPU_EXPORT Texture {
// Cache of the computed CanRenderCondition flag.
CanRenderCondition can_render_condition_;
+ // Whether we have initialized TEXTURE_MAX_ANISOTROPY to 1.
+ bool texture_max_anisotropy_initialized_;
+
DISALLOW_COPY_AND_ASSIGN(Texture);
};
@@ -402,23 +397,21 @@ class GPU_EXPORT Texture {
// with a client id, though it can outlive the client id if it's still bound to
// a FBO or another context when destroyed.
// Multiple TextureRef can point to the same texture with cross-context sharing.
-//
-// Note: for stream textures, the TextureRef that created the stream texture is
-// set as the "owner" of the stream texture, i.e. it will call
-// DestroyStreamTexture on destruction. This is because the StreamTextureManager
-// isn't generally shared between ContextGroups, so ownership can't be at the
-// Texture level. We also can't have multiple StreamTexture on the same service
-// id, so there can be only one owner.
class GPU_EXPORT TextureRef : public base::RefCounted<TextureRef> {
public:
TextureRef(TextureManager* manager, GLuint client_id, Texture* texture);
static scoped_refptr<TextureRef> Create(TextureManager* manager,
GLuint client_id,
GLuint service_id);
+
+ void AddObserver() { num_observers_++; }
+ void RemoveObserver() { num_observers_--; }
+
const Texture* texture() const { return texture_; }
Texture* texture() { return texture_; }
GLuint client_id() const { return client_id_; }
GLuint service_id() const { return texture_->service_id(); }
+ GLint num_observers() const { return num_observers_; }
private:
friend class base::RefCounted<TextureRef>;
@@ -429,15 +422,11 @@ class GPU_EXPORT TextureRef : public base::RefCounted<TextureRef> {
const TextureManager* manager() const { return manager_; }
TextureManager* manager() { return manager_; }
void reset_client_id() { client_id_ = 0; }
- void set_is_stream_texture_owner(bool owner) {
- is_stream_texture_owner_ = owner;
- }
- bool is_stream_texture_owner() const { return is_stream_texture_owner_; }
TextureManager* manager_;
Texture* texture_;
GLuint client_id_;
- bool is_stream_texture_owner_;
+ GLint num_observers_;
DISALLOW_COPY_AND_ASSIGN(TextureRef);
};
@@ -497,17 +486,14 @@ class GPU_EXPORT TextureManager {
TextureManager(MemoryTracker* memory_tracker,
FeatureInfo* feature_info,
GLsizei max_texture_size,
- GLsizei max_cube_map_texture_size);
+ GLsizei max_cube_map_texture_size,
+ bool use_default_textures);
~TextureManager();
void set_framebuffer_manager(FramebufferManager* manager) {
framebuffer_manager_ = manager;
}
- void set_stream_texture_manager(StreamTextureManager* manager) {
- stream_texture_manager_ = manager;
- }
-
// Init the texture manager.
bool Initialize();
@@ -567,13 +553,6 @@ class GPU_EXPORT TextureManager {
TextureRef* ref,
GLenum target);
- // Marks a texture as a stream texture, and the ref as the stream texture
- // owner.
- void SetStreamTexture(TextureRef* ref, bool stream_texture);
-
- // Whether the TextureRef is the stream texture owner.
- bool IsStreamTextureOwner(TextureRef* ref);
-
// Set the info for a particular level in a TexureInfo.
void SetLevelInfo(
TextureRef* ref,
@@ -609,10 +588,13 @@ class GPU_EXPORT TextureManager {
// Sets a texture parameter of a Texture
// Returns GL_NO_ERROR on success. Otherwise the error to generate.
- // TODO(gman): Expand to SetParameteri,f,iv,fv
- void SetParameter(
+ // TODO(gman): Expand to SetParameteriv,fv
+ void SetParameteri(
const char* function_name, ErrorState* error_state,
TextureRef* ref, GLenum pname, GLint param);
+ void SetParameterf(
+ const char* function_name, ErrorState* error_state,
+ TextureRef* ref, GLenum pname, GLfloat param);
// Makes each of the mip levels as though they were generated.
// Returns false if that's not allowed for the given texture.
@@ -705,11 +687,18 @@ class GPU_EXPORT TextureManager {
std::string* signature) const;
void AddObserver(DestructionObserver* observer) {
- destruction_observers_.AddObserver(observer);
+ destruction_observers_.push_back(observer);
}
void RemoveObserver(DestructionObserver* observer) {
- destruction_observers_.RemoveObserver(observer);
+ for (unsigned int i = 0; i < destruction_observers_.size(); i++) {
+ if (destruction_observers_[i] == observer) {
+ std::swap(destruction_observers_[i], destruction_observers_.back());
+ destruction_observers_.pop_back();
+ return;
+ }
+ }
+ NOTREACHED();
}
struct DoTextImage2DArguments {
@@ -745,9 +734,15 @@ class GPU_EXPORT TextureManager {
TextureRef* GetTextureInfoForTargetUnlessDefault(
ContextState* state, GLenum target);
+ bool ValidateFormatAndTypeCombination(
+ ErrorState* error_state, const char* function_name,
+ GLenum format, GLenum type);
+
+ // Note that internal_format is only checked in relation to the format
+ // parameter, so that this function may be used to validate texSubImage2D.
bool ValidateTextureParameters(
ErrorState* error_state, const char* function_name,
- GLenum target, GLenum format, GLenum type, GLint level);
+ GLenum format, GLenum type, GLenum internal_format, GLint level);
private:
friend class Texture;
@@ -782,7 +777,6 @@ class GPU_EXPORT TextureManager {
scoped_refptr<FeatureInfo> feature_info_;
FramebufferManager* framebuffer_manager_;
- StreamTextureManager* stream_texture_manager_;
// Info for each texture in the system.
typedef base::hash_map<GLuint, scoped_refptr<TextureRef> > TextureMap;
@@ -793,6 +787,8 @@ class GPU_EXPORT TextureManager {
GLint max_levels_;
GLint max_cube_map_levels_;
+ const bool use_default_textures_;
+
int num_unrenderable_textures_;
int num_unsafe_textures_;
int num_uncleared_mips_;
@@ -812,7 +808,7 @@ class GPU_EXPORT TextureManager {
// The default textures for each target (texture name = 0)
scoped_refptr<TextureRef> default_textures_[kNumDefaultTextures];
- ObserverList<DestructionObserver> destruction_observers_;
+ std::vector<DestructionObserver*> destruction_observers_;
DISALLOW_COPY_AND_ASSIGN(TextureManager);
};
diff --git a/chromium/gpu/command_buffer/service/texture_manager_unittest.cc b/chromium/gpu/command_buffer/service/texture_manager_unittest.cc
index 312adfddbf3..2335191a0e9 100644
--- a/chromium/gpu/command_buffer/service/texture_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/texture_manager_unittest.cc
@@ -9,6 +9,7 @@
#include "gpu/command_buffer/service/feature_info.h"
#include "gpu/command_buffer/service/framebuffer_manager.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/memory_tracking.h"
#include "gpu/command_buffer/service/mocks.h"
@@ -39,7 +40,7 @@ class TextureTestHelper {
}
};
-class TextureManagerTest : public testing::Test {
+class TextureManagerTest : public GpuServiceTest {
public:
static const GLint kMaxTextureSize = 16;
static const GLint kMaxCubeMapTextureSize = 8;
@@ -47,23 +48,23 @@ class TextureManagerTest : public testing::Test {
static const GLint kMax2dLevels = 5;
static const GLint kMaxCubeMapLevels = 4;
static const GLint kMaxExternalLevels = 1;
+ static const bool kUseDefaultTextures = false;
- TextureManagerTest()
- : feature_info_(new FeatureInfo()) {
- }
+ TextureManagerTest() : feature_info_(new FeatureInfo()) {}
virtual ~TextureManagerTest() {
}
protected:
virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
-
- manager_.reset(new TextureManager(
- NULL, feature_info_.get(),
- kMaxTextureSize, kMaxCubeMapTextureSize));
- TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
+ GpuServiceTest::SetUp();
+ manager_.reset(new TextureManager(NULL,
+ feature_info_.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures));
+ TestHelper::SetupTextureManagerInitExpectations(
+ gl_.get(), "", kUseDefaultTextures);
manager_->Initialize();
error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
}
@@ -71,19 +72,16 @@ class TextureManagerTest : public testing::Test {
virtual void TearDown() {
manager_->Destroy(false);
manager_.reset();
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
+ GpuServiceTest::TearDown();
}
void SetParameter(
TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) {
- TestHelper::SetTexParameterWithExpectations(
+ TestHelper::SetTexParameteriWithExpectations(
gl_.get(), error_state_.get(), manager_.get(),
texture_ref, pname, value, error);
}
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_refptr<FeatureInfo> feature_info_;
scoped_ptr<TextureManager> manager_;
scoped_ptr<MockErrorState> error_state_;
@@ -162,11 +160,54 @@ TEST_F(TextureManagerTest, SetParameter) {
SetParameter(texture_ref, GL_TEXTURE_MAX_ANISOTROPY_EXT, 0, GL_INVALID_VALUE);
}
+TEST_F(TextureManagerTest, UseDefaultTexturesTrue) {
+ bool use_default_textures = true;
+ scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
+
+ TestHelper::SetupTextureManagerInitExpectations(
+ gl_.get(), "GL_ANGLE_texture_usage", use_default_textures);
+ TextureManager manager(NULL,
+ feature_info_.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ use_default_textures);
+ manager.Initialize();
+
+ EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) != NULL);
+ EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) != NULL);
+
+ // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB.
+
+ manager.Destroy(false);
+}
+
+TEST_F(TextureManagerTest, UseDefaultTexturesFalse) {
+ bool use_default_textures = false;
+ TestHelper::SetupTextureManagerInitExpectations(
+ gl_.get(), "GL_ANGLE_texture_usage", use_default_textures);
+ TextureManager manager(NULL,
+ feature_info_.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ use_default_textures);
+ manager.Initialize();
+
+ EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_2D) == NULL);
+ EXPECT_TRUE(manager.GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP) == NULL);
+
+ // TODO(vmiura): Test GL_TEXTURE_EXTERNAL_OES & GL_TEXTURE_RECTANGLE_ARB.
+
+ manager.Destroy(false);
+}
+
TEST_F(TextureManagerTest, TextureUsageExt) {
- TestHelper::SetupTextureManagerInitExpectations(gl_.get(),
- "GL_ANGLE_texture_usage");
- TextureManager manager(
- NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TestHelper::SetupTextureManagerInitExpectations(
+ gl_.get(), "GL_ANGLE_texture_usage", kUseDefaultTextures);
+ TextureManager manager(NULL,
+ feature_info_.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.Initialize();
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
@@ -175,7 +216,7 @@ TEST_F(TextureManagerTest, TextureUsageExt) {
// Check texture got created.
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
- TestHelper::SetTexParameterWithExpectations(
+ TestHelper::SetTexParameteriWithExpectations(
gl_.get(), error_state_.get(), &manager, texture_ref,
GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE,GL_NO_ERROR);
EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_ATTACHMENT_ANGLE),
@@ -186,9 +227,13 @@ TEST_F(TextureManagerTest, TextureUsageExt) {
TEST_F(TextureManagerTest, Destroy) {
const GLuint kClient1Id = 1;
const GLuint kService1Id = 11;
- TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
- TextureManager manager(
- NULL, feature_info_.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TestHelper::SetupTextureManagerInitExpectations(
+ gl_.get(), "", kUseDefaultTextures);
+ TextureManager manager(NULL,
+ feature_info_.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.Initialize();
// Check we can create texture.
manager.CreateTexture(kClient1Id, kService1Id);
@@ -198,7 +243,8 @@ TEST_F(TextureManagerTest, Destroy) {
EXPECT_CALL(*gl_, DeleteTextures(1, ::testing::Pointee(kService1Id)))
.Times(1)
.RetiresOnSaturation();
- TestHelper::SetupTextureManagerDestructionExpectations(gl_.get(), "");
+ TestHelper::SetupTextureManagerDestructionExpectations(
+ gl_.get(), "", kUseDefaultTextures);
manager.Destroy(true);
// Check that resources got freed.
texture = manager.GetTexture(kClient1Id);
@@ -319,8 +365,11 @@ TEST_F(TextureManagerTest, ValidForTargetNPOT) {
gl_.get(), "GL_OES_texture_npot");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
- TextureManager manager(
- NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TextureManager manager(NULL,
+ feature_info.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
// Check NPOT width on level 0
EXPECT_TRUE(manager.ValidForTarget(GL_TEXTURE_2D, 0, 5, 2, 1));
// Check NPOT height on level 0
@@ -332,7 +381,7 @@ TEST_F(TextureManagerTest, ValidForTargetNPOT) {
manager.Destroy(false);
}
-class TextureTestBase : public testing::Test {
+class TextureTestBase : public GpuServiceTest {
public:
static const GLint kMaxTextureSize = 16;
static const GLint kMaxCubeMapTextureSize = 8;
@@ -340,6 +389,7 @@ class TextureTestBase : public testing::Test {
static const GLint kMaxCubeMapLevels = 4;
static const GLuint kClient1Id = 1;
static const GLuint kService1Id = 11;
+ static const bool kUseDefaultTextures = false;
TextureTestBase()
: feature_info_(new FeatureInfo()) {
@@ -350,18 +400,18 @@ class TextureTestBase : public testing::Test {
protected:
void SetUpBase(MemoryTracker* memory_tracker, std::string extensions) {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
-
+ GpuServiceTest::SetUp();
if (!extensions.empty()) {
TestHelper::SetupFeatureInfoInitExpectations(gl_.get(),
extensions.c_str());
feature_info_->Initialize();
}
- manager_.reset(new TextureManager(
- memory_tracker, feature_info_.get(),
- kMaxTextureSize, kMaxCubeMapTextureSize));
+ manager_.reset(new TextureManager(memory_tracker,
+ feature_info_.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures));
decoder_.reset(new ::testing::StrictMock<gles2::MockGLES2Decoder>());
error_state_.reset(new ::testing::StrictMock<gles2::MockErrorState>());
manager_->CreateTexture(kClient1Id, kService1Id);
@@ -384,21 +434,18 @@ class TextureTestBase : public testing::Test {
}
manager_->Destroy(false);
manager_.reset();
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
+ GpuServiceTest::TearDown();
}
void SetParameter(
TextureRef* texture_ref, GLenum pname, GLint value, GLenum error) {
- TestHelper::SetTexParameterWithExpectations(
+ TestHelper::SetTexParameteriWithExpectations(
gl_.get(), error_state_.get(), manager_.get(),
texture_ref, pname, value, error);
}
scoped_ptr<MockGLES2Decoder> decoder_;
scoped_ptr<MockErrorState> error_state_;
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_refptr<FeatureInfo> feature_info_;
scoped_ptr<TextureManager> manager_;
scoped_refptr<TextureRef> texture_ref_;
@@ -795,8 +842,11 @@ TEST_F(TextureTest, NPOT2DNPOTOK) {
gl_.get(), "GL_OES_texture_npot");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
- TextureManager manager(
- NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TextureManager manager(NULL,
+ feature_info.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1042,43 +1092,40 @@ TEST_F(TextureTest, ValidForTexture) {
Texture* texture = texture_ref_->texture();
EXPECT_FALSE(texture->ValidForTexture(
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
- 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ 1, 0, 0, 4, 5, GL_UNSIGNED_BYTE));
// Check bad level.
EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 0, 0, 0, 4, 5, GL_UNSIGNED_BYTE));
// Check bad xoffset.
EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, -1, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, -1, 0, 4, 5, GL_UNSIGNED_BYTE));
// Check bad xoffset + width > width.
EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 1, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, 1, 0, 4, 5, GL_UNSIGNED_BYTE));
// Check bad yoffset.
EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 0, -1, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, 0, -1, 4, 5, GL_UNSIGNED_BYTE));
// Check bad yoffset + height > height.
EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 0, 1, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, 0, 1, 4, 5, GL_UNSIGNED_BYTE));
// Check bad width.
EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 0, 0, 5, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, 0, 0, 5, 5, GL_UNSIGNED_BYTE));
// Check bad height.
EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 0, 0, 4, 6, GL_RGBA, GL_UNSIGNED_BYTE));
- // Check bad format.
- EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGB, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, 0, 0, 4, 6, GL_UNSIGNED_BYTE));
// Check bad type.
EXPECT_FALSE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4));
+ GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_UNSIGNED_SHORT_4_4_4_4));
// Check valid full size
EXPECT_TRUE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_UNSIGNED_BYTE));
// Check valid particial size.
EXPECT_TRUE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 1, 1, 2, 3, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, 1, 1, 2, 3, GL_UNSIGNED_BYTE));
manager_->RemoveTexture(kClient1Id);
EXPECT_TRUE(texture->ValidForTexture(
- GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_RGBA, GL_UNSIGNED_BYTE));
+ GL_TEXTURE_2D, 1, 0, 0, 4, 5, GL_UNSIGNED_BYTE));
}
TEST_F(TextureTest, FloatNotLinear) {
@@ -1086,8 +1133,11 @@ TEST_F(TextureTest, FloatNotLinear) {
gl_.get(), "GL_OES_texture_float");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
- TextureManager manager(
- NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TextureManager manager(NULL,
+ feature_info.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1097,11 +1147,11 @@ TEST_F(TextureTest, FloatNotLinear) {
manager.SetLevelInfo(texture_ref,
GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_FLOAT, true);
EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
- TestHelper::SetTexParameterWithExpectations(
+ TestHelper::SetTexParameteriWithExpectations(
gl_.get(), error_state_.get(), &manager,
texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
- TestHelper::SetTexParameterWithExpectations(
+ TestHelper::SetTexParameteriWithExpectations(
gl_.get(), error_state_.get(), &manager, texture_ref,
GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR);
EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
@@ -1113,8 +1163,11 @@ TEST_F(TextureTest, FloatLinear) {
gl_.get(), "GL_OES_texture_float GL_OES_texture_float_linear");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
- TextureManager manager(
- NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TextureManager manager(NULL,
+ feature_info.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1132,8 +1185,11 @@ TEST_F(TextureTest, HalfFloatNotLinear) {
gl_.get(), "GL_OES_texture_half_float");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
- TextureManager manager(
- NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TextureManager manager(NULL,
+ feature_info.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1143,11 +1199,11 @@ TEST_F(TextureTest, HalfFloatNotLinear) {
manager.SetLevelInfo(texture_ref,
GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 1, 0, GL_RGBA, GL_HALF_FLOAT_OES, true);
EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
- TestHelper::SetTexParameterWithExpectations(
+ TestHelper::SetTexParameteriWithExpectations(
gl_.get(), error_state_.get(), &manager,
texture_ref, GL_TEXTURE_MAG_FILTER, GL_NEAREST, GL_NO_ERROR);
EXPECT_FALSE(TextureTestHelper::IsTextureComplete(texture));
- TestHelper::SetTexParameterWithExpectations(
+ TestHelper::SetTexParameteriWithExpectations(
gl_.get(), error_state_.get(), &manager, texture_ref,
GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST, GL_NO_ERROR);
EXPECT_TRUE(TextureTestHelper::IsTextureComplete(texture));
@@ -1159,8 +1215,11 @@ TEST_F(TextureTest, HalfFloatLinear) {
gl_.get(), "GL_OES_texture_half_float GL_OES_texture_half_float_linear");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
- TextureManager manager(
- NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TextureManager manager(NULL,
+ feature_info.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1178,8 +1237,11 @@ TEST_F(TextureTest, EGLImageExternal) {
gl_.get(), "GL_OES_EGL_image_external");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
- TextureManager manager(
- NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TextureManager manager(NULL,
+ feature_info.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1195,8 +1257,11 @@ TEST_F(TextureTest, DepthTexture) {
gl_.get(), "GL_ANGLE_depth_texture");
scoped_refptr<FeatureInfo> feature_info(new FeatureInfo());
feature_info->Initialize();
- TextureManager manager(
- NULL, feature_info.get(), kMaxTextureSize, kMaxCubeMapTextureSize);
+ TextureManager manager(NULL,
+ feature_info.get(),
+ kMaxTextureSize,
+ kMaxCubeMapTextureSize,
+ kUseDefaultTextures);
manager.CreateTexture(kClient1Id, kService1Id);
TextureRef* texture_ref = manager.GetTexture(kClient1Id);
ASSERT_TRUE(texture_ref != NULL);
@@ -1428,7 +1493,7 @@ TEST_F(TextureTest, SafeUnsafe) {
}
TEST_F(TextureTest, ClearTexture) {
- EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _))
+ EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _, _))
.WillRepeatedly(Return(true));
manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_2D);
manager_->SetLevelInfo(texture_ref_.get(),
@@ -1805,7 +1870,8 @@ TEST_F(TextureTest, AddToSignature) {
EXPECT_EQ(11u, string_set.size());
}
-class ProduceConsumeTextureTest : public TextureTest {
+class ProduceConsumeTextureTest : public TextureTest,
+ public ::testing::WithParamInterface<GLenum> {
public:
virtual void SetUp() {
TextureTest::SetUpBase(NULL, "GL_OES_EGL_image_external");
@@ -1994,7 +2060,7 @@ TEST_F(ProduceConsumeTextureTest, ProduceConsumeClearRectangle) {
// See if we can clear the previously uncleared level now.
EXPECT_EQ(level0,
GetLevelInfo(restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0));
- EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _))
+ EXPECT_CALL(*decoder_, ClearLevel(_, _, _, _, _, _, _, _, _, _))
.WillRepeatedly(Return(true));
EXPECT_TRUE(manager_->ClearTextureLevel(
decoder_.get(), restored_texture.get(), GL_TEXTURE_RECTANGLE_ARB, 0));
@@ -2020,25 +2086,43 @@ TEST_F(ProduceConsumeTextureTest, ProduceConsumeExternal) {
GetLevelInfo(restored_texture.get(), GL_TEXTURE_EXTERNAL_OES, 0));
}
-TEST_F(ProduceConsumeTextureTest, ProduceConsumeStreamTexture) {
- manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_EXTERNAL_OES);
+TEST_P(ProduceConsumeTextureTest, ProduceConsumeTextureWithImage) {
+ GLenum target = GetParam();
+ manager_->SetTarget(texture_ref_.get(), target);
Texture* texture = texture_ref_->texture();
- EXPECT_EQ(static_cast<GLenum>(GL_TEXTURE_EXTERNAL_OES), texture->target());
- manager_->SetStreamTexture(texture_ref_.get(), true);
+ EXPECT_EQ(static_cast<GLenum>(target), texture->target());
+ scoped_refptr<gfx::GLImage> image(gfx::GLImage::CreateGLImage(0));
+ manager_->SetLevelInfo(texture_ref_.get(),
+ target,
+ 0,
+ GL_RGBA,
+ 0,
+ 0,
+ 1,
+ 0,
+ GL_RGBA,
+ GL_UNSIGNED_BYTE,
+ true);
+ manager_->SetLevelImage(texture_ref_.get(), target, 0, image);
GLuint service_id = texture->service_id();
Texture* produced_texture = Produce(texture_ref_.get());
- EXPECT_TRUE(texture->IsStreamTexture());
GLuint client_id = texture2_->client_id();
manager_->RemoveTexture(client_id);
Consume(client_id, produced_texture);
scoped_refptr<TextureRef> restored_texture = manager_->GetTexture(client_id);
EXPECT_EQ(produced_texture, restored_texture->texture());
- EXPECT_TRUE(restored_texture->texture()->IsStreamTexture());
- EXPECT_TRUE(restored_texture->texture()->IsImmutable());
EXPECT_EQ(service_id, restored_texture->service_id());
+ EXPECT_EQ(image.get(), restored_texture->texture()->GetLevelImage(target, 0));
}
+static const GLenum kTextureTargets[] = {GL_TEXTURE_2D, GL_TEXTURE_EXTERNAL_OES,
+ GL_TEXTURE_RECTANGLE_ARB, };
+
+INSTANTIATE_TEST_CASE_P(Target,
+ ProduceConsumeTextureTest,
+ ::testing::ValuesIn(kTextureTargets));
+
TEST_F(ProduceConsumeTextureTest, ProduceConsumeCube) {
manager_->SetTarget(texture_ref_.get(), GL_TEXTURE_CUBE_MAP);
Texture* texture = texture_ref_->texture();
@@ -2108,34 +2192,36 @@ class CountingMemoryTracker : public MemoryTracker {
DISALLOW_COPY_AND_ASSIGN(CountingMemoryTracker);
};
-class SharedTextureTest : public testing::Test {
+class SharedTextureTest : public GpuServiceTest {
public:
- SharedTextureTest()
- : feature_info_(new FeatureInfo()) {
- }
+ static const bool kUseDefaultTextures = false;
+
+ SharedTextureTest() : feature_info_(new FeatureInfo()) {}
virtual ~SharedTextureTest() {
}
virtual void SetUp() {
- gl_.reset(new ::gfx::MockGLInterface());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
-
+ GpuServiceTest::SetUp();
memory_tracker1_ = new CountingMemoryTracker;
texture_manager1_.reset(
new TextureManager(memory_tracker1_.get(),
feature_info_.get(),
TextureManagerTest::kMaxTextureSize,
- TextureManagerTest::kMaxCubeMapTextureSize));
+ TextureManagerTest::kMaxCubeMapTextureSize,
+ kUseDefaultTextures));
memory_tracker2_ = new CountingMemoryTracker;
texture_manager2_.reset(
new TextureManager(memory_tracker2_.get(),
feature_info_.get(),
TextureManagerTest::kMaxTextureSize,
- TextureManagerTest::kMaxCubeMapTextureSize));
- TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
+ TextureManagerTest::kMaxCubeMapTextureSize,
+ kUseDefaultTextures));
+ TestHelper::SetupTextureManagerInitExpectations(
+ gl_.get(), "", kUseDefaultTextures);
texture_manager1_->Initialize();
- TestHelper::SetupTextureManagerInitExpectations(gl_.get(), "");
+ TestHelper::SetupTextureManagerInitExpectations(
+ gl_.get(), "", kUseDefaultTextures);
texture_manager2_->Initialize();
}
@@ -2144,12 +2230,10 @@ class SharedTextureTest : public testing::Test {
texture_manager2_.reset();
texture_manager1_->Destroy(false);
texture_manager1_.reset();
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
+ GpuServiceTest::TearDown();
}
protected:
- scoped_ptr< ::gfx::MockGLInterface > gl_;
scoped_refptr<FeatureInfo> feature_info_;
scoped_refptr<CountingMemoryTracker> memory_tracker1_;
scoped_ptr<TextureManager> texture_manager1_;
diff --git a/chromium/gpu/command_buffer/service/transfer_buffer_manager.cc b/chromium/gpu/command_buffer/service/transfer_buffer_manager.cc
index 76443a1f250..4404a9eb6c4 100644
--- a/chromium/gpu/command_buffer/service/transfer_buffer_manager.cc
+++ b/chromium/gpu/command_buffer/service/transfer_buffer_manager.cc
@@ -10,6 +10,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/debug/trace_event.h"
#include "base/process/process_handle.h"
+#include "gpu/command_buffer/common/cmd_buffer_common.h"
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
using ::base::SharedMemory;
@@ -26,9 +27,8 @@ TransferBufferManager::TransferBufferManager()
TransferBufferManager::~TransferBufferManager() {
while (!registered_buffers_.empty()) {
BufferMap::iterator it = registered_buffers_.begin();
- DCHECK(shared_memory_bytes_allocated_ >= it->second.size);
- shared_memory_bytes_allocated_ -= it->second.size;
- delete it->second.shared_memory;
+ DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
+ shared_memory_bytes_allocated_ -= it->second->size();
registered_buffers_.erase(it);
}
DCHECK(!shared_memory_bytes_allocated_);
@@ -40,8 +40,7 @@ bool TransferBufferManager::Initialize() {
bool TransferBufferManager::RegisterTransferBuffer(
int32 id,
- base::SharedMemory* shared_memory,
- size_t size) {
+ scoped_ptr<BufferBacking> buffer_backing) {
if (id <= 0) {
DVLOG(0) << "Cannot register transfer buffer with non-positive ID.";
return false;
@@ -53,29 +52,14 @@ bool TransferBufferManager::RegisterTransferBuffer(
return false;
}
- // Duplicate the handle.
- base::SharedMemoryHandle duped_shared_memory_handle;
- if (!shared_memory->ShareToProcess(base::GetCurrentProcessHandle(),
- &duped_shared_memory_handle)) {
- DVLOG(0) << "Failed to duplicate shared memory handle.";
- return false;
- }
- scoped_ptr<SharedMemory> duped_shared_memory(
- new SharedMemory(duped_shared_memory_handle, false));
-
- // Map the shared memory into this process. This validates the size.
- if (!duped_shared_memory->Map(size)) {
- DVLOG(0) << "Failed to map shared memory.";
- return false;
- }
+ // Register the shared memory with the ID.
+ scoped_refptr<Buffer> buffer(new gpu::Buffer(buffer_backing.Pass()));
- // If it could be mapped register the shared memory with the ID.
- Buffer buffer;
- buffer.ptr = duped_shared_memory->memory();
- buffer.size = size;
- buffer.shared_memory = duped_shared_memory.release();
+ // Check buffer alignment is sane.
+ DCHECK(!(reinterpret_cast<uintptr_t>(buffer->memory()) &
+ (kCommandBufferEntrySize - 1)));
- shared_memory_bytes_allocated_ += size;
+ shared_memory_bytes_allocated_ += buffer->size();
TRACE_COUNTER_ID1(
"gpu", "GpuTransferBufferMemory", this, shared_memory_bytes_allocated_);
@@ -91,22 +75,21 @@ void TransferBufferManager::DestroyTransferBuffer(int32 id) {
return;
}
- DCHECK(shared_memory_bytes_allocated_ >= it->second.size);
- shared_memory_bytes_allocated_ -= it->second.size;
+ DCHECK(shared_memory_bytes_allocated_ >= it->second->size());
+ shared_memory_bytes_allocated_ -= it->second->size();
TRACE_COUNTER_ID1(
"gpu", "GpuTransferBufferMemory", this, shared_memory_bytes_allocated_);
- delete it->second.shared_memory;
registered_buffers_.erase(it);
}
-Buffer TransferBufferManager::GetTransferBuffer(int32 id) {
+scoped_refptr<Buffer> TransferBufferManager::GetTransferBuffer(int32 id) {
if (id == 0)
- return Buffer();
+ return NULL;
BufferMap::iterator it = registered_buffers_.find(id);
if (it == registered_buffers_.end())
- return Buffer();
+ return NULL;
return it->second;
}
diff --git a/chromium/gpu/command_buffer/service/transfer_buffer_manager.h b/chromium/gpu/command_buffer/service/transfer_buffer_manager.h
index 5e1a7464824..d8bb3bb4fd4 100644
--- a/chromium/gpu/command_buffer/service/transfer_buffer_manager.h
+++ b/chromium/gpu/command_buffer/service/transfer_buffer_manager.h
@@ -21,11 +21,9 @@ class GPU_EXPORT TransferBufferManagerInterface {
virtual ~TransferBufferManagerInterface();
virtual bool RegisterTransferBuffer(int32 id,
- base::SharedMemory* shared_memory,
- size_t size) = 0;
+ scoped_ptr<BufferBacking> buffer) = 0;
virtual void DestroyTransferBuffer(int32 id) = 0;
- virtual Buffer GetTransferBuffer(int32 id) = 0;
-
+ virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) = 0;
};
class GPU_EXPORT TransferBufferManager
@@ -35,15 +33,15 @@ class GPU_EXPORT TransferBufferManager
bool Initialize();
virtual bool RegisterTransferBuffer(int32 id,
- base::SharedMemory* shared_memory,
- size_t size) OVERRIDE;
+ scoped_ptr<BufferBacking> buffer_backing)
+ OVERRIDE;
virtual void DestroyTransferBuffer(int32 id) OVERRIDE;
- virtual Buffer GetTransferBuffer(int32 id) OVERRIDE;
+ virtual scoped_refptr<Buffer> GetTransferBuffer(int32 id) OVERRIDE;
private:
virtual ~TransferBufferManager();
- typedef base::hash_map<int32, Buffer> BufferMap;
+ typedef base::hash_map<int32, scoped_refptr<Buffer> > BufferMap;
BufferMap registered_buffers_;
size_t shared_memory_bytes_allocated_;
diff --git a/chromium/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc b/chromium/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
index 68c5c2ec21c..4af09368cb0 100644
--- a/chromium/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/transfer_buffer_manager_unittest.cc
@@ -17,83 +17,81 @@ const static size_t kBufferSize = 1024;
class TransferBufferManagerTest : public testing::Test {
protected:
virtual void SetUp() {
- for (size_t i = 0; i < arraysize(buffers_); ++i) {
- buffers_[i].CreateAnonymous(kBufferSize);
- buffers_[i].Map(kBufferSize);
- }
-
TransferBufferManager* manager = new TransferBufferManager();
transfer_buffer_manager_.reset(manager);
ASSERT_TRUE(manager->Initialize());
}
- base::SharedMemory buffers_[3];
scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
};
TEST_F(TransferBufferManagerTest, ZeroHandleMapsToNull) {
- EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(0).ptr);
+ EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(0));
}
TEST_F(TransferBufferManagerTest, NegativeHandleMapsToNull) {
- EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(-1).ptr);
+ EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(-1));
}
TEST_F(TransferBufferManagerTest, OutOfRangeHandleMapsToNull) {
- EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(1).ptr);
+ EXPECT_TRUE(NULL == transfer_buffer_manager_->GetTransferBuffer(1));
}
TEST_F(TransferBufferManagerTest, CanRegisterTransferBuffer) {
- EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
- &buffers_[0],
- kBufferSize));
- Buffer registered = transfer_buffer_manager_->GetTransferBuffer(1);
-
- // Distinct memory range and shared memory handle from that originally
- // registered.
- EXPECT_NE(static_cast<void*>(NULL), registered.ptr);
- EXPECT_NE(buffers_[0].memory(), registered.ptr);
- EXPECT_EQ(kBufferSize, registered.size);
- EXPECT_NE(&buffers_[0], registered.shared_memory);
-
- // But maps to the same physical memory.
- *static_cast<int*>(registered.ptr) = 7;
- *static_cast<int*>(buffers_[0].memory()) = 8;
- EXPECT_EQ(8, *static_cast<int*>(registered.ptr));
+ scoped_ptr<base::SharedMemory> shm(new base::SharedMemory());
+ shm->CreateAndMapAnonymous(kBufferSize);
+ base::SharedMemory* shm_raw_pointer = shm.get();
+ scoped_ptr<SharedMemoryBufferBacking> backing(
+ new SharedMemoryBufferBacking(shm.Pass(), kBufferSize));
+ SharedMemoryBufferBacking* backing_raw_ptr = backing.get();
+
+ EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(
+ 1, backing.PassAs<BufferBacking>()));
+ scoped_refptr<Buffer> registered =
+ transfer_buffer_manager_->GetTransferBuffer(1);
+
+ // Shared-memory ownership is transfered. It should be the same memory.
+ EXPECT_EQ(backing_raw_ptr, registered->backing());
+ EXPECT_EQ(shm_raw_pointer, backing_raw_ptr->shared_memory());
}
+class FakeBufferBacking : public BufferBacking {
+ public:
+ virtual void* GetMemory() const OVERRIDE {
+ return reinterpret_cast<void*>(0xBADF00D0);
+ }
+ virtual size_t GetSize() const OVERRIDE { return 42; }
+ static scoped_ptr<BufferBacking> Make() {
+ return scoped_ptr<BufferBacking>(new FakeBufferBacking);
+ }
+};
+
TEST_F(TransferBufferManagerTest, CanDestroyTransferBuffer) {
- EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
- &buffers_[0],
- kBufferSize));
+ EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(
+ 1, scoped_ptr<BufferBacking>(new FakeBufferBacking)));
transfer_buffer_manager_->DestroyTransferBuffer(1);
- Buffer registered = transfer_buffer_manager_->GetTransferBuffer(1);
+ scoped_refptr<Buffer> registered =
+ transfer_buffer_manager_->GetTransferBuffer(1);
- EXPECT_EQ(static_cast<void*>(NULL), registered.ptr);
- EXPECT_EQ(0U, registered.size);
- EXPECT_EQ(static_cast<base::SharedMemory*>(NULL), registered.shared_memory);
+ scoped_refptr<Buffer> null_buffer;
+ EXPECT_EQ(null_buffer, registered);
}
TEST_F(TransferBufferManagerTest, CannotRegregisterTransferBufferId) {
- EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
- &buffers_[0],
- kBufferSize));
- EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(1,
- &buffers_[0],
- kBufferSize));
- EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(1,
- &buffers_[1],
- kBufferSize));
+ EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(
+ 1, FakeBufferBacking::Make()));
+ EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(
+ 1, FakeBufferBacking::Make()));
+ EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(
+ 1, FakeBufferBacking::Make()));
}
TEST_F(TransferBufferManagerTest, CanReuseTransferBufferIdAfterDestroying) {
- EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
- &buffers_[0],
- kBufferSize));
+ EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(
+ 1, FakeBufferBacking::Make()));
transfer_buffer_manager_->DestroyTransferBuffer(1);
- EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(1,
- &buffers_[1],
- kBufferSize));
+ EXPECT_TRUE(transfer_buffer_manager_->RegisterTransferBuffer(
+ 1, FakeBufferBacking::Make()));
}
TEST_F(TransferBufferManagerTest, DestroyUnusedTransferBufferIdDoesNotCrash) {
@@ -101,15 +99,15 @@ TEST_F(TransferBufferManagerTest, DestroyUnusedTransferBufferIdDoesNotCrash) {
}
TEST_F(TransferBufferManagerTest, CannotRegisterNullTransferBuffer) {
- EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(0,
- &buffers_[0],
- kBufferSize));
+ EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(
+ 0, FakeBufferBacking::Make()));
}
TEST_F(TransferBufferManagerTest, CannotRegisterNegativeTransferBufferId) {
- EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(-1,
- &buffers_[0],
- kBufferSize));
+ scoped_ptr<base::SharedMemory> shm(new base::SharedMemory());
+ shm->CreateAndMapAnonymous(kBufferSize);
+ EXPECT_FALSE(transfer_buffer_manager_->RegisterTransferBuffer(
+ -1, FakeBufferBacking::Make()));
}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/vertex_array_manager.cc b/chromium/gpu/command_buffer/service/vertex_array_manager.cc
index 974751941ce..1560c043c25 100644
--- a/chromium/gpu/command_buffer/service/vertex_array_manager.cc
+++ b/chromium/gpu/command_buffer/service/vertex_array_manager.cc
@@ -28,14 +28,22 @@ void VertexArrayManager::Destroy(bool have_context) {
vertex_attrib_managers_.clear();
}
-void VertexArrayManager::CreateVertexAttribManager(
- GLuint client_id, GLuint service_id, uint32 num_vertex_attribs) {
+scoped_refptr<VertexAttribManager>
+VertexArrayManager::CreateVertexAttribManager(GLuint client_id,
+ GLuint service_id,
+ uint32 num_vertex_attribs,
+ bool client_visible) {
scoped_refptr<VertexAttribManager> vertex_attrib_manager(
new VertexAttribManager(this, service_id, num_vertex_attribs));
- std::pair<VertexAttribManagerMap::iterator, bool> result =
- vertex_attrib_managers_.insert(
- std::make_pair(client_id, vertex_attrib_manager));
- DCHECK(result.second);
+
+ if (client_visible) {
+ std::pair<VertexAttribManagerMap::iterator, bool> result =
+ vertex_attrib_managers_.insert(
+ std::make_pair(client_id, vertex_attrib_manager));
+ DCHECK(result.second);
+ }
+
+ return vertex_attrib_manager;
}
VertexAttribManager* VertexArrayManager::GetVertexAttribManager(
diff --git a/chromium/gpu/command_buffer/service/vertex_array_manager.h b/chromium/gpu/command_buffer/service/vertex_array_manager.h
index 4fc567c7b79..97ecc1a5353 100644
--- a/chromium/gpu/command_buffer/service/vertex_array_manager.h
+++ b/chromium/gpu/command_buffer/service/vertex_array_manager.h
@@ -28,9 +28,13 @@ class GPU_EXPORT VertexArrayManager {
// Must call before destruction.
void Destroy(bool have_context);
- // Creates a VertexArrayInfo for the given vertex array.
- void CreateVertexAttribManager(GLuint client_id, GLuint service_id,
- uint32 num_vertex_attribs);
+ // Creates a VertexAttribManager and if client_visible,
+ // maps it to the client_id.
+ scoped_refptr<VertexAttribManager> CreateVertexAttribManager(
+ GLuint client_id,
+ GLuint service_id,
+ uint32 num_vertex_attribs,
+ bool client_visible);
// Gets the vertex attrib manager for the given vertex array.
VertexAttribManager* GetVertexAttribManager(GLuint client_id);
diff --git a/chromium/gpu/command_buffer/service/vertex_array_manager_unittest.cc b/chromium/gpu/command_buffer/service/vertex_array_manager_unittest.cc
index 50ce07752a4..aa2df355f70 100644
--- a/chromium/gpu/command_buffer/service/vertex_array_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/vertex_array_manager_unittest.cc
@@ -7,6 +7,7 @@
#include "base/memory/scoped_ptr.h"
#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
@@ -17,7 +18,7 @@ using ::testing::_;
namespace gpu {
namespace gles2 {
-class VertexArrayManagerTest : public testing::Test {
+class VertexArrayManagerTest : public GpuServiceTest {
public:
static const uint32 kNumVertexAttribs = 8;
@@ -29,21 +30,16 @@ class VertexArrayManagerTest : public testing::Test {
protected:
virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
-
- manager_ = new VertexArrayManager();
+ GpuServiceTest::SetUp();
+ manager_.reset(new VertexArrayManager());
}
virtual void TearDown() {
- delete manager_;
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
+ manager_.reset();
+ GpuServiceTest::TearDown();
}
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
- VertexArrayManager* manager_;
+ scoped_ptr<VertexArrayManager> manager_;
};
// GCC requires these declarations, but MSVC requires they not be present
@@ -58,7 +54,7 @@ TEST_F(VertexArrayManagerTest, Basic) {
// Check we can create
manager_->CreateVertexAttribManager(
- kClient1Id, kService1Id, kNumVertexAttribs);
+ kClient1Id, kService1Id, kNumVertexAttribs, true);
// Check creation success
VertexAttribManager* info1 = manager_->GetVertexAttribManager(kClient1Id);
ASSERT_TRUE(info1 != NULL);
@@ -84,7 +80,8 @@ TEST_F(VertexArrayManagerTest, Destroy) {
const GLuint kService1Id = 11;
VertexArrayManager manager;
// Check we can create
- manager.CreateVertexAttribManager(kClient1Id, kService1Id, kNumVertexAttribs);
+ manager.CreateVertexAttribManager(
+ kClient1Id, kService1Id, kNumVertexAttribs, true);
// Check creation success
VertexAttribManager* info1 = manager.GetVertexAttribManager(kClient1Id);
ASSERT_TRUE(info1 != NULL);
diff --git a/chromium/gpu/command_buffer/service/vertex_attrib_manager.cc b/chromium/gpu/command_buffer/service/vertex_attrib_manager.cc
index 23e592cf5f5..5bf40403756 100644
--- a/chromium/gpu/command_buffer/service/vertex_attrib_manager.cc
+++ b/chromium/gpu/command_buffer/service/vertex_attrib_manager.cc
@@ -6,7 +6,6 @@
#include <list>
-#include "base/command_line.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/string_number_conversions.h"
@@ -122,14 +121,12 @@ VertexAttribManager::~VertexAttribManager() {
void VertexAttribManager::Initialize(
uint32 max_vertex_attribs, bool init_attribs) {
vertex_attribs_.resize(max_vertex_attribs);
- bool disable_workarounds = CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kDisableGpuDriverBugWorkarounds);
for (uint32 vv = 0; vv < vertex_attribs_.size(); ++vv) {
vertex_attribs_[vv].set_index(vv);
vertex_attribs_[vv].SetList(&disabled_vertex_attribs_);
- if (!disable_workarounds && init_attribs) {
+ if (init_attribs) {
glVertexAttrib4f(vv, 0.0f, 0.0f, 0.0f, 1.0f);
}
}
diff --git a/chromium/gpu/command_buffer/service/vertex_attrib_manager.h b/chromium/gpu/command_buffer/service/vertex_attrib_manager.h
index 2eff3ccfe30..8ee858738a3 100644
--- a/chromium/gpu/command_buffer/service/vertex_attrib_manager.h
+++ b/chromium/gpu/command_buffer/service/vertex_attrib_manager.h
@@ -171,7 +171,7 @@ class GPU_EXPORT VertexAttribManager :
VertexAttribManager();
- void Initialize(uint32 num_vertex_attribs, bool init_attribs = true);
+ void Initialize(uint32 num_vertex_attribs, bool init_attribs);
bool Enable(GLuint index, bool enable);
diff --git a/chromium/gpu/command_buffer/service/vertex_attrib_manager_unittest.cc b/chromium/gpu/command_buffer/service/vertex_attrib_manager_unittest.cc
index 28a051c97b2..e7fd6905474 100644
--- a/chromium/gpu/command_buffer/service/vertex_attrib_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/vertex_attrib_manager_unittest.cc
@@ -8,6 +8,7 @@
#include "gpu/command_buffer/service/buffer_manager.h"
#include "gpu/command_buffer/service/error_state_mock.h"
#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/gpu_service_test.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_mock.h"
@@ -18,7 +19,7 @@ using ::testing::_;
namespace gpu {
namespace gles2 {
-class VertexAttribManagerTest : public testing::Test {
+class VertexAttribManagerTest : public GpuServiceTest {
public:
static const uint32 kNumVertexAttribs = 8;
@@ -30,8 +31,7 @@ class VertexAttribManagerTest : public testing::Test {
protected:
virtual void SetUp() {
- gl_.reset(new ::testing::StrictMock< ::gfx::MockGLInterface>());
- ::gfx::GLInterface::SetGLInterface(gl_.get());
+ GpuServiceTest::SetUp();
for (uint32 ii = 0; ii < kNumVertexAttribs; ++ii) {
EXPECT_CALL(*gl_, VertexAttrib4f(ii, 0.0f, 0.0f, 0.0f, 1.0f))
@@ -40,17 +40,9 @@ class VertexAttribManagerTest : public testing::Test {
}
manager_ = new VertexAttribManager();
- manager_->Initialize(kNumVertexAttribs);
+ manager_->Initialize(kNumVertexAttribs, true);
}
- virtual void TearDown() {
- manager_ = NULL;
- ::gfx::GLInterface::SetGLInterface(NULL);
- gl_.reset();
- }
-
- // Use StrictMock to make 100% sure we know how GL will be called.
- scoped_ptr< ::testing::StrictMock< ::gfx::MockGLInterface> > gl_;
scoped_refptr<VertexAttribManager> manager_;
};