summaryrefslogtreecommitdiff
path: root/chromium/gpu
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 17:21:03 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 16:25:15 +0000
commitc551f43206405019121bd2b2c93714319a0a3300 (patch)
tree1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/gpu
parent7961cea6d1041e3e454dae6a1da660b453efd238 (diff)
downloadqtwebengine-chromium-c551f43206405019121bd2b2c93714319a0a3300.tar.gz
BASELINE: Update Chromium to 79.0.3945.139
Change-Id: I336b7182fab9bca80b709682489c07db112eaca5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/gpu')
-rw-r--r--chromium/gpu/BUILD.gn27
-rw-r--r--chromium/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_compressed_texture_etc.txt72
-rw-r--r--chromium/gpu/GLES2/gl2chromium_autogen.h4
-rw-r--r--chromium/gpu/OWNERS6
-rw-r--r--chromium/gpu/angle_deqp_tests_main.cc4
-rwxr-xr-xchromium/gpu/command_buffer/build_gles2_cmd_buffer.py25
-rwxr-xr-xchromium/gpu/command_buffer/build_raster_cmd_buffer.py1
-rwxr-xr-xchromium/gpu/command_buffer/build_webgpu_cmd_buffer.py14
-rw-r--r--chromium/gpu/command_buffer/client/BUILD.gn2
-rw-r--r--chromium/gpu/command_buffer/client/cmd_buffer_helper_test.cc2
-rw-r--r--chromium/gpu/command_buffer/client/context_support.h20
-rw-r--r--chromium/gpu/command_buffer/client/fenced_allocator_test.cc2
-rw-r--r--chromium/gpu/command_buffer/client/gles2_c_lib_autogen.h23
-rw-r--r--chromium/gpu/command_buffer/client/gles2_cmd_helper_autogen.h24
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation.cc71
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation.h6
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation_autogen.h8
-rw-r--r--chromium/gpu/command_buffer/client/gles2_implementation_impl_autogen.h8
-rw-r--r--chromium/gpu/command_buffer/client/gles2_interface.cc17
-rw-r--r--chromium/gpu/command_buffer/client/gles2_interface.h2
-rw-r--r--chromium/gpu/command_buffer/client/gles2_interface_autogen.h5
-rw-r--r--chromium/gpu/command_buffer/client/gles2_interface_stub_autogen.h5
-rw-r--r--chromium/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h7
-rw-r--r--chromium/gpu/command_buffer/client/gles2_trace_implementation_autogen.h5
-rw-r--r--chromium/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h20
-rw-r--r--chromium/gpu/command_buffer/client/gpu_control_client.h1
-rw-r--r--chromium/gpu/command_buffer/client/image_decode_accelerator_interface.h10
-rw-r--r--chromium/gpu/command_buffer/client/mapped_memory_unittest.cc2
-rw-r--r--chromium/gpu/command_buffer/client/program_info_manager.cc10
-rw-r--r--chromium/gpu/command_buffer/client/raster_implementation.cc15
-rw-r--r--chromium/gpu/command_buffer/client/raster_implementation.h4
-rw-r--r--chromium/gpu/command_buffer/client/raster_implementation_gles_unittest.cc4
-rw-r--r--chromium/gpu/command_buffer/client/ring_buffer_test.cc2
-rw-r--r--chromium/gpu/command_buffer/client/share_group.cc10
-rw-r--r--chromium/gpu/command_buffer/client/share_group.h6
-rw-r--r--chromium/gpu/command_buffer/client/transfer_buffer.cc8
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_cmd_helper_autogen.h7
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_implementation.cc28
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_implementation.h4
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_implementation_autogen.h3
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_implementation_unittest_autogen.h11
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_interface.h2
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_interface_autogen.h2
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_interface_stub_autogen.h1
-rw-r--r--chromium/gpu/command_buffer/client/webgpu_interface_stub_impl_autogen.h2
-rw-r--r--chromium/gpu/command_buffer/common/BUILD.gn1
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_format_autogen.h111
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h36
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_ids_autogen.h199
-rw-r--r--chromium/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h356
-rw-r--r--chromium/gpu/command_buffer/common/gpu_memory_buffer_support.cc38
-rw-r--r--chromium/gpu/command_buffer/common/gpu_memory_buffer_support.h4
-rw-r--r--chromium/gpu/command_buffer/common/skia_utils.cc10
-rw-r--r--chromium/gpu/command_buffer/common/webgpu_cmd_enums.h25
-rw-r--r--chromium/gpu/command_buffer/common/webgpu_cmd_format_autogen.h33
-rw-r--r--chromium/gpu/command_buffer/common/webgpu_cmd_format_test_autogen.h10
-rw-r--r--chromium/gpu/command_buffer/common/webgpu_cmd_ids_autogen.h3
-rw-r--r--chromium/gpu/command_buffer/gles2_cmd_buffer_functions.txt5
-rw-r--r--chromium/gpu/command_buffer/service/BUILD.gn73
-rw-r--r--chromium/gpu/command_buffer/service/DEPS6
-rw-r--r--chromium/gpu/command_buffer/service/buffer_manager.cc2
-rw-r--r--chromium/gpu/command_buffer/service/context_group.cc1
-rw-r--r--chromium/gpu/command_buffer/service/context_state.cc3
-rw-r--r--chromium/gpu/command_buffer/service/decoder_client.h3
-rw-r--r--chromium/gpu/command_buffer/service/external_vk_image_backing.cc216
-rw-r--r--chromium/gpu/command_buffer/service/external_vk_image_backing.h11
-rw-r--r--chromium/gpu/command_buffer/service/external_vk_image_gl_representation.cc6
-rw-r--r--chromium/gpu/command_buffer/service/feature_info.cc28
-rw-r--r--chromium/gpu/command_buffer/service/feature_info.h3
-rw-r--r--chromium/gpu/command_buffer/service/feature_info_unittest.cc4
-rw-r--r--chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.cc3
-rw-r--r--chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.h1
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc452
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder.h2
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h23
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc22
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h5
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc47
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc25
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc14
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_buffers.cc104
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_commands.cc177
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_discardable_textures.cc2
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_drawing.cc8
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_framebuffers.cc78
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc44
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc216
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2.cc235
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3.cc48
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4.cc2
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc52
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_base.h2
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_buffers.cc104
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_lost.cc16
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_state.cc18
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc232
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc403
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc472
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc418
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_srgb_converter.cc6
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_validation.h49
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_validation_autogen.h7
-rw-r--r--chromium/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h22
-rw-r--r--chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc20
-rw-r--r--chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.h12
-rw-r--r--chromium/gpu/command_buffer/service/gpu_service_test.h2
-rw-r--r--chromium/gpu/command_buffer/service/image_reader_gl_owner.cc (renamed from chromium/gpu/ipc/common/android/image_reader_gl_owner.cc)102
-rw-r--r--chromium/gpu/command_buffer/service/image_reader_gl_owner.h (renamed from chromium/gpu/ipc/common/android/image_reader_gl_owner.h)12
-rw-r--r--chromium/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc (renamed from chromium/gpu/ipc/common/android/image_reader_gl_owner_unittest.cc)6
-rw-r--r--chromium/gpu/command_buffer/service/indexed_buffer_binding_host.cc33
-rw-r--r--chromium/gpu/command_buffer/service/indexed_buffer_binding_host.h2
-rw-r--r--chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc70
-rw-r--r--chromium/gpu/command_buffer/service/memory_tracking.h15
-rw-r--r--chromium/gpu/command_buffer/service/mock_abstract_texture.cc (renamed from chromium/gpu/ipc/common/android/mock_abstract_texture.cc)2
-rw-r--r--chromium/gpu/command_buffer/service/mock_abstract_texture.h (renamed from chromium/gpu/ipc/common/android/mock_abstract_texture.h)6
-rw-r--r--chromium/gpu/command_buffer/service/mock_texture_owner.cc (renamed from chromium/gpu/ipc/common/android/mock_texture_owner.cc)4
-rw-r--r--chromium/gpu/command_buffer/service/mock_texture_owner.h (renamed from chromium/gpu/ipc/common/android/mock_texture_owner.h)14
-rw-r--r--chromium/gpu/command_buffer/service/program_manager.cc66
-rw-r--r--chromium/gpu/command_buffer/service/program_manager.h64
-rw-r--r--chromium/gpu/command_buffer/service/raster_cmd_validation.h47
-rw-r--r--chromium/gpu/command_buffer/service/raster_cmd_validation_implementation_autogen.h1
-rw-r--r--chromium/gpu/command_buffer/service/raster_decoder.cc5
-rw-r--r--chromium/gpu/command_buffer/service/raster_decoder_unittest.cc30
-rw-r--r--chromium/gpu/command_buffer/service/raster_decoder_unittest_base.h2
-rw-r--r--chromium/gpu/command_buffer/service/raster_decoder_unittest_context_lost.cc12
-rw-r--r--chromium/gpu/command_buffer/service/sampler_manager.cc7
-rw-r--r--chromium/gpu/command_buffer/service/sampler_manager.h1
-rw-r--r--chromium/gpu/command_buffer/service/scheduler.cc4
-rw-r--r--chromium/gpu/command_buffer/service/scheduler.h2
-rw-r--r--chromium/gpu/command_buffer/service/service_utils.cc9
-rw-r--r--chromium/gpu/command_buffer/service/shared_context_state.cc8
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc102
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h9
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc114
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc298
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.h10
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc18
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc8
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm2
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc10
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_factory.cc25
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_factory.h12
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_representation.h1
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_video.cc27
-rw-r--r--chromium/gpu/command_buffer/service/shared_image_video.h4
-rw-r--r--chromium/gpu/command_buffer/service/skia_utils.cc42
-rw-r--r--chromium/gpu/command_buffer/service/skia_utils.h12
-rw-r--r--chromium/gpu/command_buffer/service/surface_texture_gl_owner.cc (renamed from chromium/gpu/ipc/common/android/surface_texture_gl_owner.cc)7
-rw-r--r--chromium/gpu/command_buffer/service/surface_texture_gl_owner.h (renamed from chromium/gpu/ipc/common/android/surface_texture_gl_owner.h)9
-rw-r--r--chromium/gpu/command_buffer/service/surface_texture_gl_owner_unittest.cc (renamed from chromium/gpu/ipc/common/android/surface_texture_gl_owner_unittest.cc)4
-rw-r--r--chromium/gpu/command_buffer/service/texture_definition.cc5
-rw-r--r--chromium/gpu/command_buffer/service/texture_manager.cc89
-rw-r--r--chromium/gpu/command_buffer/service/texture_manager.h8
-rw-r--r--chromium/gpu/command_buffer/service/texture_owner.cc (renamed from chromium/gpu/ipc/common/android/texture_owner.cc)6
-rw-r--r--chromium/gpu/command_buffer/service/texture_owner.h (renamed from chromium/gpu/ipc/common/android/texture_owner.h)14
-rw-r--r--chromium/gpu/command_buffer/service/value_validator.h61
-rw-r--r--chromium/gpu/command_buffer/service/webgpu_cmd_validation.h5
-rw-r--r--chromium/gpu/command_buffer/service/webgpu_cmd_validation_autogen.h2
-rw-r--r--chromium/gpu/command_buffer/service/webgpu_cmd_validation_implementation_autogen.h9
-rw-r--r--chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc143
-rw-r--r--chromium/gpu/command_buffer/service/webgpu_decoder_unittest.cc30
-rw-r--r--chromium/gpu/command_buffer/service/wrapped_sk_image.cc82
-rw-r--r--chromium/gpu/command_buffer/webgpu_cmd_buffer_functions.txt1
-rw-r--r--chromium/gpu/config/BUILD.gn5
-rw-r--r--chromium/gpu/config/gpu_blocklist.cc (renamed from chromium/gpu/config/gpu_blacklist.cc)15
-rw-r--r--chromium/gpu/config/gpu_blocklist.h (renamed from chromium/gpu/config/gpu_blacklist.h)18
-rw-r--r--chromium/gpu/config/gpu_blocklist_unittest.cc (renamed from chromium/gpu/config/gpu_blacklist_unittest.cc)55
-rw-r--r--chromium/gpu/config/gpu_crash_keys.cc6
-rw-r--r--chromium/gpu/config/gpu_crash_keys.h6
-rw-r--r--chromium/gpu/config/gpu_driver_bug_list.json69
-rw-r--r--chromium/gpu/config/gpu_extra_info.h3
-rw-r--r--chromium/gpu/config/gpu_feature_info.cc2
-rw-r--r--chromium/gpu/config/gpu_feature_type.h1
-rw-r--r--chromium/gpu/config/gpu_finch_features.cc6
-rw-r--r--chromium/gpu/config/gpu_finch_features.h2
-rw-r--r--chromium/gpu/config/gpu_info.cc20
-rw-r--r--chromium/gpu/config/gpu_info.h18
-rw-r--r--chromium/gpu/config/gpu_info_collector.cc3
-rw-r--r--chromium/gpu/config/gpu_info_collector_win.cc40
-rw-r--r--chromium/gpu/config/gpu_lists_version.h2
-rw-r--r--chromium/gpu/config/gpu_preferences.h5
-rw-r--r--chromium/gpu/config/gpu_util.cc61
-rw-r--r--chromium/gpu/config/gpu_util.h5
-rw-r--r--chromium/gpu/config/gpu_workaround_list.txt3
-rw-r--r--chromium/gpu/ipc/client/BUILD.gn2
-rw-r--r--chromium/gpu/ipc/client/DEPS4
-rw-r--r--chromium/gpu/ipc/client/command_buffer_proxy_impl.cc6
-rw-r--r--chromium/gpu/ipc/client/command_buffer_proxy_impl.h1
-rw-r--r--chromium/gpu/ipc/client/gpu_channel_host.cc14
-rw-r--r--chromium/gpu/ipc/client/image_decode_accelerator_proxy.cc231
-rw-r--r--chromium/gpu/ipc/client/image_decode_accelerator_proxy.h17
-rw-r--r--chromium/gpu/ipc/common/BUILD.gn79
-rw-r--r--chromium/gpu/ipc/common/DEPS1
-rw-r--r--chromium/gpu/ipc/common/gpu_client_ids.h5
-rw-r--r--chromium/gpu/ipc/common/gpu_command_buffer_traits.cc38
-rw-r--r--chromium/gpu/ipc/common/gpu_command_buffer_traits.h11
-rw-r--r--chromium/gpu/ipc/common/gpu_extra_info.mojom1
-rw-r--r--chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.cc2
-rw-r--r--chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.h4
-rw-r--r--chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.cc2
-rw-r--r--chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.h2
-rw-r--r--chromium/gpu/ipc/common/gpu_info.mojom5
-rw-r--r--chromium/gpu/ipc/common/gpu_info_mojom_traits.cc9
-rw-r--r--chromium/gpu/ipc/common/gpu_info_mojom_traits.h15
-rw-r--r--chromium/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc1
-rw-r--r--chromium/gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.cc3
-rw-r--r--chromium/gpu/ipc/common/gpu_memory_buffer_impl_shared_memory.cc1
-rw-r--r--chromium/gpu/ipc/common/gpu_memory_buffer_impl_test_template.h62
-rw-r--r--chromium/gpu/ipc/common/gpu_memory_buffer_support.cc12
-rw-r--r--chromium/gpu/ipc/common/gpu_memory_buffer_support.h5
-rw-r--r--chromium/gpu/ipc/common/gpu_messages.h9
-rw-r--r--chromium/gpu/ipc/common/gpu_preferences.mojom3
-rw-r--r--chromium/gpu/ipc/common/gpu_preferences_mojom_traits.h5
-rw-r--r--chromium/gpu/ipc/common/gpu_watchdog_timeout.h4
-rw-r--r--chromium/gpu/ipc/common/mojom_traits_unittest.cc83
-rw-r--r--chromium/gpu/ipc/common/vulkan_ycbcr_info.cc3
-rw-r--r--chromium/gpu/ipc/common/vulkan_ycbcr_info.h8
-rw-r--r--chromium/gpu/ipc/host/gpu_memory_buffer_support.cc4
-rw-r--r--chromium/gpu/ipc/host/shader_disk_cache.cc4
-rw-r--r--chromium/gpu/ipc/host/shader_disk_cache_unittest.cc17
-rw-r--r--chromium/gpu/ipc/in_process_command_buffer.cc15
-rw-r--r--chromium/gpu/ipc/service/BUILD.gn5
-rw-r--r--chromium/gpu/ipc/service/command_buffer_stub.cc7
-rw-r--r--chromium/gpu/ipc/service/gles2_command_buffer_stub.cc4
-rw-r--r--chromium/gpu/ipc/service/gles2_command_buffer_stub.h3
-rw-r--r--chromium/gpu/ipc/service/gpu_channel_manager.cc61
-rw-r--r--chromium/gpu/ipc/service/gpu_channel_manager.h46
-rw-r--r--chromium/gpu/ipc/service/gpu_channel_manager_unittest.cc96
-rw-r--r--chromium/gpu/ipc/service/gpu_init.cc123
-rw-r--r--chromium/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc5
-rw-r--r--chromium/gpu/ipc/service/gpu_memory_buffer_factory_test_template.h31
-rw-r--r--chromium/gpu/ipc/service/gpu_watchdog_thread.cc90
-rw-r--r--chromium/gpu/ipc/service/gpu_watchdog_thread.h14
-rw-r--r--chromium/gpu/ipc/service/gpu_watchdog_thread_unittest.cc2
-rw-r--r--chromium/gpu/ipc/service/gpu_watchdog_thread_v2.cc31
-rw-r--r--chromium/gpu/ipc/service/gpu_watchdog_thread_v2.h7
-rw-r--r--chromium/gpu/ipc/service/image_transport_surface_overlay_mac.mm5
-rw-r--r--chromium/gpu/ipc/service/shared_image_stub.cc124
-rw-r--r--chromium/gpu/ipc/service/shared_image_stub.h19
-rw-r--r--chromium/gpu/ipc/service/stream_texture_android.cc19
-rw-r--r--chromium/gpu/ipc/service/stream_texture_android.h7
-rw-r--r--chromium/gpu/vulkan/BUILD.gn3
-rw-r--r--chromium/gpu/vulkan/demo/vulkan_demo.h5
-rwxr-xr-xchromium/gpu/vulkan/generate_bindings.py31
-rw-r--r--chromium/gpu/vulkan/vulkan_command_buffer.cc1
-rw-r--r--chromium/gpu/vulkan/vulkan_device_queue.cc151
-rw-r--r--chromium/gpu/vulkan/vulkan_device_queue.h16
-rw-r--r--chromium/gpu/vulkan/vulkan_function_pointers.cc52
-rw-r--r--chromium/gpu/vulkan/vulkan_function_pointers.h20
-rw-r--r--chromium/gpu/vulkan/vulkan_implementation.cc2
-rw-r--r--chromium/gpu/vulkan/vulkan_info.cc18
-rw-r--r--chromium/gpu/vulkan/vulkan_info.h51
-rw-r--r--chromium/gpu/vulkan/vulkan_instance.cc155
-rw-r--r--chromium/gpu/vulkan/vulkan_instance.h12
-rw-r--r--chromium/gpu/vulkan/vulkan_swap_chain.cc2
-rw-r--r--chromium/gpu/vulkan/win32/vulkan_implementation_win32.cc3
-rw-r--r--chromium/gpu/vulkan/x/vulkan_implementation_x11.cc17
257 files changed, 5684 insertions, 3322 deletions
diff --git a/chromium/gpu/BUILD.gn b/chromium/gpu/BUILD.gn
index 6d6ca00d25e..8bebff79ab1 100644
--- a/chromium/gpu/BUILD.gn
+++ b/chromium/gpu/BUILD.gn
@@ -11,27 +11,42 @@ import("//ui/gl/features.gni")
config("gpu_implementation") {
defines = [ "GPU_IMPLEMENTATION" ]
- configs = [ "//build/config/compiler:wexit_time_destructors" ]
+ configs = [
+ "//build/config/compiler:noshadowing",
+ "//build/config/compiler:wexit_time_destructors",
+ ]
}
config("gpu_gles2_implementation") {
defines = [ "GPU_GLES2_IMPLEMENTATION" ]
- configs = [ "//build/config/compiler:wexit_time_destructors" ]
+ configs = [
+ "//build/config/compiler:noshadowing",
+ "//build/config/compiler:wexit_time_destructors",
+ ]
}
config("gpu_util_implementation") {
defines = [ "GPU_UTIL_IMPLEMENTATION" ]
- configs = [ "//build/config/compiler:wexit_time_destructors" ]
+ configs = [
+ "//build/config/compiler:noshadowing",
+ "//build/config/compiler:wexit_time_destructors",
+ ]
}
config("raster_implementation") {
defines = [ "RASTER_IMPLEMENTATION" ]
- configs = [ "//build/config/compiler:wexit_time_destructors" ]
+ configs = [
+ "//build/config/compiler:noshadowing",
+ "//build/config/compiler:wexit_time_destructors",
+ ]
}
config("webgpu_implementation") {
defines = [ "WEBGPU_IMPLEMENTATION" ]
- configs = [ "//build/config/compiler:wexit_time_destructors" ]
+ configs = [
+ "//build/config/compiler:noshadowing",
+ "//build/config/compiler:wexit_time_destructors",
+ ]
}
component("gpu") {
@@ -525,7 +540,7 @@ test("gpu_unittests") {
"command_buffer/service/transform_feedback_manager_unittest.cc",
"command_buffer/service/vertex_array_manager_unittest.cc",
"command_buffer/service/vertex_attrib_manager_unittest.cc",
- "config/gpu_blacklist_unittest.cc",
+ "config/gpu_blocklist_unittest.cc",
"config/gpu_control_list_entry_unittest.cc",
"config/gpu_control_list_testing_arrays_and_structs_autogen.h",
"config/gpu_control_list_testing_autogen.cc",
diff --git a/chromium/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_compressed_texture_etc.txt b/chromium/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_compressed_texture_etc.txt
deleted file mode 100644
index cea65c6ebf0..00000000000
--- a/chromium/gpu/GLES2/extensions/CHROMIUM/CHROMIUM_compressed_texture_etc.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-Name
-
- CHROMIUM_compressed_texture_etc
-
-Name Strings
-
- GL_CHROMIUM_compressed_texture_etc
-
-Version
-
- Last Modifed Date: September 19, 2016
-
-Dependencies
-
- OpenGL ES 2.0 is required.
-
-Overview
-
- This extension exposes the OpenGL ES 3.0 core compressed texture
- formats in OpenGL ES 2.0.
-
-New Procedures and Functions
-
- None
-
-New Tokens
-
- Accepted by the <internalformat> parameter of CompressedTexImage2D and the
- <format> parameter of CompressedTexSubImage2D:
-
- COMPRESSED_R11_EAC 0x9270
- COMPRESSED_SIGNED_R11_EAC 0x9271
- COMPRESSED_RG11_EAC 0x9272
- COMPRESSED_SIGNED_RG11_EAC 0x9273
- COMPRESSED_RGB8_ETC2 0x9274
- COMPRESSED_SRGB8_ETC2 0x9275
- COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
- COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
- COMPRESSED_RGBA8_ETC2_EAC 0x9278
- COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
-
- Querying COMPRESSED_TEXTURE_FORMATS will include these new formats.
-
-New Procedures and Functions
-
- None.
-
-Errors
-
- The error INVALID_VALUE is generated if the <internalformat> parameter of
- CompressedTexImage2D or the <format> parameter of CompressedTexSubImage2D is
- COMPRESSED_R11_EAC, COMPRESSED_SIGNED_R11_EAC, COMPRESSED_RGB8_ETC2,
- COMPRESSED_SRGB8_ETC2, COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 or
- COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, and imageSize is not
-
- floor((width + 3) / 4) * floor((height + 3) / 4) * 8
-
- The error INVALID_VALUE is generated if the <internalformat> parameter of
- CompressedTexImage2D or the <format> paremeter of CompressedTexSubImage2D is
- COMPRESSED_RG11_EAC, COMPRESSED_SIGNED_RG11_EAC, COMPRESSED_RGBA8_ETC2_EAC,
- or COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, and imageSize is not
-
- floor((width + 3) / 4) * floor((height + 3) / 4) * 16
-
-
-New State
-
- None.
-
-Revision History
-
- 9/19/2016 First revision
diff --git a/chromium/gpu/GLES2/gl2chromium_autogen.h b/chromium/gpu/GLES2/gl2chromium_autogen.h
index ceb3f8c4df2..f5c24e009ed 100644
--- a/chromium/gpu/GLES2/gl2chromium_autogen.h
+++ b/chromium/gpu/GLES2/gl2chromium_autogen.h
@@ -278,6 +278,8 @@
#define glBindImageTexture GLES2_GET_FUN(BindImageTexture)
#define glDispatchCompute GLES2_GET_FUN(DispatchCompute)
#define glDispatchComputeIndirect GLES2_GET_FUN(DispatchComputeIndirect)
+#define glDrawArraysIndirect GLES2_GET_FUN(DrawArraysIndirect)
+#define glDrawElementsIndirect GLES2_GET_FUN(DrawElementsIndirect)
#define glGetProgramInterfaceiv GLES2_GET_FUN(GetProgramInterfaceiv)
#define glGetProgramResourceIndex GLES2_GET_FUN(GetProgramResourceIndex)
#define glGetProgramResourceName GLES2_GET_FUN(GetProgramResourceName)
@@ -380,6 +382,8 @@
GLES2_GET_FUN(BindFragmentInputLocationCHROMIUM)
#define glProgramPathFragmentInputGenCHROMIUM \
GLES2_GET_FUN(ProgramPathFragmentInputGenCHROMIUM)
+#define glContextVisibilityHintCHROMIUM \
+ GLES2_GET_FUN(ContextVisibilityHintCHROMIUM)
#define glCoverageModulationCHROMIUM GLES2_GET_FUN(CoverageModulationCHROMIUM)
#define glGetGraphicsResetStatusKHR GLES2_GET_FUN(GetGraphicsResetStatusKHR)
#define glBlendBarrierKHR GLES2_GET_FUN(BlendBarrierKHR)
diff --git a/chromium/gpu/OWNERS b/chromium/gpu/OWNERS
index 8dc8f050dcc..8d32d1c1998 100644
--- a/chromium/gpu/OWNERS
+++ b/chromium/gpu/OWNERS
@@ -13,4 +13,10 @@ per-file *gpu_memory_buffer*=dcastagna@chromium.org
# Passthrough command decoder
per-file *passthrough*=geofflang@chromium.org
+# Shared Image and Media on Android
+per-file *shared_image_video*=vikassoni@chromium.org
+per-file *android*=vikassoni@chromium.org
+per-file *image_reader*=vikassoni@chromium.org
+per-file *hardwarebuffer*=vikassoni@chromium.org
+
# COMPONENT: Internals>GPU>Internals
diff --git a/chromium/gpu/angle_deqp_tests_main.cc b/chromium/gpu/angle_deqp_tests_main.cc
index 9122030e1a1..7567b6a7eb2 100644
--- a/chromium/gpu/angle_deqp_tests_main.cc
+++ b/chromium/gpu/angle_deqp_tests_main.cc
@@ -34,6 +34,10 @@ int main(int argc, char** argv) {
base::CommandLine::Init(argc, argv);
angle::InitTestHarness(&argc, argv);
base::TestSuite test_suite(argc, argv);
+
+ // The process priority is lowered by the constructor of tcu::ANGLEPlatform().
+ test_suite.DisableCheckForProcessPriority();
+
int rt = base::LaunchUnitTestsSerially(
argc, argv, base::BindOnce(&RunHelper, base::Unretained(&test_suite)));
return rt;
diff --git a/chromium/gpu/command_buffer/build_gles2_cmd_buffer.py b/chromium/gpu/command_buffer/build_gles2_cmd_buffer.py
index 3731bc87ebc..14c5df3f80d 100755
--- a/chromium/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/chromium/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -775,7 +775,6 @@ _NAMED_TYPE_INFO = {
},
'SamplerParameter': {
'type': 'GLenum',
- 'is_complete': True,
'valid': [
'GL_TEXTURE_MAG_FILTER',
'GL_TEXTURE_MIN_FILTER',
@@ -1947,6 +1946,12 @@ _FUNCTION_INFO = {
'no_gl': True,
'expectation': False,
},
+ 'ContextVisibilityHintCHROMIUM': {
+ 'decoder_func': 'DoContextVisibilityHintCHROMIUM',
+ 'extension': 'CHROMIUM_context_visibility_hint',
+ 'unit_test': False,
+ 'client_test': False,
+ },
'CopyBufferSubData': {
'decoder_func': 'DoCopyBufferSubData',
'impl_func': False,
@@ -2216,6 +2221,15 @@ _FUNCTION_INFO = {
'defer_draws': True,
'trace_level': 2,
},
+ 'DrawArraysIndirect': {
+ 'type': 'Custom',
+ 'impl_func': False,
+ 'cmd_args': 'GLenumDrawMode mode, GLuint offset',
+ 'trace_level': 2,
+ 'es31': True,
+ 'unit_test': False,
+ 'client_test': False,
+ },
'DrawElements': {
'type': 'Custom',
'impl_func': False,
@@ -2225,6 +2239,15 @@ _FUNCTION_INFO = {
'defer_draws': True,
'trace_level': 2,
},
+ 'DrawElementsIndirect': {
+ 'type': 'Custom',
+ 'impl_func': False,
+ 'cmd_args': 'GLenumDrawMode mode, GLenumIndexType type, GLuint offset',
+ 'trace_level': 2,
+ 'es31': True,
+ 'unit_test': False,
+ 'client_test': False,
+ },
'DrawRangeElements': {
'type': 'NoCommand',
'es3': True,
diff --git a/chromium/gpu/command_buffer/build_raster_cmd_buffer.py b/chromium/gpu/command_buffer/build_raster_cmd_buffer.py
index eaf5e6951f8..4e18014175e 100755
--- a/chromium/gpu/command_buffer/build_raster_cmd_buffer.py
+++ b/chromium/gpu/command_buffer/build_raster_cmd_buffer.py
@@ -135,7 +135,6 @@ _NAMED_TYPE_INFO = {
'viz::ResourceFormat::BGRX_1010102',
'viz::ResourceFormat::YVU_420',
'viz::ResourceFormat::YUV_420_BIPLANAR',
- 'viz::ResourceFormat::UYVY_422',
],
'invalid': [
diff --git a/chromium/gpu/command_buffer/build_webgpu_cmd_buffer.py b/chromium/gpu/command_buffer/build_webgpu_cmd_buffer.py
index e8f179a1669..e90815dc7f7 100755
--- a/chromium/gpu/command_buffer/build_webgpu_cmd_buffer.py
+++ b/chromium/gpu/command_buffer/build_webgpu_cmd_buffer.py
@@ -17,6 +17,16 @@ import build_cmd_buffer_lib
#
# Options are documented in build_gles2_cmd_buffer.py/build_raster_cmd_buffer.py
_NAMED_TYPE_INFO = {
+ 'PowerPreference': {
+ 'type': 'PowerPreference',
+ 'valid': [
+ 'PowerPreference::kHighPerformance',
+ 'PowerPreference::kLowPower',
+ ],
+ 'invalid': [
+ 'PowerPreference::kNumPowerPreferences',
+ ],
+ }
}
# A function info object specifies the type and other special data for the
@@ -50,6 +60,10 @@ _FUNCTION_INFO = {
'DissociateMailbox': {
'trace_level': 1,
},
+ 'RequestAdapter': {
+ 'impl_func': False,
+ 'cmd_args': 'uint32_t power_preference'
+ },
}
def main(argv):
diff --git a/chromium/gpu/command_buffer/client/BUILD.gn b/chromium/gpu/command_buffer/client/BUILD.gn
index 05ea3f05564..883c1932e7f 100644
--- a/chromium/gpu/command_buffer/client/BUILD.gn
+++ b/chromium/gpu/command_buffer/client/BUILD.gn
@@ -185,6 +185,7 @@ source_set("interface_base") {
# an implementation.
source_set("gles2_interface") {
sources = [
+ "gles2_interface.cc",
"gles2_interface.h",
]
public_configs = [ "//third_party/khronos:khronos_headers" ]
@@ -218,6 +219,7 @@ source_set("webgpu_interface") {
deps = [
":interface_base",
"//base",
+ "//gpu/command_buffer/common:webgpu",
]
}
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 3d6f74e7018..fe21567dfde 100644
--- a/chromium/gpu/command_buffer/client/cmd_buffer_helper_test.cc
+++ b/chromium/gpu/command_buffer/client/cmd_buffer_helper_test.cc
@@ -202,7 +202,7 @@ class CommandBufferHelperTest : public testing::Test {
std::vector<std::unique_ptr<CommandBufferEntry[]>> test_command_args_;
unsigned int test_command_next_id_;
Sequence sequence_;
- base::test::TaskEnvironment task_environment_;
+ base::test::SingleThreadTaskEnvironment task_environment_;
};
// Checks immediate_entry_count_ changes based on RingBuffer state.
diff --git a/chromium/gpu/command_buffer/client/context_support.h b/chromium/gpu/command_buffer/client/context_support.h
index 3da9d4a5f8d..99b1fd7452e 100644
--- a/chromium/gpu/command_buffer/client/context_support.h
+++ b/chromium/gpu/command_buffer/client/context_support.h
@@ -9,7 +9,6 @@
#include <vector>
#include "base/callback.h"
-#include "base/containers/span.h"
#include "ui/gfx/overlay_transform.h"
#include "ui/gfx/presentation_feedback.h"
@@ -21,6 +20,10 @@ class Rect;
class RectF;
}
+namespace cc {
+struct ImageHeaderMetadata;
+}
+
namespace gpu {
struct SwapBuffersCompleteParams;
@@ -135,11 +138,18 @@ class ContextSupport {
virtual unsigned int GetTransferBufferFreeSize() const = 0;
- // Determines if an encoded image can be decoded using hardware decode
- // acceleration. If this method returns true, then the client can be confident
- // that a call to RasterInterface::ScheduleImageDecode() will succeed.
+ // Determines if hardware decode acceleration is supported for JPEG images.
+ virtual bool IsJpegDecodeAccelerationSupported() const = 0;
+
+ // Determines if hardware decode acceleration is supported for WebP images.
+ virtual bool IsWebPDecodeAccelerationSupported() const = 0;
+
+ // Determines if |image_metadata| corresponds to an image that can be decoded
+ // using hardware decode acceleration. If this method returns true, then the
+ // client can be confident that a call to
+ // RasterInterface::ScheduleImageDecode() will succeed.
virtual bool CanDecodeWithHardwareAcceleration(
- base::span<const uint8_t> encoded_data) const = 0;
+ const cc::ImageHeaderMetadata* image_metadata) const = 0;
// Returns true if the context provider automatically manages calls to
// GrContext::resetContext under the hood to prevent GL state synchronization
diff --git a/chromium/gpu/command_buffer/client/fenced_allocator_test.cc b/chromium/gpu/command_buffer/client/fenced_allocator_test.cc
index 9628b725817..ed09dd197f6 100644
--- a/chromium/gpu/command_buffer/client/fenced_allocator_test.cc
+++ b/chromium/gpu/command_buffer/client/fenced_allocator_test.cc
@@ -58,7 +58,7 @@ class BaseFencedAllocatorTest : public testing::Test {
std::unique_ptr<CommandBufferDirect> command_buffer_;
std::unique_ptr<AsyncAPIMock> api_mock_;
std::unique_ptr<CommandBufferHelper> helper_;
- base::test::TaskEnvironment task_environment_;
+ base::test::SingleThreadTaskEnvironment task_environment_;
};
#ifndef _MSC_VER
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 29519d1d395..52e11e51071 100644
--- a/chromium/gpu/command_buffer/client/gles2_c_lib_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -1275,6 +1275,14 @@ void GL_APIENTRY GLES2DispatchCompute(GLuint num_groups_x,
void GL_APIENTRY GLES2DispatchComputeIndirect(GLintptr offset) {
gles2::GetGLContext()->DispatchComputeIndirect(offset);
}
+void GL_APIENTRY GLES2DrawArraysIndirect(GLenum mode, const void* offset) {
+ gles2::GetGLContext()->DrawArraysIndirect(mode, offset);
+}
+void GL_APIENTRY GLES2DrawElementsIndirect(GLenum mode,
+ GLenum type,
+ const void* offset) {
+ gles2::GetGLContext()->DrawElementsIndirect(mode, type, offset);
+}
void GL_APIENTRY GLES2GetProgramInterfaceiv(GLuint program,
GLenum program_interface,
GLenum pname,
@@ -1803,6 +1811,9 @@ GLES2ProgramPathFragmentInputGenCHROMIUM(GLuint program,
gles2::GetGLContext()->ProgramPathFragmentInputGenCHROMIUM(
program, location, genMode, components, coeffs);
}
+void GL_APIENTRY GLES2ContextVisibilityHintCHROMIUM(GLboolean visibility) {
+ gles2::GetGLContext()->ContextVisibilityHintCHROMIUM(visibility);
+}
void GL_APIENTRY GLES2CoverageModulationCHROMIUM(GLenum components) {
gles2::GetGLContext()->CoverageModulationCHROMIUM(components);
}
@@ -2976,6 +2987,14 @@ extern const NameToFunc g_gles2_function_table[] = {
reinterpret_cast<GLES2FunctionPointer>(glDispatchComputeIndirect),
},
{
+ "glDrawArraysIndirect",
+ reinterpret_cast<GLES2FunctionPointer>(glDrawArraysIndirect),
+ },
+ {
+ "glDrawElementsIndirect",
+ reinterpret_cast<GLES2FunctionPointer>(glDrawElementsIndirect),
+ },
+ {
"glGetProgramInterfaceiv",
reinterpret_cast<GLES2FunctionPointer>(glGetProgramInterfaceiv),
},
@@ -3319,6 +3338,10 @@ extern const NameToFunc g_gles2_function_table[] = {
glProgramPathFragmentInputGenCHROMIUM),
},
{
+ "glContextVisibilityHintCHROMIUM",
+ reinterpret_cast<GLES2FunctionPointer>(glContextVisibilityHintCHROMIUM),
+ },
+ {
"glCoverageModulationCHROMIUM",
reinterpret_cast<GLES2FunctionPointer>(glCoverageModulationCHROMIUM),
},
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 001f2acd437..a00f5bf1584 100644
--- a/chromium/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -2494,6 +2494,22 @@ void DispatchComputeIndirect(GLintptr offset) {
}
}
+void DrawArraysIndirect(GLenum mode, GLuint offset) {
+ gles2::cmds::DrawArraysIndirect* c =
+ GetCmdSpace<gles2::cmds::DrawArraysIndirect>();
+ if (c) {
+ c->Init(mode, offset);
+ }
+}
+
+void DrawElementsIndirect(GLenum mode, GLenum type, GLuint offset) {
+ gles2::cmds::DrawElementsIndirect* c =
+ GetCmdSpace<gles2::cmds::DrawElementsIndirect>();
+ if (c) {
+ c->Init(mode, type, offset);
+ }
+}
+
void GetProgramInterfaceiv(GLuint program,
GLenum program_interface,
GLenum pname,
@@ -3322,6 +3338,14 @@ void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
}
}
+void ContextVisibilityHintCHROMIUM(GLboolean visibility) {
+ gles2::cmds::ContextVisibilityHintCHROMIUM* c =
+ GetCmdSpace<gles2::cmds::ContextVisibilityHintCHROMIUM>();
+ if (c) {
+ c->Init(visibility);
+ }
+}
+
void CoverageModulationCHROMIUM(GLenum components) {
gles2::cmds::CoverageModulationCHROMIUM* c =
GetCmdSpace<gles2::cmds::CoverageModulationCHROMIUM>();
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation.cc b/chromium/gpu/command_buffer/client/gles2_implementation.cc
index 28819418658..914d6f120ec 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation.cc
+++ b/chromium/gpu/command_buffer/client/gles2_implementation.cc
@@ -386,6 +386,19 @@ void GLES2Implementation::OnGpuControlSwapBuffersCompleted(
std::move(callback).Run(params);
}
+void GLES2Implementation::OnGpuSwitched() {
+ share_group_->SetGpuSwitched(true);
+}
+
+GLboolean GLES2Implementation::DidGpuSwitch() {
+ // TODO(zmo): Redesign this code; it works for now because the share group
+ // only contains one context but in the future only the first OpenGL context
+ // in the share group will receive GL_TRUE as the return value.
+ bool gpu_changed = share_group_->GetGpuSwitched();
+ share_group_->SetGpuSwitched(false);
+ return gpu_changed ? GL_TRUE : GL_FALSE;
+}
+
void GLES2Implementation::SendErrorMessage(std::string message, int32_t id) {
if (error_message_callback_.is_null())
return;
@@ -1362,6 +1375,33 @@ void GLES2Implementation::DrawElementsImpl(GLenum mode,
CheckGLError();
}
+void GLES2Implementation::DrawElementsIndirect(GLenum mode,
+ GLenum type,
+ const void* offset) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawElementsIndirect("
+ << GLES2Util::GetStringDrawMode(mode) << ", "
+ << GLES2Util::GetStringIndexType(type) << ", " << offset
+ << ")");
+ if (!ValidateOffset("glDrawElementsIndirect",
+ reinterpret_cast<GLintptr>(offset))) {
+ return;
+ }
+ // This is for WebGL 2.0 Compute which doesn't support client side arrays
+ if (vertex_array_object_manager_->bound_element_array_buffer() == 0) {
+ SetGLError(GL_INVALID_OPERATION, "glDrawElementsIndirect",
+ "No element array buffer");
+ return;
+ }
+ if (vertex_array_object_manager_->SupportsClientSideBuffers()) {
+ SetGLError(GL_INVALID_OPERATION, "glDrawElementsIndirect",
+ "Missing array buffer for vertex attribute");
+ return;
+ }
+ helper_->DrawElementsIndirect(mode, type, ToGLuint(offset));
+ CheckGLError();
+}
+
void GLES2Implementation::Flush() {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFlush()");
@@ -5193,6 +5233,25 @@ void GLES2Implementation::DrawArrays(GLenum mode, GLint first, GLsizei count) {
CheckGLError();
}
+void GLES2Implementation::DrawArraysIndirect(GLenum mode, const void* offset) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glDrawArraysIndirect("
+ << GLES2Util::GetStringDrawMode(mode) << ", " << offset
+ << ")");
+ if (!ValidateOffset("glDrawArraysIndirect",
+ reinterpret_cast<GLintptr>(offset))) {
+ return;
+ }
+ // This is for WebGL 2.0 Compute which doesn't support client side arrays
+ if (vertex_array_object_manager_->SupportsClientSideBuffers()) {
+ SetGLError(GL_INVALID_OPERATION, "glDrawArraysIndirect",
+ "Missing array buffer for vertex attribute");
+ return;
+ }
+ helper_->DrawArraysIndirect(mode, ToGLuint(offset));
+ CheckGLError();
+}
+
void GLES2Implementation::GetVertexAttribfv(GLuint index,
GLenum pname,
GLfloat* params) {
@@ -6718,8 +6777,18 @@ unsigned int GLES2Implementation::GetTransferBufferFreeSize() const {
return 0;
}
+bool GLES2Implementation::IsJpegDecodeAccelerationSupported() const {
+ NOTREACHED();
+ return false;
+}
+
+bool GLES2Implementation::IsWebPDecodeAccelerationSupported() const {
+ NOTREACHED();
+ return false;
+}
+
bool GLES2Implementation::CanDecodeWithHardwareAcceleration(
- base::span<const uint8_t> encoded_data) const {
+ const cc::ImageHeaderMetadata* image_metadata) const {
NOTREACHED();
return false;
}
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation.h b/chromium/gpu/command_buffer/client/gles2_implementation.h
index 0f31140c034..9f3d8b2b334 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation.h
+++ b/chromium/gpu/command_buffer/client/gles2_implementation.h
@@ -99,6 +99,7 @@ class GLES2_IMPL_EXPORT GLES2Implementation : public GLES2Interface,
// GLES2Interface implementation
void FreeSharedMemory(void*) override;
+ GLboolean DidGpuSwitch() final;
// Include the auto-generated part of this class. We split this because
// it means we can easily edit the non-auto generated parts right here in
@@ -143,8 +144,10 @@ class GLES2_IMPL_EXPORT GLES2Implementation : public GLES2Interface,
const std::vector<std::pair<uint32_t, uint32_t>>& entries) override;
void DeleteTransferCacheEntry(uint32_t type, uint32_t id) override;
unsigned int GetTransferBufferFreeSize() const override;
+ bool IsJpegDecodeAccelerationSupported() const override;
+ bool IsWebPDecodeAccelerationSupported() const override;
bool CanDecodeWithHardwareAcceleration(
- base::span<const uint8_t> encoded_data) const override;
+ const cc::ImageHeaderMetadata* image_metadata) const override;
// InterfaceBase implementation.
void GenSyncTokenCHROMIUM(GLbyte* sync_token) override;
@@ -397,6 +400,7 @@ class GLES2_IMPL_EXPORT GLES2Implementation : public GLES2Interface,
void OnGpuControlErrorMessage(const char* message, int32_t id) final;
void OnGpuControlSwapBuffersCompleted(
const SwapBuffersCompleteParams& params) final;
+ void OnGpuSwitched() final;
void OnSwapBufferPresented(uint64_t swap_id,
const gfx::PresentationFeedback& feedback) final;
void OnGpuControlReturnData(base::span<const uint8_t> data) final;
diff --git a/chromium/gpu/command_buffer/client/gles2_implementation_autogen.h b/chromium/gpu/command_buffer/client/gles2_implementation_autogen.h
index 5ba41ac469b..9639c2d2cf6 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -892,6 +892,12 @@ void DispatchCompute(GLuint num_groups_x,
void DispatchComputeIndirect(GLintptr offset) override;
+void DrawArraysIndirect(GLenum mode, const void* offset) override;
+
+void DrawElementsIndirect(GLenum mode,
+ GLenum type,
+ const void* offset) override;
+
void GetProgramInterfaceiv(GLuint program,
GLenum program_interface,
GLenum pname,
@@ -1272,6 +1278,8 @@ void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
GLint components,
const GLfloat* coeffs) override;
+void ContextVisibilityHintCHROMIUM(GLboolean visibility) override;
+
void CoverageModulationCHROMIUM(GLenum components) override;
GLenum GetGraphicsResetStatusKHR() override;
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 354a42a0acc..11918e119ae 100644
--- a/chromium/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -3654,6 +3654,14 @@ void GLES2Implementation::StencilThenCoverStrokePathCHROMIUM(GLuint path,
CheckGLError();
}
+void GLES2Implementation::ContextVisibilityHintCHROMIUM(GLboolean visibility) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glContextVisibilityHintCHROMIUM("
+ << GLES2Util::GetStringBool(visibility) << ")");
+ helper_->ContextVisibilityHintCHROMIUM(visibility);
+ CheckGLError();
+}
+
void GLES2Implementation::CoverageModulationCHROMIUM(GLenum components) {
GPU_CLIENT_SINGLE_THREAD_CHECK();
GPU_CLIENT_LOG(
diff --git a/chromium/gpu/command_buffer/client/gles2_interface.cc b/chromium/gpu/command_buffer/client/gles2_interface.cc
new file mode 100644
index 00000000000..722a39b84c8
--- /dev/null
+++ b/chromium/gpu/command_buffer/client/gles2_interface.cc
@@ -0,0 +1,17 @@
+// Copyright (c) 2019 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/client/gles2_interface.h"
+
+#include <GLES2/gl2.h>
+
+namespace gpu {
+namespace gles2 {
+
+GLboolean GLES2Interface::DidGpuSwitch() {
+ return GL_FALSE;
+}
+
+} // namespace gles2
+} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/gles2_interface.h b/chromium/gpu/command_buffer/client/gles2_interface.h
index cf7d8b8e196..1a6e382d93f 100644
--- a/chromium/gpu/command_buffer/client/gles2_interface.h
+++ b/chromium/gpu/command_buffer/client/gles2_interface.h
@@ -37,6 +37,8 @@ class GLES2Interface : public InterfaceBase {
virtual void FreeSharedMemory(void*) {}
+ virtual GLboolean DidGpuSwitch();
+
// Include the auto-generated part of this class. 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_interface_autogen.h b/chromium/gpu/command_buffer/client/gles2_interface_autogen.h
index cc80c87ce10..138c7a99800 100644
--- a/chromium/gpu/command_buffer/client/gles2_interface_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -657,6 +657,10 @@ virtual void DispatchCompute(GLuint num_groups_x,
GLuint num_groups_y,
GLuint num_groups_z) = 0;
virtual void DispatchComputeIndirect(GLintptr offset) = 0;
+virtual void DrawArraysIndirect(GLenum mode, const void* offset) = 0;
+virtual void DrawElementsIndirect(GLenum mode,
+ GLenum type,
+ const void* offset) = 0;
virtual void GetProgramInterfaceiv(GLuint program,
GLenum program_interface,
GLenum pname,
@@ -961,6 +965,7 @@ virtual void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
GLenum genMode,
GLint components,
const GLfloat* coeffs) = 0;
+virtual void ContextVisibilityHintCHROMIUM(GLboolean visibility) = 0;
virtual void CoverageModulationCHROMIUM(GLenum components) = 0;
virtual GLenum GetGraphicsResetStatusKHR() = 0;
virtual void BlendBarrierKHR() = 0;
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 862943baebb..a35b78ffc5e 100644
--- a/chromium/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -634,6 +634,10 @@ void DispatchCompute(GLuint num_groups_x,
GLuint num_groups_y,
GLuint num_groups_z) override;
void DispatchComputeIndirect(GLintptr offset) override;
+void DrawArraysIndirect(GLenum mode, const void* offset) override;
+void DrawElementsIndirect(GLenum mode,
+ GLenum type,
+ const void* offset) override;
void GetProgramInterfaceiv(GLuint program,
GLenum program_interface,
GLenum pname,
@@ -932,6 +936,7 @@ void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
GLenum genMode,
GLint components,
const GLfloat* coeffs) override;
+void ContextVisibilityHintCHROMIUM(GLboolean visibility) override;
void CoverageModulationCHROMIUM(GLenum components) override;
GLenum GetGraphicsResetStatusKHR() override;
void BlendBarrierKHR() override;
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 0091b6ebb38..afb9efd30e4 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
@@ -860,6 +860,11 @@ void GLES2InterfaceStub::DispatchCompute(GLuint /* num_groups_x */,
GLuint /* num_groups_y */,
GLuint /* num_groups_z */) {}
void GLES2InterfaceStub::DispatchComputeIndirect(GLintptr /* offset */) {}
+void GLES2InterfaceStub::DrawArraysIndirect(GLenum /* mode */,
+ const void* /* offset */) {}
+void GLES2InterfaceStub::DrawElementsIndirect(GLenum /* mode */,
+ GLenum /* type */,
+ const void* /* offset */) {}
void GLES2InterfaceStub::GetProgramInterfaceiv(GLuint /* program */,
GLenum /* program_interface */,
GLenum /* pname */,
@@ -1231,6 +1236,8 @@ void GLES2InterfaceStub::ProgramPathFragmentInputGenCHROMIUM(
GLenum /* genMode */,
GLint /* components */,
const GLfloat* /* coeffs */) {}
+void GLES2InterfaceStub::ContextVisibilityHintCHROMIUM(
+ GLboolean /* visibility */) {}
void GLES2InterfaceStub::CoverageModulationCHROMIUM(GLenum /* components */) {}
GLenum GLES2InterfaceStub::GetGraphicsResetStatusKHR() {
return 0;
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 0e1c9285b6f..81b31c3c7be 100644
--- a/chromium/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -634,6 +634,10 @@ void DispatchCompute(GLuint num_groups_x,
GLuint num_groups_y,
GLuint num_groups_z) override;
void DispatchComputeIndirect(GLintptr offset) override;
+void DrawArraysIndirect(GLenum mode, const void* offset) override;
+void DrawElementsIndirect(GLenum mode,
+ GLenum type,
+ const void* offset) override;
void GetProgramInterfaceiv(GLuint program,
GLenum program_interface,
GLenum pname,
@@ -932,6 +936,7 @@ void ProgramPathFragmentInputGenCHROMIUM(GLuint program,
GLenum genMode,
GLint components,
const GLfloat* coeffs) override;
+void ContextVisibilityHintCHROMIUM(GLboolean visibility) override;
void CoverageModulationCHROMIUM(GLenum components) override;
GLenum GetGraphicsResetStatusKHR() override;
void BlendBarrierKHR() override;
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 7ad300fd8f0..56cd1905fb0 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
@@ -1848,6 +1848,19 @@ void GLES2TraceImplementation::DispatchComputeIndirect(GLintptr offset) {
gl_->DispatchComputeIndirect(offset);
}
+void GLES2TraceImplementation::DrawArraysIndirect(GLenum mode,
+ const void* offset) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DrawArraysIndirect");
+ gl_->DrawArraysIndirect(mode, offset);
+}
+
+void GLES2TraceImplementation::DrawElementsIndirect(GLenum mode,
+ GLenum type,
+ const void* offset) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::DrawElementsIndirect");
+ gl_->DrawElementsIndirect(mode, type, offset);
+}
+
void GLES2TraceImplementation::GetProgramInterfaceiv(GLuint program,
GLenum program_interface,
GLenum pname,
@@ -2573,6 +2586,13 @@ void GLES2TraceImplementation::ProgramPathFragmentInputGenCHROMIUM(
components, coeffs);
}
+void GLES2TraceImplementation::ContextVisibilityHintCHROMIUM(
+ GLboolean visibility) {
+ TRACE_EVENT_BINARY_EFFICIENT0("gpu",
+ "GLES2Trace::ContextVisibilityHintCHROMIUM");
+ gl_->ContextVisibilityHintCHROMIUM(visibility);
+}
+
void GLES2TraceImplementation::CoverageModulationCHROMIUM(GLenum components) {
TRACE_EVENT_BINARY_EFFICIENT0("gpu",
"GLES2Trace::CoverageModulationCHROMIUM");
diff --git a/chromium/gpu/command_buffer/client/gpu_control_client.h b/chromium/gpu/command_buffer/client/gpu_control_client.h
index 27822b7a4cc..a2bbec285ca 100644
--- a/chromium/gpu/command_buffer/client/gpu_control_client.h
+++ b/chromium/gpu/command_buffer/client/gpu_control_client.h
@@ -28,6 +28,7 @@ class GpuControlClient {
virtual void OnGpuControlErrorMessage(const char* message, int32_t id) = 0;
virtual void OnGpuControlSwapBuffersCompleted(
const SwapBuffersCompleteParams& params) = 0;
+ virtual void OnGpuSwitched() {}
virtual void OnSwapBufferPresented(
uint64_t swap_id,
const gfx::PresentationFeedback& feedback) = 0;
diff --git a/chromium/gpu/command_buffer/client/image_decode_accelerator_interface.h b/chromium/gpu/command_buffer/client/image_decode_accelerator_interface.h
index d56c6b6ce2f..7ec88177d05 100644
--- a/chromium/gpu/command_buffer/client/image_decode_accelerator_interface.h
+++ b/chromium/gpu/command_buffer/client/image_decode_accelerator_interface.h
@@ -11,6 +11,10 @@
#include "gpu/command_buffer/common/command_buffer_id.h"
#include "gpu/command_buffer/common/sync_token.h"
+namespace cc {
+struct ImageHeaderMetadata;
+}
+
namespace gfx {
class ColorSpace;
class Size;
@@ -25,7 +29,11 @@ class ImageDecodeAcceleratorInterface {
virtual ~ImageDecodeAcceleratorInterface() {}
virtual bool IsImageSupported(
- base::span<const uint8_t> encoded_data) const = 0;
+ const cc::ImageHeaderMetadata* image_metadata) const = 0;
+
+ virtual bool IsJpegDecodeAccelerationSupported() const = 0;
+
+ virtual bool IsWebPDecodeAccelerationSupported() const = 0;
virtual SyncToken ScheduleImageDecode(
base::span<const uint8_t> encoded_data,
diff --git a/chromium/gpu/command_buffer/client/mapped_memory_unittest.cc b/chromium/gpu/command_buffer/client/mapped_memory_unittest.cc
index 5bed2bf9e8f..e6ed987c482 100644
--- a/chromium/gpu/command_buffer/client/mapped_memory_unittest.cc
+++ b/chromium/gpu/command_buffer/client/mapped_memory_unittest.cc
@@ -55,7 +55,7 @@ class MappedMemoryTestBase : public testing::Test {
std::unique_ptr<CommandBufferDirectLocked> command_buffer_;
std::unique_ptr<AsyncAPIMock> api_mock_;
std::unique_ptr<CommandBufferHelper> helper_;
- base::test::TaskEnvironment task_environment_;
+ base::test::SingleThreadTaskEnvironment task_environment_;
};
#ifndef _MSC_VER
diff --git a/chromium/gpu/command_buffer/client/program_info_manager.cc b/chromium/gpu/command_buffer/client/program_info_manager.cc
index c49efa99371..5e3299ed9d2 100644
--- a/chromium/gpu/command_buffer/client/program_info_manager.cc
+++ b/chromium/gpu/command_buffer/client/program_info_manager.cc
@@ -321,32 +321,32 @@ bool ProgramInfoManager::Program::GetUniformsiv(
uniform_infos_[indices[ii]].name.length() + 1);
}
return true;
+ }
+ if (num_uniforms != uniforms_es3_.size()) {
+ return false;
+ }
+ switch (pname) {
case GL_UNIFORM_BLOCK_INDEX:
- DCHECK_EQ(num_uniforms, uniforms_es3_.size());
for (GLsizei ii = 0; ii < count; ++ii) {
params[ii] = uniforms_es3_[indices[ii]].block_index;
}
return true;
case GL_UNIFORM_OFFSET:
- DCHECK_EQ(num_uniforms, uniforms_es3_.size());
for (GLsizei ii = 0; ii < count; ++ii) {
params[ii] = uniforms_es3_[indices[ii]].offset;
}
return true;
case GL_UNIFORM_ARRAY_STRIDE:
- DCHECK_EQ(num_uniforms, uniforms_es3_.size());
for (GLsizei ii = 0; ii < count; ++ii) {
params[ii] = uniforms_es3_[indices[ii]].array_stride;
}
return true;
case GL_UNIFORM_MATRIX_STRIDE:
- DCHECK_EQ(num_uniforms, uniforms_es3_.size());
for (GLsizei ii = 0; ii < count; ++ii) {
params[ii] = uniforms_es3_[indices[ii]].matrix_stride;
}
return true;
case GL_UNIFORM_IS_ROW_MAJOR:
- DCHECK_EQ(num_uniforms, uniforms_es3_.size());
for (GLsizei ii = 0; ii < count; ++ii) {
params[ii] = uniforms_es3_[indices[ii]].is_row_major;
}
diff --git a/chromium/gpu/command_buffer/client/raster_implementation.cc b/chromium/gpu/command_buffer/client/raster_implementation.cc
index 407fbdf7623..93da3f458e2 100644
--- a/chromium/gpu/command_buffer/client/raster_implementation.cc
+++ b/chromium/gpu/command_buffer/client/raster_implementation.cc
@@ -543,9 +543,20 @@ unsigned int RasterImplementation::GetTransferBufferFreeSize() const {
return transfer_buffer_->GetFreeSize();
}
+bool RasterImplementation::IsJpegDecodeAccelerationSupported() const {
+ return image_decode_accelerator_ &&
+ image_decode_accelerator_->IsJpegDecodeAccelerationSupported();
+}
+
+bool RasterImplementation::IsWebPDecodeAccelerationSupported() const {
+ return image_decode_accelerator_ &&
+ image_decode_accelerator_->IsWebPDecodeAccelerationSupported();
+}
+
bool RasterImplementation::CanDecodeWithHardwareAcceleration(
- base::span<const uint8_t> encoded_data) const {
- return image_decode_accelerator_->IsImageSupported(encoded_data);
+ const cc::ImageHeaderMetadata* image_metadata) const {
+ return image_decode_accelerator_ &&
+ image_decode_accelerator_->IsImageSupported(image_metadata);
}
const std::string& RasterImplementation::GetLogPrefix() const {
diff --git a/chromium/gpu/command_buffer/client/raster_implementation.h b/chromium/gpu/command_buffer/client/raster_implementation.h
index 3af07f2dc8a..f8beb586e84 100644
--- a/chromium/gpu/command_buffer/client/raster_implementation.h
+++ b/chromium/gpu/command_buffer/client/raster_implementation.h
@@ -183,8 +183,10 @@ class RASTER_EXPORT RasterImplementation : public RasterInterface,
const std::vector<std::pair<uint32_t, uint32_t>>& entries) override;
void DeleteTransferCacheEntry(uint32_t type, uint32_t id) override;
unsigned int GetTransferBufferFreeSize() const override;
+ bool IsJpegDecodeAccelerationSupported() const override;
+ bool IsWebPDecodeAccelerationSupported() const override;
bool CanDecodeWithHardwareAcceleration(
- base::span<const uint8_t> encoded_data) const override;
+ const cc::ImageHeaderMetadata* image_metadata) const override;
// InterfaceBase implementation.
void GenSyncTokenCHROMIUM(GLbyte* sync_token) override;
diff --git a/chromium/gpu/command_buffer/client/raster_implementation_gles_unittest.cc b/chromium/gpu/command_buffer/client/raster_implementation_gles_unittest.cc
index 633d53d6fba..d50e428f95b 100644
--- a/chromium/gpu/command_buffer/client/raster_implementation_gles_unittest.cc
+++ b/chromium/gpu/command_buffer/client/raster_implementation_gles_unittest.cc
@@ -226,8 +226,10 @@ class ContextSupportStub : public ContextSupport {
const std::vector<std::pair<uint32_t, uint32_t>>& entries) override {}
void DeleteTransferCacheEntry(uint32_t type, uint32_t id) override {}
unsigned int GetTransferBufferFreeSize() const override { return 0; }
+ bool IsJpegDecodeAccelerationSupported() const override { return false; }
+ bool IsWebPDecodeAccelerationSupported() const override { return false; }
bool CanDecodeWithHardwareAcceleration(
- base::span<const uint8_t> encoded_data) const override {
+ const cc::ImageHeaderMetadata* image_metadata) const override {
return false;
}
bool HasGrContextSupport() const override { return false; }
diff --git a/chromium/gpu/command_buffer/client/ring_buffer_test.cc b/chromium/gpu/command_buffer/client/ring_buffer_test.cc
index e9c18cf2ac6..1e8dbc55376 100644
--- a/chromium/gpu/command_buffer/client/ring_buffer_test.cc
+++ b/chromium/gpu/command_buffer/client/ring_buffer_test.cc
@@ -85,7 +85,7 @@ class BaseRingBufferTest : public testing::Test {
std::unique_ptr<int8_t[]> buffer_;
int8_t* buffer_start_;
- base::test::TaskEnvironment task_environment_;
+ base::test::SingleThreadTaskEnvironment task_environment_;
};
#ifndef _MSC_VER
diff --git a/chromium/gpu/command_buffer/client/share_group.cc b/chromium/gpu/command_buffer/client/share_group.cc
index a9233874578..ceb61d8bd39 100644
--- a/chromium/gpu/command_buffer/client/share_group.cc
+++ b/chromium/gpu/command_buffer/client/share_group.cc
@@ -401,6 +401,16 @@ bool ShareGroup::IsLost() const {
return lost_;
}
+void ShareGroup::SetGpuSwitched(bool gpu_switched) {
+ base::AutoLock hold(gpu_switched_lock_);
+ gpu_switched_ = gpu_switched;
+}
+
+bool ShareGroup::GetGpuSwitched() const {
+ base::AutoLock hold(gpu_switched_lock_);
+ return gpu_switched_;
+}
+
void ShareGroup::SetProgramInfoManagerForTesting(ProgramInfoManager* manager) {
program_info_manager_.reset(manager);
}
diff --git a/chromium/gpu/command_buffer/client/share_group.h b/chromium/gpu/command_buffer/client/share_group.h
index 7d074d1a542..a1b6f74f68c 100644
--- a/chromium/gpu/command_buffer/client/share_group.h
+++ b/chromium/gpu/command_buffer/client/share_group.h
@@ -165,6 +165,9 @@ class GLES2_IMPL_EXPORT ShareGroup
// thread safe as contexts may be on different threads.
bool IsLost() const;
+ void SetGpuSwitched(bool gpu_switched);
+ bool GetGpuSwitched() const;
+
private:
friend class gpu::RefCountedThreadSafe<ShareGroup>;
friend class gpu::gles2::GLES2ImplementationTest;
@@ -186,6 +189,9 @@ class GLES2_IMPL_EXPORT ShareGroup
mutable base::Lock lost_lock_;
bool lost_ = false;
+ mutable base::Lock gpu_switched_lock_;
+ bool gpu_switched_ = false;
+
DISALLOW_COPY_AND_ASSIGN(ShareGroup);
};
diff --git a/chromium/gpu/command_buffer/client/transfer_buffer.cc b/chromium/gpu/command_buffer/client/transfer_buffer.cc
index 2213dc39c6d..5b843b07296 100644
--- a/chromium/gpu/command_buffer/client/transfer_buffer.cc
+++ b/chromium/gpu/command_buffer/client/transfer_buffer.cc
@@ -8,6 +8,7 @@
#include <stddef.h>
#include <stdint.h>
+#include <climits>
#include "base/bits.h"
#include "base/logging.h"
@@ -134,7 +135,12 @@ void TransferBuffer::AllocateRingBuffer(unsigned int size) {
}
static unsigned int ComputePOTSize(unsigned int dimension) {
- return (dimension == 0) ? 0 : 1 << base::bits::Log2Ceiling(dimension);
+ // Avoid shifting by more than the size of an unsigned int - 1, because that's
+ // undefined behavior.
+ return (dimension == 0)
+ ? 0
+ : 1 << std::min(static_cast<int>(sizeof(dimension) * CHAR_BIT - 1),
+ base::bits::Log2Ceiling(dimension));
}
void TransferBuffer::ReallocateRingBuffer(unsigned int size, bool shrink) {
diff --git a/chromium/gpu/command_buffer/client/webgpu_cmd_helper_autogen.h b/chromium/gpu/command_buffer/client/webgpu_cmd_helper_autogen.h
index a90c77a14cf..a91ea1a6ef2 100644
--- a/chromium/gpu/command_buffer/client/webgpu_cmd_helper_autogen.h
+++ b/chromium/gpu/command_buffer/client/webgpu_cmd_helper_autogen.h
@@ -43,4 +43,11 @@ void DissociateMailbox(GLuint texture_id, GLuint texture_generation) {
}
}
+void RequestAdapter(uint32_t power_preference) {
+ webgpu::cmds::RequestAdapter* c = GetCmdSpace<webgpu::cmds::RequestAdapter>();
+ if (c) {
+ c->Init(power_preference);
+ }
+}
+
#endif // GPU_COMMAND_BUFFER_CLIENT_WEBGPU_CMD_HELPER_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/client/webgpu_implementation.cc b/chromium/gpu/command_buffer/client/webgpu_implementation.cc
index b50308cfc4a..4093874d30e 100644
--- a/chromium/gpu/command_buffer/client/webgpu_implementation.cc
+++ b/chromium/gpu/command_buffer/client/webgpu_implementation.cc
@@ -37,6 +37,17 @@ WebGPUImplementation::~WebGPUImplementation() {
// commands are still in flight.
Flush();
helper_->Finish();
+
+#if BUILDFLAG(USE_DAWN)
+ // Now that commands are finished, free the wire client.
+ wire_client_.reset();
+
+ // All client-side Dawn objects are now destroyed.
+ // Shared memory allocations for buffers that were still mapped at the time
+ // of destruction can now be safely freed.
+ memory_transfer_service_->FreeHandlesPendingToken(helper_->InsertToken());
+ helper_->Finish();
+#endif
}
gpu::ContextResult WebGPUImplementation::Initialize(
@@ -153,8 +164,16 @@ unsigned int WebGPUImplementation::GetTransferBufferFreeSize() const {
NOTREACHED();
return 0;
}
+bool WebGPUImplementation::IsJpegDecodeAccelerationSupported() const {
+ NOTREACHED();
+ return false;
+}
+bool WebGPUImplementation::IsWebPDecodeAccelerationSupported() const {
+ NOTREACHED();
+ return false;
+}
bool WebGPUImplementation::CanDecodeWithHardwareAcceleration(
- base::span<const uint8_t> encoded_data) const {
+ const cc::ImageHeaderMetadata* image_metadata) const {
NOTREACHED();
return false;
}
@@ -325,5 +344,12 @@ ReservedTexture WebGPUImplementation::ReserveTexture(DawnDevice device) {
#endif
}
+void WebGPUImplementation::RequestAdapter(PowerPreference power_preference) {
+ GPU_CLIENT_SINGLE_THREAD_CHECK();
+ GPU_CLIENT_LOG("[" << GetLogPrefix() << "] wgRequestAdapter("
+ << static_cast<uint32_t>(power_preference) << ")");
+ helper_->RequestAdapter(static_cast<uint32_t>(power_preference));
+}
+
} // namespace webgpu
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/client/webgpu_implementation.h b/chromium/gpu/command_buffer/client/webgpu_implementation.h
index 744c2045b10..982a1c3b122 100644
--- a/chromium/gpu/command_buffer/client/webgpu_implementation.h
+++ b/chromium/gpu/command_buffer/client/webgpu_implementation.h
@@ -83,8 +83,10 @@ class WEBGPU_EXPORT WebGPUImplementation final
const std::vector<std::pair<uint32_t, uint32_t>>& entries) override;
void DeleteTransferCacheEntry(uint32_t type, uint32_t id) override;
unsigned int GetTransferBufferFreeSize() const override;
+ bool IsJpegDecodeAccelerationSupported() const override;
+ bool IsWebPDecodeAccelerationSupported() const override;
bool CanDecodeWithHardwareAcceleration(
- base::span<const uint8_t> encoded_data) const override;
+ const cc::ImageHeaderMetadata* image_metadata) const override;
// InterfaceBase implementation.
void GenSyncTokenCHROMIUM(GLbyte* sync_token) override;
diff --git a/chromium/gpu/command_buffer/client/webgpu_implementation_autogen.h b/chromium/gpu/command_buffer/client/webgpu_implementation_autogen.h
index 1e299de566d..7578de19291 100644
--- a/chromium/gpu/command_buffer/client/webgpu_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/client/webgpu_implementation_autogen.h
@@ -22,4 +22,7 @@ void AssociateMailbox(GLuint device_id,
void DissociateMailbox(GLuint texture_id, GLuint texture_generation) override;
+void RequestAdapter(PowerPreference power_preference =
+ PowerPreference::kHighPerformance) override;
+
#endif // GPU_COMMAND_BUFFER_CLIENT_WEBGPU_IMPLEMENTATION_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/client/webgpu_implementation_unittest_autogen.h b/chromium/gpu/command_buffer/client/webgpu_implementation_unittest_autogen.h
index 66a91a31401..40c2c409b8b 100644
--- a/chromium/gpu/command_buffer/client/webgpu_implementation_unittest_autogen.h
+++ b/chromium/gpu/command_buffer/client/webgpu_implementation_unittest_autogen.h
@@ -39,4 +39,15 @@ TEST_F(WebGPUImplementationTest, DissociateMailbox) {
gl_->DissociateMailbox(1, 2);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}
+
+TEST_F(WebGPUImplementationTest, RequestAdapter) {
+ struct Cmds {
+ cmds::RequestAdapter cmd;
+ };
+ Cmds expected;
+ expected.cmd.Init(1);
+
+ gl_->RequestAdapter(PowerPreference::kHighPerformance);
+ EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
#endif // GPU_COMMAND_BUFFER_CLIENT_WEBGPU_IMPLEMENTATION_UNITTEST_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/client/webgpu_interface.h b/chromium/gpu/command_buffer/client/webgpu_interface.h
index 5cdf6b5238f..6255fa7db2a 100644
--- a/chromium/gpu/command_buffer/client/webgpu_interface.h
+++ b/chromium/gpu/command_buffer/client/webgpu_interface.h
@@ -6,8 +6,10 @@
#define GPU_COMMAND_BUFFER_CLIENT_WEBGPU_INTERFACE_H_
#include <dawn/dawn.h>
+#include <dawn/dawn_proc_table.h>
#include "gpu/command_buffer/client/interface_base.h"
+#include "gpu/command_buffer/common/webgpu_cmd_enums.h"
namespace gpu {
namespace webgpu {
diff --git a/chromium/gpu/command_buffer/client/webgpu_interface_autogen.h b/chromium/gpu/command_buffer/client/webgpu_interface_autogen.h
index 92784474d30..2c3618263b7 100644
--- a/chromium/gpu/command_buffer/client/webgpu_interface_autogen.h
+++ b/chromium/gpu/command_buffer/client/webgpu_interface_autogen.h
@@ -21,4 +21,6 @@ virtual void AssociateMailbox(GLuint device_id,
const GLbyte* mailbox) = 0;
virtual void DissociateMailbox(GLuint texture_id,
GLuint texture_generation) = 0;
+virtual void RequestAdapter(
+ PowerPreference power_preference = PowerPreference::kHighPerformance) = 0;
#endif // GPU_COMMAND_BUFFER_CLIENT_WEBGPU_INTERFACE_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/client/webgpu_interface_stub_autogen.h b/chromium/gpu/command_buffer/client/webgpu_interface_stub_autogen.h
index 6d23a6873e3..d3f713a2679 100644
--- a/chromium/gpu/command_buffer/client/webgpu_interface_stub_autogen.h
+++ b/chromium/gpu/command_buffer/client/webgpu_interface_stub_autogen.h
@@ -19,4 +19,5 @@ void AssociateMailbox(GLuint device_id,
GLuint usage,
const GLbyte* mailbox) override;
void DissociateMailbox(GLuint texture_id, GLuint texture_generation) override;
+void RequestAdapter(PowerPreference power_preference) override;
#endif // GPU_COMMAND_BUFFER_CLIENT_WEBGPU_INTERFACE_STUB_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/client/webgpu_interface_stub_impl_autogen.h b/chromium/gpu/command_buffer/client/webgpu_interface_stub_impl_autogen.h
index 0d89b6896a4..31bafe7a9b7 100644
--- a/chromium/gpu/command_buffer/client/webgpu_interface_stub_impl_autogen.h
+++ b/chromium/gpu/command_buffer/client/webgpu_interface_stub_impl_autogen.h
@@ -20,4 +20,6 @@ void WebGPUInterfaceStub::AssociateMailbox(GLuint /* device_id */,
const GLbyte* /* mailbox */) {}
void WebGPUInterfaceStub::DissociateMailbox(GLuint /* texture_id */,
GLuint /* texture_generation */) {}
+void WebGPUInterfaceStub::RequestAdapter(
+ PowerPreference /* power_preference */) {}
#endif // GPU_COMMAND_BUFFER_CLIENT_WEBGPU_INTERFACE_STUB_IMPL_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/common/BUILD.gn b/chromium/gpu/command_buffer/common/BUILD.gn
index 772821840c0..8ebd59e38f2 100644
--- a/chromium/gpu/command_buffer/common/BUILD.gn
+++ b/chromium/gpu/command_buffer/common/BUILD.gn
@@ -178,6 +178,7 @@ source_set("webgpu_sources") {
sources = [
"dawn_memory_transfer_handle.h",
+ "webgpu_cmd_enums.h",
"webgpu_cmd_format.cc",
"webgpu_cmd_format.h",
"webgpu_cmd_format_autogen.h",
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 c540b41d9cf..d180e54b6db 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_format_autogen.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -12401,6 +12401,84 @@ static_assert(offsetof(DispatchComputeIndirect, header) == 0,
static_assert(offsetof(DispatchComputeIndirect, offset) == 4,
"offset of DispatchComputeIndirect offset should be 4");
+struct DrawArraysIndirect {
+ typedef DrawArraysIndirect ValueType;
+ static const CommandId kCmdId = kDrawArraysIndirect;
+ static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(2);
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
+ }
+
+ void SetHeader() { header.SetCmd<ValueType>(); }
+
+ void Init(GLenum _mode, GLuint _offset) {
+ SetHeader();
+ mode = _mode;
+ offset = _offset;
+ }
+
+ void* Set(void* cmd, GLenum _mode, GLuint _offset) {
+ static_cast<ValueType*>(cmd)->Init(_mode, _offset);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t mode;
+ uint32_t offset;
+};
+
+static_assert(sizeof(DrawArraysIndirect) == 12,
+ "size of DrawArraysIndirect should be 12");
+static_assert(offsetof(DrawArraysIndirect, header) == 0,
+ "offset of DrawArraysIndirect header should be 0");
+static_assert(offsetof(DrawArraysIndirect, mode) == 4,
+ "offset of DrawArraysIndirect mode should be 4");
+static_assert(offsetof(DrawArraysIndirect, offset) == 8,
+ "offset of DrawArraysIndirect offset should be 8");
+
+struct DrawElementsIndirect {
+ typedef DrawElementsIndirect ValueType;
+ static const CommandId kCmdId = kDrawElementsIndirect;
+ static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(2);
+
+ static uint32_t ComputeSize() {
+ return static_cast<uint32_t>(sizeof(ValueType)); // NOLINT
+ }
+
+ void SetHeader() { header.SetCmd<ValueType>(); }
+
+ void Init(GLenum _mode, GLenum _type, GLuint _offset) {
+ SetHeader();
+ mode = _mode;
+ type = _type;
+ offset = _offset;
+ }
+
+ void* Set(void* cmd, GLenum _mode, GLenum _type, GLuint _offset) {
+ static_cast<ValueType*>(cmd)->Init(_mode, _type, _offset);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t mode;
+ uint32_t type;
+ uint32_t offset;
+};
+
+static_assert(sizeof(DrawElementsIndirect) == 16,
+ "size of DrawElementsIndirect should be 16");
+static_assert(offsetof(DrawElementsIndirect, header) == 0,
+ "offset of DrawElementsIndirect header should be 0");
+static_assert(offsetof(DrawElementsIndirect, mode) == 4,
+ "offset of DrawElementsIndirect mode should be 4");
+static_assert(offsetof(DrawElementsIndirect, type) == 8,
+ "offset of DrawElementsIndirect type should be 8");
+static_assert(offsetof(DrawElementsIndirect, offset) == 12,
+ "offset of DrawElementsIndirect offset should be 12");
+
struct GetProgramInterfaceiv {
typedef GetProgramInterfaceiv ValueType;
static const CommandId kCmdId = kGetProgramInterfaceiv;
@@ -16436,6 +16514,39 @@ static_assert(offsetof(ProgramPathFragmentInputGenCHROMIUM,
"offset of ProgramPathFragmentInputGenCHROMIUM coeffs_shm_offset "
"should be 24");
+struct ContextVisibilityHintCHROMIUM {
+ typedef ContextVisibilityHintCHROMIUM ValueType;
+ static const CommandId kCmdId = kContextVisibilityHintCHROMIUM;
+ static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t 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(GLboolean _visibility) {
+ SetHeader();
+ visibility = _visibility;
+ }
+
+ void* Set(void* cmd, GLboolean _visibility) {
+ static_cast<ValueType*>(cmd)->Init(_visibility);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t visibility;
+};
+
+static_assert(sizeof(ContextVisibilityHintCHROMIUM) == 8,
+ "size of ContextVisibilityHintCHROMIUM should be 8");
+static_assert(offsetof(ContextVisibilityHintCHROMIUM, header) == 0,
+ "offset of ContextVisibilityHintCHROMIUM header should be 0");
+static_assert(offsetof(ContextVisibilityHintCHROMIUM, visibility) == 4,
+ "offset of ContextVisibilityHintCHROMIUM visibility should be 4");
+
struct CoverageModulationCHROMIUM {
typedef CoverageModulationCHROMIUM ValueType;
static const CommandId kCmdId = kCoverageModulationCHROMIUM;
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 92aba0285ff..314e2a7bfbb 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
@@ -4153,6 +4153,31 @@ TEST_F(GLES2FormatTest, DispatchComputeIndirect) {
CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
+TEST_F(GLES2FormatTest, DrawArraysIndirect) {
+ cmds::DrawArraysIndirect& cmd = *GetBufferAs<cmds::DrawArraysIndirect>();
+ void* next_cmd =
+ cmd.Set(&cmd, static_cast<GLenum>(11), static_cast<GLuint>(12));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DrawArraysIndirect::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
+ EXPECT_EQ(static_cast<GLuint>(12), cmd.offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
+TEST_F(GLES2FormatTest, DrawElementsIndirect) {
+ cmds::DrawElementsIndirect& cmd = *GetBufferAs<cmds::DrawElementsIndirect>();
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11),
+ static_cast<GLenum>(12), static_cast<GLuint>(13));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::DrawElementsIndirect::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLenum>(11), cmd.mode);
+ EXPECT_EQ(static_cast<GLenum>(12), cmd.type);
+ EXPECT_EQ(static_cast<GLuint>(13), cmd.offset);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
TEST_F(GLES2FormatTest, GetProgramInterfaceiv) {
cmds::GetProgramInterfaceiv& cmd =
*GetBufferAs<cmds::GetProgramInterfaceiv>();
@@ -5400,6 +5425,17 @@ TEST_F(GLES2FormatTest, ProgramPathFragmentInputGenCHROMIUM) {
CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
+TEST_F(GLES2FormatTest, ContextVisibilityHintCHROMIUM) {
+ cmds::ContextVisibilityHintCHROMIUM& cmd =
+ *GetBufferAs<cmds::ContextVisibilityHintCHROMIUM>();
+ void* next_cmd = cmd.Set(&cmd, static_cast<GLboolean>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::ContextVisibilityHintCHROMIUM::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<GLboolean>(11), cmd.visibility);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
TEST_F(GLES2FormatTest, CoverageModulationCHROMIUM) {
cmds::CoverageModulationCHROMIUM& cmd =
*GetBufferAs<cmds::CoverageModulationCHROMIUM>();
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 5b3e2e69514..456a345b568 100644
--- a/chromium/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
+++ b/chromium/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -264,104 +264,107 @@
OP(BindImageTexture) /* 505 */ \
OP(DispatchCompute) /* 506 */ \
OP(DispatchComputeIndirect) /* 507 */ \
- OP(GetProgramInterfaceiv) /* 508 */ \
- OP(GetProgramResourceIndex) /* 509 */ \
- OP(GetProgramResourceName) /* 510 */ \
- OP(GetProgramResourceiv) /* 511 */ \
- OP(GetProgramResourceLocation) /* 512 */ \
- OP(MemoryBarrierEXT) /* 513 */ \
- OP(MemoryBarrierByRegion) /* 514 */ \
- OP(SwapBuffers) /* 515 */ \
- OP(GetMaxValueInBufferCHROMIUM) /* 516 */ \
- OP(EnableFeatureCHROMIUM) /* 517 */ \
- OP(MapBufferRange) /* 518 */ \
- OP(UnmapBuffer) /* 519 */ \
- OP(FlushMappedBufferRange) /* 520 */ \
- OP(ResizeCHROMIUM) /* 521 */ \
- OP(GetRequestableExtensionsCHROMIUM) /* 522 */ \
- OP(RequestExtensionCHROMIUM) /* 523 */ \
- OP(GetProgramInfoCHROMIUM) /* 524 */ \
- OP(GetUniformBlocksCHROMIUM) /* 525 */ \
- OP(GetTransformFeedbackVaryingsCHROMIUM) /* 526 */ \
- OP(GetUniformsES3CHROMIUM) /* 527 */ \
- OP(DescheduleUntilFinishedCHROMIUM) /* 528 */ \
- OP(GetTranslatedShaderSourceANGLE) /* 529 */ \
- OP(PostSubBufferCHROMIUM) /* 530 */ \
- OP(CopyTextureCHROMIUM) /* 531 */ \
- OP(CopySubTextureCHROMIUM) /* 532 */ \
- OP(DrawArraysInstancedANGLE) /* 533 */ \
- OP(DrawElementsInstancedANGLE) /* 534 */ \
- OP(VertexAttribDivisorANGLE) /* 535 */ \
- OP(ProduceTextureDirectCHROMIUMImmediate) /* 536 */ \
- OP(CreateAndConsumeTextureINTERNALImmediate) /* 537 */ \
- OP(BindUniformLocationCHROMIUMBucket) /* 538 */ \
- OP(BindTexImage2DCHROMIUM) /* 539 */ \
- OP(BindTexImage2DWithInternalformatCHROMIUM) /* 540 */ \
- OP(ReleaseTexImage2DCHROMIUM) /* 541 */ \
- OP(TraceBeginCHROMIUM) /* 542 */ \
- OP(TraceEndCHROMIUM) /* 543 */ \
- OP(DiscardFramebufferEXTImmediate) /* 544 */ \
- OP(LoseContextCHROMIUM) /* 545 */ \
- OP(UnpremultiplyAndDitherCopyCHROMIUM) /* 546 */ \
- OP(DrawBuffersEXTImmediate) /* 547 */ \
- OP(DiscardBackbufferCHROMIUM) /* 548 */ \
- OP(ScheduleOverlayPlaneCHROMIUM) /* 549 */ \
- OP(ScheduleCALayerSharedStateCHROMIUM) /* 550 */ \
- OP(ScheduleCALayerCHROMIUM) /* 551 */ \
- OP(ScheduleCALayerInUseQueryCHROMIUMImmediate) /* 552 */ \
- OP(CommitOverlayPlanesCHROMIUM) /* 553 */ \
- OP(FlushDriverCachesCHROMIUM) /* 554 */ \
- OP(ScheduleDCLayerCHROMIUM) /* 555 */ \
- OP(SetActiveURLCHROMIUM) /* 556 */ \
- OP(MatrixLoadfCHROMIUMImmediate) /* 557 */ \
- OP(MatrixLoadIdentityCHROMIUM) /* 558 */ \
- OP(GenPathsCHROMIUM) /* 559 */ \
- OP(DeletePathsCHROMIUM) /* 560 */ \
- OP(IsPathCHROMIUM) /* 561 */ \
- OP(PathCommandsCHROMIUM) /* 562 */ \
- OP(PathParameterfCHROMIUM) /* 563 */ \
- OP(PathParameteriCHROMIUM) /* 564 */ \
- OP(PathStencilFuncCHROMIUM) /* 565 */ \
- OP(StencilFillPathCHROMIUM) /* 566 */ \
- OP(StencilStrokePathCHROMIUM) /* 567 */ \
- OP(CoverFillPathCHROMIUM) /* 568 */ \
- OP(CoverStrokePathCHROMIUM) /* 569 */ \
- OP(StencilThenCoverFillPathCHROMIUM) /* 570 */ \
- OP(StencilThenCoverStrokePathCHROMIUM) /* 571 */ \
- OP(StencilFillPathInstancedCHROMIUM) /* 572 */ \
- OP(StencilStrokePathInstancedCHROMIUM) /* 573 */ \
- OP(CoverFillPathInstancedCHROMIUM) /* 574 */ \
- OP(CoverStrokePathInstancedCHROMIUM) /* 575 */ \
- OP(StencilThenCoverFillPathInstancedCHROMIUM) /* 576 */ \
- OP(StencilThenCoverStrokePathInstancedCHROMIUM) /* 577 */ \
- OP(BindFragmentInputLocationCHROMIUMBucket) /* 578 */ \
- OP(ProgramPathFragmentInputGenCHROMIUM) /* 579 */ \
- OP(CoverageModulationCHROMIUM) /* 580 */ \
- OP(BlendBarrierKHR) /* 581 */ \
- OP(ApplyScreenSpaceAntialiasingCHROMIUM) /* 582 */ \
- OP(BindFragDataLocationIndexedEXTBucket) /* 583 */ \
- OP(BindFragDataLocationEXTBucket) /* 584 */ \
- OP(GetFragDataIndexEXT) /* 585 */ \
- OP(UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate) /* 586 */ \
- OP(OverlayPromotionHintCHROMIUM) /* 587 */ \
- OP(SwapBuffersWithBoundsCHROMIUMImmediate) /* 588 */ \
- OP(SetDrawRectangleCHROMIUM) /* 589 */ \
- OP(SetEnableDCLayersCHROMIUM) /* 590 */ \
- OP(InitializeDiscardableTextureCHROMIUM) /* 591 */ \
- OP(UnlockDiscardableTextureCHROMIUM) /* 592 */ \
- OP(LockDiscardableTextureCHROMIUM) /* 593 */ \
- OP(TexStorage2DImageCHROMIUM) /* 594 */ \
- OP(SetColorSpaceMetadataCHROMIUM) /* 595 */ \
- OP(WindowRectanglesEXTImmediate) /* 596 */ \
- OP(CreateGpuFenceINTERNAL) /* 597 */ \
- OP(WaitGpuFenceCHROMIUM) /* 598 */ \
- OP(DestroyGpuFenceCHROMIUM) /* 599 */ \
- OP(SetReadbackBufferShadowAllocationINTERNAL) /* 600 */ \
- OP(FramebufferTextureMultiviewOVR) /* 601 */ \
- OP(MaxShaderCompilerThreadsKHR) /* 602 */ \
- OP(CreateAndTexStorage2DSharedImageINTERNALImmediate) /* 603 */ \
- OP(BeginSharedImageAccessDirectCHROMIUM) /* 604 */ \
- OP(EndSharedImageAccessDirectCHROMIUM) /* 605 */
+ OP(DrawArraysIndirect) /* 508 */ \
+ OP(DrawElementsIndirect) /* 509 */ \
+ OP(GetProgramInterfaceiv) /* 510 */ \
+ OP(GetProgramResourceIndex) /* 511 */ \
+ OP(GetProgramResourceName) /* 512 */ \
+ OP(GetProgramResourceiv) /* 513 */ \
+ OP(GetProgramResourceLocation) /* 514 */ \
+ OP(MemoryBarrierEXT) /* 515 */ \
+ OP(MemoryBarrierByRegion) /* 516 */ \
+ OP(SwapBuffers) /* 517 */ \
+ OP(GetMaxValueInBufferCHROMIUM) /* 518 */ \
+ OP(EnableFeatureCHROMIUM) /* 519 */ \
+ OP(MapBufferRange) /* 520 */ \
+ OP(UnmapBuffer) /* 521 */ \
+ OP(FlushMappedBufferRange) /* 522 */ \
+ OP(ResizeCHROMIUM) /* 523 */ \
+ OP(GetRequestableExtensionsCHROMIUM) /* 524 */ \
+ OP(RequestExtensionCHROMIUM) /* 525 */ \
+ OP(GetProgramInfoCHROMIUM) /* 526 */ \
+ OP(GetUniformBlocksCHROMIUM) /* 527 */ \
+ OP(GetTransformFeedbackVaryingsCHROMIUM) /* 528 */ \
+ OP(GetUniformsES3CHROMIUM) /* 529 */ \
+ OP(DescheduleUntilFinishedCHROMIUM) /* 530 */ \
+ OP(GetTranslatedShaderSourceANGLE) /* 531 */ \
+ OP(PostSubBufferCHROMIUM) /* 532 */ \
+ OP(CopyTextureCHROMIUM) /* 533 */ \
+ OP(CopySubTextureCHROMIUM) /* 534 */ \
+ OP(DrawArraysInstancedANGLE) /* 535 */ \
+ OP(DrawElementsInstancedANGLE) /* 536 */ \
+ OP(VertexAttribDivisorANGLE) /* 537 */ \
+ OP(ProduceTextureDirectCHROMIUMImmediate) /* 538 */ \
+ OP(CreateAndConsumeTextureINTERNALImmediate) /* 539 */ \
+ OP(BindUniformLocationCHROMIUMBucket) /* 540 */ \
+ OP(BindTexImage2DCHROMIUM) /* 541 */ \
+ OP(BindTexImage2DWithInternalformatCHROMIUM) /* 542 */ \
+ OP(ReleaseTexImage2DCHROMIUM) /* 543 */ \
+ OP(TraceBeginCHROMIUM) /* 544 */ \
+ OP(TraceEndCHROMIUM) /* 545 */ \
+ OP(DiscardFramebufferEXTImmediate) /* 546 */ \
+ OP(LoseContextCHROMIUM) /* 547 */ \
+ OP(UnpremultiplyAndDitherCopyCHROMIUM) /* 548 */ \
+ OP(DrawBuffersEXTImmediate) /* 549 */ \
+ OP(DiscardBackbufferCHROMIUM) /* 550 */ \
+ OP(ScheduleOverlayPlaneCHROMIUM) /* 551 */ \
+ OP(ScheduleCALayerSharedStateCHROMIUM) /* 552 */ \
+ OP(ScheduleCALayerCHROMIUM) /* 553 */ \
+ OP(ScheduleCALayerInUseQueryCHROMIUMImmediate) /* 554 */ \
+ OP(CommitOverlayPlanesCHROMIUM) /* 555 */ \
+ OP(FlushDriverCachesCHROMIUM) /* 556 */ \
+ OP(ScheduleDCLayerCHROMIUM) /* 557 */ \
+ OP(SetActiveURLCHROMIUM) /* 558 */ \
+ OP(MatrixLoadfCHROMIUMImmediate) /* 559 */ \
+ OP(MatrixLoadIdentityCHROMIUM) /* 560 */ \
+ OP(GenPathsCHROMIUM) /* 561 */ \
+ OP(DeletePathsCHROMIUM) /* 562 */ \
+ OP(IsPathCHROMIUM) /* 563 */ \
+ OP(PathCommandsCHROMIUM) /* 564 */ \
+ OP(PathParameterfCHROMIUM) /* 565 */ \
+ OP(PathParameteriCHROMIUM) /* 566 */ \
+ OP(PathStencilFuncCHROMIUM) /* 567 */ \
+ OP(StencilFillPathCHROMIUM) /* 568 */ \
+ OP(StencilStrokePathCHROMIUM) /* 569 */ \
+ OP(CoverFillPathCHROMIUM) /* 570 */ \
+ OP(CoverStrokePathCHROMIUM) /* 571 */ \
+ OP(StencilThenCoverFillPathCHROMIUM) /* 572 */ \
+ OP(StencilThenCoverStrokePathCHROMIUM) /* 573 */ \
+ OP(StencilFillPathInstancedCHROMIUM) /* 574 */ \
+ OP(StencilStrokePathInstancedCHROMIUM) /* 575 */ \
+ OP(CoverFillPathInstancedCHROMIUM) /* 576 */ \
+ OP(CoverStrokePathInstancedCHROMIUM) /* 577 */ \
+ OP(StencilThenCoverFillPathInstancedCHROMIUM) /* 578 */ \
+ OP(StencilThenCoverStrokePathInstancedCHROMIUM) /* 579 */ \
+ OP(BindFragmentInputLocationCHROMIUMBucket) /* 580 */ \
+ OP(ProgramPathFragmentInputGenCHROMIUM) /* 581 */ \
+ OP(ContextVisibilityHintCHROMIUM) /* 582 */ \
+ OP(CoverageModulationCHROMIUM) /* 583 */ \
+ OP(BlendBarrierKHR) /* 584 */ \
+ OP(ApplyScreenSpaceAntialiasingCHROMIUM) /* 585 */ \
+ OP(BindFragDataLocationIndexedEXTBucket) /* 586 */ \
+ OP(BindFragDataLocationEXTBucket) /* 587 */ \
+ OP(GetFragDataIndexEXT) /* 588 */ \
+ OP(UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate) /* 589 */ \
+ OP(OverlayPromotionHintCHROMIUM) /* 590 */ \
+ OP(SwapBuffersWithBoundsCHROMIUMImmediate) /* 591 */ \
+ OP(SetDrawRectangleCHROMIUM) /* 592 */ \
+ OP(SetEnableDCLayersCHROMIUM) /* 593 */ \
+ OP(InitializeDiscardableTextureCHROMIUM) /* 594 */ \
+ OP(UnlockDiscardableTextureCHROMIUM) /* 595 */ \
+ OP(LockDiscardableTextureCHROMIUM) /* 596 */ \
+ OP(TexStorage2DImageCHROMIUM) /* 597 */ \
+ OP(SetColorSpaceMetadataCHROMIUM) /* 598 */ \
+ OP(WindowRectanglesEXTImmediate) /* 599 */ \
+ OP(CreateGpuFenceINTERNAL) /* 600 */ \
+ OP(WaitGpuFenceCHROMIUM) /* 601 */ \
+ OP(DestroyGpuFenceCHROMIUM) /* 602 */ \
+ OP(SetReadbackBufferShadowAllocationINTERNAL) /* 603 */ \
+ OP(FramebufferTextureMultiviewOVR) /* 604 */ \
+ OP(MaxShaderCompilerThreadsKHR) /* 605 */ \
+ OP(CreateAndTexStorage2DSharedImageINTERNALImmediate) /* 606 */ \
+ OP(BeginSharedImageAccessDirectCHROMIUM) /* 607 */ \
+ OP(EndSharedImageAccessDirectCHROMIUM) /* 608 */
enum CommandId {
kOneBeforeStartPoint =
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 b2f6929f5ff..82920a6c65a 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
@@ -26,7 +26,7 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
},
{
0x00000001,
- "GL_SYNC_FLUSH_COMMANDS_BIT_APPLE",
+ "GL_SUBGROUP_FEATURE_BASIC_BIT_KHR",
},
{
0x00000002,
@@ -34,7 +34,7 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
},
{
0x00000004,
- "GL_GEOMETRY_SHADER_BIT_OES",
+ "GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR",
},
{
0x00000008,
@@ -42,19 +42,19 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
},
{
0x00000010,
- "GL_TESS_EVALUATION_SHADER_BIT_OES",
+ "GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR",
},
{
0x00000020,
- "GL_COLOR_BUFFER_BIT5_QCOM",
+ "GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR",
},
{
0x00000040,
- "GL_COLOR_BUFFER_BIT6_QCOM",
+ "GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR",
},
{
0x00000080,
- "GL_COLOR_BUFFER_BIT7_QCOM",
+ "GL_SUBGROUP_FEATURE_QUAD_BIT_KHR",
},
{
0x00000100,
@@ -2097,6 +2097,10 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
"GL_VERTEX_ATTRIB_ARRAY_POINTER",
},
{
+ 0x864F,
+ "GL_DEPTH_CLAMP_EXT",
+ },
+ {
0x86A1,
"GL_TEXTURE_COMPRESSED",
},
@@ -3977,6 +3981,70 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
"GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET",
},
{
+ 0x8E60,
+ "GL_MAX_MESH_UNIFORM_BLOCKS_NV",
+ },
+ {
+ 0x8E61,
+ "GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV",
+ },
+ {
+ 0x8E62,
+ "GL_MAX_MESH_IMAGE_UNIFORMS_NV",
+ },
+ {
+ 0x8E63,
+ "GL_MAX_MESH_UNIFORM_COMPONENTS_NV",
+ },
+ {
+ 0x8E64,
+ "GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV",
+ },
+ {
+ 0x8E65,
+ "GL_MAX_MESH_ATOMIC_COUNTERS_NV",
+ },
+ {
+ 0x8E66,
+ "GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV",
+ },
+ {
+ 0x8E67,
+ "GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV",
+ },
+ {
+ 0x8E68,
+ "GL_MAX_TASK_UNIFORM_BLOCKS_NV",
+ },
+ {
+ 0x8E69,
+ "GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV",
+ },
+ {
+ 0x8E6A,
+ "GL_MAX_TASK_IMAGE_UNIFORMS_NV",
+ },
+ {
+ 0x8E6B,
+ "GL_MAX_TASK_UNIFORM_COMPONENTS_NV",
+ },
+ {
+ 0x8E6C,
+ "GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV",
+ },
+ {
+ 0x8E6D,
+ "GL_MAX_TASK_ATOMIC_COUNTERS_NV",
+ },
+ {
+ 0x8E6E,
+ "GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV",
+ },
+ {
+ 0x8E6F,
+ "GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV",
+ },
+ {
0x8E72,
"GL_PATCH_VERTICES_OES",
},
@@ -4261,6 +4329,10 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
"GL_PERFMON_GLOBAL_MODE_QCOM",
},
{
+ 0x8FA1,
+ "GL_MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM",
+ },
+ {
0x8FB0,
"GL_BINNING_CONTROL_HINT_QCOM",
},
@@ -5637,6 +5709,10 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
"GL_FRAGMENT_COVERAGE_COLOR_NV",
},
{
+ 0x92DF,
+ "GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV",
+ },
+ {
0x92E0,
"GL_DEBUG_OUTPUT_KHR",
},
@@ -6037,6 +6113,10 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
"GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV",
},
{
+ 0x937F,
+ "GL_REPRESENTATIVE_FRAGMENT_TEST_NV",
+ },
+ {
0x9380,
"GL_NUM_SAMPLE_COUNTS",
},
@@ -6333,6 +6413,66 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
"GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT",
},
{
+ 0x9532,
+ "GL_SUBGROUP_SIZE_KHR",
+ },
+ {
+ 0x9533,
+ "GL_SUBGROUP_SUPPORTED_STAGES_KHR",
+ },
+ {
+ 0x9534,
+ "GL_SUBGROUP_SUPPORTED_FEATURES_KHR",
+ },
+ {
+ 0x9535,
+ "GL_SUBGROUP_QUAD_ALL_STAGES_KHR",
+ },
+ {
+ 0x9536,
+ "GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV",
+ },
+ {
+ 0x9537,
+ "GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV",
+ },
+ {
+ 0x9538,
+ "GL_MAX_MESH_OUTPUT_VERTICES_NV",
+ },
+ {
+ 0x9539,
+ "GL_MAX_MESH_OUTPUT_PRIMITIVES_NV",
+ },
+ {
+ 0x953A,
+ "GL_MAX_TASK_OUTPUT_COUNT_NV",
+ },
+ {
+ 0x953B,
+ "GL_MAX_MESH_WORK_GROUP_SIZE_NV",
+ },
+ {
+ 0x953C,
+ "GL_MAX_TASK_WORK_GROUP_SIZE_NV",
+ },
+ {
+ 0x953D,
+ "GL_MAX_DRAW_MESH_TASKS_COUNT_NV",
+ },
+ {
+ 0x953E,
+ "GL_MESH_WORK_GROUP_SIZE_NV",
+ },
+ {
+ 0x953F,
+ "GL_TASK_WORK_GROUP_SIZE_NV",
+ },
+ {
+ 0x9543,
+ "GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV",
+ },
+ {
0x954D,
"GL_CONSERVATIVE_RASTER_MODE_NV",
},
@@ -6349,6 +6489,126 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
"GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV",
},
{
+ 0x9555,
+ "GL_SCISSOR_TEST_EXCLUSIVE_NV",
+ },
+ {
+ 0x9556,
+ "GL_SCISSOR_BOX_EXCLUSIVE_NV",
+ },
+ {
+ 0x9557,
+ "GL_MAX_MESH_VIEWS_NV",
+ },
+ {
+ 0x9559,
+ "GL_MESH_SHADER_NV",
+ },
+ {
+ 0x955A,
+ "GL_TASK_SHADER_NV",
+ },
+ {
+ 0x955B,
+ "GL_SHADING_RATE_IMAGE_BINDING_NV",
+ },
+ {
+ 0x955C,
+ "GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV",
+ },
+ {
+ 0x955D,
+ "GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV",
+ },
+ {
+ 0x955E,
+ "GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV",
+ },
+ {
+ 0x955F,
+ "GL_MAX_COARSE_FRAGMENT_SAMPLES_NV",
+ },
+ {
+ 0x9563,
+ "GL_SHADING_RATE_IMAGE_NV",
+ },
+ {
+ 0x9564,
+ "GL_SHADING_RATE_NO_INVOCATIONS_NV",
+ },
+ {
+ 0x9565,
+ "GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV",
+ },
+ {
+ 0x9566,
+ "GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV",
+ },
+ {
+ 0x9567,
+ "GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV",
+ },
+ {
+ 0x9568,
+ "GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV",
+ },
+ {
+ 0x9569,
+ "GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV",
+ },
+ {
+ 0x956A,
+ "GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV",
+ },
+ {
+ 0x956B,
+ "GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV",
+ },
+ {
+ 0x956C,
+ "GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV",
+ },
+ {
+ 0x956D,
+ "GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV",
+ },
+ {
+ 0x956E,
+ "GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV",
+ },
+ {
+ 0x956F,
+ "GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV",
+ },
+ {
+ 0x9579,
+ "GL_MESH_VERTICES_OUT_NV",
+ },
+ {
+ 0x957A,
+ "GL_MESH_PRIMITIVES_OUT_NV",
+ },
+ {
+ 0x957B,
+ "GL_MESH_OUTPUT_TYPE_NV",
+ },
+ {
+ 0x957C,
+ "GL_MESH_SUBROUTINE_NV",
+ },
+ {
+ 0x957D,
+ "GL_TASK_SUBROUTINE_NV",
+ },
+ {
+ 0x957E,
+ "GL_MESH_SUBROUTINE_UNIFORM_NV",
+ },
+ {
+ 0x957F,
+ "GL_TASK_SUBROUTINE_UNIFORM_NV",
+ },
+ {
0x9580,
"GL_TEXTURE_TILING_EXT",
},
@@ -6461,6 +6721,90 @@ static const GLES2Util::EnumToString enum_to_string_table[] = {
"GL_PROTECTED_MEMORY_OBJECT_EXT",
},
{
+ 0x959C,
+ "GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV",
+ },
+ {
+ 0x959D,
+ "GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV",
+ },
+ {
+ 0x959E,
+ "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV",
+ },
+ {
+ 0x959F,
+ "GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV",
+ },
+ {
+ 0x95A0,
+ "GL_REFERENCED_BY_MESH_SHADER_NV",
+ },
+ {
+ 0x95A1,
+ "GL_REFERENCED_BY_TASK_SHADER_NV",
+ },
+ {
+ 0x95A2,
+ "GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV",
+ },
+ {
+ 0x95A3,
+ "GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV",
+ },
+ {
+ 0x95A4,
+ "GL_ATTACHED_MEMORY_OBJECT_NV",
+ },
+ {
+ 0x95A5,
+ "GL_ATTACHED_MEMORY_OFFSET_NV",
+ },
+ {
+ 0x95A6,
+ "GL_MEMORY_ATTACHABLE_ALIGNMENT_NV",
+ },
+ {
+ 0x95A7,
+ "GL_MEMORY_ATTACHABLE_SIZE_NV",
+ },
+ {
+ 0x95A8,
+ "GL_MEMORY_ATTACHABLE_NV",
+ },
+ {
+ 0x95A9,
+ "GL_DETACHED_MEMORY_INCARNATION_NV",
+ },
+ {
+ 0x95AA,
+ "GL_DETACHED_TEXTURES_NV",
+ },
+ {
+ 0x95AB,
+ "GL_DETACHED_BUFFERS_NV",
+ },
+ {
+ 0x95AC,
+ "GL_MAX_DETACHED_TEXTURES_NV",
+ },
+ {
+ 0x95AD,
+ "GL_MAX_DETACHED_BUFFERS_NV",
+ },
+ {
+ 0x95AE,
+ "GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV",
+ },
+ {
+ 0x95AF,
+ "GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV",
+ },
+ {
+ 0x95B0,
+ "GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV",
+ },
+ {
0x9630,
"GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR",
},
diff --git a/chromium/gpu/command_buffer/common/gpu_memory_buffer_support.cc b/chromium/gpu/command_buffer/common/gpu_memory_buffer_support.cc
index 002e93b2759..fa6f40c260c 100644
--- a/chromium/gpu/command_buffer/common/gpu_memory_buffer_support.cc
+++ b/chromium/gpu/command_buffer/common/gpu_memory_buffer_support.cc
@@ -14,44 +14,6 @@
namespace gpu {
-unsigned InternalFormatForGpuMemoryBufferFormat(gfx::BufferFormat format) {
- switch (format) {
- case gfx::BufferFormat::R_8:
- return GL_RED_EXT;
- case gfx::BufferFormat::R_16:
- return GL_R16_EXT;
- case gfx::BufferFormat::RG_88:
- return GL_RG_EXT;
- case gfx::BufferFormat::BGR_565:
- return GL_RGB;
- case gfx::BufferFormat::RGBA_4444:
- return GL_RGBA;
- case gfx::BufferFormat::RGBX_8888:
- return GL_RGB;
- case gfx::BufferFormat::RGBA_8888:
- return GL_RGBA;
- case gfx::BufferFormat::BGRX_8888:
- return GL_RGB;
- case gfx::BufferFormat::BGRX_1010102:
- return GL_RGB10_A2_EXT;
- case gfx::BufferFormat::RGBX_1010102:
- return GL_RGB10_A2_EXT;
- case gfx::BufferFormat::BGRA_8888:
- return GL_BGRA_EXT;
- case gfx::BufferFormat::RGBA_F16:
- return GL_RGBA;
- case gfx::BufferFormat::YVU_420:
- return GL_RGB_YCRCB_420_CHROMIUM;
- case gfx::BufferFormat::YUV_420_BIPLANAR:
- return GL_RGB_YCBCR_420V_CHROMIUM;
- case gfx::BufferFormat::P010:
- return GL_RGB_YCBCR_P010_CHROMIUM;
- default:
- NOTREACHED();
- return 0;
- }
-}
-
bool IsImageFromGpuMemoryBufferFormatSupported(
gfx::BufferFormat format,
const gpu::Capabilities& capabilities) {
diff --git a/chromium/gpu/command_buffer/common/gpu_memory_buffer_support.h b/chromium/gpu/command_buffer/common/gpu_memory_buffer_support.h
index c14b9e077a5..7d51d660af3 100644
--- a/chromium/gpu/command_buffer/common/gpu_memory_buffer_support.h
+++ b/chromium/gpu/command_buffer/common/gpu_memory_buffer_support.h
@@ -39,10 +39,6 @@ struct GpuMemoryBufferFormatSet {
struct Capabilities;
-// Returns the GL internalformat that is compatible with |format|.
-GPU_EXPORT unsigned InternalFormatForGpuMemoryBufferFormat(
- gfx::BufferFormat format);
-
// Returns true if creating an image for a GpuMemoryBuffer with |format| is
// supported by |capabilities|.
GPU_EXPORT bool IsImageFromGpuMemoryBufferFormatSupported(
diff --git a/chromium/gpu/command_buffer/common/skia_utils.cc b/chromium/gpu/command_buffer/common/skia_utils.cc
index 98b036f57eb..e5cbb0b86f9 100644
--- a/chromium/gpu/command_buffer/common/skia_utils.cc
+++ b/chromium/gpu/command_buffer/common/skia_utils.cc
@@ -134,7 +134,12 @@ void DetermineGrCacheLimitsFromAvailableMemory(
size_t* max_resource_cache_bytes,
size_t* max_glyph_cache_texture_bytes) {
// Default limits.
+#if defined(OS_FUCHSIA)
+ // Reduce protected budget on fuchsia due to https://fxb/36620.
+ constexpr size_t kMaxGaneshResourceCacheBytes = 24 * 1024 * 1024;
+#else
constexpr size_t kMaxGaneshResourceCacheBytes = 96 * 1024 * 1024;
+#endif // defined(OS_FUCHSIA)
constexpr size_t kMaxDefaultGlyphCacheTextureBytes = 2048 * 1024 * 4;
*max_resource_cache_bytes = kMaxGaneshResourceCacheBytes;
@@ -144,7 +149,12 @@ void DetermineGrCacheLimitsFromAvailableMemory(
#if !defined(OS_NACL)
// The limit of the bytes allocated toward GPU resources in the GrContext's
// GPU cache.
+#if defined(OS_FUCHSIA)
+ // Reduce protected budget on fuchsia due to https://fxb/36620.
+ constexpr size_t kMaxLowEndGaneshResourceCacheBytes = 24 * 1024 * 1024;
+#else
constexpr size_t kMaxLowEndGaneshResourceCacheBytes = 48 * 1024 * 1024;
+#endif // defined(OS_FUCHSIA)
constexpr size_t kMaxHighEndGaneshResourceCacheBytes = 256 * 1024 * 1024;
// Limits for glyph cache textures.
constexpr size_t kMaxLowEndGlyphCacheTextureBytes = 1024 * 512 * 4;
diff --git a/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h b/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h
new file mode 100644
index 00000000000..2f5c970ba2e
--- /dev/null
+++ b/chromium/gpu/command_buffer/common/webgpu_cmd_enums.h
@@ -0,0 +1,25 @@
+// Copyright (c) 2019 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_WEBGPU_CMD_ENUMS_H_
+#define GPU_COMMAND_BUFFER_COMMON_WEBGPU_CMD_ENUMS_H_
+
+namespace gpu {
+namespace webgpu {
+
+enum class PowerPreference : uint32_t {
+ kLowPower,
+ kHighPerformance,
+ kNumPowerPreferences
+};
+
+// These numbers must not change
+static_assert(static_cast<int>(PowerPreference::kLowPower) == 0,
+ "kLowPower should equal 0");
+static_assert(static_cast<int>(PowerPreference::kHighPerformance) == 1,
+ "kHighPerformance should equal 1");
+
+} // namespace webgpu
+} // namespace gpu
+#endif // GPU_COMMAND_BUFFER_COMMON_WEBGPU_CMD_ENUMS_H_
diff --git a/chromium/gpu/command_buffer/common/webgpu_cmd_format_autogen.h b/chromium/gpu/command_buffer/common/webgpu_cmd_format_autogen.h
index 55d67cf9524..e05c017bf77 100644
--- a/chromium/gpu/command_buffer/common/webgpu_cmd_format_autogen.h
+++ b/chromium/gpu/command_buffer/common/webgpu_cmd_format_autogen.h
@@ -164,4 +164,37 @@ static_assert(offsetof(DissociateMailbox, texture_id) == 4,
static_assert(offsetof(DissociateMailbox, texture_generation) == 8,
"offset of DissociateMailbox texture_generation should be 8");
+struct RequestAdapter {
+ typedef RequestAdapter ValueType;
+ static const CommandId kCmdId = kRequestAdapter;
+ static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+ static const uint8_t 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(uint32_t _power_preference) {
+ SetHeader();
+ power_preference = _power_preference;
+ }
+
+ void* Set(void* cmd, uint32_t _power_preference) {
+ static_cast<ValueType*>(cmd)->Init(_power_preference);
+ return NextCmdAddress<ValueType>(cmd);
+ }
+
+ gpu::CommandHeader header;
+ uint32_t power_preference;
+};
+
+static_assert(sizeof(RequestAdapter) == 8,
+ "size of RequestAdapter should be 8");
+static_assert(offsetof(RequestAdapter, header) == 0,
+ "offset of RequestAdapter header should be 0");
+static_assert(offsetof(RequestAdapter, power_preference) == 4,
+ "offset of RequestAdapter power_preference should be 4");
+
#endif // GPU_COMMAND_BUFFER_COMMON_WEBGPU_CMD_FORMAT_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/common/webgpu_cmd_format_test_autogen.h b/chromium/gpu/command_buffer/common/webgpu_cmd_format_test_autogen.h
index 8096fe5d7ea..39f18fe8f17 100644
--- a/chromium/gpu/command_buffer/common/webgpu_cmd_format_test_autogen.h
+++ b/chromium/gpu/command_buffer/common/webgpu_cmd_format_test_autogen.h
@@ -79,4 +79,14 @@ TEST_F(WebGPUFormatTest, DissociateMailbox) {
CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
}
+TEST_F(WebGPUFormatTest, RequestAdapter) {
+ cmds::RequestAdapter& cmd = *GetBufferAs<cmds::RequestAdapter>();
+ void* next_cmd = cmd.Set(&cmd, static_cast<uint32_t>(11));
+ EXPECT_EQ(static_cast<uint32_t>(cmds::RequestAdapter::kCmdId),
+ cmd.header.command);
+ EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+ EXPECT_EQ(static_cast<uint32_t>(11), cmd.power_preference);
+ CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
#endif // GPU_COMMAND_BUFFER_COMMON_WEBGPU_CMD_FORMAT_TEST_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/common/webgpu_cmd_ids_autogen.h b/chromium/gpu/command_buffer/common/webgpu_cmd_ids_autogen.h
index ff35315d2d1..a46d5e78bcb 100644
--- a/chromium/gpu/command_buffer/common/webgpu_cmd_ids_autogen.h
+++ b/chromium/gpu/command_buffer/common/webgpu_cmd_ids_autogen.h
@@ -14,7 +14,8 @@
#define WEBGPU_COMMAND_LIST(OP) \
OP(DawnCommands) /* 256 */ \
OP(AssociateMailboxImmediate) /* 257 */ \
- OP(DissociateMailbox) /* 258 */
+ OP(DissociateMailbox) /* 258 */ \
+ OP(RequestAdapter) /* 259 */
enum CommandId {
kOneBeforeStartPoint =
diff --git a/chromium/gpu/command_buffer/gles2_cmd_buffer_functions.txt b/chromium/gpu/command_buffer/gles2_cmd_buffer_functions.txt
index 7fd3e5f64ca..d5dcb209d7f 100644
--- a/chromium/gpu/command_buffer/gles2_cmd_buffer_functions.txt
+++ b/chromium/gpu/command_buffer/gles2_cmd_buffer_functions.txt
@@ -274,6 +274,9 @@ GL_APICALL void GL_APIENTRY glBindImageTexture (GLuint unit, GLuint text
GL_APICALL void GL_APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);
GL_APICALL void GL_APIENTRY glDispatchComputeIndirect (GLintptrNotNegative offset);
+GL_APICALL void GL_APIENTRY glDrawArraysIndirect (GLenumDrawMode mode, const void* offset);
+GL_APICALL void GL_APIENTRY glDrawElementsIndirect (GLenumDrawMode mode, GLenumIndexType type, const void* offset);
+
GL_APICALL void GL_APIENTRY glGetProgramInterfaceiv (GLidProgram program, GLenum program_interface, GLenum pname, GLint* params);
GL_APICALL GLuint GL_APIENTRY glGetProgramResourceIndex (GLidProgram program, GLenum program_interface, const char* name);
GL_APICALL void GL_APIENTRY glGetProgramResourceName (GLidProgram program, GLenum program_interface, GLuint index, GLsizeiNotNegative bufsize, GLsizeiOptional* length, char* name);
@@ -362,6 +365,8 @@ GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedCHROMIU
GL_APICALL void GL_APIENTRY glBindFragmentInputLocationCHROMIUM (GLidProgram program, GLint location, const char* name);
GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenCHROMIUM (GLidProgram program, GLint location, GLenumPathFragmentInputGenMode genMode, GLint components, const GLfloat* coeffs);
+// Extension CHROMIUM_context_visibility_hint
+GL_APICALL void GL_APIENTRY glContextVisibilityHintCHROMIUM (GLboolean visibility);
// Extension CHROMIUM_framebuffer_mixed_samples
GL_APICALL void GL_APIENTRY glCoverageModulationCHROMIUM (GLenumCoverageModulationComponents components);
diff --git a/chromium/gpu/command_buffer/service/BUILD.gn b/chromium/gpu/command_buffer/service/BUILD.gn
index 93410f3ba61..c62afb23a62 100644
--- a/chromium/gpu/command_buffer/service/BUILD.gn
+++ b/chromium/gpu/command_buffer/service/BUILD.gn
@@ -252,6 +252,7 @@ target(link_target_type, "gles2_sources") {
"transform_feedback_manager.h",
"validating_abstract_texture_impl.cc",
"validating_abstract_texture_impl.h",
+ "value_validator.h",
"vertex_array_manager.cc",
"vertex_array_manager.h",
"vertex_attrib_manager.cc",
@@ -308,8 +309,7 @@ target(link_target_type, "gles2_sources") {
"//gpu/command_buffer/client",
"//gpu/command_buffer/common:gles2_utils",
"//gpu/config",
- "//gpu/ipc/common:surface_handle_type",
- "//gpu/ipc/common:vulkan_ycbcr_info",
+ "//gpu/ipc/common",
"//gpu/vulkan:buildflags",
"//third_party/angle:angle_image_util",
"//third_party/angle:commit_id",
@@ -382,9 +382,17 @@ target(link_target_type, "gles2_sources") {
sources += [
"ahardwarebuffer_utils.cc",
"ahardwarebuffer_utils.h",
+ "image_reader_gl_owner.cc",
+ "image_reader_gl_owner.h",
"shared_image_backing_factory_ahardwarebuffer.cc",
"shared_image_backing_factory_ahardwarebuffer.h",
+ "shared_image_video.cc",
+ "shared_image_video.h",
"stream_texture_shared_image_interface.h",
+ "surface_texture_gl_owner.cc",
+ "surface_texture_gl_owner.h",
+ "texture_owner.cc",
+ "texture_owner.h",
]
# TODO(cblume): http://crbug.com/911313
@@ -409,36 +417,51 @@ target(link_target_type, "gles2_sources") {
}
}
+proto_library("disk_cache_proto") {
+ sources = [
+ "disk_cache_proto.proto",
+ ]
+}
+
if (is_android) {
- component("shared_image_video") {
+ jumbo_static_library("android_texture_owner_test_support") {
+ testonly = true
sources = [
- "shared_image_video.cc",
- "shared_image_video.h",
+ "mock_abstract_texture.cc",
+ "mock_abstract_texture.h",
+ "mock_texture_owner.cc",
+ "mock_texture_owner.h",
]
- configs += [ "//gpu:gpu_gles2_implementation" ]
deps = [
- "//base",
- "//components/viz/common:resource_format_utils",
- "//components/viz/common:vulkan_context_provider",
- "//gpu/command_buffer/service:gles2_sources",
- "//gpu/command_buffer/service:service_sources",
- "//gpu/ipc/common:android_texture_owner",
- "//gpu/ipc/common:common",
+ ":gles2",
+ "//base/test:test_support",
+ "//gpu:test_support",
+ "//testing/gmock",
+ "//testing/gtest",
"//ui/gl",
- ]
- if (enable_vulkan) {
- deps += [ "//gpu/vulkan:vulkan" ]
- }
-
- visibility = [
- "//gpu/*",
- "//media/gpu:gpu",
+ "//ui/gl/init",
]
}
}
-proto_library("disk_cache_proto") {
- sources = [
- "disk_cache_proto.proto",
- ]
+if (is_android) {
+ source_set("android_texture_owner_unittests") {
+ testonly = true
+ sources = [
+ "image_reader_gl_owner_unittest.cc",
+ "surface_texture_gl_owner_unittest.cc",
+ ]
+
+ deps = [
+ ":android_texture_owner_test_support",
+ ":gles2",
+ "//base/test:test_support",
+ "//gpu:test_support",
+ "//media/base:base",
+ "//testing/gmock",
+ "//testing/gtest",
+ "//ui/gl",
+ "//ui/gl/init",
+ ]
+ }
}
diff --git a/chromium/gpu/command_buffer/service/DEPS b/chromium/gpu/command_buffer/service/DEPS
index ee6d2c147ac..1eed74db592 100644
--- a/chromium/gpu/command_buffer/service/DEPS
+++ b/chromium/gpu/command_buffer/service/DEPS
@@ -8,3 +8,9 @@ include_rules = [
"+components/viz/common/resources/resource_format_utils.h",
"+components/viz/common/resources/resource_sizes.h",
]
+
+specific_include_rules = {
+ "image_reader_gl_owner_unittest.cc": [
+ "+media/base/media_switches.h",
+ ],
+}
diff --git a/chromium/gpu/command_buffer/service/buffer_manager.cc b/chromium/gpu/command_buffer/service/buffer_manager.cc
index 979ed2dcab4..ab4c9c7f3e0 100644
--- a/chromium/gpu/command_buffer/service/buffer_manager.cc
+++ b/chromium/gpu/command_buffer/service/buffer_manager.cc
@@ -294,7 +294,7 @@ bool Buffer::GetMaxValueForRange(
// from scratch.
if (primitive_restart_enabled) {
Range disabled_range(offset, count, type, false);
- RangeToMaxValueMap::iterator it = range_set_.find(disabled_range);
+ it = range_set_.find(disabled_range);
if (it != range_set_.end() && it->second < primitive_restart_index) {
// This reuses the max value for the case where primitive
// restart is enabled.
diff --git a/chromium/gpu/command_buffer/service/context_group.cc b/chromium/gpu/command_buffer/service/context_group.cc
index 1abd4cc9bc8..6ad8895beae 100644
--- a/chromium/gpu/command_buffer/service/context_group.cc
+++ b/chromium/gpu/command_buffer/service/context_group.cc
@@ -56,6 +56,7 @@ DisallowedFeatures AdjustDisallowedFeatures(
adjusted_disallowed_features.oes_texture_float_linear = true;
adjusted_disallowed_features.ext_color_buffer_half_float = true;
adjusted_disallowed_features.oes_texture_half_float_linear = true;
+ adjusted_disallowed_features.ext_texture_filter_anisotropic = true;
adjusted_disallowed_features.ext_float_blend = true;
}
return adjusted_disallowed_features;
diff --git a/chromium/gpu/command_buffer/service/context_state.cc b/chromium/gpu/command_buffer/service/context_state.cc
index 9a6661e2185..166fc02494c 100644
--- a/chromium/gpu/command_buffer/service/context_state.cc
+++ b/chromium/gpu/command_buffer/service/context_state.cc
@@ -8,6 +8,7 @@
#include <cmath>
+#include "base/numerics/ranges.h"
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
#include "gpu/command_buffer/service/buffer_manager.h"
#include "gpu/command_buffer/service/framebuffer_manager.h"
@@ -371,7 +372,7 @@ void ContextState::RestoreUnpackState() const {
void ContextState::DoLineWidth(GLfloat width) const {
api()->glLineWidthFn(
- std::min(std::max(width, line_width_min_), line_width_max_));
+ base::ClampToRange(width, line_width_min_, line_width_max_));
}
void ContextState::RestoreBufferBindings() const {
diff --git a/chromium/gpu/command_buffer/service/decoder_client.h b/chromium/gpu/command_buffer/service/decoder_client.h
index d16d8b4bc70..158341998b6 100644
--- a/chromium/gpu/command_buffer/service/decoder_client.h
+++ b/chromium/gpu/command_buffer/service/decoder_client.h
@@ -22,6 +22,9 @@ class GPU_EXPORT DecoderClient {
// Prints a message (error/warning) to the console.
virtual void OnConsoleMessage(int32_t id, const std::string& message) = 0;
+ // Notifies the renderer process that the active GPU changed.
+ virtual void OnGpuSwitched() {}
+
// Cache a newly linked shader.
virtual void CacheShader(const std::string& key,
const std::string& shader) = 0;
diff --git a/chromium/gpu/command_buffer/service/external_vk_image_backing.cc b/chromium/gpu/command_buffer/service/external_vk_image_backing.cc
index cfef5577bdf..cc0af9deea6 100644
--- a/chromium/gpu/command_buffer/service/external_vk_image_backing.cc
+++ b/chromium/gpu/command_buffer/service/external_vk_image_backing.cc
@@ -9,16 +9,19 @@
#include "base/memory/unsafe_shared_memory_region.h"
#include "base/posix/eintr_wrapper.h"
+#include "base/stl_util.h"
#include "base/system/sys_info.h"
#include "build/build_config.h"
#include "components/viz/common/resources/resource_sizes.h"
#include "gpu/command_buffer/service/external_vk_image_gl_representation.h"
#include "gpu/command_buffer/service/external_vk_image_skia_representation.h"
+#include "gpu/command_buffer/service/skia_utils.h"
#include "gpu/ipc/common/vulkan_ycbcr_info.h"
#include "gpu/vulkan/vulkan_command_buffer.h"
#include "gpu/vulkan/vulkan_command_pool.h"
#include "gpu/vulkan/vulkan_fence_helper.h"
#include "gpu/vulkan/vulkan_function_pointers.h"
+#include "gpu/vulkan/vulkan_util.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gl/buildflags.h"
#include "ui/gl/gl_context.h"
@@ -39,26 +42,42 @@ namespace gpu {
namespace {
-GrVkImageInfo CreateGrVkImageInfo(VkImage image,
- VkFormat vk_format,
- VkDeviceMemory memory,
- size_t memory_size,
- bool use_protected_memory,
- base::Optional<VulkanYCbCrInfo> ycbcr_info) {
- GrVkYcbcrConversionInfo gr_ycbcr_info{};
- if (ycbcr_info) {
- gr_ycbcr_info = GrVkYcbcrConversionInfo(
- static_cast<VkFormat>(ycbcr_info->image_format),
- ycbcr_info->external_format,
- static_cast<VkSamplerYcbcrModelConversion>(
- ycbcr_info->suggested_ycbcr_model),
- static_cast<VkSamplerYcbcrRange>(ycbcr_info->suggested_ycbcr_range),
- static_cast<VkChromaLocation>(ycbcr_info->suggested_xchroma_offset),
- static_cast<VkChromaLocation>(ycbcr_info->suggested_ychroma_offset),
- static_cast<VkFilter>(VK_FILTER_LINEAR),
- /*forceExplicitReconstruction=*/false,
- static_cast<VkFormatFeatureFlags>(ycbcr_info->format_features));
- }
+static const struct {
+ GLenum gl_format;
+ GLenum gl_type;
+ GLuint bytes_per_pixel;
+} kFormatTable[] = {
+ {GL_RGBA, GL_UNSIGNED_BYTE, 4}, // RGBA_8888
+ {GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, 2}, // RGBA_4444
+ {GL_BGRA, GL_UNSIGNED_BYTE, 4}, // BGRA_8888
+ {GL_RED, GL_UNSIGNED_BYTE, 1}, // ALPHA_8
+ {GL_RED, GL_UNSIGNED_BYTE, 1}, // LUMINANCE_8
+ {GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 2}, // RGB_565
+ {GL_BGR, GL_UNSIGNED_SHORT_5_6_5, 2}, // BGR_565
+ {GL_ZERO, GL_ZERO, 0}, // ETC1
+ {GL_RED, GL_UNSIGNED_BYTE, 1}, // RED_8
+ {GL_RG, GL_UNSIGNED_BYTE, 2}, // RG_88
+ {GL_RED, GL_HALF_FLOAT_OES, 2}, // LUMINANCE_F16
+ {GL_RGBA, GL_HALF_FLOAT_OES, 8}, // RGBA_F16
+ {GL_RED, GL_UNSIGNED_SHORT, 2}, // R16_EXT
+ {GL_RGBA, GL_UNSIGNED_BYTE, 4}, // RGBX_8888
+ {GL_BGRA, GL_UNSIGNED_BYTE, 4}, // BGRX_8888
+ {GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, 4}, // RGBX_1010102
+ {GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV, 4}, // BGRX_1010102
+ {GL_ZERO, GL_ZERO, 0}, // YVU_420
+ {GL_ZERO, GL_ZERO, 0}, // YUV_420_BIPLANAR
+ {GL_ZERO, GL_ZERO, 0}, // P010
+};
+static_assert(base::size(kFormatTable) == (viz::RESOURCE_FORMAT_MAX + 1),
+ "kFormatTable does not handle all cases.");
+
+GrVkImageInfo CreateGrVkImageInfo(
+ VkImage image,
+ VkFormat vk_format,
+ VkDeviceMemory memory,
+ size_t memory_size,
+ bool use_protected_memory,
+ const GrVkYcbcrConversionInfo& gr_ycbcr_info) {
GrVkAlloc alloc(memory, 0 /* offset */, memory_size, 0 /* flags */);
return GrVkImageInfo(
image, alloc, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_LAYOUT_UNDEFINED,
@@ -179,8 +198,7 @@ std::unique_ptr<ExternalVkImageBacking> ExternalVkImageBacking::Create(
const gfx::ColorSpace& color_space,
uint32_t usage,
base::span<const uint8_t> pixel_data,
- bool using_gmb,
- base::Optional<VulkanYCbCrInfo> ycbcr_info) {
+ bool using_gmb) {
VkDevice device =
context_state->vk_context_provider()->GetDeviceQueue()->GetVulkanDevice();
VkFormat vk_format = ToVkFormat(format);
@@ -246,7 +264,7 @@ std::unique_ptr<ExternalVkImageBacking> ExternalVkImageBacking::Create(
auto backing = base::WrapUnique(new ExternalVkImageBacking(
mailbox, format, size, color_space, usage, context_state, image, memory,
- requirements.size, vk_format, command_pool, ycbcr_info,
+ requirements.size, vk_format, command_pool, GrVkYcbcrConversionInfo(),
GetDawnFormat(format), mem_alloc_info.memoryTypeIndex));
if (!pixel_data.empty()) {
@@ -286,7 +304,7 @@ std::unique_ptr<ExternalVkImageBacking> ExternalVkImageBacking::CreateFromGMB(
VkImageCreateInfo vk_image_info = {VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO};
VkDeviceMemory vk_device_memory = VK_NULL_HANDLE;
VkDeviceSize memory_size = 0;
- base::Optional<gpu::VulkanYCbCrInfo> ycbcr_info;
+ base::Optional<VulkanYCbCrInfo> ycbcr_info;
if (!vulkan_implementation->CreateImageFromGpuMemoryHandle(
vk_device, std::move(handle), size, &vk_image, &vk_image_info,
@@ -303,13 +321,16 @@ std::unique_ptr<ExternalVkImageBacking> ExternalVkImageBacking::CreateFromGMB(
return nullptr;
}
- viz::ResourceFormat resource_format = viz::GetResourceFormat(buffer_format);
+ GrVkYcbcrConversionInfo gr_ycbcr_info =
+ CreateGrVkYcbcrConversionInfo(context_state->vk_context_provider()
+ ->GetDeviceQueue()
+ ->GetVulkanPhysicalDevice(),
+ vk_image_info.tiling, ycbcr_info);
return base::WrapUnique(new ExternalVkImageBacking(
- mailbox, viz::GetResourceFormat(buffer_format), size, color_space,
- usage, context_state, vk_image, vk_device_memory, memory_size,
- vk_image_info.format, command_pool, ycbcr_info,
- GetDawnFormat(resource_format), {}));
+ mailbox, resource_format, size, color_space, usage, context_state,
+ vk_image, vk_device_memory, memory_size, vk_image_info.format,
+ command_pool, gr_ycbcr_info, GetDawnFormat(resource_format), {}));
}
if (gfx::NumberOfPlanesForLinearBufferFormat(buffer_format) != 1) {
@@ -409,7 +430,7 @@ ExternalVkImageBacking::ExternalVkImageBacking(
size_t memory_size,
VkFormat vk_format,
VulkanCommandPool* command_pool,
- base::Optional<VulkanYCbCrInfo> ycbcr_info,
+ const GrVkYcbcrConversionInfo& ycbcr_info,
base::Optional<DawnTextureFormat> dawn_format,
base::Optional<uint32_t> memory_type_index)
: SharedImageBacking(mailbox,
@@ -469,6 +490,7 @@ void ExternalVkImageBacking::SetCleared() {
void ExternalVkImageBacking::Update(std::unique_ptr<gfx::GpuFence> in_fence) {
DCHECK(!in_fence);
latest_content_ = kInSharedMemory;
+ SetCleared();
}
void ExternalVkImageBacking::Destroy() {
@@ -487,7 +509,8 @@ void ExternalVkImageBacking::Destroy() {
if (texture_) {
// Ensure that a context is current before removing the ref and calling
// glDeleteTextures.
- context_state()->MakeCurrent(nullptr, true /* need_gl */);
+ if (!gl::GLContext::GetCurrent())
+ context_state()->MakeCurrent(nullptr, true /* need_gl */);
texture_->RemoveLightweightRef(have_context());
}
}
@@ -577,9 +600,17 @@ ExternalVkImageBacking::ProduceGLTexture(SharedImageManager* manager,
size().width(), size().height());
} else {
DCHECK(memory_object);
- api->glTexStorageMem2DEXTFn(GL_TEXTURE_2D, 1, internal_format,
- size().width(), size().height(),
- memory_object, 0);
+ if (internal_format == GL_BGRA8_EXT) {
+ // BGRA8 internal format is not well supported, so use RGBA8 instead.
+ api->glTexStorageMem2DEXTFn(GL_TEXTURE_2D, 1, GL_RGBA8, size().width(),
+ size().height(), memory_object, 0);
+ api->glTexParameteriFn(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_RED);
+ api->glTexParameteriFn(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_BLUE);
+ } else {
+ api->glTexStorageMem2DEXTFn(GL_TEXTURE_2D, 1, internal_format,
+ size().width(), size().height(),
+ memory_object, 0);
+ }
}
texture_ = new gles2::Texture(texture_service_id);
texture_->SetLightweightRef();
@@ -689,13 +720,17 @@ void ExternalVkImageBacking::UpdateContent(uint32_t content_flags) {
return;
}
if ((latest_content_ & kInGLTexture) && use_separate_gl_texture()) {
- CopyPixelsFromGLTexture();
+ CopyPixelsFromGLTextureToVkImage();
latest_content_ |= kInVkImage;
return;
}
} else if (content_flags == kInGLTexture) {
- // TODO(penghuang): support updating content in gl texture.
- NOTIMPLEMENTED_LOG_ONCE();
+ DCHECK(use_separate_gl_texture());
+ if (latest_content_ & kInSharedMemory) {
+ CopyPixelsFromShmToGLTexture();
+ } else if (latest_content_ & kInVkImage) {
+ NOTIMPLEMENTED_LOG_ONCE();
+ }
} else if (content_flags == kInSharedMemory) {
// TODO(penghuang): read pixels back from VkImage to shared memory GMB, if
// this feature is needed.
@@ -775,12 +810,12 @@ bool ExternalVkImageBacking::WritePixels(size_t data_size,
}
auto command_buffer = command_pool_->CreatePrimaryCommandBuffer();
- CHECK(command_buffer->Initialize());
+ CHECK(command_buffer);
{
ScopedSingleUseCommandBufferRecorder recorder(*command_buffer);
GrVkImageInfo image_info;
- bool result = backend_texture_.getVkImageInfo(&image_info);
- DCHECK(result);
+ bool success = backend_texture_.getVkImageInfo(&image_info);
+ DCHECK(success);
if (image_info.fImageLayout != VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL) {
command_buffer->TransitionImageLayout(
image_info.fImage, image_info.fImageLayout,
@@ -842,52 +877,19 @@ bool ExternalVkImageBacking::WritePixels(size_t data_size,
return true;
}
-void ExternalVkImageBacking::CopyPixelsFromGLTexture() {
+void ExternalVkImageBacking::CopyPixelsFromGLTextureToVkImage() {
DCHECK(use_separate_gl_texture());
DCHECK(texture_);
- GLenum gl_format = GL_NONE;
- GLenum gl_type = GL_NONE;
- size_t bytes_per_pixel = 0;
- switch (ToVkFormat(format())) {
- case VK_FORMAT_R8G8B8A8_UNORM:
- gl_format = GL_RGBA;
- gl_type = GL_UNSIGNED_BYTE;
- bytes_per_pixel = 4;
- break;
- case VK_FORMAT_B8G8R8A8_UNORM:
- gl_format = GL_BGRA;
- gl_type = GL_UNSIGNED_BYTE;
- bytes_per_pixel = 4;
- break;
- case VK_FORMAT_R8_UNORM:
- gl_format = GL_RED;
- gl_type = GL_UNSIGNED_BYTE;
- bytes_per_pixel = 1;
- break;
- case VK_FORMAT_R4G4B4A4_UNORM_PACK16:
- gl_format = GL_RGBA;
- gl_type = GL_UNSIGNED_SHORT_4_4_4_4;
- bytes_per_pixel = 2;
- break;
- case VK_FORMAT_R5G6B5_UNORM_PACK16:
- gl_format = GL_RGB;
- gl_type = GL_UNSIGNED_SHORT_5_6_5;
- bytes_per_pixel = 2;
- break;
- case VK_FORMAT_R16_UNORM:
- gl_format = GL_RED;
- gl_type = GL_UNSIGNED_SHORT;
- bytes_per_pixel = 2;
- break;
- case VK_FORMAT_A2B10G10R10_UNORM_PACK32:
- gl_format = GL_RGBA;
- gl_type = GL_UNSIGNED_INT_2_10_10_10_REV;
- bytes_per_pixel = 4;
- break;
- default:
- NOTREACHED() << "Not supported resource format=" << format();
- return;
+ DCHECK_GE(format(), 0);
+ DCHECK_LE(format(), viz::RESOURCE_FORMAT_MAX);
+ auto gl_format = kFormatTable[format()].gl_format;
+ auto gl_type = kFormatTable[format()].gl_type;
+ auto bytes_per_pixel = kFormatTable[format()].bytes_per_pixel;
+
+ if (gl_format == GL_ZERO) {
+ NOTREACHED() << "Not supported resource format=" << format();
+ return;
}
// Make sure GrContext is not using GL. So we don't need reset GrContext
@@ -895,7 +897,7 @@ void ExternalVkImageBacking::CopyPixelsFromGLTexture() {
// Make sure a gl context is current, since textures are shared between all gl
// contexts, we don't care which gl context is current.
- if (!gl::g_current_gl_context &&
+ if (!gl::GLContext::GetCurrent() &&
!context_state_->MakeCurrent(nullptr, true /* needs_gl */))
return;
@@ -927,12 +929,58 @@ void ExternalVkImageBacking::CopyPixelsFromGLTexture() {
GLenum type, void* buffer) {
api->glReadPixelsFn(0, 0, size.width(), size.height(),
format, type, buffer);
+ DCHECK_EQ(api->glGetErrorFn(),
+ static_cast<GLenum>(GL_NO_ERROR));
},
api, size(), gl_format, gl_type));
api->glBindFramebufferEXTFn(GL_READ_FRAMEBUFFER, old_framebuffer);
api->glDeleteFramebuffersEXTFn(1, &framebuffer);
}
+void ExternalVkImageBacking::CopyPixelsFromShmToGLTexture() {
+ DCHECK(use_separate_gl_texture());
+ DCHECK(texture_);
+
+ DCHECK_GE(format(), 0);
+ DCHECK_LE(format(), viz::RESOURCE_FORMAT_MAX);
+ auto gl_format = kFormatTable[format()].gl_format;
+ auto gl_type = kFormatTable[format()].gl_type;
+ auto bytes_per_pixel = kFormatTable[format()].bytes_per_pixel;
+
+ if (gl_format == GL_ZERO) {
+ NOTREACHED() << "Not supported resource format=" << format();
+ return;
+ }
+
+ // Make sure GrContext is not using GL. So we don't need reset GrContext
+ DCHECK(!context_state_->GrContextIsGL());
+
+ // Make sure a gl context is current, since textures are shared between all gl
+ // contexts, we don't care which gl context is current.
+ if (!gl::GLContext::GetCurrent() &&
+ !context_state_->MakeCurrent(nullptr, true /* needs_gl */))
+ return;
+
+ gl::GLApi* api = gl::g_current_gl_context;
+ GLint old_texture;
+ api->glGetIntegervFn(GL_TEXTURE_BINDING_2D, &old_texture);
+ api->glBindTextureFn(GL_TEXTURE_2D, texture_->service_id());
+
+ base::CheckedNumeric<size_t> checked_size = bytes_per_pixel;
+ checked_size *= size().width();
+ checked_size *= size().height();
+ DCHECK(checked_size.IsValid());
+
+ auto pixel_data =
+ shared_memory_mapping_.GetMemoryAsSpan<const uint8_t>().subspan(
+ memory_offset_);
+ api->glTexSubImage2DFn(GL_TEXTURE_2D, 0, 0, 0, size().width(),
+ size().height(), gl_format, gl_type,
+ pixel_data.data());
+ DCHECK_EQ(api->glGetErrorFn(), static_cast<GLenum>(GL_NO_ERROR));
+ api->glBindTextureFn(GL_TEXTURE_2D, old_texture);
+}
+
bool ExternalVkImageBacking::BeginAccessInternal(
bool readonly,
std::vector<SemaphoreHandle>* semaphore_handles) {
diff --git a/chromium/gpu/command_buffer/service/external_vk_image_backing.h b/chromium/gpu/command_buffer/service/external_vk_image_backing.h
index 0b7acc2ecc2..fb5d85903b8 100644
--- a/chromium/gpu/command_buffer/service/external_vk_image_backing.h
+++ b/chromium/gpu/command_buffer/service/external_vk_image_backing.h
@@ -16,7 +16,6 @@
#include "gpu/command_buffer/service/shared_context_state.h"
#include "gpu/command_buffer/service/shared_image_backing.h"
#include "gpu/command_buffer/service/texture_manager.h"
-#include "gpu/ipc/common/vulkan_ycbcr_info.h"
#include "gpu/vulkan/semaphore_handle.h"
#include "gpu/vulkan/vulkan_device_queue.h"
#include "ui/gfx/gpu_memory_buffer.h"
@@ -25,7 +24,7 @@ namespace gpu {
class VulkanCommandPool;
-class ExternalVkImageBacking : public SharedImageBacking {
+class ExternalVkImageBacking final : public SharedImageBacking {
public:
static std::unique_ptr<ExternalVkImageBacking> Create(
SharedContextState* context_state,
@@ -36,8 +35,7 @@ class ExternalVkImageBacking : public SharedImageBacking {
const gfx::ColorSpace& color_space,
uint32_t usage,
base::span<const uint8_t> pixel_data,
- bool using_gmb = false,
- base::Optional<VulkanYCbCrInfo> ycbcr_info = base::nullopt);
+ bool using_gmb = false);
static std::unique_ptr<ExternalVkImageBacking> CreateFromGMB(
SharedContextState* context_state,
@@ -129,7 +127,7 @@ class ExternalVkImageBacking : public SharedImageBacking {
size_t memory_size,
VkFormat vk_format,
VulkanCommandPool* command_pool,
- base::Optional<VulkanYCbCrInfo> ycbcr_info,
+ const GrVkYcbcrConversionInfo& ycbcr_info,
base::Optional<DawnTextureFormat> dawn_format,
base::Optional<uint32_t> memory_type_index);
@@ -148,7 +146,8 @@ class ExternalVkImageBacking : public SharedImageBacking {
bool WritePixels(size_t data_size,
size_t stride,
FillBufferCallback callback);
- void CopyPixelsFromGLTexture();
+ void CopyPixelsFromGLTextureToVkImage();
+ void CopyPixelsFromShmToGLTexture();
SharedContextState* const context_state_;
GrBackendTexture backend_texture_;
diff --git a/chromium/gpu/command_buffer/service/external_vk_image_gl_representation.cc b/chromium/gpu/command_buffer/service/external_vk_image_gl_representation.cc
index cb889f309ff..96035d8913a 100644
--- a/chromium/gpu/command_buffer/service/external_vk_image_gl_representation.cc
+++ b/chromium/gpu/command_buffer/service/external_vk_image_gl_representation.cc
@@ -87,6 +87,12 @@ bool ExternalVkImageGlRepresentation::BeginAccess(GLenum mode) {
mode == GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM);
const bool readonly = (mode == GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
+ if (!readonly && backing()->format() == viz::ResourceFormat::BGRA_8888) {
+ NOTIMPLEMENTED()
+ << "BeginAccess write on a BGRA_8888 backing is not supported.";
+ return false;
+ }
+
std::vector<SemaphoreHandle> handles;
if (!backing_impl()->BeginAccess(readonly, &handles, true /* is_gl */))
diff --git a/chromium/gpu/command_buffer/service/feature_info.cc b/chromium/gpu/command_buffer/service/feature_info.cc
index c8d080d54c6..a737820a6d9 100644
--- a/chromium/gpu/command_buffer/service/feature_info.cc
+++ b/chromium/gpu/command_buffer/service/feature_info.cc
@@ -388,6 +388,17 @@ void FeatureInfo::EnableEXTColorBufferHalfFloat() {
feature_flags_.enable_color_buffer_half_float = true;
}
+void FeatureInfo::EnableEXTTextureFilterAnisotropic() {
+ if (!ext_texture_filter_anisotropic_available_)
+ return;
+ AddExtensionString("GL_EXT_texture_filter_anisotropic");
+ validators_.texture_parameter.AddValue(GL_TEXTURE_MAX_ANISOTROPY_EXT);
+ validators_.g_l_state.AddValue(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT);
+ if (IsWebGL2OrES3OrHigherContext()) {
+ validators_.sampler_parameter.AddValue(GL_TEXTURE_MAX_ANISOTROPY_EXT);
+ }
+}
+
void FeatureInfo::EnableCHROMIUMColorBufferFloatRGBA() {
if (!feature_flags_.chromium_color_buffer_float_rgba)
return;
@@ -426,6 +437,11 @@ void FeatureInfo::EnableOESTextureHalfFloatLinear() {
return;
AddExtensionString("GL_OES_texture_half_float_linear");
feature_flags_.enable_texture_half_float_linear = true;
+
+ // TODO(capn) : Re-enable this once we have ANGLE+SwiftShader supporting
+ // IOSurfaces.
+ if (workarounds_.disable_half_float_for_gmb)
+ return;
feature_flags_.gpu_memory_buffer_formats.Add(gfx::BufferFormat::RGBA_F16);
}
@@ -597,9 +613,9 @@ void FeatureInfo::InitializeFeatures() {
// Check if we should enable GL_EXT_texture_filter_anisotropic.
if (gfx::HasExtension(extensions, "GL_EXT_texture_filter_anisotropic")) {
- AddExtensionString("GL_EXT_texture_filter_anisotropic");
- validators_.texture_parameter.AddValue(GL_TEXTURE_MAX_ANISOTROPY_EXT);
- validators_.g_l_state.AddValue(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT);
+ ext_texture_filter_anisotropic_available_ = true;
+ if (!disallowed_features_.ext_texture_filter_anisotropic)
+ EnableEXTTextureFilterAnisotropic();
}
// Check if we should support GL_OES_packed_depth_stencil and/or
@@ -1044,12 +1060,12 @@ void FeatureInfo::InitializeFeatures() {
validators_.texture_internal_format_storage.AddValue(GL_ETC1_RGB8_OES);
}
- // Expose GL_CHROMIUM_compressed_texture_etc when ANGLE exposes it directly or
+ // Expose GL_ANGLE_compressed_texture_etc when ANGLE exposes it directly or
// running on top of a non-ANGLE ES driver. We assume that this implies native
// support of these formats.
- if (gfx::HasExtension(extensions, "GL_CHROMIUM_compressed_texture_etc") ||
+ if (gfx::HasExtension(extensions, "GL_ANGLE_compressed_texture_etc") ||
(gl_version_info_->is_es3 && !gl_version_info_->is_angle)) {
- AddExtensionString("GL_CHROMIUM_compressed_texture_etc");
+ AddExtensionString("GL_ANGLE_compressed_texture_etc");
validators_.UpdateETCCompressedTextureFormats();
}
diff --git a/chromium/gpu/command_buffer/service/feature_info.h b/chromium/gpu/command_buffer/service/feature_info.h
index 7c1d2d29f98..3402be518ac 100644
--- a/chromium/gpu/command_buffer/service/feature_info.h
+++ b/chromium/gpu/command_buffer/service/feature_info.h
@@ -58,6 +58,7 @@ class GPU_GLES2_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
bool oes_compressed_etc1_rgb8_texture = false;
bool packed_depth24_stencil8 = false;
bool npot_ok = false;
+ bool enable_texture_filter_anisotropic = false;
bool enable_texture_float_linear = false;
bool enable_texture_half_float_linear = false;
bool enable_color_buffer_float = false;
@@ -206,6 +207,7 @@ class GPU_GLES2_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
void EnableEXTFloatBlend();
void EnableEXTColorBufferFloat();
void EnableEXTColorBufferHalfFloat();
+ void EnableEXTTextureFilterAnisotropic();
void EnableOESTextureFloatLinear();
void EnableOESTextureHalfFloatLinear();
@@ -260,6 +262,7 @@ class GPU_GLES2_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> {
bool ext_color_buffer_float_available_ = false;
bool ext_color_buffer_half_float_available_ = false;
+ bool ext_texture_filter_anisotropic_available_ = false;
bool oes_texture_float_linear_available_ = false;
bool oes_texture_half_float_linear_available_ = false;
diff --git a/chromium/gpu/command_buffer/service/feature_info_unittest.cc b/chromium/gpu/command_buffer/service/feature_info_unittest.cc
index 924561304c8..0865a9bde21 100644
--- a/chromium/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/chromium/gpu/command_buffer/service/feature_info_unittest.cc
@@ -468,11 +468,11 @@ TEST_P(FeatureInfoTest, InitializeEXT_texture_compression_s3tc_srgbGL) {
GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT));
}
-TEST_P(FeatureInfoTest, InitializeCHROMIUM_compressed_texture_etc) {
+TEST_P(FeatureInfoTest, InitializeANGLE_compressed_texture_etc) {
SetupInitExpectationsWithGLVersion("", "",
"OpenGL ES 3.0");
EXPECT_TRUE(gfx::HasExtension(info_->extensions(),
- "GL_CHROMIUM_compressed_texture_etc"));
+ "GL_ANGLE_compressed_texture_etc"));
EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
GL_COMPRESSED_R11_EAC));
EXPECT_TRUE(info_->validators()->compressed_texture_format.IsValid(
diff --git a/chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.cc b/chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.cc
index 4abec36f840..118b7c1e679 100644
--- a/chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.cc
+++ b/chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.cc
@@ -16,6 +16,9 @@ gfx::Size GLStreamTextureImageStub::GetSize() {
unsigned GLStreamTextureImageStub::GetInternalFormat() {
return 0;
}
+unsigned GLStreamTextureImageStub::GetDataType() {
+ return 0;
+}
GLStreamTextureImageStub::BindOrCopy
GLStreamTextureImageStub::ShouldBindOrCopy() {
return BIND;
diff --git a/chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.h b/chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.h
index 8de116f9a1b..9c35dae2934 100644
--- a/chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.h
+++ b/chromium/gpu/command_buffer/service/gl_stream_texture_image_stub.h
@@ -17,6 +17,7 @@ class GLStreamTextureImageStub : public GLStreamTextureImage {
// Overridden from GLImage:
gfx::Size GetSize() override;
unsigned GetInternalFormat() override;
+ unsigned GetDataType() override;
BindOrCopy ShouldBindOrCopy() override;
bool BindTexImage(unsigned target) override;
void ReleaseTexImage(unsigned target) override {}
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 7240eeecabd..415e2101cbc 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -108,6 +108,8 @@
#include "ui/gl/gl_implementation.h"
#include "ui/gl/gl_surface.h"
#include "ui/gl/gl_version_info.h"
+#include "ui/gl/gpu_switching_manager.h"
+#include "ui/gl/gpu_switching_observer.h"
#include "ui/gl/gpu_timing.h"
#include "ui/gl/init/create_gr_gl_interface.h"
#include "ui/gl/scoped_make_current.h"
@@ -599,7 +601,9 @@ int GLES2Decoder::GetRasterDecoderId() const {
// 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 ErrorStateClient {
+class GLES2DecoderImpl : public GLES2Decoder,
+ public ErrorStateClient,
+ public ui::GpuSwitchingObserver {
public:
GLES2DecoderImpl(DecoderClient* client,
CommandBufferServiceBase* command_buffer_service,
@@ -746,6 +750,9 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
unsigned type,
const gfx::Rect& cleared_rect) override;
+ // Implements GpuSwitchingObserver.
+ void OnGpuSwitched() override;
+
// Restores the current state to the user's settings.
void RestoreCurrentFramebufferBindings();
@@ -818,7 +825,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
kFramebufferInvalidateSub
};
- enum BindIndexedBufferFunctionType {
+ enum class BindIndexedBufferFunctionType {
kBindBufferBase,
kBindBufferRange
};
@@ -1555,7 +1562,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
// error. Returns true if |api_type| is valid for the uniform
bool CheckUniformForApiType(const Program::UniformInfo* info,
const char* function_name,
- Program::UniformApiType api_type);
+ UniformApiType api_type);
// Gets the type of a uniform for a location in the current program. Sets GL
// errors if the current program is not valid. Returns true if the current
@@ -1563,7 +1570,7 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
// does not overflow the uniform.
bool PrepForSetUniformByLocation(GLint fake_location,
const char* function_name,
- Program::UniformApiType api_type,
+ UniformApiType api_type,
GLint* real_location,
GLenum* type,
GLsizei* count);
@@ -2114,6 +2121,9 @@ class GLES2DecoderImpl : public GLES2Decoder, public ErrorStateClient {
void DoPushGroupMarkerEXT(GLsizei length, const GLchar* group);
void DoPopGroupMarkerEXT(void);
+ // Wrapper for ContextVisibilityHintCHROMIUM.
+ void DoContextVisibilityHintCHROMIUM(GLboolean visibility);
+
// Gets the number of values that will be returned by glGetXXX. Returns
// false if pname is unknown.
bool GetNumValuesReturnedForGLGet(GLenum pname, GLsizei* num_values);
@@ -3174,20 +3184,20 @@ bool BackTexture::AllocateNativeGpuMemoryBuffer(const gfx::Size& size,
buffer_format = gfx::BufferFormat::RGBX_8888;
#endif
}
- DCHECK_EQ(format, gpu::InternalFormatForGpuMemoryBufferFormat(buffer_format));
scoped_refptr<gl::GLImage> image =
decoder_->GetContextGroup()->image_factory()->CreateAnonymousImage(
size, buffer_format, gfx::BufferUsage::SCANOUT, &is_cleared);
- if (!image || !image->BindTexImage(Target()))
+ if (!image)
+ return false;
+ DCHECK_EQ(format, image->GetDataFormat());
+ if (!image->BindTexImage(Target()))
return false;
image_ = image;
decoder_->texture_manager()->SetLevelInfo(
texture_ref_.get(), Target(), 0, image_->GetInternalFormat(),
- size.width(), size.height(), 1, 0,
- TextureManager::ExtractFormatFromStorageFormat(
- image_->GetInternalFormat()),
- GL_UNSIGNED_BYTE, gfx::Rect(size));
+ size.width(), size.height(), 1, 0, image->GetDataFormat(),
+ image->GetDataType(), gfx::Rect(size));
decoder_->texture_manager()->SetLevelImage(texture_ref_.get(), Target(), 0,
image_.get(), Texture::BOUND);
@@ -3285,7 +3295,7 @@ bool BackRenderbuffer::AllocateStorage(const gfx::Size& size,
GLuint fbo;
api()->glGenFramebuffersEXTFn(1, &fbo);
{
- ScopedFramebufferBinder binder(decoder_, fbo);
+ ScopedFramebufferBinder frame_binder(decoder_, fbo);
api()->glFramebufferRenderbufferEXTFn(
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, id_);
api()->glClearColorFn(0, 0, 0, decoder_->BackBufferAlphaClearColor());
@@ -3606,6 +3616,11 @@ gpu::ContextResult GLES2DecoderImpl::Initialize(
transform_feedback_manager_.reset(new TransformFeedbackManager(
group_->max_transform_feedback_separate_attribs(), needs_emulation));
+ // Register this object as a GPU switching observer.
+ if (feature_info_->IsWebGLContext()) {
+ ui::GpuSwitchingManager::GetInstance()->AddObserver(this);
+ }
+
if (feature_info_->IsWebGL2OrES3Context()) {
// Verified in ContextGroup.
DCHECK(feature_info_->IsES3Capable());
@@ -5271,6 +5286,11 @@ void GLES2DecoderImpl::SetLevelInfo(uint32_t client_id,
0 /* border */, format, type, cleared_rect);
}
+void GLES2DecoderImpl::OnGpuSwitched() {
+ // Send OnGpuSwitched notification to renderer process via decoder client.
+ client()->OnGpuSwitched();
+}
+
void GLES2DecoderImpl::Destroy(bool have_context) {
if (!initialized())
return;
@@ -5486,6 +5506,11 @@ void GLES2DecoderImpl::Destroy(bool have_context) {
gpu_tracer_.reset();
}
+ // Unregister this object as a GPU switching observer.
+ if (feature_info_->IsWebGLContext()) {
+ ui::GpuSwitchingManager::GetInstance()->RemoveObserver(this);
+ }
+
if (group_.get()) {
group_->Destroy(this, have_context);
group_ = nullptr;
@@ -5804,8 +5829,8 @@ error::Error GLES2DecoderImpl::HandleResizeCHROMIUM(
static_assert(sizeof(GLuint) >= sizeof(int), "Unexpected GLuint size.");
static const GLuint kMaxDimension =
static_cast<GLuint>(std::numeric_limits<int>::max());
- width = std::min(std::max(1U, width), kMaxDimension);
- height = std::min(std::max(1U, height), kMaxDimension);
+ width = base::ClampToRange(width, 1U, kMaxDimension);
+ height = base::ClampToRange(height, 1U, kMaxDimension);
gl::GLSurface::ColorSpace surface_color_space =
gl::GLSurface::ColorSpace::UNSPECIFIED;
@@ -6080,7 +6105,7 @@ void GLES2DecoderImpl::BindIndexedBufferImpl(
break;
}
- if (function_type == kBindBufferRange) {
+ if (function_type == BindIndexedBufferFunctionType::kBindBufferRange) {
switch (target) {
case GL_TRANSFORM_FEEDBACK_BUFFER:
if ((size % 4 != 0) || (offset % 4 != 0)) {
@@ -6154,10 +6179,10 @@ void GLES2DecoderImpl::BindIndexedBufferImpl(
}
DCHECK(bindings);
switch (function_type) {
- case kBindBufferBase:
+ case BindIndexedBufferFunctionType::kBindBufferBase:
bindings->DoBindBufferBase(index, buffer);
break;
- case kBindBufferRange:
+ case BindIndexedBufferFunctionType::kBindBufferRange:
bindings->DoBindBufferRange(index, buffer, offset, size);
break;
default:
@@ -6170,7 +6195,8 @@ void GLES2DecoderImpl::BindIndexedBufferImpl(
void GLES2DecoderImpl::DoBindBufferBase(GLenum target, GLuint index,
GLuint client_id) {
BindIndexedBufferImpl(target, index, client_id, 0, 0,
- kBindBufferBase, "glBindBufferBase");
+ BindIndexedBufferFunctionType::kBindBufferBase,
+ "glBindBufferBase");
}
void GLES2DecoderImpl::DoBindBufferRange(GLenum target, GLuint index,
@@ -6178,7 +6204,8 @@ void GLES2DecoderImpl::DoBindBufferRange(GLenum target, GLuint index,
GLintptr offset,
GLsizeiptr size) {
BindIndexedBufferImpl(target, index, client_id, offset, size,
- kBindBufferRange, "glBindBufferRange");
+ BindIndexedBufferFunctionType::kBindBufferRange,
+ "glBindBufferRange");
}
bool GLES2DecoderImpl::BoundFramebufferAllowsChangesToAlphaChannel() {
@@ -8351,13 +8378,13 @@ void GLES2DecoderImpl::DoEnable(GLenum cap) {
}
void GLES2DecoderImpl::DoDepthRangef(GLclampf znear, GLclampf zfar) {
- state_.z_near = std::min(1.0f, std::max(0.0f, znear));
- state_.z_far = std::min(1.0f, std::max(0.0f, zfar));
+ state_.z_near = base::ClampToRange(znear, 0.0f, 1.0f);
+ state_.z_far = base::ClampToRange(zfar, 0.0f, 1.0f);
api()->glDepthRangeFn(znear, zfar);
}
void GLES2DecoderImpl::DoSampleCoverage(GLclampf value, GLboolean invert) {
- state_.sample_coverage_value = std::min(1.0f, std::max(0.0f, value));
+ state_.sample_coverage_value = base::ClampToRange(value, 0.0f, 1.0f);
state_.sample_coverage_invert = (invert != 0);
api()->glSampleCoverageFn(state_.sample_coverage_value, invert);
}
@@ -9697,7 +9724,7 @@ void GLES2DecoderImpl::DoRenderbufferStorage(
void GLES2DecoderImpl::DoLineWidth(GLfloat width) {
api()->glLineWidthFn(
- std::min(std::max(width, line_width_range_[0]), line_width_range_[1]));
+ base::ClampToRange(width, line_width_range_[0], line_width_range_[1]));
}
void GLES2DecoderImpl::DoLinkProgram(GLuint program_id) {
@@ -10043,12 +10070,11 @@ bool GLES2DecoderImpl::ValidateUniformBlockBackings(const char* func_name) {
uniform_block_sizes, 1, func_name, "uniform buffers");
}
-bool GLES2DecoderImpl::CheckUniformForApiType(
- const Program::UniformInfo* info,
- const char* function_name,
- Program::UniformApiType api_type) {
+bool GLES2DecoderImpl::CheckUniformForApiType(const Program::UniformInfo* info,
+ const char* function_name,
+ UniformApiType api_type) {
DCHECK(info);
- if ((api_type & info->accepts_api_type) == 0) {
+ if ((api_type & info->accepts_api_type) == UniformApiType::kUniformNone) {
LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, function_name,
"wrong uniform function for type");
return false;
@@ -10056,13 +10082,12 @@ bool GLES2DecoderImpl::CheckUniformForApiType(
return true;
}
-bool GLES2DecoderImpl::PrepForSetUniformByLocation(
- GLint fake_location,
- const char* function_name,
- Program::UniformApiType api_type,
- GLint* real_location,
- GLenum* type,
- GLsizei* count) {
+bool GLES2DecoderImpl::PrepForSetUniformByLocation(GLint fake_location,
+ const char* function_name,
+ UniformApiType api_type,
+ GLint* real_location,
+ GLenum* type,
+ GLsizei* count) {
DCHECK(type);
DCHECK(count);
DCHECK(real_location);
@@ -10099,12 +10124,9 @@ void GLES2DecoderImpl::DoUniform1i(GLint fake_location, GLint v0) {
GLenum type = 0;
GLsizei count = 1;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform1i",
- Program::kUniform1i,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform1i",
+ UniformApiType::kUniform1i, &real_location,
+ &type, &count)) {
return;
}
if (!state_.current_program->SetSamplers(
@@ -10121,12 +10143,9 @@ void GLES2DecoderImpl::DoUniform1iv(GLint fake_location,
const volatile GLint* values) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform1iv",
- Program::kUniform1i,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform1iv",
+ UniformApiType::kUniform1i, &real_location,
+ &type, &count)) {
return;
}
auto values_copy = std::make_unique<GLint[]>(count);
@@ -10149,12 +10168,9 @@ void GLES2DecoderImpl::DoUniform1uiv(GLint fake_location,
const volatile GLuint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform1uiv",
- Program::kUniform1ui,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform1uiv",
+ UniformApiType::kUniform1ui, &real_location,
+ &type, &count)) {
return;
}
api()->glUniform1uivFn(real_location, count,
@@ -10166,12 +10182,9 @@ void GLES2DecoderImpl::DoUniform1fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform1fv",
- Program::kUniform1f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform1fv",
+ UniformApiType::kUniform1f, &real_location,
+ &type, &count)) {
return;
}
if (type == GL_BOOL) {
@@ -10191,12 +10204,9 @@ void GLES2DecoderImpl::DoUniform2fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform2fv",
- Program::kUniform2f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform2fv",
+ UniformApiType::kUniform2f, &real_location,
+ &type, &count)) {
return;
}
if (type == GL_BOOL_VEC2) {
@@ -10217,12 +10227,9 @@ void GLES2DecoderImpl::DoUniform3fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform3fv",
- Program::kUniform3f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform3fv",
+ UniformApiType::kUniform3f, &real_location,
+ &type, &count)) {
return;
}
if (type == GL_BOOL_VEC3) {
@@ -10243,12 +10250,9 @@ void GLES2DecoderImpl::DoUniform4fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform4fv",
- Program::kUniform4f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform4fv",
+ UniformApiType::kUniform4f, &real_location,
+ &type, &count)) {
return;
}
if (type == GL_BOOL_VEC4) {
@@ -10269,12 +10273,9 @@ void GLES2DecoderImpl::DoUniform2iv(GLint fake_location,
const volatile GLint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform2iv",
- Program::kUniform2i,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform2iv",
+ UniformApiType::kUniform2i, &real_location,
+ &type, &count)) {
return;
}
api()->glUniform2ivFn(real_location, count, const_cast<const GLint*>(value));
@@ -10285,12 +10286,9 @@ void GLES2DecoderImpl::DoUniform2uiv(GLint fake_location,
const volatile GLuint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform2uiv",
- Program::kUniform2ui,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform2uiv",
+ UniformApiType::kUniform2ui, &real_location,
+ &type, &count)) {
return;
}
api()->glUniform2uivFn(real_location, count,
@@ -10302,12 +10300,9 @@ void GLES2DecoderImpl::DoUniform3iv(GLint fake_location,
const volatile GLint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform3iv",
- Program::kUniform3i,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform3iv",
+ UniformApiType::kUniform3i, &real_location,
+ &type, &count)) {
return;
}
api()->glUniform3ivFn(real_location, count, const_cast<const GLint*>(value));
@@ -10318,12 +10313,9 @@ void GLES2DecoderImpl::DoUniform3uiv(GLint fake_location,
const volatile GLuint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform3uiv",
- Program::kUniform3ui,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform3uiv",
+ UniformApiType::kUniform3ui, &real_location,
+ &type, &count)) {
return;
}
api()->glUniform3uivFn(real_location, count,
@@ -10335,12 +10327,9 @@ void GLES2DecoderImpl::DoUniform4iv(GLint fake_location,
const volatile GLint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform4iv",
- Program::kUniform4i,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform4iv",
+ UniformApiType::kUniform4i, &real_location,
+ &type, &count)) {
return;
}
api()->glUniform4ivFn(real_location, count, const_cast<const GLint*>(value));
@@ -10351,12 +10340,9 @@ void GLES2DecoderImpl::DoUniform4uiv(GLint fake_location,
const volatile GLuint* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniform4uiv",
- Program::kUniform4ui,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniform4uiv",
+ UniformApiType::kUniform4ui, &real_location,
+ &type, &count)) {
return;
}
api()->glUniform4uivFn(real_location, count,
@@ -10374,12 +10360,9 @@ void GLES2DecoderImpl::DoUniformMatrix2fv(GLint fake_location,
GL_INVALID_VALUE, "glUniformMatrix2fv", "transpose not FALSE");
return;
}
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix2fv",
- Program::kUniformMatrix2f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix2fv",
+ UniformApiType::kUniformMatrix2f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix2fvFn(real_location, count, transpose,
@@ -10397,12 +10380,9 @@ void GLES2DecoderImpl::DoUniformMatrix3fv(GLint fake_location,
GL_INVALID_VALUE, "glUniformMatrix3fv", "transpose not FALSE");
return;
}
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix3fv",
- Program::kUniformMatrix3f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix3fv",
+ UniformApiType::kUniformMatrix3f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix3fvFn(real_location, count, transpose,
@@ -10420,12 +10400,9 @@ void GLES2DecoderImpl::DoUniformMatrix4fv(GLint fake_location,
GL_INVALID_VALUE, "glUniformMatrix4fv", "transpose not FALSE");
return;
}
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix4fv",
- Program::kUniformMatrix4f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix4fv",
+ UniformApiType::kUniformMatrix4f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix4fvFn(real_location, count, transpose,
@@ -10472,8 +10449,8 @@ void GLES2DecoderImpl::DoUniformMatrix4fvStreamTextureMatrixCHROMIUM(
GLint real_location = -1;
GLsizei count = 1;
if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix4fv",
- Program::kUniformMatrix4f, &real_location,
- &type, &count)) {
+ UniformApiType::kUniformMatrix4f,
+ &real_location, &type, &count)) {
return;
}
@@ -10486,12 +10463,9 @@ void GLES2DecoderImpl::DoUniformMatrix2x3fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix2x3fv",
- Program::kUniformMatrix2x3f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix2x3fv",
+ UniformApiType::kUniformMatrix2x3f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix2x3fvFn(real_location, count, transpose,
@@ -10504,12 +10478,9 @@ void GLES2DecoderImpl::DoUniformMatrix2x4fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix2x4fv",
- Program::kUniformMatrix2x4f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix2x4fv",
+ UniformApiType::kUniformMatrix2x4f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix2x4fvFn(real_location, count, transpose,
@@ -10522,12 +10493,9 @@ void GLES2DecoderImpl::DoUniformMatrix3x2fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix3x2fv",
- Program::kUniformMatrix3x2f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix3x2fv",
+ UniformApiType::kUniformMatrix3x2f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix3x2fvFn(real_location, count, transpose,
@@ -10540,12 +10508,9 @@ void GLES2DecoderImpl::DoUniformMatrix3x4fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix3x4fv",
- Program::kUniformMatrix3x4f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix3x4fv",
+ UniformApiType::kUniformMatrix3x4f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix3x4fvFn(real_location, count, transpose,
@@ -10558,12 +10523,9 @@ void GLES2DecoderImpl::DoUniformMatrix4x2fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix4x2fv",
- Program::kUniformMatrix4x2f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix4x2fv",
+ UniformApiType::kUniformMatrix4x2f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix4x2fvFn(real_location, count, transpose,
@@ -10576,12 +10538,9 @@ void GLES2DecoderImpl::DoUniformMatrix4x3fv(GLint fake_location,
const volatile GLfloat* value) {
GLenum type = 0;
GLint real_location = -1;
- if (!PrepForSetUniformByLocation(fake_location,
- "glUniformMatrix4x3fv",
- Program::kUniformMatrix4x3f,
- &real_location,
- &type,
- &count)) {
+ if (!PrepForSetUniformByLocation(fake_location, "glUniformMatrix4x3fv",
+ UniformApiType::kUniformMatrix4x3f,
+ &real_location, &type, &count)) {
return;
}
api()->glUniformMatrix4x3fvFn(real_location, count, transpose,
@@ -13118,13 +13077,13 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32_t immediate_data_size,
if (!max_rect.Contains(rect)) {
rect.Intersect(max_rect);
if (!rect.IsEmpty()) {
- std::unique_ptr<ScopedFramebufferCopyBinder> binder;
+ std::unique_ptr<ScopedFramebufferCopyBinder> copy_binder;
if (workarounds()
.use_copyteximage2d_instead_of_readpixels_on_multisampled_textures &&
framebuffer_state_.bound_read_framebuffer.get() &&
framebuffer_state_.bound_read_framebuffer.get()
->GetReadBufferIsMultisampledTexture()) {
- binder = std::make_unique<ScopedFramebufferCopyBinder>(this);
+ copy_binder = std::make_unique<ScopedFramebufferCopyBinder>(this);
}
if (y < 0) {
pixels += static_cast<uint32_t>(-y) * padded_row_size;;
@@ -13167,9 +13126,9 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32_t immediate_data_size,
// a PIXEL_PACK_BUFFER is bound (in which case the client can
// implement something similar on their own - all necessary functions
// should be exposed).
- GLuint buffer = 0;
- api()->glGenBuffersARBFn(1, &buffer);
- api()->glBindBufferFn(GL_PIXEL_PACK_BUFFER_ARB, buffer);
+ GLuint buffer_handle = 0;
+ api()->glGenBuffersARBFn(1, &buffer_handle);
+ api()->glBindBufferFn(GL_PIXEL_PACK_BUFFER_ARB, buffer_handle);
// For ANGLE client version 2, GL_STREAM_READ is not available.
const GLenum usage_hint =
gl_version_info().is_angle ? GL_STATIC_DRAW : GL_STREAM_READ;
@@ -13186,13 +13145,13 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32_t immediate_data_size,
&GLES2DecoderImpl::FinishReadPixels, weak_ptr_factory_.GetWeakPtr(),
width, height, format, type, pixels_shm_id, pixels_shm_offset,
result_shm_id, result_shm_offset, state_.pack_alignment,
- read_format, buffer));
+ read_format, buffer_handle));
api()->glBindBufferFn(GL_PIXEL_PACK_BUFFER_ARB, 0);
return error::kNoError;
} else {
// On error, unbind pack buffer and fall through to sync readpixels
api()->glBindBufferFn(GL_PIXEL_PACK_BUFFER_ARB, 0);
- api()->glDeleteBuffersARBFn(1, &buffer);
+ api()->glDeleteBuffersARBFn(1, &buffer_handle);
}
}
if (pixels_shm_id == 0 &&
@@ -13235,7 +13194,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32_t immediate_data_size,
framebuffer_state_.bound_read_framebuffer.get() &&
framebuffer_state_.bound_read_framebuffer.get()
->GetReadBufferIsMultisampledTexture()) {
- ScopedFramebufferCopyBinder binder(this, x, y, width, height);
+ ScopedFramebufferCopyBinder copy_binder(this, x, y, width, height);
api()->glReadPixelsFn(0, 0, width, height, format, type, pixels);
} else {
api()->glReadPixelsFn(x, y, width, height, format, type, pixels);
@@ -14917,9 +14876,19 @@ error::Error GLES2DecoderImpl::HandleTexImage2D(uint32_t immediate_data_size,
}
TextureManager::DoTexImageArguments args = {
- target, level, internal_format, width, height, 1, border, format, type,
- pixels, pixels_size, padding,
- TextureManager::DoTexImageArguments::kTexImage2D };
+ target,
+ level,
+ internal_format,
+ width,
+ height,
+ 1,
+ border,
+ format,
+ type,
+ pixels,
+ pixels_size,
+ padding,
+ TextureManager::DoTexImageArguments::CommandType::kTexImage2D};
texture_manager()->ValidateAndDoTexImage(
&texture_state_, &state_, error_state_.get(), &framebuffer_state_,
func_name, args);
@@ -15015,9 +14984,19 @@ error::Error GLES2DecoderImpl::HandleTexImage3D(uint32_t immediate_data_size,
}
TextureManager::DoTexImageArguments args = {
- target, level, internal_format, width, height, depth, border, format, type,
- pixels, pixels_size, padding,
- TextureManager::DoTexImageArguments::kTexImage3D };
+ target,
+ level,
+ internal_format,
+ width,
+ height,
+ depth,
+ border,
+ format,
+ type,
+ pixels,
+ pixels_size,
+ padding,
+ TextureManager::DoTexImageArguments::CommandType::kTexImage3D};
texture_manager()->ValidateAndDoTexImage(
&texture_state_, &state_, error_state_.get(), &framebuffer_state_,
func_name, args);
@@ -15398,7 +15377,7 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
nullptr,
pixels_size,
0,
- TextureManager::DoTexImageArguments::kTexImage2D};
+ TextureManager::DoTexImageArguments::CommandType::kTexImage2D};
texture_manager()->WorkaroundCopyTexImageCubeMap(
&texture_state_, &state_, error_state_.get(), &framebuffer_state_,
texture_ref, func_name, args);
@@ -15442,9 +15421,19 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
target != GL_TEXTURE_CUBE_MAP_POSITIVE_X) {
for (int i = 0; i < 2; ++i) {
TextureManager::DoTexImageArguments args = {
- target, i, final_internal_format, width, height, 1, border,
- format, type, nullptr, pixels_size, 0,
- TextureManager::DoTexImageArguments::kTexImage2D };
+ target,
+ i,
+ final_internal_format,
+ width,
+ height,
+ 1,
+ border,
+ format,
+ type,
+ nullptr,
+ pixels_size,
+ 0,
+ TextureManager::DoTexImageArguments::CommandType::kTexImage2D};
texture_manager()->WorkaroundCopyTexImageCubeMap(
&texture_state_, &state_, error_state_.get(), &framebuffer_state_,
texture_ref, func_name, args);
@@ -15483,8 +15472,8 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
{
// Copy from the read framebuffer into |temp_texture|.
api()->glGenTexturesFn(1, &temp_texture);
- ScopedTextureBinder binder(&state_, error_state_.get(), temp_texture,
- source_texture_target);
+ ScopedTextureBinder texture_binder(&state_, error_state_.get(),
+ temp_texture, source_texture_target);
api()->glCopyTexImage2DFn(source_texture_target, 0,
temp_internal_format, x, y, width, height,
border);
@@ -15513,9 +15502,19 @@ void GLES2DecoderImpl::DoCopyTexImage2D(
texture->target() == GL_TEXTURE_CUBE_MAP &&
target != GL_TEXTURE_CUBE_MAP_POSITIVE_X) {
TextureManager::DoTexImageArguments args = {
- target, level, final_internal_format, width, height, 1, border,
- format, type, nullptr, pixels_size, 0,
- TextureManager::DoTexImageArguments::kTexImage2D };
+ target,
+ level,
+ final_internal_format,
+ width,
+ height,
+ 1,
+ border,
+ format,
+ type,
+ nullptr,
+ pixels_size,
+ 0,
+ TextureManager::DoTexImageArguments::CommandType::kTexImage2D};
texture_manager()->WorkaroundCopyTexImageCubeMap(
&texture_state_, &state_, error_state_.get(), &framebuffer_state_,
texture_ref, func_name, args);
@@ -15831,9 +15830,20 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2D(
}
TextureManager::DoTexSubImageArguments args = {
- target, level, xoffset, yoffset, 0, width, height, 1,
- format, type, pixels, pixels_size, padding,
- TextureManager::DoTexSubImageArguments::kTexSubImage2D};
+ target,
+ level,
+ xoffset,
+ yoffset,
+ 0,
+ width,
+ height,
+ 1,
+ format,
+ type,
+ pixels,
+ pixels_size,
+ padding,
+ TextureManager::DoTexSubImageArguments::CommandType::kTexSubImage2D};
texture_manager()->ValidateAndDoTexSubImage(
this, &texture_state_, &state_, error_state_.get(), &framebuffer_state_,
func_name, args);
@@ -15925,9 +15935,20 @@ error::Error GLES2DecoderImpl::HandleTexSubImage3D(
}
TextureManager::DoTexSubImageArguments args = {
- target, level, xoffset, yoffset, zoffset, width, height, depth,
- format, type, pixels, pixels_size, padding,
- TextureManager::DoTexSubImageArguments::kTexSubImage3D};
+ target,
+ level,
+ xoffset,
+ yoffset,
+ zoffset,
+ width,
+ height,
+ depth,
+ format,
+ type,
+ pixels,
+ pixels_size,
+ padding,
+ TextureManager::DoTexSubImageArguments::CommandType::kTexSubImage3D};
texture_manager()->ValidateAndDoTexSubImage(
this, &texture_state_, &state_, error_state_.get(), &framebuffer_state_,
func_name, args);
@@ -16823,6 +16844,10 @@ error::Error GLES2DecoderImpl::HandleRequestExtensionCHROMIUM(
std::string::npos) {
feature_info_->EnableEXTColorBufferHalfFloat();
}
+ if (feature_str.find("GL_EXT_texture_filter_anisotropic ") !=
+ std::string::npos) {
+ feature_info_->EnableEXTTextureFilterAnisotropic();
+ }
if (feature_str.find("GL_OES_texture_float_linear ") != std::string::npos) {
feature_info_->EnableOESTextureFloatLinear();
}
@@ -17050,7 +17075,8 @@ error::Error GLES2DecoderImpl::HandleDescheduleUntilFinishedCHROMIUM(
if (!gl::GLFence::IsSupported())
return error::kNoError;
std::unique_ptr<gl::GLFence> fence = gl::GLFence::Create();
- deschedule_until_finished_fences_.push_back(std::move(fence));
+ if (fence)
+ deschedule_until_finished_fences_.push_back(std::move(fence));
if (deschedule_until_finished_fences_.size() == 1)
return error::kNoError;
@@ -17824,11 +17850,11 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM(
// GL_TEXTURE_EXTERNAL_OES texture requires that we apply a transform matrix
// before presenting.
if (source_target == GL_TEXTURE_EXTERNAL_OES) {
- if (GLStreamTextureImage* image =
+ if (GLStreamTextureImage* texture_image =
source_texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES,
source_level)) {
GLfloat transform_matrix[16];
- image->GetTextureMatrix(transform_matrix);
+ texture_image->GetTextureMatrix(transform_matrix);
copy_texture_chromium_->DoCopyTextureWithTransform(
this, source_target, source_texture->service_id(), source_level,
source_internal_format, dest_target, dest_texture->service_id(),
@@ -18036,11 +18062,11 @@ void GLES2DecoderImpl::CopySubTextureHelper(const char* function_name,
// GL_TEXTURE_EXTERNAL_OES texture requires apply a transform matrix
// before presenting.
if (source_target == GL_TEXTURE_EXTERNAL_OES) {
- if (GLStreamTextureImage* image =
+ if (GLStreamTextureImage* texture_image =
source_texture->GetLevelStreamTextureImage(GL_TEXTURE_EXTERNAL_OES,
source_level)) {
GLfloat transform_matrix[16];
- image->GetTextureMatrix(transform_matrix);
+ texture_image->GetTextureMatrix(transform_matrix);
copy_texture_chromium_->DoCopySubTextureWithTransform(
this, source_target, source_texture->service_id(), source_level,
source_internal_format, dest_target, dest_texture->service_id(),
@@ -18399,9 +18425,7 @@ void GLES2DecoderImpl::DoTexStorage2DImageCHROMIUM(GLenum target,
texture_manager()->SetLevelInfo(
texture_ref, target, 0, image->GetInternalFormat(), width, height, 1, 0,
- TextureManager::ExtractFormatFromStorageFormat(
- image->GetInternalFormat()),
- GL_UNSIGNED_BYTE, cleared_rect);
+ image->GetDataFormat(), image->GetDataType(), cleared_rect);
texture_manager()->SetLevelImage(texture_ref, target, 0, image.get(),
Texture::BOUND);
@@ -18742,11 +18766,10 @@ void GLES2DecoderImpl::BindTexImage2DCHROMIUMImpl(const char* function_name,
gfx::Size size = image->GetSize();
GLenum texture_internalformat =
internalformat ? internalformat : image->GetInternalFormat();
- texture_manager()->SetLevelInfo(
- texture_ref, target, 0, texture_internalformat, size.width(),
- size.height(), 1, 0,
- TextureManager::ExtractFormatFromStorageFormat(texture_internalformat),
- GL_UNSIGNED_BYTE, gfx::Rect(size));
+ texture_manager()->SetLevelInfo(texture_ref, target, 0,
+ texture_internalformat, size.width(),
+ size.height(), 1, 0, image->GetDataFormat(),
+ image->GetDataType(), gfx::Rect(size));
texture_manager()->SetLevelImage(texture_ref, target, 0, image, image_state);
}
@@ -19931,7 +19954,7 @@ error::Error GLES2DecoderImpl::HandlePathParameterfCHROMIUM(
hasValueError = std::isnan(value) || !std::isfinite(value) || value < 0;
break;
case GL_PATH_STROKE_BOUND_CHROMIUM:
- value = std::max(std::min(1.0f, value), 0.0f);
+ value = base::ClampToRange(value, 0.0f, 1.0f);
break;
case GL_PATH_END_CAPS_CHROMIUM:
hasValueError = !validators_->path_parameter_cap_values.IsValid(
@@ -19984,7 +20007,7 @@ error::Error GLES2DecoderImpl::HandlePathParameteriCHROMIUM(
hasValueError = value < 0;
break;
case GL_PATH_STROKE_BOUND_CHROMIUM:
- value = std::max(std::min(1, value), 0);
+ value = base::ClampToRange(value, 0, 1);
break;
case GL_PATH_END_CAPS_CHROMIUM:
hasValueError = !validators_->path_parameter_cap_values.IsValid(value);
@@ -20686,6 +20709,11 @@ void GLES2DecoderImpl::RestoreAllExternalTextureBindingsIfNeeded() {
texture_manager()->GetServiceIdGeneration();
}
+void GLES2DecoderImpl::DoContextVisibilityHintCHROMIUM(GLboolean visibility) {
+ if (feature_info_->IsWebGLContext())
+ context_->SetVisibility(visibility == GL_TRUE);
+}
+
error::Error GLES2DecoderImpl::HandleInitializeDiscardableTextureCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.h
index 8c0e5d159a8..c2e0e055615 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder.h
@@ -61,6 +61,7 @@ struct DisallowedFeatures {
chromium_color_buffer_float_rgb = false;
ext_color_buffer_float = false;
ext_color_buffer_half_float = false;
+ ext_texture_filter_anisotropic = false;
oes_texture_float_linear = false;
oes_texture_half_float_linear = false;
ext_float_blend = false;
@@ -75,6 +76,7 @@ struct DisallowedFeatures {
bool chromium_color_buffer_float_rgb = false;
bool ext_color_buffer_float = false;
bool ext_color_buffer_half_float = false;
+ bool ext_texture_filter_anisotropic = false;
bool oes_texture_float_linear = false;
bool oes_texture_half_float_linear = false;
bool ext_float_blend = false;
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 2bab408996f..47e756ea961 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -4730,6 +4730,18 @@ error::Error GLES2DecoderImpl::HandleDispatchComputeIndirect(
return error::kUnknownCommand;
}
+error::Error GLES2DecoderImpl::HandleDrawArraysIndirect(
+ uint32_t immediate_data_size,
+ const volatile void* cmd_data) {
+ return error::kUnknownCommand;
+}
+
+error::Error GLES2DecoderImpl::HandleDrawElementsIndirect(
+ uint32_t immediate_data_size,
+ const volatile void* cmd_data) {
+ return error::kUnknownCommand;
+}
+
error::Error GLES2DecoderImpl::HandleGetProgramInterfaceiv(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
@@ -5350,6 +5362,17 @@ error::Error GLES2DecoderImpl::HandlePathStencilFuncCHROMIUM(
return error::kNoError;
}
+error::Error GLES2DecoderImpl::HandleContextVisibilityHintCHROMIUM(
+ uint32_t immediate_data_size,
+ const volatile void* cmd_data) {
+ const volatile gles2::cmds::ContextVisibilityHintCHROMIUM& c =
+ *static_cast<const volatile gles2::cmds::ContextVisibilityHintCHROMIUM*>(
+ cmd_data);
+ GLboolean visibility = static_cast<GLboolean>(c.visibility);
+ DoContextVisibilityHintCHROMIUM(visibility);
+ return error::kNoError;
+}
+
error::Error GLES2DecoderImpl::HandleCoverageModulationCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
index fc98910c5d9..ad87416a91c 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
@@ -699,6 +699,15 @@ GLES2Decoder::Error GLES2DecoderPassthroughImpl::DoCommandsImpl(
if (entries_processed)
*entries_processed = process_pos;
+#if defined(OS_MACOSX)
+ // Aggressively call glFlush on macOS. This is the only fix that has been
+ // found so far to avoid crashes on Intel drivers. The workaround
+ // isn't needed for WebGL contexts, though.
+ // https://crbug.com/863817
+ if (!feature_info_->IsWebGLContext())
+ context_->FlushForDriverCrashWorkaround();
+#endif
+
return result;
}
@@ -1747,6 +1756,11 @@ void GLES2DecoderPassthroughImpl::BindOnePendingImage(
if (!image)
return;
+ // Because the binding is deferred, this texture may not be currently bound
+ // any more. Bind it again.
+ GLenum texture_type = TextureTargetToTextureType(target);
+ api()->glBindTextureFn(texture_type, texture->service_id());
+
// TODO: internalformat?
if (image->ShouldBindOrCopy() == gl::GLImage::BIND)
image->BindTexImage(target);
@@ -1757,6 +1771,14 @@ void GLES2DecoderPassthroughImpl::BindOnePendingImage(
// However, for now, we only try once.
texture->set_is_bind_pending(false);
+ // Re-bind the previous texture
+ const BoundTexture& bound_texture =
+ bound_textures_[static_cast<size_t>(GLenumToTextureTarget(texture_type))]
+ [active_texture_unit_];
+ GLuint prev_texture =
+ bound_texture.texture ? bound_texture.texture->service_id() : 0;
+ api()->glBindTextureFn(texture_type, prev_texture);
+
// Update any binding points that are currently bound for this texture.
RebindTexture(texture);
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
index ed3dca3c7bf..3e6179a51a8 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
@@ -119,6 +119,7 @@ error::Error DoCompressedTexSubImage3D(GLenum target,
GLsizei image_size,
GLsizei data_size,
const void* data);
+error::Error DoContextVisibilityHintCHROMIUM(GLboolean visibility);
error::Error DoCopyBufferSubData(GLenum readtarget,
GLenum writetarget,
GLintptr readoffset,
@@ -174,10 +175,14 @@ error::Error DoDispatchCompute(GLuint num_groups_x,
GLuint num_groups_z);
error::Error DoDispatchComputeIndirect(GLintptr offset);
error::Error DoDrawArrays(GLenum mode, GLint first, GLsizei count);
+error::Error DoDrawArraysIndirect(GLenum mode, const void* offset);
error::Error DoDrawElements(GLenum mode,
GLsizei count,
GLenum type,
const void* indices);
+error::Error DoDrawElementsIndirect(GLenum mode,
+ GLenum type,
+ const void* offset);
error::Error DoEnable(GLenum cap);
error::Error DoEnableVertexAttribArray(GLuint index);
error::Error DoFenceSync(GLenum condition, GLbitfield flags, GLuint client_id);
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
index 4243533c47c..e76e67405df 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -6,7 +6,9 @@
#include "base/bind_helpers.h"
#include "base/metrics/histogram_macros.h"
+#include "base/numerics/ranges.h"
#include "base/strings/string_number_conversions.h"
+#include "build/build_config.h"
#include "gpu/command_buffer/common/discardable_handle.h"
#include "gpu/command_buffer/service/decoder_client.h"
#include "gpu/command_buffer/service/gl_stream_texture_image.h"
@@ -125,7 +127,7 @@ GLuint GetTextureServiceID(gl::GLApi* api,
}
if (create_if_missing) {
- GLuint service_id = 0;
+ service_id = 0;
api->glGenTexturesFn(1, &service_id);
resources->texture_id_map.SetIDMapping(client_id, service_id);
return service_id;
@@ -707,7 +709,18 @@ error::Error GLES2DecoderPassthroughImpl::DoColorMask(GLboolean red,
}
error::Error GLES2DecoderPassthroughImpl::DoCompileShader(GLuint shader) {
+#if defined(OS_MACOSX)
+ // On mac we need this extension to support IOSurface backbuffers, but we
+ // don't want it exposed to WebGL user shaders. Temporarily disable it during
+ // shader compilation.
+ if (feature_info_->IsWebGLContext())
+ api()->glDisableExtensionANGLEFn("GL_ANGLE_texture_rectangle");
+#endif
api()->glCompileShaderFn(GetShaderServiceID(shader, resources_));
+#if defined(OS_MACOSX)
+ if (feature_info_->IsWebGLContext())
+ api()->glRequestExtensionANGLEFn("GL_ANGLE_texture_rectangle");
+#endif
return error::kNoError;
}
@@ -812,6 +825,13 @@ error::Error GLES2DecoderPassthroughImpl::DoCompressedTexSubImage3D(
return error::kNoError;
}
+error::Error GLES2DecoderPassthroughImpl::DoContextVisibilityHintCHROMIUM(
+ GLboolean visibility) {
+ if (feature_info_->IsWebGLContext())
+ context_->SetVisibility(visibility == GL_TRUE);
+ return error::kNoError;
+}
+
error::Error GLES2DecoderPassthroughImpl::DoCopyBufferSubData(
GLenum readtarget,
GLenum writetarget,
@@ -1144,6 +1164,16 @@ error::Error GLES2DecoderPassthroughImpl::DoDrawArrays(GLenum mode,
return error::kNoError;
}
+error::Error GLES2DecoderPassthroughImpl::DoDrawArraysIndirect(
+ GLenum mode,
+ const void* offset) {
+ BindPendingImagesForSamplersIfNeeded();
+ // TODO(jiajie.hu@intel.com): Use glDrawArraysIndirectRobustANGLEFn() when
+ // it's ready in ANGLE.
+ api()->glDrawArraysIndirectFn(mode, offset);
+ return error::kNoError;
+}
+
error::Error GLES2DecoderPassthroughImpl::DoDrawElements(GLenum mode,
GLsizei count,
GLenum type,
@@ -1153,6 +1183,17 @@ error::Error GLES2DecoderPassthroughImpl::DoDrawElements(GLenum mode,
return error::kNoError;
}
+error::Error GLES2DecoderPassthroughImpl::DoDrawElementsIndirect(
+ GLenum mode,
+ GLenum type,
+ const void* offset) {
+ BindPendingImagesForSamplersIfNeeded();
+ // TODO(jiajie.hu@intel.com): Use glDrawElementsIndirectRobustANGLEFn() when
+ // it's ready in ANGLE.
+ api()->glDrawElementsIndirectFn(mode, type, offset);
+ return error::kNoError;
+}
+
error::Error GLES2DecoderPassthroughImpl::DoEnable(GLenum cap) {
api()->glEnableFn(cap);
return error::kNoError;
@@ -3808,8 +3849,8 @@ error::Error GLES2DecoderPassthroughImpl::DoResizeCHROMIUM(GLuint width,
static_assert(sizeof(GLuint) >= sizeof(int), "Unexpected GLuint size.");
static const GLuint kMaxDimension =
static_cast<GLuint>(std::numeric_limits<int>::max());
- gfx::Size safe_size(std::min(std::max(1U, width), kMaxDimension),
- std::min(std::max(1U, height), kMaxDimension));
+ gfx::Size safe_size(base::ClampToRange(width, 1U, kMaxDimension),
+ base::ClampToRange(height, 1U, kMaxDimension));
if (offscreen_) {
if (!ResizeOffscreenFramebuffer(safe_size)) {
LOG(ERROR) << "GLES2DecoderPassthroughImpl: Context lost because "
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
index 50baa6cf95b..d1600cdaf68 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers.cc
@@ -125,6 +125,18 @@ error::Error GLES2DecoderPassthroughImpl::HandleDrawArrays(
return DoDrawArrays(mode, first, count);
}
+error::Error GLES2DecoderPassthroughImpl::HandleDrawArraysIndirect(
+ uint32_t immediate_data_size,
+ const volatile void* cmd_data) {
+ const volatile gles2::cmds::DrawArraysIndirect& c =
+ *static_cast<const volatile gles2::cmds::DrawArraysIndirect*>(cmd_data);
+ GLenum mode = static_cast<GLenum>(c.mode);
+ const void* offset =
+ reinterpret_cast<const void*>(static_cast<uintptr_t>(c.offset));
+
+ return DoDrawArraysIndirect(mode, offset);
+}
+
error::Error GLES2DecoderPassthroughImpl::HandleDrawElements(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
@@ -139,6 +151,19 @@ error::Error GLES2DecoderPassthroughImpl::HandleDrawElements(
return DoDrawElements(mode, count, type, indices);
}
+error::Error GLES2DecoderPassthroughImpl::HandleDrawElementsIndirect(
+ uint32_t immediate_data_size,
+ const volatile void* cmd_data) {
+ const volatile gles2::cmds::DrawElementsIndirect& c =
+ *static_cast<const volatile gles2::cmds::DrawElementsIndirect*>(cmd_data);
+ GLenum mode = static_cast<GLenum>(c.mode);
+ GLenum type = static_cast<GLenum>(c.type);
+ const void* offset =
+ reinterpret_cast<const void*>(static_cast<uintptr_t>(c.offset));
+
+ return DoDrawElementsIndirect(mode, type, offset);
+}
+
error::Error GLES2DecoderPassthroughImpl::HandleGetActiveAttrib(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
index 56fd680f368..019dfec502a 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
@@ -4613,6 +4613,20 @@ error::Error GLES2DecoderPassthroughImpl::HandlePathStencilFuncCHROMIUM(
return error::kNoError;
}
+error::Error GLES2DecoderPassthroughImpl::HandleContextVisibilityHintCHROMIUM(
+ uint32_t immediate_data_size,
+ const volatile void* cmd_data) {
+ const volatile gles2::cmds::ContextVisibilityHintCHROMIUM& c =
+ *static_cast<const volatile gles2::cmds::ContextVisibilityHintCHROMIUM*>(
+ cmd_data);
+ GLboolean visibility = static_cast<GLboolean>(c.visibility);
+ error::Error error = DoContextVisibilityHintCHROMIUM(visibility);
+ if (error != error::kNoError) {
+ return error;
+ }
+ return error::kNoError;
+}
+
error::Error GLES2DecoderPassthroughImpl::HandleCoverageModulationCHROMIUM(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_buffers.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_buffers.cc
index 43f1769a4d5..568ecd96c6b 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_buffers.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_buffers.cc
@@ -10,10 +10,8 @@
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
TEST_F(GLES3DecoderPassthroughTest, BindBufferBaseValidArgs) {
- BindBufferBase bind_cmd;
+ cmds::BindBufferBase bind_cmd;
bind_cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kClientBufferId);
EXPECT_EQ(error::kNoError, ExecuteCmd(bind_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -21,11 +19,11 @@ TEST_F(GLES3DecoderPassthroughTest, BindBufferBaseValidArgs) {
TEST_F(GLES3DecoderPassthroughTest, BindBufferBaseValidArgsNewId) {
constexpr GLuint kNewClientId = 502;
- BindBufferBase cmd;
+ cmds::BindBufferBase cmd;
cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(IsObjectHelper<IsBuffer>(kNewClientId));
+ EXPECT_TRUE(IsObjectHelper<cmds::IsBuffer>(kNewClientId));
}
TEST_F(GLES3DecoderPassthroughTest, BindBufferRangeValidArgs) {
@@ -42,7 +40,7 @@ TEST_F(GLES3DecoderPassthroughTest, BindBufferRangeValidArgs) {
buffer_data_cmd.Init(kTarget, kBufferSize, 0, 0, GL_STREAM_DRAW);
EXPECT_EQ(error::kNoError, ExecuteCmd(buffer_data_cmd));
- BindBufferRange bind_buffer_range_cmd;
+ cmds::BindBufferRange bind_buffer_range_cmd;
bind_buffer_range_cmd.Init(kTarget, 2, kClientBufferId, kRangeOffset,
kRangeSize);
EXPECT_EQ(error::kNoError, ExecuteCmd(bind_buffer_range_cmd));
@@ -54,7 +52,7 @@ TEST_F(GLES3DecoderPassthroughTest, BindBufferRangeValidArgsWithNoData) {
const GLintptr kRangeOffset = 4;
const GLsizeiptr kRangeSize = 8;
DoBindBuffer(kTarget, kClientBufferId);
- BindBufferRange cmd;
+ cmds::BindBufferRange cmd;
cmd.Init(kTarget, 2, kClientBufferId, kRangeOffset, kRangeSize);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -67,18 +65,18 @@ TEST_F(GLES3DecoderPassthroughTest, BindBufferRangeValidArgsWithLessData) {
const GLsizeiptr kBufferSize = kRangeOffset + kRangeSize - 4;
DoBindBuffer(kTarget, kClientBufferId);
DoBufferData(kTarget, kBufferSize, nullptr, GL_STREAM_DRAW);
- BindBufferRange cmd;
+ cmds::BindBufferRange cmd;
cmd.Init(kTarget, 2, kClientBufferId, kRangeOffset, kRangeSize);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
TEST_F(GLES3DecoderPassthroughTest, BindBufferRangeValidArgsNewId) {
- BindBufferRange cmd;
+ cmds::BindBufferRange cmd;
cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId, 4, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EXPECT_TRUE(IsObjectHelper<IsBuffer>(kNewClientId));
+ EXPECT_TRUE(IsObjectHelper<cmds::IsBuffer>(kNewClientId));
}
TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeUnmapBufferReadSucceeds) {
@@ -103,10 +101,9 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeUnmapBufferReadSucceeds) {
DoBufferSubData(kTarget, kOffset, kSize, data.data());
{ // MapBufferRange
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -117,7 +114,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeUnmapBufferReadSucceeds) {
}
{ // UnmapBuffer
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -139,8 +136,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeUnmapBufferWriteSucceeds) {
// uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
int8_t* client_data = GetSharedMemoryAs<int8_t*>() + sizeof(uint32_t);
DoBindBuffer(kTarget, kClientBufferId);
@@ -153,7 +149,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeUnmapBufferWriteSucceeds) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
{ // MapBufferRange succeeds
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -177,7 +173,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeUnmapBufferWriteSucceeds) {
memset(client_data, kValue0, kSize);
{ // UnmapBuffer succeeds
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -189,7 +185,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeUnmapBufferWriteSucceeds) {
{ // Re-map the buffer to verify the data
const GLbitfield kReadAccess = GL_MAP_READ_BIT;
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, 0, kTotalSize, kReadAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -207,7 +203,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeUnmapBufferWriteSucceeds) {
}
{ // UnmapBuffer succeeds
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -231,8 +227,7 @@ TEST_F(GLES3DecoderPassthroughTest, FlushMappedBufferRangeSucceeds) {
// uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
int8_t* client_data = GetSharedMemoryAs<int8_t*>() + sizeof(uint32_t);
DoBindBuffer(kTarget, kClientBufferId);
@@ -243,7 +238,7 @@ TEST_F(GLES3DecoderPassthroughTest, FlushMappedBufferRangeSucceeds) {
DoBufferData(kTarget, kTotalSize, gpu_data.data(), GL_STREAM_DRAW);
{ // MapBufferRange succeeds
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kMappedOffset, kMappedSize, kAccess, data_shm_id,
data_shm_offset, result_shm_id, result_shm_offset);
*result = 0;
@@ -267,13 +262,13 @@ TEST_F(GLES3DecoderPassthroughTest, FlushMappedBufferRangeSucceeds) {
memset(client_data, kValue0, kTotalSize);
{ // FlushMappedBufferRange succeeds
- FlushMappedBufferRange cmd;
+ cmds::FlushMappedBufferRange cmd;
cmd.Init(kTarget, kFlushRangeOffset, kFlushRangeSize);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
{ // UnmapBuffer succeeds
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -285,7 +280,7 @@ TEST_F(GLES3DecoderPassthroughTest, FlushMappedBufferRangeSucceeds) {
{ // Re-map the buffer to verify the data
const GLbitfield kReadAccess = GL_MAP_READ_BIT;
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, 0, kTotalSize, kReadAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -304,7 +299,7 @@ TEST_F(GLES3DecoderPassthroughTest, FlushMappedBufferRangeSucceeds) {
}
{ // UnmapBuffer succeeds
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -319,15 +314,14 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeNotInitFails) {
const GLbitfield kAccess = GL_MAP_READ_BIT;
std::vector<int8_t> data(kSize);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 1; // Any value other than 0.
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t data_shm_id = shared_memory_id_;
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
@@ -345,8 +339,7 @@ TEST_F(GLES3DecoderPassthroughTest,
DoBindBuffer(kTarget, kClientBufferId);
DoBufferData(kTarget, kSize + kOffset, nullptr, GL_STREAM_DRAW);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
@@ -356,7 +349,7 @@ TEST_F(GLES3DecoderPassthroughTest,
int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
memset(mem, 72, kSize); // Init to a random value other than 0.
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -376,8 +369,7 @@ TEST_F(GLES3DecoderPassthroughTest,
DoBindBuffer(kTarget, kClientBufferId);
DoBufferData(kTarget, kSize + kOffset, nullptr, GL_STREAM_DRAW);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
@@ -387,7 +379,7 @@ TEST_F(GLES3DecoderPassthroughTest,
int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
memset(mem, 72, kSize); // Init to a random value other than 0.
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -413,8 +405,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeWriteUnsynchronizedBit) {
DoBindBuffer(kTarget, kClientBufferId);
DoBufferData(kTarget, kSize + kOffset, nullptr, GL_STREAM_DRAW);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
@@ -424,7 +415,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeWriteUnsynchronizedBit) {
int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
memset(mem, 72, kSize); // Init to a random value other than 0.
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -449,8 +440,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeWithError) {
data[ii] = static_cast<int8_t>(ii % 255);
}
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
@@ -460,7 +450,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeWithError) {
int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
memset(mem, 72, kSize); // Init to a random value other than 0.
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -486,15 +476,14 @@ TEST_F(GLES3DecoderPassthroughTest, MapBufferRangeBadSharedMemoryFails) {
DoBindBuffer(kTarget, kClientBufferId);
DoBufferData(kTarget, kOffset + kSize, nullptr, GL_STREAM_DRAW);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t data_shm_id = shared_memory_id_;
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, kInvalidSharedMemoryId,
data_shm_offset, result_shm_id, result_shm_offset);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
@@ -514,7 +503,7 @@ TEST_F(GLES3DecoderPassthroughTest, UnmapBufferWriteNotMappedFails) {
DoBindBuffer(kTarget, kClientBufferId);
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -523,7 +512,7 @@ TEST_F(GLES3DecoderPassthroughTest, UnmapBufferWriteNotMappedFails) {
TEST_F(GLES3DecoderPassthroughTest, UnmapBufferWriteNoBoundBufferFails) {
const GLenum kTarget = GL_ARRAY_BUFFER;
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -546,10 +535,9 @@ TEST_F(GLES3DecoderPassthroughTest, BufferDataDestroysDataStore) {
DoBufferData(kTarget, kSize + kOffset, nullptr, GL_STREAM_DRAW);
{ // MapBufferRange succeeds
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -579,7 +567,7 @@ TEST_F(GLES3DecoderPassthroughTest, BufferDataDestroysDataStore) {
}
{ // UnmapBuffer fails.
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -603,10 +591,9 @@ TEST_F(GLES3DecoderPassthroughTest, DeleteBuffersDestroysDataStore) {
DoBufferData(kTarget, kSize + kOffset, nullptr, GL_STREAM_DRAW);
{ // MapBufferRange succeeds
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -636,7 +623,7 @@ TEST_F(GLES3DecoderPassthroughTest, DeleteBuffersDestroysDataStore) {
}
{ // UnmapBuffer fails.
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -655,11 +642,10 @@ TEST_F(GLES3DecoderPassthroughTest, MapUnmapBufferInvalidTarget) {
// uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
{
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -669,7 +655,7 @@ TEST_F(GLES3DecoderPassthroughTest, MapUnmapBufferInvalidTarget) {
}
{
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_commands.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_commands.cc
index 3fadfd90c46..5345bf00b62 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_commands.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_commands.cc
@@ -10,8 +10,6 @@
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
template <typename T>
class GLES2DecoderPassthroughFixedCommandTest
: public GLES2DecoderPassthroughTest {};
@@ -31,7 +29,7 @@ class GLES2DecoderPassthroughImmediateNoArgCommandTest
TYPED_TEST_SUITE_P(GLES2DecoderPassthroughImmediateNoArgCommandTest);
TYPED_TEST_P(GLES2DecoderPassthroughImmediateNoArgCommandTest, InvalidCommand) {
- TypeParam& cmd = *(this->template GetImmediateAs<TypeParam>());
+ auto& cmd = *(this->template GetImmediateAs<TypeParam>());
cmd.SetHeader();
EXPECT_EQ(error::kUnknownCommand, this->ExecuteImmediateCmd(cmd, 64));
}
@@ -45,7 +43,7 @@ TYPED_TEST_SUITE_P(GLES2DecoderPassthroughImmediateSizeArgCommandTest);
TYPED_TEST_P(GLES2DecoderPassthroughImmediateSizeArgCommandTest,
InvalidCommand) {
- TypeParam& cmd = *(this->template GetImmediateAs<TypeParam>());
+ auto& cmd = *(this->template GetImmediateAs<TypeParam>());
cmd.SetHeader(0);
EXPECT_EQ(error::kUnknownCommand, this->ExecuteImmediateCmd(cmd, 0));
}
@@ -53,95 +51,96 @@ REGISTER_TYPED_TEST_SUITE_P(GLES2DecoderPassthroughImmediateSizeArgCommandTest,
InvalidCommand);
using ES3FixedCommandTypes0 =
- ::testing::Types<BindBufferBase,
- BindBufferRange,
- BindSampler,
- BindTransformFeedback,
- ClearBufferfi,
- ClientWaitSync,
- CopyBufferSubData,
- CompressedTexImage3D,
- CompressedTexImage3DBucket,
- CompressedTexSubImage3D,
- CompressedTexSubImage3DBucket,
- CopyTexSubImage3D,
- DeleteSync,
- FenceSync,
- FlushMappedBufferRange,
- FramebufferTextureLayer,
- GetActiveUniformBlockiv,
- GetActiveUniformBlockName,
- GetActiveUniformsiv,
- GetFragDataLocation,
- GetBufferParameteri64v,
- GetInteger64v,
- GetInteger64i_v,
- GetIntegeri_v,
- GetInternalformativ,
- GetSamplerParameterfv,
- GetSamplerParameteriv,
- GetSynciv,
- GetUniformBlockIndex,
- GetUniformBlocksCHROMIUM,
- GetUniformsES3CHROMIUM,
- GetTransformFeedbackVarying,
- GetTransformFeedbackVaryingsCHROMIUM,
- GetUniformuiv,
- GetUniformIndices,
- GetVertexAttribIiv,
- GetVertexAttribIuiv,
- IsSampler,
- IsSync,
- IsTransformFeedback,
- MapBufferRange,
- PauseTransformFeedback,
- ReadBuffer,
- ResumeTransformFeedback,
- SamplerParameterf,
- SamplerParameteri,
- TexImage3D,
- TexStorage3D,
- TexSubImage3D>;
-
-using ES3FixedCommandTypes1 = ::testing::Types<TransformFeedbackVaryingsBucket,
- Uniform1ui,
- Uniform2ui,
- Uniform3ui,
- Uniform4ui,
- UniformBlockBinding,
- UnmapBuffer,
- VertexAttribI4i,
- VertexAttribI4ui,
- VertexAttribIPointer,
- WaitSync,
- BeginTransformFeedback,
- EndTransformFeedback>;
+ ::testing::Types<cmds::BindBufferBase,
+ cmds::BindBufferRange,
+ cmds::BindSampler,
+ cmds::BindTransformFeedback,
+ cmds::ClearBufferfi,
+ cmds::ClientWaitSync,
+ cmds::CopyBufferSubData,
+ cmds::CompressedTexImage3D,
+ cmds::CompressedTexImage3DBucket,
+ cmds::CompressedTexSubImage3D,
+ cmds::CompressedTexSubImage3DBucket,
+ cmds::CopyTexSubImage3D,
+ cmds::DeleteSync,
+ cmds::FenceSync,
+ cmds::FlushMappedBufferRange,
+ cmds::FramebufferTextureLayer,
+ cmds::GetActiveUniformBlockiv,
+ cmds::GetActiveUniformBlockName,
+ cmds::GetActiveUniformsiv,
+ cmds::GetFragDataLocation,
+ cmds::GetBufferParameteri64v,
+ cmds::GetInteger64v,
+ cmds::GetInteger64i_v,
+ cmds::GetIntegeri_v,
+ cmds::GetInternalformativ,
+ cmds::GetSamplerParameterfv,
+ cmds::GetSamplerParameteriv,
+ cmds::GetSynciv,
+ cmds::GetUniformBlockIndex,
+ cmds::GetUniformBlocksCHROMIUM,
+ cmds::GetUniformsES3CHROMIUM,
+ cmds::GetTransformFeedbackVarying,
+ cmds::GetTransformFeedbackVaryingsCHROMIUM,
+ cmds::GetUniformuiv,
+ cmds::GetUniformIndices,
+ cmds::GetVertexAttribIiv,
+ cmds::GetVertexAttribIuiv,
+ cmds::IsSampler,
+ cmds::IsSync,
+ cmds::IsTransformFeedback,
+ cmds::MapBufferRange,
+ cmds::PauseTransformFeedback,
+ cmds::ReadBuffer,
+ cmds::ResumeTransformFeedback,
+ cmds::SamplerParameterf,
+ cmds::SamplerParameteri,
+ cmds::TexImage3D,
+ cmds::TexStorage3D,
+ cmds::TexSubImage3D>;
+
+using ES3FixedCommandTypes1 =
+ ::testing::Types<cmds::TransformFeedbackVaryingsBucket,
+ cmds::Uniform1ui,
+ cmds::Uniform2ui,
+ cmds::Uniform3ui,
+ cmds::Uniform4ui,
+ cmds::UniformBlockBinding,
+ cmds::UnmapBuffer,
+ cmds::VertexAttribI4i,
+ cmds::VertexAttribI4ui,
+ cmds::VertexAttribIPointer,
+ cmds::WaitSync,
+ cmds::BeginTransformFeedback,
+ cmds::EndTransformFeedback>;
using ES3ImmediateNoArgCommandTypes0 =
- ::testing::Types<ClearBufferivImmediate,
- ClearBufferuivImmediate,
- ClearBufferfvImmediate,
- SamplerParameterfvImmediate,
- SamplerParameterfvImmediate,
- VertexAttribI4ivImmediate,
- VertexAttribI4uivImmediate>;
+ ::testing::Types<cmds::ClearBufferivImmediate,
+ cmds::ClearBufferuivImmediate,
+ cmds::ClearBufferfvImmediate,
+ cmds::SamplerParameterfvImmediate,
+ cmds::SamplerParameterfvImmediate,
+ cmds::VertexAttribI4ivImmediate,
+ cmds::VertexAttribI4uivImmediate>;
using ES3ImmediateSizeArgCommandTypes0 =
- ::testing::Types<DeleteSamplersImmediate,
- DeleteTransformFeedbacksImmediate,
- GenTransformFeedbacksImmediate,
- InvalidateFramebufferImmediate,
- InvalidateSubFramebufferImmediate,
- Uniform1uivImmediate,
- Uniform2uivImmediate,
- Uniform3uivImmediate,
- Uniform4uivImmediate,
- UniformMatrix2x3fvImmediate,
- UniformMatrix2x4fvImmediate,
- UniformMatrix3x2fvImmediate,
- UniformMatrix3x4fvImmediate,
- UniformMatrix4x2fvImmediate,
- UniformMatrix4x3fvImmediate>;
+ ::testing::Types<cmds::DeleteSamplersImmediate,
+ cmds::DeleteTransformFeedbacksImmediate,
+ cmds::GenTransformFeedbacksImmediate,
+ cmds::InvalidateFramebufferImmediate,
+ cmds::InvalidateSubFramebufferImmediate,
+ cmds::Uniform1uivImmediate,
+ cmds::Uniform2uivImmediate,
+ cmds::Uniform3uivImmediate,
+ cmds::Uniform4uivImmediate,
+ cmds::UniformMatrix2x3fvImmediate,
+ cmds::UniformMatrix2x4fvImmediate,
+ cmds::UniformMatrix3x2fvImmediate,
+ cmds::UniformMatrix3x4fvImmediate,
+ cmds::UniformMatrix4x2fvImmediate,
+ cmds::UniformMatrix4x3fvImmediate>;
INSTANTIATE_TYPED_TEST_SUITE_P(0,
GLES2DecoderPassthroughFixedCommandTest,
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_discardable_textures.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_discardable_textures.cc
index 1db45112e32..99899cd2025 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_discardable_textures.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_discardable_textures.cc
@@ -8,8 +8,6 @@
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
TEST_F(GLES2DecoderPassthroughTest, TestInitDiscardableTexture) {
DoBindTexture(GL_TEXTURE_2D, kClientTextureId);
EXPECT_EQ(
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_drawing.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_drawing.cc
index ef270bb2c5c..04c231e7e52 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_drawing.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_drawing.cc
@@ -8,10 +8,8 @@
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
TEST_F(GLES2WebGLDecoderPassthroughTest, DrawArraysInstancedANGLEEnablement) {
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, 3, 1);
EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
@@ -20,7 +18,7 @@ TEST_F(GLES2WebGLDecoderPassthroughTest, DrawArraysInstancedANGLEEnablement) {
}
TEST_F(GLES2WebGLDecoderPassthroughTest, VertexAttribDivisorANGLEEnablement) {
- VertexAttribDivisorANGLE cmd;
+ cmds::VertexAttribDivisorANGLE cmd;
cmd.Init(0, 1);
EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
@@ -29,7 +27,7 @@ TEST_F(GLES2WebGLDecoderPassthroughTest, VertexAttribDivisorANGLEEnablement) {
}
TEST_F(GLES2WebGLDecoderPassthroughTest, DrawElementsInstancedANGLEEnablement) {
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0, 1);
EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_framebuffers.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_framebuffers.cc
index 56d10fc8394..b58264a1a9e 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_framebuffers.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_framebuffers.cc
@@ -10,24 +10,21 @@
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
TEST_F(GLES3DecoderPassthroughTest, ReadPixelsBufferBound) {
const GLsizei kWidth = 5;
const GLsizei kHeight = 3;
const GLint kBytesPerPixel = 4;
GLint size = kWidth * kHeight * kBytesPerPixel;
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
DoBindBuffer(GL_PIXEL_PACK_BUFFER, kClientBufferId);
DoBufferData(GL_PIXEL_PACK_BUFFER, size, nullptr, GL_STATIC_DRAW);
- ReadPixels cmd;
+ cmds::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);
result->success = 0;
@@ -39,7 +36,7 @@ TEST_F(GLES3DecoderPassthroughTest, ReadPixels2PixelPackBufferNoBufferBound) {
const GLsizei kWidth = 5;
const GLsizei kHeight = 3;
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0, 0, 0, false);
EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -54,7 +51,7 @@ TEST_F(GLES3DecoderPassthroughTest, ReadPixels2PixelPackBuffer) {
DoBindBuffer(GL_PIXEL_PACK_BUFFER, kClientBufferId);
DoBufferData(GL_PIXEL_PACK_BUFFER, size, nullptr, GL_STATIC_DRAW);
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0, 0, 0, false);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -64,8 +61,7 @@ TEST_F(GLES2DecoderPassthroughTest, DiscardFramebufferEXTUnsupported) {
const GLenum target = GL_FRAMEBUFFER;
const GLsizei count = 1;
const GLenum attachments[] = {GL_COLOR_EXT};
- DiscardFramebufferEXTImmediate& cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DiscardFramebufferEXTImmediate>();
cmd.Init(target, count, attachments);
EXPECT_EQ(error::kUnknownCommand,
ExecuteImmediateCmd(cmd, sizeof(attachments)));
@@ -85,8 +81,7 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsOutOfRange) {
kClientTextureId, 0);
// Put the resulting pixels and the result in shared memory
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
@@ -126,7 +121,7 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsOutOfRange) {
// written
memset(dest, 0, 4 * test.w * test.h);
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(test.x, test.y, test.w, test.h, kFormat, GL_UNSIGNED_BYTE,
pixels_shm_id, pixels_shm_offset, result_shm_id, result_shm_offset,
false);
@@ -164,16 +159,15 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsOutOfRange) {
}
TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsync) {
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
- ReadPixels read_pixels_cmd;
+ cmds::ReadPixels read_pixels_cmd;
read_pixels_cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
pixels_shm_id, pixels_shm_offset, result_shm_id,
result_shm_offset, true);
@@ -198,7 +192,7 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsync) {
EXPECT_TRUE(pending_read_pixels.waiting_async_pack_queries.empty());
}
- Finish finish_cmd;
+ cmds::Finish finish_cmd;
finish_cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(finish_cmd));
EXPECT_FALSE(GetDecoder()->HasMoreIdleWork());
@@ -206,8 +200,7 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsync) {
}
TEST_F(GLES3DecoderPassthroughTest, ReadPixelsAsyncSkippedIfPBOBound) {
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
@@ -227,7 +220,7 @@ TEST_F(GLES3DecoderPassthroughTest, ReadPixelsAsyncSkippedIfPBOBound) {
// Check that there is no idle work to do when a PBO is already bound and that
// the ReadPixel succeeded
- ReadPixels read_pixels_cmd;
+ cmds::ReadPixels read_pixels_cmd;
read_pixels_cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0,
result_shm_id, result_shm_offset, true);
result->success = 0;
@@ -237,15 +230,15 @@ TEST_F(GLES3DecoderPassthroughTest, ReadPixelsAsyncSkippedIfPBOBound) {
}
TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncModifyCommand) {
- typedef ReadPixels::Result Result;
size_t shm_size = 0;
- Result* result = GetSharedMemoryAsWithSize<Result*>(&shm_size);
+ auto* result =
+ GetSharedMemoryAsWithSize<cmds::ReadPixels::Result*>(&shm_size);
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
size_t pixels_memory_size = shm_size - 1;
char* pixels = reinterpret_cast<char*>(result + 1);
@@ -255,7 +248,7 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncModifyCommand) {
EXPECT_GT(pixels_memory_size, read_pixels_result_size);
memset(pixels, kDummyValue, pixels_memory_size);
- ReadPixels read_pixels_cmd;
+ cmds::ReadPixels read_pixels_cmd;
read_pixels_cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
pixels_shm_id, pixels_shm_offset, result_shm_id,
result_shm_offset, true);
@@ -271,7 +264,7 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncModifyCommand) {
pixels_shm_offset, result_shm_id, result_shm_offset,
false);
- Finish finish_cmd;
+ cmds::Finish finish_cmd;
finish_cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(finish_cmd));
EXPECT_FALSE(GetDecoder()->HasMoreIdleWork());
@@ -289,15 +282,15 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncModifyCommand) {
}
TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncChangePackAlignment) {
- typedef ReadPixels::Result Result;
size_t shm_size = 0;
- Result* result = GetSharedMemoryAsWithSize<Result*>(&shm_size);
+ auto* result =
+ GetSharedMemoryAsWithSize<cmds::ReadPixels::Result*>(&shm_size);
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
size_t pixels_memory_size = shm_size - 1;
char* pixels = reinterpret_cast<char*>(result + 1);
@@ -307,7 +300,7 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncChangePackAlignment) {
EXPECT_GT(pixels_memory_size, read_pixels_result_size);
memset(pixels, kDummyValue, pixels_memory_size);
- ReadPixels read_pixels_cmd;
+ cmds::ReadPixels read_pixels_cmd;
read_pixels_cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
pixels_shm_id, pixels_shm_offset, result_shm_id,
result_shm_offset, true);
@@ -317,12 +310,12 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncChangePackAlignment) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_TRUE(GetDecoder()->HasMoreIdleWork());
- PixelStorei pixel_store_i_cmd;
+ cmds::PixelStorei pixel_store_i_cmd;
pixel_store_i_cmd.Init(GL_PACK_ALIGNMENT, 8);
EXPECT_EQ(error::kNoError, ExecuteCmd(pixel_store_i_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- Finish finish_cmd;
+ cmds::Finish finish_cmd;
finish_cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(finish_cmd));
EXPECT_FALSE(GetDecoder()->HasMoreIdleWork());
@@ -340,18 +333,17 @@ TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncChangePackAlignment) {
}
TEST_F(GLES2DecoderPassthroughTest, ReadPixelsAsyncError) {
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
// Provide parameters that will cause glReadPixels to fail with
// GL_INVALID_OPERATION
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_SHORT, pixels_shm_id,
pixels_shm_offset, result_shm_id, result_shm_offset, true);
result->success = 0;
@@ -365,7 +357,7 @@ TEST_F(GLES2DecoderPassthroughTest,
RenderbufferStorageMultisampleEXTNotSupported) {
DoBindRenderbuffer(GL_RENDERBUFFER, kClientRenderbufferId);
// GL_EXT_framebuffer_multisample uses RenderbufferStorageMultisampleCHROMIUM.
- RenderbufferStorageMultisampleEXT cmd;
+ cmds::RenderbufferStorageMultisampleEXT cmd;
cmd.Init(GL_RENDERBUFFER, 1, GL_RGBA4, 1, 1);
EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
}
@@ -377,13 +369,13 @@ TEST_F(GLES2DecoderPassthroughTest,
DoFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, kClientRenderbufferId);
- GetFramebufferAttachmentParameteriv::Result* result =
- static_cast<GetFramebufferAttachmentParameteriv::Result*>(
+ auto* result =
+ static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
shared_memory_address_);
result->size = 0;
const GLint* result_value = result->GetData();
- GetFramebufferAttachmentParameteriv cmd;
+ cmds::GetFramebufferAttachmentParameteriv cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, shared_memory_id_,
shared_memory_offset_);
@@ -399,13 +391,13 @@ TEST_F(GLES2DecoderPassthroughTest,
DoFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
kClientTextureId, 0);
- GetFramebufferAttachmentParameteriv::Result* result =
- static_cast<GetFramebufferAttachmentParameteriv::Result*>(
+ auto* result =
+ static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
shared_memory_address_);
result->size = 0;
const GLint* result_value = result->GetData();
- GetFramebufferAttachmentParameteriv cmd;
+ cmds::GetFramebufferAttachmentParameteriv cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, shared_memory_id_,
shared_memory_offset_);
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc
index 9ab5d85cc63..97d5900f914 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_unittest_textures.cc
@@ -90,8 +90,6 @@ class TestSharedImageBackingPassthrough : public SharedImageBacking {
} // namespace
-using namespace cmds;
-
TEST_F(GLES2DecoderPassthroughTest, CreateAndTexStorage2DSharedImageCHROMIUM) {
MemoryTypeTracker memory_tracker(nullptr);
Mailbox mailbox = Mailbox::GenerateForSharedImage();
@@ -102,8 +100,8 @@ TEST_F(GLES2DecoderPassthroughTest, CreateAndTexStorage2DSharedImageCHROMIUM) {
gfx::ColorSpace(), 0, kNewServiceId),
&memory_tracker);
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -137,8 +135,8 @@ TEST_F(GLES2DecoderPassthroughTest,
CreateAndTexStorage2DSharedImageCHROMIUMInvalidMailbox) {
// Attempt to use an invalid mailbox.
Mailbox mailbox;
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
@@ -166,8 +164,8 @@ TEST_F(GLES2DecoderPassthroughTest,
&memory_tracker);
{
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -176,8 +174,8 @@ TEST_F(GLES2DecoderPassthroughTest,
// Try to import the SharedImage a second time at the same client ID. We
// should get a GL failure.
{
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -201,37 +199,37 @@ TEST_F(GLES2DecoderPassthroughTest, BeginEndSharedImageAccessCRHOMIUM) {
&memory_tracker);
shared_images.emplace_back(std::move(shared_image));
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
auto client_id = kNewClientId + i;
cmd.Init(client_id, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Begin/end read access for the created image.
- BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
read_access_cmd.Init(client_id, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(read_access_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EndSharedImageAccessDirectCHROMIUM read_end_cmd;
+ cmds::EndSharedImageAccessDirectCHROMIUM read_end_cmd;
read_end_cmd.Init(client_id);
EXPECT_EQ(error::kNoError, ExecuteCmd(read_end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Begin/end read/write access for the created image.
- BeginSharedImageAccessDirectCHROMIUM readwrite_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM readwrite_access_cmd;
readwrite_access_cmd.Init(client_id,
GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(readwrite_access_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EndSharedImageAccessDirectCHROMIUM readwrite_end_cmd;
+ cmds::EndSharedImageAccessDirectCHROMIUM readwrite_end_cmd;
readwrite_end_cmd.Init(client_id);
// EXPECT_EQ(error::kNoError, ExecuteCmd(readwrite_end_cmd));
// EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
for (int i = 20; i > 10; --i) {
- EndSharedImageAccessDirectCHROMIUM readwrite_end_cmd;
+ cmds::EndSharedImageAccessDirectCHROMIUM readwrite_end_cmd;
readwrite_end_cmd.Init(kNewClientId + i);
EXPECT_EQ(error::kNoError, ExecuteCmd(readwrite_end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -246,7 +244,7 @@ TEST_F(GLES2DecoderPassthroughTest, BeginEndSharedImageAccessCRHOMIUM) {
TEST_F(GLES2DecoderPassthroughTest,
BeginSharedImageAccessDirectCHROMIUMInvalidMode) {
// Try to begin access with an invalid mode.
- BeginSharedImageAccessDirectCHROMIUM bad_mode_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM bad_mode_access_cmd;
bad_mode_access_cmd.Init(kClientTextureId, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(bad_mode_access_cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -255,7 +253,7 @@ TEST_F(GLES2DecoderPassthroughTest,
TEST_F(GLES2DecoderPassthroughTest,
BeginSharedImageAccessDirectCHROMIUMNotSharedImage) {
// Try to begin access with a texture that is not a shared image.
- BeginSharedImageAccessDirectCHROMIUM not_shared_image_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM not_shared_image_access_cmd;
not_shared_image_access_cmd.Init(
kClientTextureId, GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(not_shared_image_access_cmd));
@@ -274,8 +272,8 @@ TEST_F(GLES2DecoderPassthroughTest,
gfx::ColorSpace(), 0, kNewServiceId),
&memory_tracker);
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -290,7 +288,7 @@ TEST_F(GLES2DecoderPassthroughTest,
TestSharedImageRepresentationPassthrough*>(
found->second.representation())
->set_can_access(false);
- BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
read_access_cmd.Init(kNewClientId, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(read_access_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -303,7 +301,7 @@ TEST_F(GLES2DecoderPassthroughTest,
TEST_F(GLES2DecoderPassthroughTest,
EndSharedImageAccessDirectCHROMIUMNotSharedImage) {
// Try to end access with a texture that is not a shared image.
- EndSharedImageAccessDirectCHROMIUM not_shared_image_end_cmd;
+ cmds::EndSharedImageAccessDirectCHROMIUM not_shared_image_end_cmd;
not_shared_image_end_cmd.Init(kClientTextureId);
EXPECT_EQ(error::kNoError, ExecuteCmd(not_shared_image_end_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
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 a3147bd189d..3e4071b35d8 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc
@@ -56,8 +56,6 @@ using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
void GLES2DecoderRGBBackbufferTest::SetUp() {
InitState init;
init.bind_generates_resource = true;
@@ -72,12 +70,12 @@ void GLES2DecoderManualInitTest::EnableDisableTest(GLenum cap,
SetupExpectationsForEnableDisable(cap, enable);
}
if (enable) {
- Enable cmd;
+ cmds::Enable cmd;
cmd.Init(cap);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
} else {
- Disable cmd;
+ cmds::Disable cmd;
cmd.Init(cap);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -123,17 +121,17 @@ TEST_P(GLES2DecoderTest, GetIntegervCached) {
GL_MAX_RENDERBUFFER_SIZE, TestHelper::kMaxRenderbufferSize,
},
};
- typedef GetIntegerv::Result Result;
for (size_t ii = 0; ii < sizeof(tests) / sizeof(tests[0]); ++ii) {
const TestInfo& test = tests[ii];
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
EXPECT_CALL(*gl_, GetIntegerv(test.pname, _)).Times(0);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -145,11 +143,11 @@ TEST_P(GLES2DecoderTest, GetIntegervCached) {
TEST_P(GLES2DecoderWithShaderTest, GetMaxValueInBufferCHROMIUM) {
SetupIndexBuffer();
- GetMaxValueInBufferCHROMIUM::Result* result =
- static_cast<GetMaxValueInBufferCHROMIUM::Result*>(shared_memory_address_);
+ auto* result = static_cast<cmds::GetMaxValueInBufferCHROMIUM::Result*>(
+ shared_memory_address_);
*result = 0;
- GetMaxValueInBufferCHROMIUM cmd;
+ cmds::GetMaxValueInBufferCHROMIUM cmd;
cmd.Init(client_element_buffer_id_, kValidIndexRangeCount, GL_UNSIGNED_SHORT,
kValidIndexRangeStart * 2, shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -273,7 +271,7 @@ TEST_P(GLES2DecoderTest, TestImageBindingForDecoderManagement) {
GL_RGBA, GL_UNSIGNED_BYTE);
scoped_refptr<gl::GLImage> image(new gl::GLImageStub);
abstract_texture->BindImage(image.get(), GetParam());
- ValidatingAbstractTextureImpl* validating_texture =
+ auto* validating_texture =
static_cast<ValidatingAbstractTextureImpl*>(abstract_texture.get());
TextureRef* texture_ref = validating_texture->GetTextureRefForTesting();
Texture::ImageState state;
@@ -460,8 +458,8 @@ TEST_P(GLES2DecoderTest, TestAbstractTextureSetClearedWorks) {
TEST_P(GLES3DecoderTest, GetInternalformativValidArgsSamples) {
const GLint kNumSampleCounts = 8;
- typedef GetInternalformativ::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetInternalformativ::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetInternalformativ(GL_RENDERBUFFER, GL_RGBA8,
GL_NUM_SAMPLE_COUNTS, 1, _))
.WillOnce(SetArgPointee<4>(kNumSampleCounts))
@@ -471,7 +469,7 @@ TEST_P(GLES3DecoderTest, GetInternalformativValidArgsSamples) {
.Times(1)
.RetiresOnSaturation();
result->size = 0;
- GetInternalformativ cmd;
+ cmds::GetInternalformativ cmd;
cmd.Init(GL_RENDERBUFFER, GL_RGBA8, GL_SAMPLES,
shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -481,14 +479,14 @@ TEST_P(GLES3DecoderTest, GetInternalformativValidArgsSamples) {
TEST_P(GLES3DecoderTest, GetInternalformativValidArgsNumSampleCounts) {
const GLint kNumSampleCounts = 8;
- typedef GetInternalformativ::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetInternalformativ::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetInternalformativ(GL_RENDERBUFFER, GL_RGBA8,
GL_NUM_SAMPLE_COUNTS, 1, _))
.WillOnce(SetArgPointee<4>(kNumSampleCounts))
.RetiresOnSaturation();
result->size = 0;
- GetInternalformativ cmd;
+ cmds::GetInternalformativ cmd;
cmd.Init(GL_RENDERBUFFER, GL_RGBA8, GL_NUM_SAMPLE_COUNTS,
shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -498,9 +496,9 @@ TEST_P(GLES3DecoderTest, GetInternalformativValidArgsNumSampleCounts) {
}
TEST_P(GLES3DecoderTest, ClientWaitSyncValid) {
- typedef ClientWaitSync::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- ClientWaitSync cmd;
+ auto* result =
+ static_cast<cmds::ClientWaitSync::Result*>(shared_memory_address_);
+ cmds::ClientWaitSync cmd;
cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0,
shared_memory_id_, shared_memory_offset_);
EXPECT_CALL(*gl_,
@@ -515,9 +513,9 @@ TEST_P(GLES3DecoderTest, ClientWaitSyncValid) {
}
TEST_P(GLES3DecoderTest, ClientWaitSyncNonZeroTimeoutValid) {
- typedef ClientWaitSync::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- ClientWaitSync cmd;
+ auto* result =
+ static_cast<cmds::ClientWaitSync::Result*>(shared_memory_address_);
+ cmds::ClientWaitSync cmd;
const GLuint64 kTimeout = 0xABCDEF0123456789;
cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, kTimeout,
shared_memory_id_, shared_memory_offset_);
@@ -533,9 +531,9 @@ TEST_P(GLES3DecoderTest, ClientWaitSyncNonZeroTimeoutValid) {
}
TEST_P(GLES3DecoderTest, ClientWaitSyncInvalidSyncFails) {
- typedef ClientWaitSync::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- ClientWaitSync cmd;
+ auto* result =
+ static_cast<cmds::ClientWaitSync::Result*>(shared_memory_address_);
+ cmds::ClientWaitSync cmd;
cmd.Init(kInvalidClientId, GL_SYNC_FLUSH_COMMANDS_BIT, 0,
shared_memory_id_, shared_memory_offset_);
*result = GL_WAIT_FAILED;
@@ -545,9 +543,9 @@ TEST_P(GLES3DecoderTest, ClientWaitSyncInvalidSyncFails) {
}
TEST_P(GLES3DecoderTest, ClientWaitSyncResultNotInitFails) {
- typedef ClientWaitSync::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- ClientWaitSync cmd;
+ auto* result =
+ static_cast<cmds::ClientWaitSync::Result*>(shared_memory_address_);
+ cmds::ClientWaitSync cmd;
cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0,
shared_memory_id_, shared_memory_offset_);
*result = 1; // Any value other than GL_WAIT_FAILED
@@ -555,9 +553,9 @@ TEST_P(GLES3DecoderTest, ClientWaitSyncResultNotInitFails) {
}
TEST_P(GLES3DecoderTest, ClientWaitSyncBadSharedMemoryFails) {
- typedef ClientWaitSync::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- ClientWaitSync cmd;
+ auto* result =
+ static_cast<cmds::ClientWaitSync::Result*>(shared_memory_address_);
+ cmds::ClientWaitSync cmd;
*result = GL_WAIT_FAILED;
cmd.Init(client_sync_id_, GL_SYNC_FLUSH_COMMANDS_BIT, 0,
kInvalidSharedMemoryId, shared_memory_offset_);
@@ -576,7 +574,7 @@ TEST_P(GLES3DecoderTest, WaitSyncValidArgs) {
.Times(1)
.RetiresOnSaturation();
- WaitSync cmd;
+ cmds::WaitSync cmd;
cmd.Init(client_sync_id_, 0, kTimeout);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -594,22 +592,22 @@ TEST_P(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) {
InitState init;
InitDecoder(init);
- BindTexture cmd1;
+ cmds::BindTexture cmd1;
cmd1.Init(GL_TEXTURE_2D, kInvalidClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd1));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- BindBuffer cmd2;
+ cmds::BindBuffer cmd2;
cmd2.Init(GL_ARRAY_BUFFER, kInvalidClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- BindFramebuffer cmd3;
+ cmds::BindFramebuffer cmd3;
cmd3.Init(GL_FRAMEBUFFER, kInvalidClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd3));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- BindRenderbuffer cmd4;
+ cmds::BindRenderbuffer cmd4;
cmd4.Init(GL_RENDERBUFFER, kInvalidClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd4));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -617,14 +615,14 @@ TEST_P(GLES2DecoderManualInitTest, BindGeneratesResourceFalse) {
TEST_P(GLES2DecoderTest, EnableFeatureCHROMIUMBadBucket) {
const uint32_t kBadBucketId = 123;
- EnableFeatureCHROMIUM cmd;
+ cmds::EnableFeatureCHROMIUM cmd;
cmd.Init(kBadBucketId, shared_memory_id_, shared_memory_offset_);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
TEST_P(GLES2DecoderTest, RequestExtensionCHROMIUMBadBucket) {
const uint32_t kBadBucketId = 123;
- RequestExtensionCHROMIUM cmd;
+ cmds::RequestExtensionCHROMIUM cmd;
cmd.Init(kBadBucketId);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
}
@@ -634,8 +632,8 @@ TEST_P(GLES2DecoderTest, BeginQueryEXTDisabled) {
}
TEST_P(GLES2DecoderTest, GenQueriesEXTImmediateValidArgs) {
- GenQueriesEXTImmediate* cmd =
- GetImmediateAs<GenQueriesEXTImmediate>();
+ cmds::GenQueriesEXTImmediate* cmd =
+ GetImmediateAs<cmds::GenQueriesEXTImmediate>();
GLuint temp = kNewClientId;
cmd->Init(1, &temp);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
@@ -646,8 +644,8 @@ TEST_P(GLES2DecoderTest, GenQueriesEXTImmediateValidArgs) {
}
TEST_P(GLES2DecoderTest, GenQueriesEXTImmediateDuplicateOrNullIds) {
- GenQueriesEXTImmediate* cmd =
- GetImmediateAs<GenQueriesEXTImmediate>();
+ cmds::GenQueriesEXTImmediate* cmd =
+ GetImmediateAs<cmds::GenQueriesEXTImmediate>();
GLuint temp[3] = {kNewClientId, kNewClientId + 1, kNewClientId};
cmd->Init(3, temp);
EXPECT_EQ(error::kInvalidArguments, ExecuteImmediateCmd(*cmd, sizeof(temp)));
@@ -663,8 +661,8 @@ TEST_P(GLES2DecoderTest, GenQueriesEXTImmediateDuplicateOrNullIds) {
}
TEST_P(GLES2DecoderTest, GenQueriesEXTImmediateInvalidArgs) {
- GenQueriesEXTImmediate* cmd =
- GetImmediateAs<GenQueriesEXTImmediate>();
+ cmds::GenQueriesEXTImmediate* cmd =
+ GetImmediateAs<cmds::GenQueriesEXTImmediate>();
cmd->Init(1, &client_query_id_);
EXPECT_EQ(error::kInvalidArguments,
ExecuteImmediateCmd(*cmd, sizeof(&client_query_id_)));
@@ -681,12 +679,12 @@ TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXT) {
InitDecoder(init);
// Test end fails if no begin.
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
// Test id = 0 fails.
begin_cmd.Init(GL_ANY_SAMPLES_PASSED_EXT, 0, shared_memory_id_,
@@ -694,7 +692,7 @@ TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXT) {
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
// Test valid parameters work.
EXPECT_CALL(*gl_, GenQueries(1, _))
@@ -759,7 +757,7 @@ TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXT) {
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
// QueryCounter should fail if using a different target
- QueryCounterEXT query_counter_cmd;
+ cmds::QueryCounterEXT query_counter_cmd;
query_counter_cmd.Init(kNewClientId, GL_TIMESTAMP, shared_memory_id_,
kSharedMemoryOffset, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(query_counter_cmd));
@@ -797,7 +795,7 @@ static void ExecuteGenerateQueryCmd(GLES2DecoderTestBase* test,
GLenum target,
GLuint client_id,
GLuint service_id) {
- test->GenHelper<GenQueriesEXTImmediate>(client_id);
+ test->GenHelper<cmds::GenQueriesEXTImmediate>(client_id);
if (GL_ANY_SAMPLES_PASSED_EXT == target) {
EXPECT_CALL(*gl, GenQueries(1, _))
.WillOnce(SetArgPointee<1>(service_id))
@@ -821,7 +819,7 @@ static error::Error ExecuteBeginQueryCmd(GLES2DecoderTestBase* test,
timing_queries->ExpectGPUTimerQuery(*gl, true);
}
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
begin_cmd.Init(target, client_id, shm_id, shm_offset);
return test->ExecuteCmd(begin_cmd);
}
@@ -849,7 +847,7 @@ static error::Error ExecuteEndQueryCmd(GLES2DecoderTestBase* test,
#endif
}
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(target, submit_count);
return test->ExecuteCmd(end_cmd);
}
@@ -867,7 +865,7 @@ static error::Error ExecuteQueryCounterCmd(GLES2DecoderTestBase* test,
timing_queries->ExpectGPUTimeStampQuery(*gl, false);
}
- QueryCounterEXT query_counter_cmd;
+ cmds::QueryCounterEXT query_counter_cmd;
query_counter_cmd.Init(client_id,
target,
shm_id,
@@ -917,16 +915,16 @@ static void CheckBeginEndQueryBadMemoryFails(GLES2DecoderTestBase* test,
init.bind_generates_resource = true;
test->InitDecoder(init);
- test->GenHelper<GenQueriesEXTImmediate>(client_id);
+ test->GenHelper<cmds::GenQueriesEXTImmediate>(client_id);
// Test bad shared memory fails
error::Error error = error::kNoError;
if (query_type.is_counter) {
- QueryCounterEXT query_counter_cmd;
+ cmds::QueryCounterEXT query_counter_cmd;
query_counter_cmd.Init(client_id, query_type.type, shm_id, shm_offset, 1);
error = test->ExecuteCmd(query_counter_cmd);
} else {
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
begin_cmd.Init(query_type.type, client_id, shm_id, shm_offset);
error = test->ExecuteCmd(begin_cmd);
}
@@ -1020,9 +1018,9 @@ TEST_P(GLES2DecoderManualInitTest, QueryReuseTest) {
}
TEST_P(GLES2DecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
// Test valid parameters work.
begin_cmd.Init(GL_COMMANDS_ISSUED_CHROMIUM, kNewClientId, shared_memory_id_,
@@ -1038,7 +1036,7 @@ TEST_P(GLES2DecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
EXPECT_TRUE(query->IsActive());
// Test end succeeds.
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(GL_COMMANDS_ISSUED_CHROMIUM, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1047,9 +1045,9 @@ TEST_P(GLES2DecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
}
TEST_P(GLES2DecoderTest, QueryCounterEXTCommandsIssuedTimestampCHROMIUM) {
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
- QueryCounterEXT query_counter_cmd;
+ cmds::QueryCounterEXT query_counter_cmd;
query_counter_cmd.Init(kNewClientId, GL_COMMANDS_ISSUED_TIMESTAMP_CHROMIUM,
shared_memory_id_, kSharedMemoryOffset, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(query_counter_cmd));
@@ -1064,9 +1062,9 @@ TEST_P(GLES2DecoderTest, QueryCounterEXTCommandsIssuedTimestampCHROMIUM) {
}
TEST_P(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) {
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
// Test valid parameters work.
begin_cmd.Init(GL_GET_ERROR_QUERY_CHROMIUM, kNewClientId, shared_memory_id_,
@@ -1082,13 +1080,13 @@ TEST_P(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) {
EXPECT_TRUE(query->IsActive());
// Test end succeeds.
- QuerySync* sync = static_cast<QuerySync*>(shared_memory_address_);
+ auto* sync = static_cast<QuerySync*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_INVALID_VALUE))
.RetiresOnSaturation();
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(GL_GET_ERROR_QUERY_CHROMIUM, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1099,7 +1097,7 @@ TEST_P(GLES2DecoderTest, BeginEndQueryEXTGetErrorQueryCHROMIUM) {
}
TEST_P(GLES2DecoderTest, SetDisjointValueSync) {
- SetDisjointValueSyncCHROMIUM cmd;
+ cmds::SetDisjointValueSyncCHROMIUM cmd;
cmd.Init(static_cast<uint32_t>(-1), 0u);
EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
@@ -1126,9 +1124,9 @@ TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXTCommandsCompletedCHROMIUM) {
init.bind_generates_resource = true;
InitDecoder(init);
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
begin_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, kNewClientId,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
@@ -1151,7 +1149,7 @@ TEST_P(GLES2DecoderManualInitTest, BeginEndQueryEXTCommandsCompletedCHROMIUM) {
.RetiresOnSaturation();
#endif
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1200,9 +1198,9 @@ TEST_P(GLES2DecoderManualInitTest, BeginInvalidTargetQueryFails) {
init.bind_generates_resource = true;
InitDecoder(init);
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
begin_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, kNewClientId,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
@@ -1238,7 +1236,7 @@ TEST_P(GLES2DecoderManualInitTest, QueryCounterEXTTimeStamp) {
init.bind_generates_resource = true;
InitDecoder(init);
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
EXPECT_CALL(*gl_, GenQueries(1, _))
.WillOnce(SetArgPointee<1>(kNewServiceId))
@@ -1249,7 +1247,7 @@ TEST_P(GLES2DecoderManualInitTest, QueryCounterEXTTimeStamp) {
EXPECT_CALL(*gl_, QueryCounter(kNewServiceId, GL_TIMESTAMP))
.Times(1)
.RetiresOnSaturation();
- QueryCounterEXT query_counter_cmd;
+ cmds::QueryCounterEXT query_counter_cmd;
query_counter_cmd.Init(kNewClientId, GL_TIMESTAMP, shared_memory_id_,
kSharedMemoryOffset, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(query_counter_cmd));
@@ -1272,9 +1270,9 @@ TEST_P(GLES2DecoderManualInitTest, InvalidTargetQueryCounterFails) {
init.bind_generates_resource = true;
InitDecoder(init);
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
- QueryCounterEXT query_counter_cmd;
+ cmds::QueryCounterEXT query_counter_cmd;
query_counter_cmd.Init(kNewClientId, GL_TIMESTAMP, shared_memory_id_,
kSharedMemoryOffset, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(query_counter_cmd));
@@ -1293,17 +1291,17 @@ TEST_P(GLES2DecoderTest, IsEnabledReturnsCachedValue) {
GL_DEPTH_TEST, GL_STENCIL_TEST,
};
for (size_t ii = 0; ii < base::size(kStates); ++ii) {
- Enable enable_cmd;
+ cmds::Enable enable_cmd;
GLenum state = kStates[ii];
enable_cmd.Init(state);
EXPECT_EQ(error::kNoError, ExecuteCmd(enable_cmd));
- IsEnabled::Result* result =
- static_cast<IsEnabled::Result*>(shared_memory_address_);
- IsEnabled is_enabled_cmd;
+ auto* result =
+ static_cast<cmds::IsEnabled::Result*>(shared_memory_address_);
+ cmds::IsEnabled is_enabled_cmd;
is_enabled_cmd.Init(state, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(is_enabled_cmd));
EXPECT_NE(0u, *result);
- Disable disable_cmd;
+ cmds::Disable disable_cmd;
disable_cmd.Init(state);
EXPECT_EQ(error::kNoError, ExecuteCmd(disable_cmd));
EXPECT_EQ(error::kNoError, ExecuteCmd(is_enabled_cmd));
@@ -1387,7 +1385,7 @@ TEST_P(GLES2DecoderManualInitTest, MemoryTrackerTexStorage2DEXT) {
EXPECT_CALL(*gl_, TexStorage2DEXT(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 4))
.Times(1)
.RetiresOnSaturation();
- TexStorage2DEXT cmd;
+ cmds::TexStorage2DEXT cmd;
cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 8, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(128u, memory_tracker_ptr->GetSize());
@@ -1418,7 +1416,7 @@ TEST_P(GLES2DecoderManualInitTest, MemoryTrackerCopyTexImage2D) {
target, level, internal_format, 0, 0, width, height, border))
.Times(1)
.RetiresOnSaturation();
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(128u, memory_tracker_ptr->GetSize());
@@ -1442,7 +1440,7 @@ TEST_P(GLES2DecoderManualInitTest, MemoryTrackerRenderbufferStorage) {
EXPECT_CALL(*gl_, RenderbufferStorageEXT(GL_RENDERBUFFER, GL_RGBA, 8, 4))
.Times(1)
.RetiresOnSaturation();
- RenderbufferStorage cmd;
+ cmds::RenderbufferStorage cmd;
cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 8, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1465,7 +1463,7 @@ TEST_P(GLES2DecoderManualInitTest, MemoryTrackerBufferData) {
EXPECT_CALL(*gl_, BufferData(GL_ARRAY_BUFFER, 128, _, GL_STREAM_DRAW))
.Times(1)
.RetiresOnSaturation();
- BufferData cmd;
+ cmds::BufferData cmd;
cmd.Init(GL_ARRAY_BUFFER, 128, 0, 0, GL_STREAM_DRAW);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1504,12 +1502,12 @@ TEST_P(GLES2DecoderManualInitTest, ImmutableCopyTexImage2D) {
TexStorage2DEXT(
kTarget, kLevels, kSizedInternalFormat, kWidth, kHeight))
.Times(1);
- CopyTexImage2D copy_cmd;
+ cmds::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());
- TexStorage2DEXT storage_cmd;
+ cmds::TexStorage2DEXT storage_cmd;
storage_cmd.Init(kTarget, kLevels, kSizedInternalFormat, kWidth, kHeight);
EXPECT_EQ(error::kNoError, ExecuteCmd(storage_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1523,7 +1521,7 @@ TEST_P(GLES2DecoderManualInitTest, ImmutableCopyTexImage2D) {
TEST_P(GLES2DecoderTest, LoseContextCHROMIUMGuilty) {
EXPECT_CALL(*mock_decoder_, MarkContextLost(error::kInnocent))
.Times(1);
- LoseContextCHROMIUM cmd;
+ cmds::LoseContextCHROMIUM cmd;
cmd.Init(GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB);
EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1534,7 +1532,7 @@ TEST_P(GLES2DecoderTest, LoseContextCHROMIUMGuilty) {
TEST_P(GLES2DecoderTest, LoseContextCHROMIUMUnkown) {
EXPECT_CALL(*mock_decoder_, MarkContextLost(error::kUnknown))
.Times(1);
- LoseContextCHROMIUM cmd;
+ cmds::LoseContextCHROMIUM cmd;
cmd.Init(GL_UNKNOWN_CONTEXT_RESET_ARB, GL_UNKNOWN_CONTEXT_RESET_ARB);
EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1545,7 +1543,7 @@ TEST_P(GLES2DecoderTest, LoseContextCHROMIUMUnkown) {
TEST_P(GLES2DecoderTest, LoseContextCHROMIUMInvalidArgs0_0) {
EXPECT_CALL(*mock_decoder_, MarkContextLost(_))
.Times(0);
- LoseContextCHROMIUM cmd;
+ cmds::LoseContextCHROMIUM cmd;
cmd.Init(GL_NONE, GL_GUILTY_CONTEXT_RESET_ARB);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -1554,7 +1552,7 @@ TEST_P(GLES2DecoderTest, LoseContextCHROMIUMInvalidArgs0_0) {
TEST_P(GLES2DecoderTest, LoseContextCHROMIUMInvalidArgs1_0) {
EXPECT_CALL(*mock_decoder_, MarkContextLost(_))
.Times(0);
- LoseContextCHROMIUM cmd;
+ cmds::LoseContextCHROMIUM cmd;
cmd.Init(GL_GUILTY_CONTEXT_RESET_ARB, GL_NONE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -1575,12 +1573,12 @@ class GLES2DecoderDoCommandsTest : public GLES2DecoderTest {
}
protected:
- Enable cmds_[3];
+ cmds::Enable cmds_[3];
int entries_per_cmd_;
};
TEST_P(GLES3DecoderTest, BeginInvalidTargetQueryFails) {
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
begin_cmd.Init(0xdeadbeef, kNewClientId, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
@@ -1591,8 +1589,8 @@ TEST_P(GLES3DecoderTest, BeginInvalidTargetQueryFails) {
TEST_P(GLES3DecoderTest, BindTransformFeedbackValidArgs) {
EXPECT_CALL(*gl_, BindTransformFeedback(GL_TRANSFORM_FEEDBACK,
kServiceTransformFeedbackId));
- SpecializedSetup<BindTransformFeedback, 0>(true);
- BindTransformFeedback cmd;
+ SpecializedSetup<cmds::BindTransformFeedback, 0>(true);
+ cmds::BindTransformFeedback cmd;
cmd.Init(GL_TRANSFORM_FEEDBACK, client_transformfeedback_id_);
EXPECT_CALL(*gl_, BindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, 0))
.Times(1)
@@ -1602,9 +1600,9 @@ TEST_P(GLES3DecoderTest, BindTransformFeedbackValidArgs) {
}
TEST_P(GLES3DecoderTest, DeleteTransformFeedbacksImmediateInvalidArgs) {
- DeleteTransformFeedbacksImmediate& cmd =
- *GetImmediateAs<DeleteTransformFeedbacksImmediate>();
- SpecializedSetup<DeleteTransformFeedbacksImmediate, 0>(false);
+ cmds::DeleteTransformFeedbacksImmediate& cmd =
+ *GetImmediateAs<cmds::DeleteTransformFeedbacksImmediate>();
+ SpecializedSetup<cmds::DeleteTransformFeedbacksImmediate, 0>(false);
GLuint temp = kInvalidClientId;
cmd.Init(1, &temp);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
@@ -1613,10 +1611,10 @@ TEST_P(GLES3DecoderTest, DeleteTransformFeedbacksImmediateInvalidArgs) {
TEST_P(GLES3DecoderTest, GetIntegeri_vValidArgs) {
EXPECT_CALL(*gl_, GetIntegeri_v(_, _, _)).Times(0);
- typedef GetIntegeri_v::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegeri_v::Result*>(shared_memory_address_);
result->size = 0;
- GetIntegeri_v cmd;
+ cmds::GetIntegeri_v cmd;
cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, 2, shared_memory_id_,
shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -1628,10 +1626,10 @@ TEST_P(GLES3DecoderTest, GetIntegeri_vValidArgs) {
TEST_P(GLES3DecoderTest, GetInteger64i_vValidArgs) {
EXPECT_CALL(*gl_, GetInteger64i_v(_, _, _)).Times(0);
- typedef GetInteger64i_v::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetInteger64i_v::Result*>(shared_memory_address_);
result->size = 0;
- GetInteger64i_v cmd;
+ cmds::GetInteger64i_v cmd;
cmd.Init(GL_UNIFORM_BUFFER_SIZE, 2, shared_memory_id_,
shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -1659,8 +1657,8 @@ TEST_P(GLES3DecoderTest, GetSamplerBinding) {
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef cmds::GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
cmds::GetIntegerv cmd;
cmd.Init(GL_SAMPLER_BINDING, shared_memory_id_, shared_memory_offset_);
result->size = 0;
@@ -1685,8 +1683,8 @@ TEST_P(GLES3DecoderTest, GetTransformFeedbackBinding) {
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef cmds::GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
cmds::GetIntegerv cmd;
cmd.Init(
GL_TRANSFORM_FEEDBACK_BINDING, shared_memory_id_, shared_memory_offset_);
@@ -1831,7 +1829,7 @@ TEST_P(GLES2DecoderDescheduleUntilFinishedTest, AlreadySignalled) {
.WillOnce(Return(GL_ALREADY_SIGNALED))
.RetiresOnSaturation();
- DescheduleUntilFinishedCHROMIUM cmd;
+ cmds::DescheduleUntilFinishedCHROMIUM cmd;
cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0, deschedule_until_finished_callback_count_);
@@ -1848,7 +1846,7 @@ TEST_P(GLES2DecoderDescheduleUntilFinishedTest, NotYetSignalled) {
.WillOnce(Return(GL_TIMEOUT_EXPIRED))
.RetiresOnSaturation();
- DescheduleUntilFinishedCHROMIUM cmd;
+ cmds::DescheduleUntilFinishedCHROMIUM cmd;
cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(0, deschedule_until_finished_callback_count_);
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 4c5b2ffd507..248497a4e09 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
@@ -36,7 +36,7 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
GLES2DecoderTest2() = default;
void TestAcceptedUniform(GLenum uniform_type,
- uint32_t accepts_apis,
+ UniformApiType accepts_apis,
bool es3_enabled) {
SetupShaderForUniform(uniform_type);
bool valid_uniform = false;
@@ -71,7 +71,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform1i;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform1i) !=
+ UniformApiType::kUniformNone;
cmds::Uniform1i cmd;
cmd.Init(1, 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -80,7 +81,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform1i;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform1i) !=
+ UniformApiType::kUniformNone;
cmds::Uniform1ivImmediate& cmd =
*GetImmediateAs<cmds::Uniform1ivImmediate>();
GLint data[2][1] = {{0}};
@@ -91,7 +93,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform2i;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform2i) !=
+ UniformApiType::kUniformNone;
cmds::Uniform2i cmd;
cmd.Init(1, 2, 3);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -100,7 +103,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform2i;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform2i) !=
+ UniformApiType::kUniformNone;
cmds::Uniform2ivImmediate& cmd =
*GetImmediateAs<cmds::Uniform2ivImmediate>();
GLint data[2][2] = {{0}};
@@ -111,7 +115,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform3i;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform3i) !=
+ UniformApiType::kUniformNone;
cmds::Uniform3i cmd;
cmd.Init(1, 2, 3, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -120,7 +125,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform3i;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform3i) !=
+ UniformApiType::kUniformNone;
cmds::Uniform3ivImmediate& cmd =
*GetImmediateAs<cmds::Uniform3ivImmediate>();
GLint data[2][3] = {{0}};
@@ -131,7 +137,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform4i;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform4i) !=
+ UniformApiType::kUniformNone;
cmds::Uniform4i cmd;
cmd.Init(1, 2, 3, 4, 5);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -140,7 +147,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform4i;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform4i) !=
+ UniformApiType::kUniformNone;
cmds::Uniform4ivImmediate& cmd =
*GetImmediateAs<cmds::Uniform4ivImmediate>();
GLint data[2][4] = {{0}};
@@ -153,7 +161,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
////////////////////
{
- valid_uniform = accepts_apis & Program::kUniform1f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform1f) !=
+ UniformApiType::kUniformNone;
cmds::Uniform1f cmd;
cmd.Init(1, 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -162,7 +171,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform1f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform1f) !=
+ UniformApiType::kUniformNone;
cmds::Uniform1fvImmediate& cmd =
*GetImmediateAs<cmds::Uniform1fvImmediate>();
GLfloat data[2][1] = {{0.0f}};
@@ -173,7 +183,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform2f) !=
+ UniformApiType::kUniformNone;
cmds::Uniform2f cmd;
cmd.Init(1, 2, 3);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -182,7 +193,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform2f) !=
+ UniformApiType::kUniformNone;
cmds::Uniform2fvImmediate& cmd =
*GetImmediateAs<cmds::Uniform2fvImmediate>();
GLfloat data[2][2] = {{0.0f}};
@@ -193,7 +205,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform3f) !=
+ UniformApiType::kUniformNone;
cmds::Uniform3f cmd;
cmd.Init(1, 2, 3, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -202,7 +215,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform3f) !=
+ UniformApiType::kUniformNone;
cmds::Uniform3fvImmediate& cmd =
*GetImmediateAs<cmds::Uniform3fvImmediate>();
GLfloat data[2][3] = {{0.0f}};
@@ -213,7 +227,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform4f) !=
+ UniformApiType::kUniformNone;
cmds::Uniform4f cmd;
cmd.Init(1, 2, 3, 4, 5);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -222,7 +237,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform4f) !=
+ UniformApiType::kUniformNone;
cmds::Uniform4fvImmediate& cmd =
*GetImmediateAs<cmds::Uniform4fvImmediate>();
GLfloat data[2][4] = {{0.0f}};
@@ -233,7 +249,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix2f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix2fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix2fvImmediate>();
GLfloat data[2][2 * 2] = {{0.0f}};
@@ -245,7 +262,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix3f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix3fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix3fvImmediate>();
GLfloat data[2][3 * 3] = {{0.0f}};
@@ -256,7 +274,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix4f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix4fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix4fvImmediate>();
GLfloat data[2][4 * 4] = {{0.0f}};
@@ -268,7 +287,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
if (!es3_enabled) {
{
- valid_uniform = accepts_apis & Program::kUniformMatrix2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix2f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix2fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix2fvImmediate>();
GLfloat data[2][2 * 2] = {{0.0f}};
@@ -279,7 +299,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix3f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix3fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix3fvImmediate>();
GLfloat data[2][3 * 3] = {{0.0f}};
@@ -289,7 +310,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix4f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix4fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix4fvImmediate>();
GLfloat data[2][4 * 4] = {{0.0f}};
@@ -301,7 +323,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
if (es3_enabled) {
{
- valid_uniform = accepts_apis & Program::kUniform1ui;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform1ui) !=
+ UniformApiType::kUniformNone;
cmds::Uniform1ui cmd;
cmd.Init(1, 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -310,7 +333,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform1ui;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform1ui) !=
+ UniformApiType::kUniformNone;
cmds::Uniform1uivImmediate& cmd =
*GetImmediateAs<cmds::Uniform1uivImmediate>();
GLuint data[2][1] = {{0}};
@@ -321,7 +345,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform2ui;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform2ui) !=
+ UniformApiType::kUniformNone;
cmds::Uniform2ui cmd;
cmd.Init(1, 2, 3);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -330,7 +355,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform2ui;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform2ui) !=
+ UniformApiType::kUniformNone;
cmds::Uniform2uivImmediate& cmd =
*GetImmediateAs<cmds::Uniform2uivImmediate>();
GLuint data[2][2] = {{0}};
@@ -341,7 +367,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform3ui;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform3ui) !=
+ UniformApiType::kUniformNone;
cmds::Uniform3ui cmd;
cmd.Init(1, 2, 3, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -350,7 +377,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform3ui;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform3ui) !=
+ UniformApiType::kUniformNone;
cmds::Uniform3uivImmediate& cmd =
*GetImmediateAs<cmds::Uniform3uivImmediate>();
GLuint data[2][3] = {{0}};
@@ -361,7 +389,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform4ui;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform4ui) !=
+ UniformApiType::kUniformNone;
cmds::Uniform4ui cmd;
cmd.Init(1, 2, 3, 4, 5);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -370,7 +399,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniform4ui;
+ valid_uniform = (accepts_apis & UniformApiType::kUniform4ui) !=
+ UniformApiType::kUniformNone;
cmds::Uniform4uivImmediate& cmd =
*GetImmediateAs<cmds::Uniform4uivImmediate>();
GLuint data[2][4] = {{0}};
@@ -381,7 +411,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix2x3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix2x3f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix2x3fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix2x3fvImmediate>();
GLfloat data[2][2 * 3] = {{0.0f}};
@@ -393,7 +424,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix2x4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix2x4f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix2x4fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix2x4fvImmediate>();
GLfloat data[2][2 * 4] = {{0.0f}};
@@ -405,7 +437,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix3x2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix3x2f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix3x2fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix3x2fvImmediate>();
GLfloat data[2][3 * 2] = {{0.0f}};
@@ -417,7 +450,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix3x4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix3x4f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix3x4fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix3x4fvImmediate>();
GLfloat data[2][3 * 4] = {{0.0f}};
@@ -429,7 +463,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix4x2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix4x2f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix4x2fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix4x2fvImmediate>();
GLfloat data[2][4 * 2] = {{0.0f}};
@@ -441,7 +476,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix4x3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix4x3f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix4x3fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix4x3fvImmediate>();
GLfloat data[2][4 * 3] = {{0.0f}};
@@ -453,7 +489,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix2f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix2fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix2fvImmediate>();
GLfloat data[2][2 * 2] = {{0.0f}};
@@ -465,7 +502,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix3f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix3fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix3fvImmediate>();
GLfloat data[2][3 * 3] = {{0.0f}};
@@ -476,7 +514,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix4f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix4fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix4fvImmediate>();
GLfloat data[2][4 * 4] = {{0.0f}};
@@ -487,7 +526,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix2x3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix2x3f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix2x3fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix2x3fvImmediate>();
GLfloat data[2][2 * 3] = {{0.0f}};
@@ -499,7 +539,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix2x4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix2x4f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix2x4fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix2x4fvImmediate>();
GLfloat data[2][2 * 4] = {{0.0f}};
@@ -511,7 +552,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix3x2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix3x2f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix3x2fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix3x2fvImmediate>();
GLfloat data[2][3 * 2] = {{0.0f}};
@@ -523,7 +565,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix3x4f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix3x4f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix3x4fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix3x4fvImmediate>();
GLfloat data[2][3 * 4] = {{0.0f}};
@@ -535,7 +578,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix4x2f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix4x2f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix4x2fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix4x2fvImmediate>();
GLfloat data[2][4 * 2] = {{0.0f}};
@@ -547,7 +591,8 @@ class GLES2DecoderTest2 : public GLES2DecoderTestBase {
}
{
- valid_uniform = accepts_apis & Program::kUniformMatrix4x3f;
+ valid_uniform = (accepts_apis & UniformApiType::kUniformMatrix4x3f) !=
+ UniformApiType::kUniformNone;
cmds::UniformMatrix4x3fvImmediate& cmd =
*GetImmediateAs<cmds::UniformMatrix4x3fvImmediate>();
GLfloat data[2][4 * 3] = {{0.0f}};
@@ -908,137 +953,145 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::GetVertexAttribIuiv, 0>(
#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h"
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT) {
- TestAcceptedUniform(GL_INT, Program::kUniform1i, false);
+ TestAcceptedUniform(GL_INT, UniformApiType::kUniform1i, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC2) {
- TestAcceptedUniform(GL_INT_VEC2, Program::kUniform2i, false);
+ TestAcceptedUniform(GL_INT_VEC2, UniformApiType::kUniform2i, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC3) {
- TestAcceptedUniform(GL_INT_VEC3, Program::kUniform3i, false);
+ TestAcceptedUniform(GL_INT_VEC3, UniformApiType::kUniform3i, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_INT_VEC4) {
- TestAcceptedUniform(GL_INT_VEC4, Program::kUniform4i, false);
+ TestAcceptedUniform(GL_INT_VEC4, UniformApiType::kUniform4i, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL) {
TestAcceptedUniform(
- GL_BOOL, Program::kUniform1i | Program::kUniform1f, false);
+ GL_BOOL, UniformApiType::kUniform1i | UniformApiType::kUniform1f, false);
}
TEST_P(GLES3DecoderTest2, AcceptsUniformES3_GL_BOOL) {
- TestAcceptedUniform(
- GL_BOOL,
- Program::kUniform1i | Program::kUniform1f | Program::kUniform1ui,
- true);
+ TestAcceptedUniform(GL_BOOL,
+ UniformApiType::kUniform1i | UniformApiType::kUniform1f |
+ UniformApiType::kUniform1ui,
+ true);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC2) {
- TestAcceptedUniform(
- GL_BOOL_VEC2, Program::kUniform2i | Program::kUniform2f, false);
+ TestAcceptedUniform(GL_BOOL_VEC2,
+ UniformApiType::kUniform2i | UniformApiType::kUniform2f,
+ false);
}
TEST_P(GLES3DecoderTest2, AcceptsUniformES3_GL_BOOL_VEC2) {
- TestAcceptedUniform(
- GL_BOOL_VEC2,
- Program::kUniform2i | Program::kUniform2f | Program::kUniform2ui,
- true);
+ TestAcceptedUniform(GL_BOOL_VEC2,
+ UniformApiType::kUniform2i | UniformApiType::kUniform2f |
+ UniformApiType::kUniform2ui,
+ true);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC3) {
- TestAcceptedUniform(
- GL_BOOL_VEC3, Program::kUniform3i | Program::kUniform3f, false);
+ TestAcceptedUniform(GL_BOOL_VEC3,
+ UniformApiType::kUniform3i | UniformApiType::kUniform3f,
+ false);
}
TEST_P(GLES3DecoderTest2, AcceptsUniformES3_GL_BOOL_VEC3) {
- TestAcceptedUniform(
- GL_BOOL_VEC3,
- Program::kUniform3i | Program::kUniform3f | Program::kUniform3ui,
- true);
+ TestAcceptedUniform(GL_BOOL_VEC3,
+ UniformApiType::kUniform3i | UniformApiType::kUniform3f |
+ UniformApiType::kUniform3ui,
+ true);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_BOOL_VEC4) {
- TestAcceptedUniform(
- GL_BOOL_VEC4, Program::kUniform4i | Program::kUniform4f, false);
+ TestAcceptedUniform(GL_BOOL_VEC4,
+ UniformApiType::kUniform4i | UniformApiType::kUniform4f,
+ false);
}
TEST_P(GLES3DecoderTest2, AcceptsUniformES3_GL_BOOL_VEC4) {
- TestAcceptedUniform(
- GL_BOOL_VEC4,
- Program::kUniform4i | Program::kUniform4f | Program::kUniform4ui,
- true);
+ TestAcceptedUniform(GL_BOOL_VEC4,
+ UniformApiType::kUniform4i | UniformApiType::kUniform4f |
+ UniformApiType::kUniform4ui,
+ true);
}
TEST_P(GLES2DecoderTest2, AcceptsUniformTypeFLOAT) {
- TestAcceptedUniform(GL_FLOAT, Program::kUniform1f, false);
+ TestAcceptedUniform(GL_FLOAT, UniformApiType::kUniform1f, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC2) {
- TestAcceptedUniform(GL_FLOAT_VEC2, Program::kUniform2f, false);
+ TestAcceptedUniform(GL_FLOAT_VEC2, UniformApiType::kUniform2f, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC3) {
- TestAcceptedUniform(GL_FLOAT_VEC3, Program::kUniform3f, false);
+ TestAcceptedUniform(GL_FLOAT_VEC3, UniformApiType::kUniform3f, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_VEC4) {
- TestAcceptedUniform(GL_FLOAT_VEC4, Program::kUniform4f, false);
+ TestAcceptedUniform(GL_FLOAT_VEC4, UniformApiType::kUniform4f, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT2) {
- TestAcceptedUniform(GL_FLOAT_MAT2, Program::kUniformMatrix2f, false);
+ TestAcceptedUniform(GL_FLOAT_MAT2, UniformApiType::kUniformMatrix2f, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT3) {
- TestAcceptedUniform(GL_FLOAT_MAT3, Program::kUniformMatrix3f, false);
+ TestAcceptedUniform(GL_FLOAT_MAT3, UniformApiType::kUniformMatrix3f, false);
}
TEST_P(GLES2DecoderTest2, AcceptsUniform_GL_FLOAT_MAT4) {
- TestAcceptedUniform(GL_FLOAT_MAT4, Program::kUniformMatrix4f, false);
+ TestAcceptedUniform(GL_FLOAT_MAT4, UniformApiType::kUniformMatrix4f, false);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_UNSIGNED_INT) {
- TestAcceptedUniform(GL_UNSIGNED_INT, Program::kUniform1ui, true);
+ TestAcceptedUniform(GL_UNSIGNED_INT, UniformApiType::kUniform1ui, true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_UNSIGNED_INT_VEC2) {
- TestAcceptedUniform(GL_UNSIGNED_INT_VEC2, Program::kUniform2ui, true);
+ TestAcceptedUniform(GL_UNSIGNED_INT_VEC2, UniformApiType::kUniform2ui, true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_UNSIGNED_INT_VEC3) {
- TestAcceptedUniform(GL_UNSIGNED_INT_VEC3, Program::kUniform3ui, true);
+ TestAcceptedUniform(GL_UNSIGNED_INT_VEC3, UniformApiType::kUniform3ui, true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_UNSIGNED_INT_VEC4) {
- TestAcceptedUniform(GL_UNSIGNED_INT_VEC4, Program::kUniform4ui, true);
+ TestAcceptedUniform(GL_UNSIGNED_INT_VEC4, UniformApiType::kUniform4ui, true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_FLOAT_MAT2x3) {
- TestAcceptedUniform(GL_FLOAT_MAT2x3, Program::kUniformMatrix2x3f, true);
+ TestAcceptedUniform(GL_FLOAT_MAT2x3, UniformApiType::kUniformMatrix2x3f,
+ true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_FLOAT_MAT2x4) {
- TestAcceptedUniform(GL_FLOAT_MAT2x4, Program::kUniformMatrix2x4f, true);
+ TestAcceptedUniform(GL_FLOAT_MAT2x4, UniformApiType::kUniformMatrix2x4f,
+ true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_FLOAT_MAT3x2) {
- TestAcceptedUniform(GL_FLOAT_MAT3x2, Program::kUniformMatrix3x2f, true);
+ TestAcceptedUniform(GL_FLOAT_MAT3x2, UniformApiType::kUniformMatrix3x2f,
+ true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_FLOAT_MAT3x4) {
- TestAcceptedUniform(GL_FLOAT_MAT3x4, Program::kUniformMatrix3x4f, true);
+ TestAcceptedUniform(GL_FLOAT_MAT3x4, UniformApiType::kUniformMatrix3x4f,
+ true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_FLOAT_MAT4x2) {
- TestAcceptedUniform(GL_FLOAT_MAT4x2, Program::kUniformMatrix4x2f, true);
+ TestAcceptedUniform(GL_FLOAT_MAT4x2, UniformApiType::kUniformMatrix4x2f,
+ true);
}
TEST_P(GLES3DecoderTest2, AcceptsUniform_GL_FLOAT_MAT4x3) {
- TestAcceptedUniform(GL_FLOAT_MAT4x3, Program::kUniformMatrix4x3f, true);
+ TestAcceptedUniform(GL_FLOAT_MAT4x3, UniformApiType::kUniformMatrix4x3f,
+ true);
}
} // namespace gles2
} // namespace gpu
-
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 75bad056c21..54be1035df4 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
@@ -29,8 +29,6 @@ using ::testing::StrEq;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
class GLES2DecoderTest3 : public GLES2DecoderTestBase {
public:
GLES2DecoderTest3() = default;
@@ -59,79 +57,79 @@ void GLES2DecoderTestBase::SpecializedSetup<cmds::Uniform4ivImmediate, 0>(
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<UniformMatrix3fvImmediate, 0>(
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT3);
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<UniformMatrix4fvImmediate, 0>(
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4fvImmediate, 0>(
bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT4);
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<UniformMatrix2x3fvImmediate, 0>(
- bool /* valid */) {
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix2x3fvImmediate,
+ 0>(bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT2x3);
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<
- UniformMatrix2x4fvImmediate, 0>(bool /* valid */) {
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix2x4fvImmediate,
+ 0>(bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT2x4);
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<
- UniformMatrix3x2fvImmediate, 0>(bool /* valid */) {
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3x2fvImmediate,
+ 0>(bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT3x2);
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<
- UniformMatrix3x4fvImmediate, 0>(bool /* valid */) {
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix3x4fvImmediate,
+ 0>(bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT3x4);
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<
- UniformMatrix4x2fvImmediate, 0>(bool /* valid */) {
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4x2fvImmediate,
+ 0>(bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT4x2);
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<
- UniformMatrix4x3fvImmediate, 0>(bool /* valid */) {
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UniformMatrix4x3fvImmediate,
+ 0>(bool /* valid */) {
SetupShaderForUniform(GL_FLOAT_MAT4x3);
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<UseProgram, 0>(
+void GLES2DecoderTestBase::SpecializedSetup<cmds::UseProgram, 0>(
bool /* valid */) {
// Needs the same setup as LinkProgram.
- SpecializedSetup<LinkProgram, 0>(false);
+ SpecializedSetup<cmds::LinkProgram, 0>(false);
EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId))
.Times(1)
.RetiresOnSaturation();
- LinkProgram link_cmd;
+ cmds::LinkProgram link_cmd;
link_cmd.Init(client_program_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
}
template <>
-void GLES2DecoderTestBase::SpecializedSetup<ValidateProgram, 0>(
+void GLES2DecoderTestBase::SpecializedSetup<cmds::ValidateProgram, 0>(
bool /* valid */) {
// Needs the same setup as LinkProgram.
- SpecializedSetup<LinkProgram, 0>(false);
+ SpecializedSetup<cmds::LinkProgram, 0>(false);
EXPECT_CALL(*gl_, LinkProgram(kServiceProgramId))
.Times(1)
.RetiresOnSaturation();
- LinkProgram link_cmd;
+ cmds::LinkProgram link_cmd;
link_cmd.Init(client_program_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(link_cmd));
@@ -149,14 +147,14 @@ TEST_P(GLES2DecoderTest3, TraceBeginCHROMIUM) {
SetBucketAsCString(kCategoryBucketId, kCategory);
SetBucketAsCString(kNameBucketId, kName);
- TraceBeginCHROMIUM begin_cmd;
+ cmds::TraceBeginCHROMIUM begin_cmd;
begin_cmd.Init(kCategoryBucketId, kNameBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
}
TEST_P(GLES2DecoderTest3, TraceEndCHROMIUM) {
// Test end fails if no begin.
- TraceEndCHROMIUM end_cmd;
+ cmds::TraceEndCHROMIUM end_cmd;
end_cmd.Init();
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -169,7 +167,7 @@ TEST_P(GLES2DecoderTest3, TraceEndCHROMIUM) {
SetBucketAsCString(kCategoryBucketId, kCategory);
SetBucketAsCString(kNameBucketId, kName);
- TraceBeginCHROMIUM begin_cmd;
+ cmds::TraceBeginCHROMIUM begin_cmd;
begin_cmd.Init(kCategoryBucketId, kNameBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4.cc
index 31fe2a5a957..7dad01fa220 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_4.cc
@@ -29,8 +29,6 @@ using ::testing::StrEq;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
class GLES2DecoderTest4 : public GLES2DecoderTestBase {
public:
GLES2DecoderTest4() = default;
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
index 631e3bf9893..de2a399524d 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
@@ -49,8 +49,6 @@ using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
TEST_P(GLES2DecoderTest, DisableVertexAttribArrayValidArgs) {
SetDriverVertexAttribEnabled(1, false);
SpecializedSetup<cmds::DisableVertexAttribArray, 0>(true);
@@ -92,7 +90,7 @@ TEST_P(GLES2DecoderWithShaderTest, EnabledVertexAttribArrayIsDisabledIfUnused) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -102,12 +100,12 @@ TEST_P(GLES2DecoderWithShaderTest, EnabledVertexAttribArrayIsDisabledIfUnused) {
TEST_P(GLES2DecoderWithShaderTest, GetVertexAttribPointervSucceeds) {
const GLuint kOffsetToTestFor = sizeof(float) * 4;
const GLuint kIndexToTest = 1;
- GetVertexAttribPointerv::Result* result =
- static_cast<GetVertexAttribPointerv::Result*>(shared_memory_address_);
+ auto* result = static_cast<cmds::GetVertexAttribPointerv::Result*>(
+ shared_memory_address_);
result->size = 0;
const GLuint* result_value = result->GetData();
// Test that initial value is 0.
- GetVertexAttribPointerv cmd;
+ cmds::GetVertexAttribPointerv cmd;
cmd.Init(kIndexToTest,
GL_VERTEX_ATTRIB_ARRAY_POINTER,
shared_memory_id_,
@@ -129,12 +127,12 @@ TEST_P(GLES2DecoderWithShaderTest, GetVertexAttribPointervSucceeds) {
TEST_P(GLES2DecoderWithShaderTest, GetVertexAttribPointervBadArgsFails) {
const GLuint kIndexToTest = 1;
- GetVertexAttribPointerv::Result* result =
- static_cast<GetVertexAttribPointerv::Result*>(shared_memory_address_);
+ auto* result = static_cast<cmds::GetVertexAttribPointerv::Result*>(
+ shared_memory_address_);
result->size = 0;
const GLuint* result_value = result->GetData();
// Test pname invalid fails.
- GetVertexAttribPointerv cmd;
+ cmds::GetVertexAttribPointerv cmd;
cmd.Init(kIndexToTest,
GL_VERTEX_ATTRIB_ARRAY_POINTER + 1,
shared_memory_id_,
@@ -177,7 +175,7 @@ TEST_P(GLES2DecoderWithShaderTest, BindBufferToDifferentTargetFails) {
// 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;
+ cmds::BindBuffer cmd;
cmd.Init(GL_ELEMENT_ARRAY_BUFFER, client_buffer_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -237,7 +235,7 @@ TEST_P(GLES2DecoderWithShaderTest, VertexAttribPointer) {
stride,
BufferOffset(offset)));
}
- VertexAttribPointer cmd;
+ cmds::VertexAttribPointer cmd;
cmd.Init(index, size, type, normalize, stride, offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
if (good) {
@@ -286,7 +284,7 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
SetupDefaultProgram();
AddExpectationsForGenVertexArraysOES();
- GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
+ GenHelper<cmds::GenVertexArraysOESImmediate>(client_vertexarray_id_);
vertex_array_deleted_manually_ = false;
}
@@ -305,8 +303,7 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
void GenVertexArraysOESImmediateValidArgs() {
AddExpectationsForGenVertexArraysOES();
- GenVertexArraysOESImmediate* cmd =
- GetImmediateAs<GenVertexArraysOESImmediate>();
+ auto* cmd = GetImmediateAs<cmds::GenVertexArraysOESImmediate>();
GLuint temp = kNewClientId;
cmd->Init(1, &temp);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
@@ -316,8 +313,7 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
}
void GenVertexArraysOESImmediateDuplicateOrNullIds() {
- GenVertexArraysOESImmediate* cmd =
- GetImmediateAs<GenVertexArraysOESImmediate>();
+ auto* cmd = GetImmediateAs<cmds::GenVertexArraysOESImmediate>();
GLuint temp[3] = {kNewClientId, kNewClientId + 1, kNewClientId};
cmd->Init(3, temp);
EXPECT_EQ(error::kInvalidArguments,
@@ -333,8 +329,7 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
void GenVertexArraysOESImmediateInvalidArgs() {
EXPECT_CALL(*gl_, GenVertexArraysOES(_, _)).Times(0);
- GenVertexArraysOESImmediate* cmd =
- GetImmediateAs<GenVertexArraysOESImmediate>();
+ auto* cmd = GetImmediateAs<cmds::GenVertexArraysOESImmediate>();
cmd->Init(1, &client_vertexarray_id_);
EXPECT_EQ(error::kInvalidArguments,
ExecuteImmediateCmd(*cmd, sizeof(&client_vertexarray_id_)));
@@ -342,8 +337,7 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
void DeleteVertexArraysOESImmediateValidArgs() {
AddExpectationsForDeleteVertexArraysOES();
- DeleteVertexArraysOESImmediate& cmd =
- *GetImmediateAs<DeleteVertexArraysOESImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DeleteVertexArraysOESImmediate>();
cmd.Init(1, &client_vertexarray_id_);
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(cmd, sizeof(client_vertexarray_id_)));
@@ -353,8 +347,7 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
}
void DeleteVertexArraysOESImmediateInvalidArgs() {
- DeleteVertexArraysOESImmediate& cmd =
- *GetImmediateAs<DeleteVertexArraysOESImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DeleteVertexArraysOESImmediate>();
GLuint temp = kInvalidClientId;
cmd.Init(1, &temp);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
@@ -364,8 +357,7 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
BindVertexArrayOESValidArgs();
AddExpectationsForDeleteBoundVertexArraysOES();
- DeleteVertexArraysOESImmediate& cmd =
- *GetImmediateAs<DeleteVertexArraysOESImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DeleteVertexArraysOESImmediate>();
cmd.Init(1, &client_vertexarray_id_);
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(cmd, sizeof(client_vertexarray_id_)));
@@ -375,14 +367,14 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
}
void IsVertexArrayOESValidArgs() {
- IsVertexArrayOES cmd;
+ cmds::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;
+ cmds::IsVertexArrayOES cmd;
cmd.Init(
client_vertexarray_id_, kInvalidSharedMemoryId, shared_memory_offset_);
EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
@@ -393,14 +385,14 @@ class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
void BindVertexArrayOESValidArgs() {
AddExpectationsForBindVertexArrayOES();
- BindVertexArrayOES cmd;
+ cmds::BindVertexArrayOES cmd;
cmd.Init(client_vertexarray_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
void BindVertexArrayOESValidArgsNewId() {
- BindVertexArrayOES cmd;
+ cmds::BindVertexArrayOES cmd;
cmd.Init(kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -424,7 +416,7 @@ class GLES2DecoderEmulatedVertexArraysOESTest
SetupDefaultProgram();
AddExpectationsForGenVertexArraysOES();
- GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
+ GenHelper<cmds::GenVertexArraysOESImmediate>(client_vertexarray_id_);
vertex_array_deleted_manually_ = false;
}
@@ -534,7 +526,7 @@ TEST_P(GLES2DecoderTest, BufferDataGLError) {
EXPECT_CALL(*gl_, BufferData(target, size, _, GL_STREAM_DRAW))
.Times(1)
.RetiresOnSaturation();
- BufferData cmd;
+ cmds::BufferData cmd;
cmd.Init(target, size, 0, 0, GL_STREAM_DRAW);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
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 7ee8f070caf..5338bae0ed2 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
@@ -804,7 +804,7 @@ class GLES2DecoderTestBase : public ::testing::TestWithParam<bool>,
SharedImageManager shared_image_manager_;
scoped_refptr<ContextGroup> group_;
MockGLStates gl_states_;
- base::test::TaskEnvironment task_environment_;
+ base::test::SingleThreadTaskEnvironment task_environment_;
MockCopyTextureResourceManager* copy_texture_manager_; // not owned
MockCopyTexImageResourceManager* copy_tex_image_blitter_; // not owned
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_buffers.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_buffers.cc
index 06faf0d8c0e..7d194a449a0 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_buffers.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_buffers.cc
@@ -15,8 +15,6 @@ using ::testing::SetArgPointee;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
namespace {
} // namespace anonymous
@@ -24,8 +22,8 @@ namespace {
TEST_P(GLES3DecoderTest, BindBufferBaseValidArgs) {
EXPECT_CALL(
*gl_, BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kServiceBufferId));
- SpecializedSetup<BindBufferBase, 0>(true);
- BindBufferBase cmd;
+ SpecializedSetup<cmds::BindBufferBase, 0>(true);
+ cmds::BindBufferBase cmd;
cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, client_buffer_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -36,8 +34,8 @@ TEST_P(GLES3DecoderTest, BindBufferBaseValidArgsNewId) {
BindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewServiceId));
EXPECT_CALL(*gl_, GenBuffersARB(1, _))
.WillOnce(SetArgPointee<1>(kNewServiceId));
- SpecializedSetup<BindBufferBase, 0>(true);
- BindBufferBase cmd;
+ SpecializedSetup<cmds::BindBufferBase, 0>(true);
+ cmds::BindBufferBase cmd;
cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -53,8 +51,8 @@ TEST_P(GLES3DecoderTest, BindBufferRangeValidArgs) {
DoBufferData(kTarget, kBufferSize);
EXPECT_CALL(*gl_, BindBufferRange(kTarget, 2, kServiceBufferId,
kRangeOffset, kRangeSize));
- SpecializedSetup<BindBufferRange, 0>(true);
- BindBufferRange cmd;
+ SpecializedSetup<cmds::BindBufferRange, 0>(true);
+ cmds::BindBufferRange cmd;
cmd.Init(kTarget, 2, client_buffer_id_, kRangeOffset, kRangeSize);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -66,8 +64,8 @@ TEST_P(GLES3DecoderTest, BindBufferRangeValidArgsWithNoData) {
const GLsizeiptr kRangeSize = 8;
DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
EXPECT_CALL(*gl_, BindBufferBase(kTarget, 2, kServiceBufferId));
- SpecializedSetup<BindBufferRange, 0>(true);
- BindBufferRange cmd;
+ SpecializedSetup<cmds::BindBufferRange, 0>(true);
+ cmds::BindBufferRange cmd;
cmd.Init(kTarget, 2, client_buffer_id_, kRangeOffset, kRangeSize);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -82,8 +80,8 @@ TEST_P(GLES3DecoderTest, BindBufferRangeValidArgsWithLessData) {
DoBufferData(kTarget, kBufferSize);
EXPECT_CALL(*gl_, BindBufferRange(kTarget, 2, kServiceBufferId,
kRangeOffset, kRangeSize - 4));
- SpecializedSetup<BindBufferRange, 0>(true);
- BindBufferRange cmd;
+ SpecializedSetup<cmds::BindBufferRange, 0>(true);
+ cmds::BindBufferRange cmd;
cmd.Init(kTarget, 2, client_buffer_id_, kRangeOffset, kRangeSize);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -94,8 +92,8 @@ TEST_P(GLES3DecoderTest, BindBufferRangeValidArgsNewId) {
kNewServiceId));
EXPECT_CALL(*gl_, GenBuffersARB(1, _))
.WillOnce(SetArgPointee<1>(kNewServiceId));
- SpecializedSetup<BindBufferRange, 0>(true);
- BindBufferRange cmd;
+ SpecializedSetup<cmds::BindBufferRange, 0>(true);
+ cmds::BindBufferRange cmd;
cmd.Init(GL_TRANSFORM_FEEDBACK_BUFFER, 2, kNewClientId, 4, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -128,10 +126,9 @@ TEST_P(GLES3DecoderTest, MapBufferRangeUnmapBufferReadSucceeds) {
.WillOnce(Return(&data[0]))
.RetiresOnSaturation();
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -146,7 +143,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeUnmapBufferReadSucceeds) {
.WillOnce(Return(GL_TRUE))
.RetiresOnSaturation();
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -168,8 +165,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeUnmapBufferWriteSucceeds) {
// uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
int8_t* client_data = GetSharedMemoryAs<int8_t*>() + sizeof(uint32_t);
DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
@@ -198,7 +194,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeUnmapBufferWriteSucceeds) {
.WillOnce(Return(&gpu_data[kOffset]))
.RetiresOnSaturation();
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -217,7 +213,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeUnmapBufferWriteSucceeds) {
.WillOnce(Return(GL_TRUE))
.RetiresOnSaturation();
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -253,8 +249,7 @@ TEST_P(GLES3DecoderTest, FlushMappedBufferRangeSucceeds) {
// uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
int8_t* client_data = GetSharedMemoryAs<int8_t*>() + sizeof(uint32_t);
DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
@@ -283,7 +278,7 @@ TEST_P(GLES3DecoderTest, FlushMappedBufferRangeSucceeds) {
.WillOnce(Return(&gpu_data[kMappedOffset]))
.RetiresOnSaturation();
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kMappedOffset, kMappedSize, kAccess,
data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
@@ -304,7 +299,7 @@ TEST_P(GLES3DecoderTest, FlushMappedBufferRangeSucceeds) {
.Times(1)
.RetiresOnSaturation();
- FlushMappedBufferRange cmd;
+ cmds::FlushMappedBufferRange cmd;
cmd.Init(kTarget, kFlushRangeOffset, kFlushRangeSize);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -327,7 +322,7 @@ TEST_P(GLES3DecoderTest, FlushMappedBufferRangeSucceeds) {
.WillOnce(Return(GL_TRUE))
.RetiresOnSaturation();
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -354,15 +349,14 @@ TEST_P(GLES3DecoderTest, MapBufferRangeNotInitFails) {
const GLbitfield kAccess = GL_MAP_READ_BIT;
std::vector<int8_t> data(kSize);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 1; // Any value other than 0.
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t data_shm_id = shared_memory_id_;
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
@@ -387,8 +381,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeWriteInvalidateRangeSucceeds) {
.WillOnce(Return(&data[0]))
.RetiresOnSaturation();
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
@@ -398,7 +391,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeWriteInvalidateRangeSucceeds) {
int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
memset(mem, 72, kSize); // Init to a random value other than 0.
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -426,8 +419,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeWriteInvalidateBufferSucceeds) {
.WillOnce(Return(&data[0]))
.RetiresOnSaturation();
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
@@ -437,7 +429,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeWriteInvalidateBufferSucceeds) {
int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
memset(mem, 72, kSize); // Init to a random value other than 0.
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -463,8 +455,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeWriteUnsynchronizedBit) {
.WillOnce(Return(&data[0]))
.RetiresOnSaturation();
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
@@ -474,7 +465,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeWriteUnsynchronizedBit) {
int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
memset(mem, 72, kSize); // Init to a random value other than 0.
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -491,8 +482,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeWithError) {
data[ii] = static_cast<int8_t>(ii % 255);
}
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
@@ -502,7 +492,7 @@ TEST_P(GLES3DecoderTest, MapBufferRangeWithError) {
int8_t* mem = reinterpret_cast<int8_t*>(&result[1]);
memset(mem, 72, kSize); // Init to a random value other than 0.
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -526,15 +516,14 @@ TEST_P(GLES3DecoderTest, MapBufferRangeBadSharedMemoryFails) {
DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
DoBufferData(kTarget, kOffset + kSize);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
*result = 0;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t data_shm_id = shared_memory_id_;
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(*result);
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess,
kInvalidSharedMemoryId, data_shm_offset,
result_shm_id, result_shm_offset);
@@ -558,7 +547,7 @@ TEST_P(GLES3DecoderTest, UnmapBufferWriteNotMappedFails) {
DoBindBuffer(kTarget, client_buffer_id_, kServiceBufferId);
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -567,7 +556,7 @@ TEST_P(GLES3DecoderTest, UnmapBufferWriteNotMappedFails) {
TEST_P(GLES3DecoderTest, UnmapBufferWriteNoBoundBufferFails) {
const GLenum kTarget = GL_ARRAY_BUFFER;
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -597,10 +586,9 @@ TEST_P(GLES3DecoderTest, BufferDataDestroysDataStore) {
.WillOnce(Return(&data[0]))
.RetiresOnSaturation();
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -614,7 +602,7 @@ TEST_P(GLES3DecoderTest, BufferDataDestroysDataStore) {
}
{ // UnmapBuffer fails.
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -645,10 +633,9 @@ TEST_P(GLES3DecoderTest, DeleteBuffersDestroysDataStore) {
.WillOnce(Return(&data[0]))
.RetiresOnSaturation();
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -666,7 +653,7 @@ TEST_P(GLES3DecoderTest, DeleteBuffersDestroysDataStore) {
}
{ // UnmapBuffer fails.
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -685,11 +672,10 @@ TEST_P(GLES3DecoderTest, MapUnmapBufferInvalidTarget) {
// uint32_t is Result for both MapBufferRange and UnmapBuffer commands.
uint32_t data_shm_offset = kSharedMemoryOffset + sizeof(uint32_t);
- typedef MapBufferRange::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::MapBufferRange::Result*>();
{
- MapBufferRange cmd;
+ cmds::MapBufferRange cmd;
cmd.Init(kTarget, kOffset, kSize, kAccess, data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
*result = 0;
@@ -699,7 +685,7 @@ TEST_P(GLES3DecoderTest, MapUnmapBufferInvalidTarget) {
}
{
- UnmapBuffer cmd;
+ cmds::UnmapBuffer cmd;
cmd.Init(kTarget);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_lost.cc b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_lost.cc
index 7b18a6ff287..236f92d7acb 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_lost.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_context_lost.cc
@@ -18,8 +18,6 @@ using ::testing::SetArgPointee;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
class GLES2DecoderDrawOOMTest : public GLES2DecoderManualInitTest {
protected:
void Init(bool has_robustness) {
@@ -46,7 +44,7 @@ class GLES2DecoderDrawOOMTest : public GLES2DecoderManualInitTest {
EXPECT_CALL(*mock_decoder_, MarkContextLost(expected_other_reason))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount);
EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
}
@@ -115,7 +113,7 @@ class GLES2DecoderLostContextTest : public GLES2DecoderManualInitTest {
.RetiresOnSaturation();
EXPECT_CALL(*gl_, GetGraphicsResetStatusARB())
.WillOnce(Return(reset_status));
- GetError cmd;
+ cmds::GetError cmd;
cmd.Init(shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
EXPECT_EQ(static_cast<GLuint>(GL_NO_ERROR), *GetSharedMemoryAs<GLenum*>());
@@ -126,7 +124,7 @@ class GLES2DecoderLostContextTest : public GLES2DecoderManualInitTest {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_CONTEXT_LOST_KHR))
.RetiresOnSaturation();
- GetError cmd;
+ cmds::GetError cmd;
cmd.Init(shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
}
@@ -173,7 +171,7 @@ TEST_P(GLES2DecoderLostContextTest, TextureDestroyAfterLostFromMakeCurrent) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kClientTextureId);
DoBindTexture(GL_TEXTURE_2D, kClientTextureId, kServiceTextureId);
DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 5, 6, 0, GL_RGBA, GL_UNSIGNED_BYTE,
shared_memory_id_, kSharedMemoryOffset);
@@ -212,9 +210,9 @@ TEST_P(GLES2DecoderLostContextTest, QueryDestroyAfterLostFromMakeCurrent) {
InitDecoder(init);
const GLsync kGlSync = reinterpret_cast<GLsync>(0xdeadbeef);
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
begin_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, kNewClientId,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
@@ -236,7 +234,7 @@ TEST_P(GLES2DecoderLostContextTest, QueryDestroyAfterLostFromMakeCurrent) {
.RetiresOnSaturation();
#endif
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
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
index e9e84e7f32e..099dda59854 100644
--- 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
@@ -64,8 +64,6 @@ void SetupUpdateES3UnpackParametersExpectations(::gl::MockGLInterface* gl,
} // namespace anonymous
-using namespace cmds;
-
class GLES2DecoderRestoreStateTest : public GLES2DecoderManualInitTest {
public:
GLES2DecoderRestoreStateTest() = default;
@@ -243,7 +241,7 @@ TEST_P(GLES2DecoderRestoreStateTest, ActiveUnit1) {
// Bind a non-default texture to GL_TEXTURE1 unit.
EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
- ActiveTexture cmd;
+ cmds::ActiveTexture cmd;
cmd.Init(GL_TEXTURE1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -274,8 +272,8 @@ TEST_P(GLES2DecoderRestoreStateTest, NonDefaultUnit0BGR) {
// Bind a non-default texture to GL_TEXTURE1 unit.
EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
- SpecializedSetup<ActiveTexture, 0>(true);
- ActiveTexture cmd;
+ SpecializedSetup<cmds::ActiveTexture, 0>(true);
+ cmds::ActiveTexture cmd;
cmd.Init(GL_TEXTURE1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -343,8 +341,8 @@ TEST_P(GLES2DecoderRestoreStateTest, DefaultUnit0) {
// Bind a non-default texture to GL_TEXTURE1 unit.
EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
- SpecializedSetup<ActiveTexture, 0>(true);
- ActiveTexture cmd;
+ SpecializedSetup<cmds::ActiveTexture, 0>(true);
+ cmds::ActiveTexture cmd;
cmd.Init(GL_TEXTURE1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -529,7 +527,7 @@ TEST_P(GLES3DecoderTest, ES3PixelStoreiWithPixelUnpackBuffer) {
// Without PIXEL_UNPACK_BUFFER bound, PixelStorei with unpack parameters
// is cached and not passed down to GL.
EXPECT_CALL(*gl_, PixelStorei(_, _)).Times(0);
- PixelStorei cmd;
+ cmds::PixelStorei cmd;
cmd.Init(GL_UNPACK_ROW_LENGTH, 8);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -567,7 +565,7 @@ TEST_P(GLES2DecoderManualInitTest, MipmapHintOnCoreProfile) {
init.gl_version = "3.2";
InitDecoder(init);
- Hint cmd;
+ cmds::Hint cmd;
cmd.Init(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
EXPECT_CALL(*gl_, Hint(GL_GENERATE_MIPMAP_HINT, GL_NICEST)).Times(0);
@@ -583,7 +581,7 @@ TEST_P(GLES2DecoderManualInitTest, MipmapHintOnCompatibilityProfile) {
init.extensions += " GL_ARB_compatibility";
InitDecoder(init);
- Hint cmd;
+ cmds::Hint cmd;
cmd.Init(GL_GENERATE_MIPMAP_HINT, GL_NICEST);
EXPECT_CALL(*gl_, Hint(GL_GENERATE_MIPMAP_HINT, GL_NICEST))
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
index 9e18273729f..375cfa6e47c 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_drawing.cc
@@ -49,8 +49,6 @@ using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
class GLES2DecoderGeometryInstancingTest : public GLES2DecoderWithShaderTest {
public:
GLES2DecoderGeometryInstancingTest() : GLES2DecoderWithShaderTest() {}
@@ -80,7 +78,7 @@ void GLES2DecoderManualInitTest::DirtyStateMaskTest(GLuint color_bits,
bool depth_mask,
GLuint front_stencil_mask,
GLuint back_stencil_mask) {
- ColorMask color_mask_cmd;
+ cmds::ColorMask color_mask_cmd;
color_mask_cmd.Init((color_bits & 0x1000) != 0,
(color_bits & 0x0100) != 0,
(color_bits & 0x0010) != 0,
@@ -88,17 +86,17 @@ void GLES2DecoderManualInitTest::DirtyStateMaskTest(GLuint color_bits,
EXPECT_EQ(error::kNoError, ExecuteCmd(color_mask_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- DepthMask depth_mask_cmd;
+ cmds::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;
+ cmds::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;
+ cmds::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());
@@ -117,7 +115,7 @@ void GLES2DecoderManualInitTest::DirtyStateMaskTest(GLuint color_bits,
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -126,7 +124,7 @@ void GLES2DecoderManualInitTest::DirtyStateMaskTest(GLuint color_bits,
// 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;
+ cmds::ColorMask cmd;
cmd.Init(true, true, true, true);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -146,7 +144,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMask) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -155,12 +153,12 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMask) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_COLOR_WRITEMASK, result->GetData()))
.Times(0);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::GetIntegerv cmd2;
cmd2.Init(GL_COLOR_WRITEMASK, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(
@@ -177,7 +175,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMask) {
// draw time but querying it returns true.
TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferDepthMask) {
EXPECT_CALL(*gl_, DepthMask(true)).Times(0).RetiresOnSaturation();
- DepthMask cmd;
+ cmds::DepthMask cmd;
cmd.Init(true);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -197,7 +195,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferDepthMask) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -206,12 +204,12 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferDepthMask) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_WRITEMASK, result->GetData()))
.Times(0);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::GetIntegerv cmd2;
cmd2.Init(GL_DEPTH_WRITEMASK, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(
@@ -226,7 +224,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferDepthMask) {
TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferStencilMask) {
const GLint kMask = 123;
EXPECT_CALL(*gl_, StencilMask(kMask)).Times(0).RetiresOnSaturation();
- StencilMask cmd;
+ cmds::StencilMask cmd;
cmd.Init(kMask);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -246,7 +244,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferStencilMask) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -255,12 +253,12 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferStencilMask) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_WRITEMASK, result->GetData()))
.Times(0);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::GetIntegerv cmd2;
cmd2.Init(GL_STENCIL_WRITEMASK, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
EXPECT_EQ(
@@ -272,7 +270,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferStencilMask) {
// Test that if an FBO is bound we get the correct masks.
TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMaskFBO) {
- ColorMask cmd;
+ cmds::ColorMask cmd;
cmd.Init(true, true, true, true);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -298,7 +296,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMaskFBO) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -319,7 +317,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, RGBBackbufferColorMaskFBO) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kNewServiceId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kNewClientId);
+ GenHelper<cmds::GenTexturesImmediate>(kNewClientId);
DoBindTexture(GL_TEXTURE_2D, kNewClientId, kNewServiceId);
// Pass some data so the texture will be marked as cleared.
DoTexImage2D(GL_TEXTURE_2D, 0, kFormat, kWidth, kHeight, 0, kFormat,
@@ -389,7 +387,7 @@ TEST_P(GLES2DecoderManualInitTest, DepthEnableWithDepth) {
init.bind_generates_resource = true;
InitDecoder(init);
- Enable cmd;
+ cmds::Enable cmd;
cmd.Init(GL_DEPTH_TEST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -410,7 +408,7 @@ TEST_P(GLES2DecoderManualInitTest, DepthEnableWithDepth) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -419,13 +417,13 @@ TEST_P(GLES2DecoderManualInitTest, DepthEnableWithDepth) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_TEST, _))
.Times(0)
.RetiresOnSaturation();
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -440,7 +438,7 @@ TEST_P(GLES2DecoderManualInitTest, DepthEnableWithoutRequestedDepth) {
init.bind_generates_resource = true;
InitDecoder(init);
- Enable cmd;
+ cmds::Enable cmd;
cmd.Init(GL_DEPTH_TEST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -461,7 +459,7 @@ TEST_P(GLES2DecoderManualInitTest, DepthEnableWithoutRequestedDepth) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -470,13 +468,13 @@ TEST_P(GLES2DecoderManualInitTest, DepthEnableWithoutRequestedDepth) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_TEST, _))
.Times(0)
.RetiresOnSaturation();
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -492,7 +490,7 @@ TEST_P(GLES2DecoderManualInitTest, StencilEnableWithStencil) {
init.bind_generates_resource = true;
InitDecoder(init);
- Enable cmd;
+ cmds::Enable cmd;
cmd.Init(GL_STENCIL_TEST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -514,7 +512,7 @@ TEST_P(GLES2DecoderManualInitTest, StencilEnableWithStencil) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -523,13 +521,13 @@ TEST_P(GLES2DecoderManualInitTest, StencilEnableWithStencil) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_TEST, _))
.Times(0)
.RetiresOnSaturation();
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -544,7 +542,7 @@ TEST_P(GLES2DecoderManualInitTest, StencilEnableWithoutRequestedStencil) {
init.bind_generates_resource = true;
InitDecoder(init);
- Enable cmd;
+ cmds::Enable cmd;
cmd.Init(GL_STENCIL_TEST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -565,7 +563,7 @@ TEST_P(GLES2DecoderManualInitTest, StencilEnableWithoutRequestedStencil) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays draw_cmd;
+ cmds::DrawArrays draw_cmd;
draw_cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(draw_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -574,13 +572,13 @@ TEST_P(GLES2DecoderManualInitTest, StencilEnableWithoutRequestedStencil) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_TEST, _))
.Times(0)
.RetiresOnSaturation();
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -685,7 +683,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysNoAttributesSucceeds) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -696,7 +694,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OverflowFails) {
const GLsizei kLargeCount = 0x40000000;
SetupTexture();
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kLargeCount);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
@@ -708,7 +706,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0PosToNegFails) {
const GLsizei kLargeCount = 0x7FFFFFFF;
SetupTexture();
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kLargeCount);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
@@ -722,7 +720,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysSimulatedAttrib0OOMFails) {
AddExpectationsForSimulatedAttrib0WithError(
kFakeLargeCount, 0, GL_OUT_OF_MEMORY);
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kFakeLargeCount);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
@@ -759,7 +757,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysBadTextureUsesBlack) {
.RetiresOnSaturation();
}
SetupExpectationsForApplyingDefaultDirtyState();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -769,7 +767,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysMissingAttributesFails) {
DoEnableVertexAttribArray(1);
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -780,7 +778,7 @@ TEST_P(GLES2DecoderWithShaderTest,
DoEnableVertexAttribArray(1);
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -792,7 +790,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysIntOverflow) {
GLint large = std::numeric_limits<GLint>::max();
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, large, large);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -809,7 +807,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysValidAttributesSucceeds) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -838,7 +836,7 @@ TEST_P(GLES2DecoderManualInitTest, InitVertexAttributes) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -868,7 +866,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysDeletedBufferFails) {
DeleteVertexBuffer();
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -882,7 +880,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysDeletedProgramSucceeds) {
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(1).RetiresOnSaturation();
EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)).Times(1);
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -893,7 +891,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysWithInvalidModeFails) {
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_QUADS, 0, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -908,7 +906,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysInvalidCountFails) {
// Try start > 0
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0);
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 1, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -949,7 +947,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysInstancedANGLEFails) {
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
}
@@ -964,7 +962,7 @@ TEST_P(GLES2DecoderWithShaderTest, VertexAttribDivisorANGLEFails) {
.Times(0)
.RetiresOnSaturation();
- VertexAttribDivisorANGLE cmd;
+ cmds::VertexAttribDivisorANGLE cmd;
cmd.Init(0, 1);
EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
}
@@ -976,7 +974,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -1001,7 +999,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 1))
.Times(1)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, 3);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1012,7 +1010,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DoEnableVertexAttribArray(1);
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _)).Times(0);
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -1023,7 +1021,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DoEnableVertexAttribArray(1);
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _)).Times(0);
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, 0, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1045,7 +1043,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, 1))
.Times(1)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1057,7 +1055,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _)).Times(0);
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_QUADS, 0, 1, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -1072,7 +1070,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _)).Times(0);
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, 1, -1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -1094,7 +1092,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, kNumVertices / 2))
.Times(1)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices / 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1118,7 +1116,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1140,7 +1138,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1157,7 +1155,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest, DrawArraysInstancedANGLELargeFails) {
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, kNumVertices + 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -1188,7 +1186,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DrawArraysInstancedANGLE(GL_TRIANGLES, 0, kNumVertices / 2, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices / 2, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1207,7 +1205,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawArraysInstancedANGLE(_, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawArraysInstancedANGLE cmd;
+ cmds::DrawArraysInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -1227,7 +1225,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawArrays(_, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -1246,7 +1244,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsNoAttributesSucceeds) {
BufferOffset(kValidIndexRangeStart * 2)))
.Times(1)
.RetiresOnSaturation();
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1260,7 +1258,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsMissingAttributesFails) {
DoEnableVertexAttribArray(1);
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1275,7 +1273,7 @@ TEST_P(GLES2DecoderWithShaderTest,
DoEnableVertexAttribArray(1);
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES, 0, GL_UNSIGNED_SHORT, kValidIndexRangeStart * 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1286,7 +1284,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsExtraAttributesFails) {
DoEnableVertexAttribArray(6);
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1310,7 +1308,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsValidAttributesSucceeds) {
BufferOffset(kValidIndexRangeStart * 2)))
.Times(1)
.RetiresOnSaturation();
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1330,7 +1328,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsDeletedBufferFails) {
DeleteIndexBuffer();
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1348,7 +1346,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsDeletedProgramSucceeds) {
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(1);
EXPECT_CALL(*gl_, DeleteProgram(kServiceProgramId)).Times(1);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1363,7 +1361,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsWithInvalidModeFails) {
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_QUADS,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1385,7 +1383,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsInvalidCountFails) {
// Try start > 0
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES, kNumIndices, GL_UNSIGNED_SHORT, 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -1404,7 +1402,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsOutOfRangeIndicesFails) {
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kInvalidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1420,7 +1418,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsOddOffsetForUint16Fails) {
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(0);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES, kInvalidIndexRangeCount, GL_UNSIGNED_SHORT, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -1437,7 +1435,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsInstancedANGLEFails) {
EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1454,7 +1452,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1490,7 +1488,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, VertexAttribDivisorANGLE(0, 1))
.Times(1)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1506,7 +1504,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DoEnableVertexAttribArray(1);
EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _)).Times(0);
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1522,7 +1520,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DoEnableVertexAttribArray(1);
EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _)).Times(0);
- DrawElementsInstancedANGLE cmd;
+ cmds::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());
@@ -1552,7 +1550,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
.Times(1)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1569,7 +1567,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
DoVertexAttribPointer(1, 2, GL_FLOAT, 0, 0);
EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _)).Times(0);
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_QUADS,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1613,7 +1611,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
kNumVertices / 2))
.Times(1)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1651,7 +1649,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
BufferOffset(kValidIndexRangeStart * 2)))
.Times(1)
.RetiresOnSaturation();
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1681,7 +1679,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1704,7 +1702,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1740,7 +1738,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1772,7 +1770,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1796,7 +1794,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawElementsInstancedANGLE(_, _, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawElementsInstancedANGLE cmd;
+ cmds::DrawElementsInstancedANGLE cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1821,7 +1819,7 @@ TEST_P(GLES2DecoderGeometryInstancingTest,
EXPECT_CALL(*gl_, DrawElements(_, _, _, _))
.Times(0)
.RetiresOnSaturation();
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1850,7 +1848,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawArraysClearsAfterTexImage2DNULL) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1888,7 +1886,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawElementsClearsAfterTexImage2DNULL) {
BufferOffset(kValidIndexRangeStart * 2)))
.Times(1)
.RetiresOnSaturation();
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -1917,7 +1915,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawClearsAfterTexImage2DNULLInFBO) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render to" texture.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -1960,7 +1958,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawClearsAfterTexImage2DNULLInFBO) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1981,7 +1979,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawWitFBOThatCantClearDoesNotDraw) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render to" texture.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -2004,7 +2002,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawWitFBOThatCantClearDoesNotDraw) {
.WillOnce(Return(GL_FRAMEBUFFER_UNSUPPORTED))
.RetiresOnSaturation();
EXPECT_CALL(*gl_, DrawArrays(_, _, _)).Times(0).RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_FRAMEBUFFER_OPERATION, GetGLError());
@@ -2050,7 +2048,7 @@ TEST_P(GLES2DecoderWithShaderTest, DrawClearsAfterRenderbufferStorageInFBO) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2114,7 +2112,7 @@ TEST_P(GLES2DecoderManualInitTest, DrawArraysClearsAfterTexImage2DNULLCubemap) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -2128,7 +2126,7 @@ TEST_P(GLES2DecoderWithShaderTest,
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render to" texture.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -2187,7 +2185,7 @@ TEST_P(GLES2DecoderWithShaderTest,
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2204,7 +2202,7 @@ TEST_P(GLES2DecoderWithShaderTest,
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render to" texture that is cleared.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -2241,7 +2239,7 @@ TEST_P(GLES2DecoderWithShaderTest,
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2330,7 +2328,7 @@ TEST_P(GLES2DecoderManualInitTest, DrawClearsDepthTexture) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2406,7 +2404,7 @@ TEST_P(GLES2DecoderManualInitTest, DrawClearsLargeTexture) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2417,7 +2415,7 @@ TEST_P(GLES3DecoderTest, DrawNoProgram) {
SetupAllNeededVertexBuffers();
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, _, _)).Times(0);
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2425,7 +2423,7 @@ TEST_P(GLES3DecoderTest, DrawNoProgram) {
TEST_P(GLES2DecoderTest, ClearInvalidValue) {
EXPECT_CALL(*gl_, Clear(_)).Times(0);
- Clear cmd;
+ cmds::Clear cmd;
cmd.Init(0xffffffff);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
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
index f9dcad305f9..9b55c973e31 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
@@ -11,6 +11,7 @@
#include <memory>
#include "base/command_line.h"
+#include "base/numerics/ranges.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "gpu/command_buffer/common/gles2_cmd_format.h"
@@ -53,8 +54,6 @@ using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
class GLES2DecoderTestWithExtensionsOnGLES2 : public GLES2DecoderTest {
public:
GLES2DecoderTestWithExtensionsOnGLES2() = default;
@@ -74,10 +73,10 @@ class GLES2DecoderTestWithExtensionsOnGLES2 : public GLES2DecoderTest {
TEST_P(GLES2DecoderTest, CheckFramebufferStatusWithNoBoundTarget) {
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(_)).Times(0);
- CheckFramebufferStatus::Result* result =
- static_cast<CheckFramebufferStatus::Result*>(shared_memory_address_);
+ auto* result = static_cast<cmds::CheckFramebufferStatus::Result*>(
+ shared_memory_address_);
*result = 0;
- CheckFramebufferStatus cmd;
+ cmds::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);
@@ -100,7 +99,7 @@ TEST_P(GLES2DecoderWithShaderTest, BindAndDeleteFramebuffer) {
EXPECT_CALL(*gl_, DrawArrays(GL_TRIANGLES, 0, kNumVertices))
.Times(1)
.RetiresOnSaturation();
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -108,7 +107,7 @@ TEST_P(GLES2DecoderWithShaderTest, BindAndDeleteFramebuffer) {
TEST_P(GLES2DecoderTest, FramebufferRenderbufferWithNoBoundTarget) {
EXPECT_CALL(*gl_, FramebufferRenderbufferEXT(_, _, _, _)).Times(0);
- FramebufferRenderbuffer cmd;
+ cmds::FramebufferRenderbuffer cmd;
cmd.Init(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER,
@@ -119,7 +118,7 @@ TEST_P(GLES2DecoderTest, FramebufferRenderbufferWithNoBoundTarget) {
TEST_P(GLES2DecoderTest, FramebufferTexture2DWithNoBoundTarget) {
EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
@@ -131,7 +130,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DWithNoBoundTarget) {
TEST_P(GLES3DecoderTest, FramebufferTexture2DWithNoBoundTarget) {
EXPECT_CALL(*gl_, FramebufferTexture2DEXT(_, _, _, _, _)).Times(0);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
@@ -152,7 +151,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DValidArgs) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
client_texture_id_, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -170,7 +169,7 @@ TEST_P(GLES3DecoderTest, FramebufferTexture2DValidArgs) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
client_texture_id_, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -196,7 +195,7 @@ TEST_P(GLES3DecoderTest, FramebufferTexture2DDepthStencil) {
GL_TEXTURE_2D, kServiceTextureId, 4))
.Times(1)
.RetiresOnSaturation();
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D,
client_texture_id_, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -213,7 +212,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DInvalidArgs0_0) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_RENDERBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
client_texture_id_, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -225,7 +224,7 @@ TEST_P(GLES3DecoderTest, FramebufferTexture2DInvalidArgs0_0) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_RENDERBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
client_texture_id_, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -237,7 +236,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DInvalidArgs1_0) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR, GL_TEXTURE_2D, client_texture_id_, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -248,7 +247,7 @@ TEST_P(GLES3DecoderTest, FramebufferTexture2DInvalidArgs1_0) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR, GL_TEXTURE_2D, client_texture_id_, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -259,7 +258,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DInvalidArgs2_0) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_PROXY_TEXTURE_CUBE_MAP,
client_texture_id_, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -271,7 +270,7 @@ TEST_P(GLES3DecoderTest, FramebufferTexture2DInvalidArgs2_0) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_PROXY_TEXTURE_CUBE_MAP,
client_texture_id_, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -283,7 +282,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DInvalidArgs4_0) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
client_texture_id_, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -301,7 +300,7 @@ TEST_P(GLES3DecoderTest, FramebufferTexture2DValidArgs4_0) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
client_texture_id_, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -314,7 +313,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DMismatchedTexture1) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
client_texture_id_, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -327,7 +326,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DMismatchedTexture2) {
DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTexture2D cmd;
+ cmds::FramebufferTexture2D cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
client_texture_id_, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -341,7 +340,7 @@ TEST_P(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithNoBoundTarget) {
.RetiresOnSaturation();
EXPECT_CALL(*gl_, GetFramebufferAttachmentParameterivEXT(_, _, _, _))
.Times(0);
- GetFramebufferAttachmentParameteriv cmd;
+ cmds::GetFramebufferAttachmentParameteriv cmd;
cmd.Init(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE,
@@ -365,13 +364,13 @@ TEST_P(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithRenderbuffer) {
kServiceRenderbufferId))
.Times(1)
.RetiresOnSaturation();
- GetFramebufferAttachmentParameteriv::Result* result =
- static_cast<GetFramebufferAttachmentParameteriv::Result*>(
+ auto* result =
+ static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
shared_memory_address_);
result->size = 0;
const GLint* result_value = result->GetData();
- FramebufferRenderbuffer fbrb_cmd;
- GetFramebufferAttachmentParameteriv cmd;
+ cmds::FramebufferRenderbuffer fbrb_cmd;
+ cmds::GetFramebufferAttachmentParameteriv cmd;
fbrb_cmd.Init(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER,
@@ -401,13 +400,13 @@ TEST_P(GLES2DecoderTest, GetFramebufferAttachmentParameterivWithTexture) {
0))
.Times(1)
.RetiresOnSaturation();
- GetFramebufferAttachmentParameteriv::Result* result =
- static_cast<GetFramebufferAttachmentParameteriv::Result*>(
+ auto* result =
+ static_cast<cmds::GetFramebufferAttachmentParameteriv::Result*>(
shared_memory_address_);
result->SetNumResults(0);
const GLint* result_value = result->GetData();
- FramebufferTexture2D fbtex_cmd;
- GetFramebufferAttachmentParameteriv cmd;
+ cmds::FramebufferTexture2D fbtex_cmd;
+ cmds::GetFramebufferAttachmentParameteriv cmd;
fbtex_cmd.Init(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
@@ -431,7 +430,7 @@ TEST_P(GLES2DecoderWithShaderTest,
GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
DoRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, GL_RGBA, 1, 1, GL_NO_ERROR);
- GetRenderbufferParameteriv cmd;
+ cmds::GetRenderbufferParameteriv cmd;
cmd.Init(GL_RENDERBUFFER,
GL_RENDERBUFFER_RED_SIZE,
shared_memory_id_,
@@ -457,7 +456,7 @@ TEST_P(GLES2DecoderTest, GetRenderbufferParameterivWithNoBoundTarget) {
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
EXPECT_CALL(*gl_, GetRenderbufferParameterivEXT(_, _, _)).Times(0);
- GetRenderbufferParameteriv cmd;
+ cmds::GetRenderbufferParameteriv cmd;
cmd.Init(GL_RENDERBUFFER,
GL_RENDERBUFFER_WIDTH,
shared_memory_id_,
@@ -477,7 +476,7 @@ TEST_P(GLES2DecoderWithShaderTest, RenderbufferStorageRebindRenderbuffer) {
TEST_P(GLES2DecoderTest, RenderbufferStorageWithNoBoundTarget) {
EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _)).Times(0);
- RenderbufferStorage cmd;
+ cmds::RenderbufferStorage cmd;
cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 3, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -610,8 +609,7 @@ void GLES2DecoderTest::CheckReadPixelsOutOfRange(GLint in_read_x,
ReadPixelsEmulator emu(
kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment);
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
@@ -626,8 +624,8 @@ void GLES2DecoderTest::CheckReadPixelsOutOfRange(GLint in_read_x,
// 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_end_x = base::ClampToRange(in_read_x + in_read_width, 0, kWidth);
+ GLint read_end_y = base::ClampToRange(in_read_y + in_read_height, 0, kHeight);
GLint read_width = read_end_x - read_x;
GLint read_height = read_end_y - read_y;
if (read_width > 0 && read_height > 0) {
@@ -639,7 +637,7 @@ void GLES2DecoderTest::CheckReadPixelsOutOfRange(GLint in_read_x,
.RetiresOnSaturation();
}
}
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(in_read_x,
in_read_y,
in_read_width,
@@ -715,8 +713,7 @@ TEST_P(GLES2DecoderTest, ReadPixels) {
ReadPixelsEmulator emu(
kWidth, kHeight, kBytesPerPixel, kSrcPixels, kSrcPixels, kPackAlignment);
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
@@ -729,7 +726,7 @@ TEST_P(GLES2DecoderTest, ReadPixels) {
EXPECT_CALL(*gl_,
ReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, _))
.WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels));
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
kWidth,
@@ -756,7 +753,7 @@ TEST_P(GLES3DecoderTest, ReadPixels2PixelPackBufferNoBufferBound) {
const GLsizei kHeight = 3;
EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0);
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
kWidth,
@@ -778,17 +775,16 @@ TEST_P(GLES3DecoderTest, ReadPixelsBufferBound) {
const GLint kBytesPerPixel = 4;
GLint size = kWidth * kHeight * kBytesPerPixel;
EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0);
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
DoBindBuffer(GL_PIXEL_PACK_BUFFER, client_buffer_id_, kServiceBufferId);
DoBufferData(GL_PIXEL_PACK_BUFFER, size);
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
kWidth,
@@ -819,7 +815,7 @@ TEST_P(GLES3DecoderTest, ReadPixels2PixelPackBuffer) {
.RetiresOnSaturation();
EXPECT_CALL(*gl_,
ReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, _));
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
kWidth,
@@ -855,7 +851,7 @@ TEST_P(GLES3DecoderTest, ReadPixelsPixelPackBufferMapped) {
MapBufferRange(GL_PIXEL_PACK_BUFFER, 0, size, GL_MAP_READ_BIT))
.WillOnce(Return(mapped_data.data()))
.RetiresOnSaturation();
- MapBufferRange map_buffer_range;
+ cmds::MapBufferRange map_buffer_range;
map_buffer_range.Init(GL_PIXEL_PACK_BUFFER, 0, size, GL_MAP_READ_BIT,
data_shm_id, data_shm_offset,
result_shm_id, result_shm_offset);
@@ -863,7 +859,7 @@ TEST_P(GLES3DecoderTest, ReadPixelsPixelPackBufferMapped) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0);
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
kWidth,
@@ -890,7 +886,7 @@ TEST_P(GLES3DecoderTest, ReadPixelsPixelPackBufferIsNotLargeEnough) {
DoBufferData(GL_PIXEL_PACK_BUFFER, size - 4);
EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0);
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
kWidth,
@@ -948,7 +944,7 @@ TEST_P(GLES2DecoderManualInitTest, ReadPixels2RowLengthWorkaround) {
}
}
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0, 0, kWidth, kHeight,
kFormat, kType,
0, 0, 0, 0,
@@ -1000,7 +996,7 @@ TEST_P(GLES2DecoderManualInitTest, ReadPixels2AlignmentWorkaround) {
.Times(1)
.RetiresOnSaturation();
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0, 0, kWidth, kHeight,
kFormat, kType,
0, 0, 0, 0,
@@ -1064,7 +1060,7 @@ TEST_P(GLES2DecoderManualInitTest,
.Times(1)
.RetiresOnSaturation();
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0, 0, kWidth, kHeight,
kFormat, kType,
0, 0, 0, 0,
@@ -1087,8 +1083,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, ReadPixelsNoAlphaBackbuffer) {
ReadPixelsEmulator emu(kWidth, kHeight, kBytesPerPixel, kSrcPixels,
kSrcPixels, kPackAlignment);
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
@@ -1101,7 +1096,7 @@ TEST_P(GLES2DecoderRGBBackbufferTest, ReadPixelsNoAlphaBackbuffer) {
EXPECT_CALL(*gl_,
ReadPixels(0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE, _))
.WillOnce(Invoke(&emu, &ReadPixelsEmulator::ReadPixels));
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
kWidth,
@@ -1153,14 +1148,13 @@ TEST_P(GLES2DecoderTest, ReadPixelsOutOfRange) {
}
TEST_P(GLES2DecoderTest, ReadPixelsInvalidArgs) {
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
EXPECT_CALL(*gl_, ReadPixels(_, _, _, _, _, _, _)).Times(0);
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
-1,
@@ -1265,14 +1259,13 @@ TEST_P(GLES2DecoderManualInitTest, ReadPixelsAsyncError) {
init.bind_generates_resource = true;
InitDecoder(init);
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
EXPECT_CALL(*gl_, GetError())
// first error check must pass to get to the test
@@ -1293,7 +1286,7 @@ TEST_P(GLES2DecoderManualInitTest, ReadPixelsAsyncError) {
BufferData(GL_PIXEL_PACK_BUFFER_ARB, _, nullptr, GL_STREAM_READ))
.Times(1);
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
kWidth,
@@ -1375,19 +1368,18 @@ class GLES2ReadPixelsAsyncTest : public GLES2DecoderManualInitTest {
};
TEST_P(GLES2ReadPixelsAsyncTest, ReadPixelsAsync) {
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
char* pixels = reinterpret_cast<char*>(result + 1);
SetupReadPixelsAsyncExpectation(kWidth, kHeight);
- ReadPixels cmd;
+ cmds::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, true);
result->success = 0;
@@ -1404,19 +1396,18 @@ TEST_P(GLES2ReadPixelsAsyncTest, ReadPixelsAsync) {
}
TEST_P(GLES2ReadPixelsAsyncTest, ReadPixelsAsyncModifyCommand) {
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
char* pixels = reinterpret_cast<char*>(result + 1);
SetupReadPixelsAsyncExpectation(kWidth, kHeight);
- ReadPixels cmd;
+ cmds::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, true);
result->success = 0;
@@ -1433,20 +1424,19 @@ TEST_P(GLES2ReadPixelsAsyncTest, ReadPixelsAsyncModifyCommand) {
}
TEST_P(GLES2ReadPixelsAsyncTest, ReadPixelsAsyncChangePackAlignment) {
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
const GLsizei kWidth = 1;
const GLsizei kHeight = 4;
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
char* pixels = reinterpret_cast<char*>(result + 1);
SetupReadPixelsAsyncExpectation(kWidth, kHeight);
{
- ReadPixels cmd;
+ cmds::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, true);
result->success = 0;
@@ -1458,7 +1448,7 @@ TEST_P(GLES2ReadPixelsAsyncTest, ReadPixelsAsyncChangePackAlignment) {
// Changing the pack alignment after the ReadPixels is issued but before we
// finish the read should have no impact.
{
- PixelStorei cmd;
+ cmds::PixelStorei cmd;
cmd.Init(GL_PACK_ALIGNMENT, 8);
EXPECT_CALL(*gl_, PixelStorei(GL_PACK_ALIGNMENT, 8)).Times(1);
@@ -1477,10 +1467,10 @@ TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearColor) {
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
kServiceRenderbufferId);
- ClearColor color_cmd;
- ColorMask color_mask_cmd;
- Enable enable_cmd;
- FramebufferRenderbuffer cmd;
+ cmds::ClearColor color_cmd;
+ cmds::ColorMask color_mask_cmd;
+ cmds::Enable enable_cmd;
+ cmds::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);
@@ -1517,9 +1507,9 @@ TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearDepth) {
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
kServiceRenderbufferId);
- ClearDepthf depth_cmd;
- DepthMask depth_mask_cmd;
- FramebufferRenderbuffer cmd;
+ cmds::ClearDepthf depth_cmd;
+ cmds::DepthMask depth_mask_cmd;
+ cmds::FramebufferRenderbuffer cmd;
depth_cmd.Init(0.5f);
depth_mask_cmd.Init(false);
cmd.Init(GL_FRAMEBUFFER,
@@ -1551,9 +1541,9 @@ TEST_P(GLES2DecoderTest, FramebufferRenderbufferClearStencil) {
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
kServiceRenderbufferId);
- ClearStencil stencil_cmd;
- StencilMaskSeparate stencil_mask_separate_cmd;
- FramebufferRenderbuffer cmd;
+ cmds::ClearStencil stencil_cmd;
+ cmds::StencilMaskSeparate stencil_mask_separate_cmd;
+ cmds::FramebufferRenderbuffer cmd;
stencil_cmd.Init(123);
stencil_mask_separate_cmd.Init(GL_BACK, 0x1234u);
cmd.Init(GL_FRAMEBUFFER,
@@ -1585,9 +1575,9 @@ TEST_P(GLES3DecoderTest, FramebufferRenderbufferClearDepthStencil) {
kServiceFramebufferId);
DoBindRenderbuffer(GL_RENDERBUFFER, client_renderbuffer_id_,
kServiceRenderbufferId);
- ClearDepthf depth_cmd;
- ClearStencil stencil_cmd;
- FramebufferRenderbuffer cmd;
+ cmds::ClearDepthf depth_cmd;
+ cmds::ClearStencil stencil_cmd;
+ cmds::FramebufferRenderbuffer cmd;
depth_cmd.Init(0.5f);
stencil_cmd.Init(123);
cmd.Init(
@@ -1640,10 +1630,10 @@ TEST_P(GLES2DecoderManualInitTest, ActualAlphaMatchesRequestedAlpha) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -1662,10 +1652,10 @@ TEST_P(GLES2DecoderManualInitTest, ActualAlphaDoesNotMatchRequestedAlpha) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -1685,13 +1675,13 @@ TEST_P(GLES2DecoderManualInitTest, ActualDepthMatchesRequestedDepth) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
.WillOnce(SetArgPointee<1>(24))
.RetiresOnSaturation();
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -1710,13 +1700,13 @@ TEST_P(GLES2DecoderManualInitTest, ActualDepthDoesNotMatchRequestedDepth) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_DEPTH_BITS, _))
.WillOnce(SetArgPointee<1>(24))
.RetiresOnSaturation();
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -1736,13 +1726,13 @@ TEST_P(GLES2DecoderManualInitTest, ActualStencilMatchesRequestedStencil) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
.WillOnce(SetArgPointee<1>(8))
.RetiresOnSaturation();
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -1761,13 +1751,13 @@ TEST_P(GLES2DecoderManualInitTest, ActualStencilDoesNotMatchRequestedStencil) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
.WillOnce(SetArgPointee<1>(8))
.RetiresOnSaturation();
result->size = 0;
- GetIntegerv cmd2;
+ cmds::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),
@@ -1793,10 +1783,10 @@ TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilReportsCorrectValues) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::GetIntegerv cmd2;
cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
.WillOnce(SetArgPointee<1>(8))
@@ -1834,10 +1824,10 @@ TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilNoRequestedStencil) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::GetIntegerv cmd2;
cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
.WillOnce(SetArgPointee<1>(8))
@@ -1887,7 +1877,7 @@ TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferDepth) {
RenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50))
.Times(1)
.RetiresOnSaturation();
- RenderbufferStorage cmd;
+ cmds::RenderbufferStorage cmd;
cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_CALL(*gl_,
@@ -1897,17 +1887,17 @@ TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferDepth) {
kServiceRenderbufferId))
.Times(1)
.RetiresOnSaturation();
- FramebufferRenderbuffer fbrb_cmd;
+ cmds::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_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::GetIntegerv cmd2;
cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
.WillOnce(SetArgPointee<1>(8))
@@ -1957,7 +1947,7 @@ TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferStencil) {
RenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50))
.Times(1)
.RetiresOnSaturation();
- RenderbufferStorage cmd;
+ cmds::RenderbufferStorage cmd;
cmd.Init(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 100, 50);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_CALL(*gl_,
@@ -1967,17 +1957,17 @@ TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferStencil) {
kServiceRenderbufferId))
.Times(1)
.RetiresOnSaturation();
- FramebufferRenderbuffer fbrb_cmd;
+ cmds::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_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
result->size = 0;
- GetIntegerv cmd2;
+ cmds::GetIntegerv cmd2;
cmd2.Init(GL_STENCIL_BITS, shared_memory_id_, shared_memory_offset_);
EXPECT_CALL(*gl_, GetIntegerv(GL_STENCIL_BITS, _))
.WillOnce(SetArgPointee<1>(8))
@@ -2002,7 +1992,7 @@ TEST_P(GLES2DecoderManualInitTest, PackedDepthStencilRenderbufferStencil) {
TEST_P(GLES2DecoderTest, FramebufferRenderbufferGLError) {
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferRenderbuffer cmd;
+ cmds::FramebufferRenderbuffer cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
client_renderbuffer_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2054,7 +2044,7 @@ TEST_P(GLES2DecoderTest, FramebufferTexture2DGLError) {
0))
.Times(1)
.RetiresOnSaturation();
- FramebufferTexture2D fbtex_cmd;
+ cmds::FramebufferTexture2D fbtex_cmd;
fbtex_cmd.Init(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
@@ -2075,7 +2065,7 @@ TEST_P(GLES2DecoderTest, RenderbufferStorageGLError) {
EXPECT_CALL(*gl_, RenderbufferStorageEXT(GL_RENDERBUFFER, GL_RGBA, 100, 50))
.Times(1)
.RetiresOnSaturation();
- RenderbufferStorage cmd;
+ cmds::RenderbufferStorage cmd;
cmd.Init(GL_RENDERBUFFER, GL_RGBA4, 100, 50);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
@@ -2087,7 +2077,7 @@ TEST_P(GLES2DecoderTest, RenderbufferStorageBadArgs) {
EXPECT_CALL(*gl_, RenderbufferStorageEXT(_, _, _, _))
.Times(0)
.RetiresOnSaturation();
- RenderbufferStorage cmd;
+ cmds::RenderbufferStorage cmd;
cmd.Init(GL_RENDERBUFFER, GL_RGBA4, TestHelper::kMaxRenderbufferSize + 1, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -2113,8 +2103,7 @@ TEST_P(GLES3DecoderTest, ClearBufferivImmediateValidArgs) {
framebuffer->MarkAttachmentAsCleared(
group().renderbuffer_manager(), nullptr, GL_COLOR_ATTACHMENT0, true);
- ClearBufferivImmediate& cmd =
- *GetImmediateAs<ClearBufferivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::ClearBufferivImmediate>();
GLint temp[4] = { 0 };
cmd.Init(GL_COLOR, 0, &temp[0]);
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER))
@@ -2144,8 +2133,7 @@ TEST_P(GLES3DecoderTest, ClearBufferuivImmediateValidArgs) {
framebuffer->MarkAttachmentAsCleared(
group().renderbuffer_manager(), nullptr, GL_COLOR_ATTACHMENT0, true);
- ClearBufferuivImmediate& cmd =
- *GetImmediateAs<ClearBufferuivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::ClearBufferuivImmediate>();
GLuint temp[4] = { 0u };
cmd.Init(GL_COLOR, 0, &temp[0]);
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER))
@@ -2176,13 +2164,12 @@ TEST_P(GLES3DecoderTest, ClearBufferfvImmediateValidArgs) {
framebuffer->MarkAttachmentAsCleared(
group().renderbuffer_manager(), nullptr, GL_DEPTH_ATTACHMENT, true);
- Enable cmd_enable;
+ cmds::Enable cmd_enable;
cmd_enable.Init(GL_DEPTH_TEST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- ClearBufferfvImmediate& cmd =
- *GetImmediateAs<ClearBufferfvImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::ClearBufferfvImmediate>();
GLfloat temp[4] = { 1.0f };
cmd.Init(GL_DEPTH, 0, &temp[0]);
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER))
@@ -2215,14 +2202,14 @@ TEST_P(GLES3DecoderTest, ClearBufferfiValidArgs) {
framebuffer->MarkAttachmentAsCleared(group().renderbuffer_manager(), nullptr,
GL_STENCIL_ATTACHMENT, true);
- Enable cmd_enable;
+ cmds::Enable cmd_enable;
cmd_enable.Init(GL_STENCIL_TEST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable));
cmd_enable.Init(GL_DEPTH_TEST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd_enable));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- ClearBufferfi cmd;
+ cmds::ClearBufferfi cmd;
cmd.Init(GL_DEPTH_STENCIL, 0, 1.0f, 0);
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER))
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
@@ -2253,7 +2240,7 @@ TEST_P(GLES2DecoderManualInitTest,
100, 50))
.Times(1)
.RetiresOnSaturation();
- RenderbufferStorageMultisampleCHROMIUM cmd;
+ cmds::RenderbufferStorageMultisampleCHROMIUM cmd;
cmd.Init(GL_RENDERBUFFER, 1, GL_RGBA4, 100, 50);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
@@ -2270,7 +2257,7 @@ TEST_P(GLES2DecoderManualInitTest,
EXPECT_CALL(*gl_, RenderbufferStorageMultisample(_, _, _, _, _))
.Times(0)
.RetiresOnSaturation();
- RenderbufferStorageMultisampleCHROMIUM cmd;
+ cmds::RenderbufferStorageMultisampleCHROMIUM cmd;
cmd.Init(GL_RENDERBUFFER,
TestHelper::kMaxSamples + 1,
GL_RGBA4,
@@ -2331,7 +2318,7 @@ TEST_P(GLES2DecoderManualInitTest,
InSequence sequence;
// GL_CHROMIUM_framebuffer_multisample uses
// RenderbufferStorageMultisampleCHROMIUM.
- RenderbufferStorageMultisampleEXT cmd;
+ cmds::RenderbufferStorageMultisampleEXT cmd;
cmd.Init(GL_RENDERBUFFER,
TestHelper::kMaxSamples,
GL_RGBA4,
@@ -2346,7 +2333,7 @@ class GLES2DecoderMultisampledRenderToTextureTest
void TestNotCompatibleWithRenderbufferStorageMultisampleCHROMIUM() {
DoBindRenderbuffer(
GL_RENDERBUFFER, client_renderbuffer_id_, kServiceRenderbufferId);
- RenderbufferStorageMultisampleCHROMIUM cmd;
+ cmds::RenderbufferStorageMultisampleCHROMIUM cmd;
cmd.Init(GL_RENDERBUFFER,
TestHelper::kMaxSamples,
GL_RGBA4,
@@ -2378,7 +2365,7 @@ class GLES2DecoderMultisampledRenderToTextureTest
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- RenderbufferStorageMultisampleEXT cmd;
+ cmds::RenderbufferStorageMultisampleEXT cmd;
cmd.Init(GL_RENDERBUFFER,
TestHelper::kMaxSamples,
GL_RGBA4,
@@ -2439,12 +2426,11 @@ TEST_P(GLES2DecoderTest, ReadPixelsGLError) {
GLint y = 0;
GLsizei width = 2;
GLsizei height = 4;
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_OUT_OF_MEMORY))
@@ -2453,7 +2439,7 @@ TEST_P(GLES2DecoderTest, ReadPixelsGLError) {
ReadPixels(x, y, width, height, kFormat, GL_UNSIGNED_BYTE, _))
.Times(1)
.RetiresOnSaturation();
- ReadPixels cmd;
+ cmds::ReadPixels cmd;
cmd.Init(x,
y,
width,
@@ -2478,7 +2464,7 @@ TEST_P(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render to" texture.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -2521,7 +2507,7 @@ TEST_P(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnClear) {
EXPECT_CALL(*gl_, Clear(GL_COLOR_BUFFER_BIT)).Times(1).RetiresOnSaturation();
- Clear cmd;
+ cmds::Clear cmd;
cmd.Init(GL_COLOR_BUFFER_BIT);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2535,7 +2521,7 @@ TEST_P(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnReadPixels) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render to" texture.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -2572,13 +2558,12 @@ TEST_P(GLES2DecoderWithShaderTest, UnClearedAttachmentsGetClearedOnReadPixels) {
EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
.Times(1)
.RetiresOnSaturation();
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
- ReadPixels cmd;
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
1,
@@ -2611,7 +2596,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DValidInternalFormat) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
DoTexImage2D(GL_TEXTURE_2D, level, internal_format, width, height, 0, format,
@@ -2640,7 +2625,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DValidInternalFormat) {
.RetiresOnSaturation();
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2669,7 +2654,7 @@ TEST_P(GLES3DecoderManualInitTest, CopyTexImage2DValidInternalFormat_FloatEXT) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
DoTexImage2D(GL_TEXTURE_2D, level, GL_RGBA16F, width, height, 0, format, type,
@@ -2696,7 +2681,7 @@ TEST_P(GLES3DecoderManualInitTest, CopyTexImage2DValidInternalFormat_FloatEXT) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2726,7 +2711,7 @@ TEST_P(GLES3DecoderManualInitTest,
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
DoTexImage2D(GL_TEXTURE_2D, level, GL_RGBA8, width, height, 0, format, type,
@@ -2748,7 +2733,7 @@ TEST_P(GLES3DecoderManualInitTest,
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -2770,7 +2755,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
DoTexImage2D(GL_TEXTURE_2D, level, GL_RG8, width, height, 0, format, type,
@@ -2789,7 +2774,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat) {
target, level, internal_format, 0, 0, width, height, border))
.Times(0);
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -2811,7 +2796,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_Float) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
DoTexImage2D(GL_TEXTURE_2D, level, GL_RGBA8, width, height, 0, format, type,
@@ -2833,7 +2818,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_Float) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -2855,7 +2840,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_Integer) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
DoTexImage2D(GL_TEXTURE_2D, level, GL_RG8UI, width, height, 0, format, type,
@@ -2877,7 +2862,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_Integer) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -2899,7 +2884,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_sRGB) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
DoTexImage2D(GL_TEXTURE_2D, level, GL_RGB, width, height, 0, format, type,
@@ -2921,7 +2906,7 @@ TEST_P(GLES3DecoderTest, CopyTexImage2DInvalidInternalFormat_sRGB) {
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, internal_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -2940,7 +2925,7 @@ TEST_P(GLES2DecoderManualInitTest,
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render from" texture.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -2980,13 +2965,12 @@ TEST_P(GLES2DecoderManualInitTest,
EXPECT_CALL(*gl_, ReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, _))
.Times(1)
.RetiresOnSaturation();
- typedef ReadPixels::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::ReadPixels::Result*>();
uint32_t result_shm_id = shared_memory_id_;
uint32_t result_shm_offset = kSharedMemoryOffset;
uint32_t pixels_shm_id = shared_memory_id_;
- uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(Result);
- ReadPixels cmd;
+ uint32_t pixels_shm_offset = kSharedMemoryOffset + sizeof(*result);
+ cmds::ReadPixels cmd;
cmd.Init(0,
0,
1,
@@ -3025,7 +3009,7 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImageWithInCompleteFBOFails) {
EXPECT_CALL(*gl_, CopyTexImage2D(_, _, _, _, _, _, _, _))
.Times(0)
.RetiresOnSaturation();
- CopyTexImage2D cmd;
+ cmds::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());
@@ -3101,7 +3085,7 @@ void GLES2DecoderWithShaderTest::CheckTextureChangesMarkFBOAsNotComplete(
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
SetupTexture();
@@ -3163,7 +3147,7 @@ void GLES2DecoderWithShaderTest::CheckTextureChangesMarkFBOAsNotComplete(
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, 1, 1);
// Unbind fbo and bind again after CopyTexImage2D tp avoid feedback loops.
if (bound_fbo) {
@@ -3218,7 +3202,7 @@ TEST_P(GLES2DecoderTest, CanChangeSurface) {
TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateSuccceeds) {
const GLsizei count = 1;
const GLenum bufs[] = {GL_COLOR_ATTACHMENT0};
- DrawBuffersEXTImmediate& cmd = *GetImmediateAs<DrawBuffersEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DrawBuffersEXTImmediate>();
cmd.Init(count, bufs);
DoBindFramebuffer(
@@ -3231,7 +3215,7 @@ TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateSuccceeds) {
TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateFails) {
const GLsizei count = 1;
const GLenum bufs[] = {GL_COLOR_ATTACHMENT1_EXT};
- DrawBuffersEXTImmediate& cmd = *GetImmediateAs<DrawBuffersEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DrawBuffersEXTImmediate>();
cmd.Init(count, bufs);
DoBindFramebuffer(
@@ -3243,7 +3227,7 @@ TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateFails) {
TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateBackbuffer) {
const GLsizei count = 1;
const GLenum bufs[] = {GL_BACK};
- DrawBuffersEXTImmediate& cmd = *GetImmediateAs<DrawBuffersEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DrawBuffersEXTImmediate>();
cmd.Init(count, bufs);
DoBindFramebuffer(
@@ -3260,7 +3244,7 @@ TEST_P(GLES2DecoderTest, DrawBuffersEXTImmediateBackbuffer) {
}
TEST_P(GLES2DecoderTest, DrawBuffersEXTMainFramebuffer) {
- DrawBuffersEXTImmediate& cmd = *GetImmediateAs<DrawBuffersEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DrawBuffersEXTImmediate>();
{
const GLenum bufs[] = {GL_BACK};
const GLsizei count = base::size(bufs);
@@ -3313,7 +3297,7 @@ TEST_P(GLES2DecoderTest, ClearBackbufferBitsOnFlipSwap) {
EXPECT_EQ(0u, GetAndClearBackbufferClearBitsForTest());
- SwapBuffers& cmd = *GetImmediateAs<SwapBuffers>();
+ auto& cmd = *GetImmediateAs<cmds::SwapBuffers>();
cmd.Init(1, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3325,7 +3309,7 @@ TEST_P(GLES2DecoderTest, ClearBackbufferBitsOnFlipSwap) {
EXPECT_EQ(0u, GetAndClearBackbufferClearBitsForTest());
EXPECT_CALL(*gl_, Finish()).Times(AnyNumber());
- ResizeCHROMIUM& resize_cmd = *GetImmediateAs<ResizeCHROMIUM>();
+ auto& resize_cmd = *GetImmediateAs<cmds::ResizeCHROMIUM>();
resize_cmd.Init(1, 1, 1.0f, GL_COLOR_SPACE_UNSPECIFIED_CHROMIUM, GL_TRUE);
EXPECT_EQ(error::kNoError, ExecuteCmd(resize_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3377,8 +3361,7 @@ TEST_P(GLES2DecoderManualInitTest, DiscardFramebufferEXT) {
EXPECT_CALL(*gl_, DiscardFramebufferEXT(target, count, _))
.Times(1)
.RetiresOnSaturation();
- DiscardFramebufferEXTImmediate& cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DiscardFramebufferEXTImmediate>();
cmd.Init(target, count, attachments);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(attachments)));
@@ -3405,8 +3388,7 @@ TEST_P(GLES2DecoderManualInitTest, ClearBackbufferBitsOnDiscardFramebufferEXT) {
EXPECT_CALL(*gl_, DiscardFramebufferEXT(target, count, _))
.Times(1)
.RetiresOnSaturation();
- DiscardFramebufferEXTImmediate& cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DiscardFramebufferEXTImmediate>();
cmd.Init(target, count, attachments);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(attachments)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3451,8 +3433,7 @@ TEST_P(GLES2DecoderTest, DiscardFramebufferEXTUnsupported) {
const GLenum target = GL_FRAMEBUFFER;
const GLsizei count = 1;
const GLenum attachments[] = {GL_COLOR_EXT};
- DiscardFramebufferEXTImmediate& cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DiscardFramebufferEXTImmediate>();
cmd.Init(target, count, attachments);
// Should not result into a call into GL.
@@ -3481,8 +3462,7 @@ TEST_P(GLES3DecoderTest, DiscardFramebufferEXTInvalidTarget) {
EXPECT_TRUE(framebuffer->IsCleared());
EXPECT_CALL(*gl_, InvalidateFramebuffer(target, count, _)).Times(0);
- DiscardFramebufferEXTImmediate& cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DiscardFramebufferEXTImmediate>();
cmd.Init(target, count, attachments);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(attachments)));
@@ -3536,8 +3516,7 @@ TEST_P(GLES3DecoderTest, DiscardFramebufferEXTUseCorrectTarget) {
EXPECT_CALL(*gl_, InvalidateFramebuffer(target, count, _))
.Times(1)
.RetiresOnSaturation();
- DiscardFramebufferEXTImmediate& cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::DiscardFramebufferEXTImmediate>();
cmd.Init(target, count, attachments);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(attachments)));
@@ -3562,7 +3541,7 @@ TEST_P(GLES2DecoderManualInitTest,
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render to" texture.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -3603,7 +3582,7 @@ TEST_P(GLES2DecoderManualInitTest,
EXPECT_CALL(*gl_, Clear(GL_COLOR_BUFFER_BIT)).Times(1).RetiresOnSaturation();
- Clear clear_cmd;
+ cmds::Clear clear_cmd;
clear_cmd.Init(GL_COLOR_BUFFER_BIT);
EXPECT_EQ(error::kNoError, ExecuteCmd(clear_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3626,8 +3605,7 @@ TEST_P(GLES2DecoderManualInitTest,
const GLsizei count = 1;
const GLenum attachments[] = {GL_COLOR_ATTACHMENT0};
- DiscardFramebufferEXTImmediate& discard_cmd =
- *GetImmediateAs<DiscardFramebufferEXTImmediate>();
+ auto& discard_cmd = *GetImmediateAs<cmds::DiscardFramebufferEXTImmediate>();
discard_cmd.Init(target, count, attachments);
EXPECT_CALL(*gl_, DiscardFramebufferEXT(target, count, _))
@@ -3655,9 +3633,9 @@ TEST_P(GLES2DecoderTest, ImplementationReadColorFormatAndType) {
0,
GL_NO_ERROR);
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- GetIntegerv cmd;
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
+ cmds::GetIntegerv cmd;
result->size = 0;
EXPECT_CALL(*gl_, GetError())
@@ -3687,7 +3665,7 @@ TEST_P(GLES2DecoderTest, ImplementationReadColorFormatAndType) {
TEST_P(GLES3DecoderTest, FramebufferTextureLayerNoBoundFramebuffer) {
DoBindTexture(GL_TEXTURE_3D, client_texture_id_, kServiceTextureId);
EXPECT_CALL(*gl_, FramebufferTextureLayer(_, _, _, _, _)).Times(0);
- FramebufferTextureLayer cmd;
+ cmds::FramebufferTextureLayer cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, client_texture_id_, 4, 5);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -3698,7 +3676,7 @@ TEST_P(GLES3DecoderTest, FramebufferTextureLayerInvalidTextureTarget) {
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
EXPECT_CALL(*gl_, FramebufferTextureLayer(_, _, _, _, _)).Times(0);
- FramebufferTextureLayer cmd;
+ cmds::FramebufferTextureLayer cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, client_texture_id_, 4, 5);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -3713,7 +3691,7 @@ TEST_P(GLES3DecoderTest, FramebufferTextureLayerValidArgs) {
kServiceTextureId, 4, 5))
.Times(1)
.RetiresOnSaturation();
- FramebufferTextureLayer cmd;
+ cmds::FramebufferTextureLayer cmd;
cmd.Init(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, client_texture_id_, 4, 5);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3728,7 +3706,7 @@ TEST_P(GLES3DecoderTest, FramebufferTextureLayerDepthStencil) {
kServiceTextureId, 4, 5))
.Times(1)
.RetiresOnSaturation();
- FramebufferTextureLayer cmd;
+ cmds::FramebufferTextureLayer cmd;
cmd.Init(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, client_texture_id_, 4,
5);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -3769,8 +3747,7 @@ TEST_P(GLES3DecoderTest, InvalidateFramebufferDepthStencilAttachment) {
EXPECT_CALL(*gl_, InvalidateFramebuffer(target, 0, _))
.Times(1)
.RetiresOnSaturation();
- InvalidateFramebufferImmediate& cmd =
- *GetImmediateAs<InvalidateFramebufferImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::InvalidateFramebufferImmediate>();
cmd.Init(target, count, attachments);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(attachments)));
@@ -3798,7 +3775,7 @@ TEST_P(GLES3DecoderTest, InvalidateFramebufferDepthStencilAttachment) {
TEST_P(GLES3DecoderTest, BlitFramebufferFeedbackLoopDefaultFramebuffer) {
// Run BlitFramebufferCHROMIUM targetting the default framebuffer for both
// read and draw, should result in a feedback loop.
- BlitFramebufferCHROMIUM cmd;
+ cmds::BlitFramebufferCHROMIUM cmd;
cmd.Init(0, 0, 1, 1, 0, 0, 1, 1, GL_COLOR_BUFFER_BIT, GL_LINEAR);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -3837,7 +3814,7 @@ TEST_P(GLES3DecoderTest, BlitFramebufferDisabledReadBuffer) {
EXPECT_CALL(*gl_, ReadBuffer(GL_NONE))
.Times(1)
.RetiresOnSaturation();
- ReadBuffer cmd;
+ cmds::ReadBuffer cmd;
cmd.Init(GL_NONE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3854,7 +3831,7 @@ TEST_P(GLES3DecoderTest, BlitFramebufferDisabledReadBuffer) {
1.0f, // depth
false, // scissor test
0, 0, 128, 64);
- BlitFramebufferCHROMIUM cmd;
+ cmds::BlitFramebufferCHROMIUM cmd;
cmd.Init(0, 0, 1, 1, 0, 0, 1, 1, GL_COLOR_BUFFER_BIT, GL_LINEAR);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
// Generate INVALID_OPERATION because of missing read buffer image.
@@ -3913,7 +3890,7 @@ TEST_P(GLES3DecoderTest, BlitFramebufferMissingDepthOrStencil) {
EXPECT_CALL(*gl_, CheckFramebufferStatusEXT(GL_READ_FRAMEBUFFER))
.WillOnce(Return(GL_FRAMEBUFFER_COMPLETE))
.RetiresOnSaturation();
- BlitFramebufferCHROMIUM cmd;
+ cmds::BlitFramebufferCHROMIUM cmd;
cmd.Init(0, 0, 1, 1, 0, 0, 1, 1, GL_DEPTH_BUFFER_BIT, GL_NEAREST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -3928,7 +3905,7 @@ TEST_P(GLES3DecoderTest, BlitFramebufferMissingDepthOrStencil) {
DoBindFramebuffer(GL_DRAW_FRAMEBUFFER, color_fbo, kNewServiceId);
{
EXPECT_CALL(*gl_, BlitFramebuffer(0, 0, 1, 1, 0, 0, 1, 1, _, _)).Times(0);
- BlitFramebufferCHROMIUM cmd;
+ cmds::BlitFramebufferCHROMIUM cmd;
cmd.Init(0, 0, 1, 1, 0, 0, 1, 1, GL_DEPTH_BUFFER_BIT, GL_NEAREST);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3963,7 +3940,7 @@ TEST_P(GLES2DecoderTestWithDrawRectangle, FramebufferDrawRectangleClear) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
// Setup "render to" texture.
DoBindTexture(GL_TEXTURE_2D, kFBOClientTextureId, kFBOServiceTextureId);
@@ -4005,7 +3982,7 @@ TEST_P(GLES2DecoderTestWithDrawRectangle, FramebufferDrawRectangleClear) {
.Times(1)
.RetiresOnSaturation();
- Clear cmd;
+ cmds::Clear cmd;
cmd.Init(GL_COLOR_BUFFER_BIT);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -4027,7 +4004,7 @@ TEST_P(GLES2DecoderTestWithDrawRectangle, FramebufferDrawRectangleClear) {
.Times(1)
.RetiresOnSaturation();
EXPECT_CALL(*gl_, Scissor(101, 202, 3, 4)).Times(1).RetiresOnSaturation();
- Clear cmd;
+ cmds::Clear cmd;
cmd.Init(GL_COLOR_BUFFER_BIT);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
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
index 31c401512e2..6ec6b2facfa 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_programs.cc
@@ -49,11 +49,9 @@ using ::testing::StrictMock;
namespace gpu {
namespace gles2 {
-using namespace cmds;
-
TEST_P(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMValidArgs) {
const uint32_t kBucketId = 123;
- GetProgramInfoCHROMIUM cmd;
+ cmds::GetProgramInfoCHROMIUM cmd;
cmd.Init(client_program_id_, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
@@ -64,7 +62,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) {
const uint32_t kBucketId = 123;
CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
EXPECT_TRUE(bucket == nullptr);
- GetProgramInfoCHROMIUM cmd;
+ cmds::GetProgramInfoCHROMIUM cmd;
cmd.Init(kInvalidClientId, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -81,7 +79,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetProgramInfoCHROMIUMInvalidArgs) {
TEST_P(GLES3DecoderWithShaderTest, GetUniformBlocksCHROMIUMValidArgs) {
const uint32_t kBucketId = 123;
- GetUniformBlocksCHROMIUM cmd;
+ cmds::GetUniformBlocksCHROMIUM cmd;
cmd.Init(client_program_id_, kBucketId);
EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
.WillOnce(SetArgPointee<2>(GL_TRUE))
@@ -103,7 +101,7 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformBlocksCHROMIUMInvalidArgs) {
const uint32_t kBucketId = 123;
CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
EXPECT_TRUE(bucket == nullptr);
- GetUniformBlocksCHROMIUM cmd;
+ cmds::GetUniformBlocksCHROMIUM cmd;
cmd.Init(kInvalidClientId, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -118,7 +116,7 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformBlocksCHROMIUMInvalidArgs) {
TEST_P(GLES3DecoderWithShaderTest, GetUniformsES3CHROMIUMValidArgs) {
const uint32_t kBucketId = 123;
- GetUniformsES3CHROMIUM cmd;
+ cmds::GetUniformsES3CHROMIUM cmd;
cmd.Init(client_program_id_, kBucketId);
EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
.WillOnce(SetArgPointee<2>(GL_TRUE))
@@ -140,7 +138,7 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformsES3CHROMIUMInvalidArgs) {
const uint32_t kBucketId = 123;
CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
EXPECT_TRUE(bucket == nullptr);
- GetUniformsES3CHROMIUM cmd;
+ cmds::GetUniformsES3CHROMIUM cmd;
cmd.Init(kInvalidClientId, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -156,7 +154,7 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformsES3CHROMIUMInvalidArgs) {
TEST_P(GLES3DecoderWithShaderTest,
GetTransformFeedbackVaryingsCHROMIUMValidArgs) {
const uint32_t kBucketId = 123;
- GetTransformFeedbackVaryingsCHROMIUM cmd;
+ cmds::GetTransformFeedbackVaryingsCHROMIUM cmd;
cmd.Init(client_program_id_, kBucketId);
EXPECT_CALL(*(gl_.get()),
GetProgramiv(kServiceProgramId,
@@ -189,7 +187,7 @@ TEST_P(GLES3DecoderWithShaderTest,
const uint32_t kBucketId = 123;
CommonDecoder::Bucket* bucket = decoder_->GetBucket(kBucketId);
EXPECT_TRUE(bucket == nullptr);
- GetTransformFeedbackVaryingsCHROMIUM cmd;
+ cmds::GetTransformFeedbackVaryingsCHROMIUM cmd;
cmd.Init(kInvalidClientId, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -204,10 +202,10 @@ TEST_P(GLES3DecoderWithShaderTest,
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformivSucceeds) {
- GetUniformiv::Result* result =
- static_cast<GetUniformiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformiv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformiv cmd;
+ cmds::GetUniformiv cmd;
cmd.Init(client_program_id_, kUniform2FakeLocation, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_, GetUniformiv(kServiceProgramId, kUniform2RealLocation, _))
@@ -218,10 +216,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformivSucceeds) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformivArrayElementSucceeds) {
- GetUniformiv::Result* result =
- static_cast<GetUniformiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformiv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformiv cmd;
+ cmds::GetUniformiv cmd;
cmd.Init(client_program_id_, kUniform2ElementFakeLocation, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_,
@@ -233,10 +231,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformivArrayElementSucceeds) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadProgramFails) {
- GetUniformiv::Result* result =
- static_cast<GetUniformiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformiv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformiv cmd;
+ cmds::GetUniformiv cmd;
// non-existant program
cmd.Init(kInvalidClientId, kUniform2FakeLocation, shared_memory_id_,
kSharedMemoryOffset);
@@ -259,7 +257,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadProgramFails) {
.Times(1)
.WillOnce(Return(kNewServiceId))
.RetiresOnSaturation();
- CreateProgram cmd2;
+ cmds::CreateProgram cmd2;
cmd2.Init(kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
result->size = kInitialResult;
@@ -271,10 +269,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadProgramFails) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadLocationFails) {
- GetUniformiv::Result* result =
- static_cast<GetUniformiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformiv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformiv cmd;
+ cmds::GetUniformiv cmd;
// invalid location
cmd.Init(client_program_id_, kInvalidUniformLocation, shared_memory_id_,
kSharedMemoryOffset);
@@ -285,7 +283,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadLocationFails) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadSharedMemoryFails) {
- GetUniformiv cmd;
+ cmds::GetUniformiv cmd;
cmd.Init(client_program_id_,
kUniform2FakeLocation,
kInvalidSharedMemoryId,
@@ -298,10 +296,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformivBadSharedMemoryFails) {
}
TEST_P(GLES3DecoderWithShaderTest, GetUniformuivSucceeds) {
- GetUniformuiv::Result* result =
- static_cast<GetUniformuiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformuiv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformuiv cmd;
+ cmds::GetUniformuiv cmd;
cmd.Init(client_program_id_, kUniform2FakeLocation, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_, GetUniformuiv(kServiceProgramId, kUniform2RealLocation, _))
@@ -312,10 +310,10 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformuivSucceeds) {
}
TEST_P(GLES3DecoderWithShaderTest, GetUniformuivArrayElementSucceeds) {
- GetUniformuiv::Result* result =
- static_cast<GetUniformuiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformuiv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformuiv cmd;
+ cmds::GetUniformuiv cmd;
cmd.Init(client_program_id_, kUniform2ElementFakeLocation, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_,
@@ -327,10 +325,10 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformuivArrayElementSucceeds) {
}
TEST_P(GLES3DecoderWithShaderTest, GetUniformuivBadProgramFails) {
- GetUniformuiv::Result* result =
- static_cast<GetUniformuiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformuiv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformuiv cmd;
+ cmds::GetUniformuiv cmd;
// non-existant program
cmd.Init(kInvalidClientId, kUniform2FakeLocation, shared_memory_id_,
kSharedMemoryOffset);
@@ -353,7 +351,7 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformuivBadProgramFails) {
.Times(1)
.WillOnce(Return(kNewServiceId))
.RetiresOnSaturation();
- CreateProgram cmd2;
+ cmds::CreateProgram cmd2;
cmd2.Init(kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
result->size = kInitialResult;
@@ -365,10 +363,10 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformuivBadProgramFails) {
}
TEST_P(GLES3DecoderWithShaderTest, GetUniformuivBadLocationFails) {
- GetUniformuiv::Result* result =
- static_cast<GetUniformuiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformuiv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformuiv cmd;
+ cmds::GetUniformuiv cmd;
// invalid location
cmd.Init(client_program_id_, kInvalidUniformLocation, shared_memory_id_,
kSharedMemoryOffset);
@@ -379,7 +377,7 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformuivBadLocationFails) {
}
TEST_P(GLES3DecoderWithShaderTest, GetUniformuivBadSharedMemoryFails) {
- GetUniformuiv cmd;
+ cmds::GetUniformuiv cmd;
cmd.Init(client_program_id_,
kUniform2FakeLocation,
kInvalidSharedMemoryId,
@@ -392,10 +390,10 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformuivBadSharedMemoryFails) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformfvSucceeds) {
- GetUniformfv::Result* result =
- static_cast<GetUniformfv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformfv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformfv cmd;
+ cmds::GetUniformfv cmd;
cmd.Init(client_program_id_, kUniform2FakeLocation, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_, GetUniformfv(kServiceProgramId, kUniform2RealLocation, _))
@@ -406,10 +404,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformfvSucceeds) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformfvArrayElementSucceeds) {
- GetUniformfv::Result* result =
- static_cast<GetUniformfv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformfv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformfv cmd;
+ cmds::GetUniformfv cmd;
cmd.Init(client_program_id_, kUniform2ElementFakeLocation, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_,
@@ -421,10 +419,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformfvArrayElementSucceeds) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadProgramFails) {
- GetUniformfv::Result* result =
- static_cast<GetUniformfv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformfv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformfv cmd;
+ cmds::GetUniformfv cmd;
// non-existant program
cmd.Init(kInvalidClientId, kUniform2FakeLocation, shared_memory_id_,
kSharedMemoryOffset);
@@ -447,7 +445,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadProgramFails) {
.Times(1)
.WillOnce(Return(kNewServiceId))
.RetiresOnSaturation();
- CreateProgram cmd2;
+ cmds::CreateProgram cmd2;
cmd2.Init(kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
result->size = kInitialResult;
@@ -459,10 +457,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadProgramFails) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadLocationFails) {
- GetUniformfv::Result* result =
- static_cast<GetUniformfv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetUniformfv::Result*>(shared_memory_address_);
result->size = 0;
- GetUniformfv cmd;
+ cmds::GetUniformfv cmd;
// invalid location
cmd.Init(client_program_id_, kInvalidUniformLocation, shared_memory_id_,
kSharedMemoryOffset);
@@ -473,7 +471,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadLocationFails) {
}
TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadSharedMemoryFails) {
- GetUniformfv cmd;
+ cmds::GetUniformfv cmd;
cmd.Init(client_program_id_,
kUniform2FakeLocation,
kInvalidSharedMemoryId,
@@ -486,9 +484,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformfvBadSharedMemoryFails) {
}
TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersSucceeds) {
- GetAttachedShaders cmd;
- typedef GetAttachedShaders::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetAttachedShaders cmd;
+ using Result = cmds::GetAttachedShaders::Result;
+ auto* result = static_cast<Result*>(shared_memory_address_);
result->size = 0;
EXPECT_CALL(*gl_, GetAttachedShaders(kServiceProgramId, 1, _, _)).WillOnce(
DoAll(SetArgPointee<2>(1), SetArgPointee<3>(kServiceShaderId)));
@@ -501,9 +499,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersSucceeds) {
}
TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersResultNotInitFail) {
- GetAttachedShaders cmd;
- typedef GetAttachedShaders::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetAttachedShaders cmd;
+ using Result = cmds::GetAttachedShaders::Result;
+ auto* 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_,
@@ -512,9 +510,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersResultNotInitFail) {
}
TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersBadProgramFails) {
- GetAttachedShaders cmd;
- typedef GetAttachedShaders::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetAttachedShaders cmd;
+ using Result = cmds::GetAttachedShaders::Result;
+ auto* 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_,
@@ -525,8 +523,8 @@ TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersBadProgramFails) {
}
TEST_P(GLES2DecoderWithShaderTest, GetAttachedShadersBadSharedMemoryFails) {
- GetAttachedShaders cmd;
- typedef GetAttachedShaders::Result Result;
+ cmds::GetAttachedShaders cmd;
+ using Result = cmds::GetAttachedShaders::Result;
cmd.Init(client_program_id_, kInvalidSharedMemoryId, shared_memory_offset_,
Result::ComputeSize(1).ValueOrDie());
EXPECT_CALL(*gl_, GetAttachedShaders(_, _, _, _)).Times(0);
@@ -544,9 +542,9 @@ TEST_P(GLES2DecoderManualInitTest, GetShaderPrecisionFormatSucceeds) {
init.bind_generates_resource = true;
InitDecoder(init);
- GetShaderPrecisionFormat cmd;
- typedef GetShaderPrecisionFormat::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetShaderPrecisionFormat cmd;
+ auto* result = static_cast<cmds::GetShaderPrecisionFormat::Result*>(
+ shared_memory_address_);
result->success = 0;
const GLint range[2] = {62, 62};
const GLint precision = 16;
@@ -567,9 +565,9 @@ TEST_P(GLES2DecoderManualInitTest, GetShaderPrecisionFormatSucceeds) {
}
TEST_P(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatResultNotInitFails) {
- GetShaderPrecisionFormat cmd;
- typedef GetShaderPrecisionFormat::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetShaderPrecisionFormat cmd;
+ auto* result = static_cast<cmds::GetShaderPrecisionFormat::Result*>(
+ shared_memory_address_);
result->success = 1;
// NOTE: GL might not be called. There is no Desktop OpenGL equivalent
cmd.Init(GL_VERTEX_SHADER,
@@ -580,10 +578,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatResultNotInitFails) {
}
TEST_P(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatBadArgsFails) {
- typedef GetShaderPrecisionFormat::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result = static_cast<cmds::GetShaderPrecisionFormat::Result*>(
+ shared_memory_address_);
result->success = 0;
- GetShaderPrecisionFormat cmd;
+ cmds::GetShaderPrecisionFormat cmd;
cmd.Init(
GL_TEXTURE_2D, GL_HIGH_FLOAT, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -599,7 +597,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetShaderPrecisionFormatBadArgsFails) {
TEST_P(GLES2DecoderWithShaderTest,
GetShaderPrecisionFormatBadSharedMemoryFails) {
- GetShaderPrecisionFormat cmd;
+ cmds::GetShaderPrecisionFormat cmd;
cmd.Init(GL_VERTEX_SHADER,
GL_HIGH_FLOAT,
kInvalidSharedMemoryId,
@@ -615,9 +613,9 @@ TEST_P(GLES2DecoderWithShaderTest,
TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformSucceeds) {
const GLuint kUniformIndex = 1;
const uint32_t kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniform cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniform::Result*>(shared_memory_address_);
result->success = 0;
cmd.Init(client_program_id_,
kUniformIndex,
@@ -640,9 +638,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformSucceeds) {
TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformResultNotInitFails) {
const GLuint kUniformIndex = 1;
const uint32_t kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniform cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniform::Result*>(shared_memory_address_);
result->success = 1;
cmd.Init(client_program_id_,
kUniformIndex,
@@ -655,9 +653,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformResultNotInitFails) {
TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadProgramFails) {
const GLuint kUniformIndex = 1;
const uint32_t kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniform cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniform::Result*>(shared_memory_address_);
result->success = 0;
cmd.Init(kInvalidClientId,
kUniformIndex,
@@ -682,9 +680,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadProgramFails) {
TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadIndexFails) {
const uint32_t kBucketId = 123;
- GetActiveUniform cmd;
- typedef GetActiveUniform::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniform cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniform::Result*>(shared_memory_address_);
result->success = 0;
cmd.Init(client_program_id_,
kBadUniformIndex,
@@ -699,7 +697,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadIndexFails) {
TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadSharedMemoryFails) {
const GLuint kUniformIndex = 1;
const uint32_t kBucketId = 123;
- GetActiveUniform cmd;
+ cmds::GetActiveUniform cmd;
cmd.Init(client_program_id_,
kUniformIndex,
kBucketId,
@@ -716,9 +714,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveUniformBadSharedMemoryFails) {
TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockNameSucceeds) {
const uint32_t kBucketId = 123;
- GetActiveUniformBlockName cmd;
- typedef GetActiveUniformBlockName::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockName cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockName::Result*>(
+ shared_memory_address_);
*result = 0;
cmd.Init(client_program_id_,
0,
@@ -751,9 +749,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockNameSucceeds) {
TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockNameUnlinkedProgram) {
const uint32_t kBucketId = 123;
- GetActiveUniformBlockName cmd;
- typedef GetActiveUniformBlockName::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockName cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockName::Result*>(
+ shared_memory_address_);
*result = 0;
cmd.Init(client_program_id_,
0,
@@ -771,9 +769,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockNameUnlinkedProgram) {
TEST_P(GLES3DecoderWithShaderTest,
GetActiveUniformBlockNameResultNotInitFails) {
const uint32_t kBucketId = 123;
- GetActiveUniformBlockName cmd;
- typedef GetActiveUniformBlockName::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockName cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockName::Result*>(
+ shared_memory_address_);
*result = 1;
cmd.Init(client_program_id_,
0,
@@ -785,9 +783,9 @@ TEST_P(GLES3DecoderWithShaderTest,
TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockNameBadProgramFails) {
const uint32_t kBucketId = 123;
- GetActiveUniformBlockName cmd;
- typedef GetActiveUniformBlockName::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockName cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockName::Result*>(
+ shared_memory_address_);
*result = 0;
cmd.Init(kInvalidClientId,
0,
@@ -802,7 +800,7 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockNameBadProgramFails) {
TEST_P(GLES3DecoderWithShaderTest,
GetActiveUniformBlockNameBadSharedMemoryFails) {
const uint32_t kBucketId = 123;
- GetActiveUniformBlockName cmd;
+ cmds::GetActiveUniformBlockName cmd;
cmd.Init(client_program_id_,
0,
kBucketId,
@@ -818,9 +816,9 @@ TEST_P(GLES3DecoderWithShaderTest,
}
TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockivSucceeds) {
- GetActiveUniformBlockiv cmd;
- typedef GetActiveUniformBlockiv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockiv cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockiv::Result*>(
+ shared_memory_address_);
GLenum kPname[] {
GL_UNIFORM_BLOCK_BINDING,
GL_UNIFORM_BLOCK_DATA_SIZE,
@@ -864,9 +862,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockivSucceeds) {
TEST_P(GLES3DecoderWithShaderTest,
GetActiveUniformBlockivSucceedsZeroUniforms) {
- GetActiveUniformBlockiv cmd;
- typedef GetActiveUniformBlockiv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockiv cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockiv::Result*>(
+ shared_memory_address_);
result->SetNumResults(0);
cmd.Init(client_program_id_,
0,
@@ -895,9 +893,9 @@ TEST_P(GLES3DecoderWithShaderTest,
}
TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockivUnlinkedProgram) {
- GetActiveUniformBlockiv cmd;
- typedef GetActiveUniformBlockiv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockiv cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockiv::Result*>(
+ shared_memory_address_);
result->SetNumResults(0);
cmd.Init(client_program_id_,
0,
@@ -914,9 +912,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockivUnlinkedProgram) {
TEST_P(GLES3DecoderWithShaderTest,
GetActiveUniformBlockivResultNotInitFails) {
- GetActiveUniformBlockiv cmd;
- typedef GetActiveUniformBlockiv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockiv cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockiv::Result*>(
+ shared_memory_address_);
result->SetNumResults(1); // Should be initialized to 0.
cmd.Init(client_program_id_,
0,
@@ -930,9 +928,9 @@ TEST_P(GLES3DecoderWithShaderTest,
}
TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockivBadProgramFails) {
- GetActiveUniformBlockiv cmd;
- typedef GetActiveUniformBlockiv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveUniformBlockiv cmd;
+ auto* result = static_cast<cmds::GetActiveUniformBlockiv::Result*>(
+ shared_memory_address_);
result->SetNumResults(0);
cmd.Init(kInvalidClientId,
0,
@@ -946,7 +944,7 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformBlockivBadProgramFails) {
TEST_P(GLES3DecoderWithShaderTest,
GetActiveUniformBlockivBadSharedMemoryFails) {
- GetActiveUniformBlockiv cmd;
+ cmds::GetActiveUniformBlockiv cmd;
EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
.WillOnce(SetArgPointee<2>(GL_TRUE))
.WillOnce(SetArgPointee<2>(GL_TRUE))
@@ -968,9 +966,9 @@ TEST_P(GLES3DecoderWithShaderTest,
TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribSucceeds) {
const GLuint kAttribIndex = 1;
const uint32_t kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveAttrib cmd;
+ auto* result =
+ static_cast<cmds::GetActiveAttrib::Result*>(shared_memory_address_);
result->success = 0;
cmd.Init(client_program_id_,
kAttribIndex,
@@ -992,9 +990,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribSucceeds) {
TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribResultNotInitFails) {
const GLuint kAttribIndex = 1;
const uint32_t kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveAttrib cmd;
+ auto* result =
+ static_cast<cmds::GetActiveAttrib::Result*>(shared_memory_address_);
result->success = 1;
cmd.Init(client_program_id_,
kAttribIndex,
@@ -1007,9 +1005,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribResultNotInitFails) {
TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribBadProgramFails) {
const GLuint kAttribIndex = 1;
const uint32_t kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveAttrib cmd;
+ auto* result =
+ static_cast<cmds::GetActiveAttrib::Result*>(shared_memory_address_);
result->success = 0;
cmd.Init(kInvalidClientId,
kAttribIndex,
@@ -1034,9 +1032,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribBadProgramFails) {
TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribBadIndexFails) {
const uint32_t kBucketId = 123;
- GetActiveAttrib cmd;
- typedef GetActiveAttrib::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetActiveAttrib cmd;
+ auto* result =
+ static_cast<cmds::GetActiveAttrib::Result*>(shared_memory_address_);
result->success = 0;
cmd.Init(client_program_id_,
kBadAttribIndex,
@@ -1051,7 +1049,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribBadIndexFails) {
TEST_P(GLES2DecoderWithShaderTest, GetActiveAttribBadSharedMemoryFails) {
const GLuint kAttribIndex = 1;
const uint32_t kBucketId = 123;
- GetActiveAttrib cmd;
+ cmds::GetActiveAttrib cmd;
cmd.Init(client_program_id_,
kAttribIndex,
kBucketId,
@@ -1075,9 +1073,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformIndicesSucceeds) {
const char kValidStrEnd = 0;
const GLuint kIndices[] = { 1, 2 };
SetBucketAsCStrings(kBucketId, kCount, kNames, kCount, kValidStrEnd);
- GetUniformIndices::Result* result =
- static_cast<GetUniformIndices::Result*>(shared_memory_address_);
- GetUniformIndices cmd;
+ auto* result =
+ static_cast<cmds::GetUniformIndices::Result*>(shared_memory_address_);
+ cmds::GetUniformIndices cmd;
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_, GetUniformIndices(kServiceProgramId, kCount, _, _))
@@ -1107,9 +1105,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformIndicesBadProgramFails) {
const size_t kCount = base::size(kNames);
const char kValidStrEnd = 0;
SetBucketAsCStrings(kBucketId, kCount, kNames, kCount, kValidStrEnd);
- GetUniformIndices::Result* result =
- static_cast<GetUniformIndices::Result*>(shared_memory_address_);
- GetUniformIndices cmd;
+ auto* result =
+ static_cast<cmds::GetUniformIndices::Result*>(shared_memory_address_);
+ cmds::GetUniformIndices cmd;
// None-existant program
cmd.Init(kInvalidClientId, kBucketId, shared_memory_id_, kSharedMemoryOffset);
result->size = 0;
@@ -1137,9 +1135,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformIndicesBadParamsFails) {
const char kValidStrEnd = 0;
const GLuint kIndices[] = { 1, 2 };
SetBucketAsCStrings(kBucketId, kCount, kNames, kCount, kValidStrEnd);
- GetUniformIndices::Result* result =
- static_cast<GetUniformIndices::Result*>(shared_memory_address_);
- GetUniformIndices cmd;
+ auto* result =
+ static_cast<cmds::GetUniformIndices::Result*>(shared_memory_address_);
+ cmds::GetUniformIndices cmd;
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_, GetUniformIndices(kServiceProgramId, kCount, _, _))
@@ -1166,9 +1164,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformIndicesResultNotInitFails) {
const size_t kCount = base::size(kNames);
const char kValidStrEnd = 0;
SetBucketAsCStrings(kBucketId, kCount, kNames, kCount, kValidStrEnd);
- GetUniformIndices::Result* result =
- static_cast<GetUniformIndices::Result*>(shared_memory_address_);
- GetUniformIndices cmd;
+ auto* result =
+ static_cast<cmds::GetUniformIndices::Result*>(shared_memory_address_);
+ cmds::GetUniformIndices cmd;
result->size = 1976; // Any value other than 0.
cmd.Init(kInvalidClientId, kBucketId, shared_memory_id_, kSharedMemoryOffset);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
@@ -1182,9 +1180,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformIndicesBadSharedMemoryFails) {
const size_t kCount = base::size(kNames);
const char kValidStrEnd = 0;
SetBucketAsCStrings(kBucketId, kCount, kNames, kCount, kValidStrEnd);
- GetUniformIndices::Result* result =
- static_cast<GetUniformIndices::Result*>(shared_memory_address_);
- GetUniformIndices cmd;
+ auto* result =
+ static_cast<cmds::GetUniformIndices::Result*>(shared_memory_address_);
+ cmds::GetUniformIndices cmd;
cmd.Init(client_program_id_,
kBucketId,
kInvalidSharedMemoryId,
@@ -1203,9 +1201,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivSucceeds) {
const GLint kResults[] = { 1976, 321 };
const size_t kCount = base::size(kIndices);
SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
- GetActiveUniformsiv::Result* result =
- static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
- GetActiveUniformsiv cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniformsiv::Result*>(shared_memory_address_);
+ cmds::GetActiveUniformsiv cmd;
cmd.Init(client_program_id_, kBucketId, GL_UNIFORM_TYPE, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_,
@@ -1230,9 +1228,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadProgramFails) {
const GLuint kIndices[] = { 1, 2 };
const size_t kCount = base::size(kIndices);
SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
- GetActiveUniformsiv::Result* result =
- static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
- GetActiveUniformsiv cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniformsiv::Result*>(shared_memory_address_);
+ cmds::GetActiveUniformsiv cmd;
// None-existant program
cmd.Init(kInvalidClientId, kBucketId, GL_UNIFORM_TYPE, shared_memory_id_,
kSharedMemoryOffset);
@@ -1257,9 +1255,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadParamsFails) {
const GLuint kIndices[] = { 1, 100 };
const size_t kCount = base::size(kIndices);
SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
- GetActiveUniformsiv::Result* result =
- static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
- GetActiveUniformsiv cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniformsiv::Result*>(shared_memory_address_);
+ cmds::GetActiveUniformsiv cmd;
cmd.Init(client_program_id_, kBucketId, GL_UNIFORM_TYPE, shared_memory_id_,
kSharedMemoryOffset);
result->size = 0;
@@ -1273,9 +1271,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadPnameFails) {
const GLuint kIndices[] = { 1, 2 };
const size_t kCount = base::size(kIndices);
SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
- GetActiveUniformsiv::Result* result =
- static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
- GetActiveUniformsiv cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniformsiv::Result*>(shared_memory_address_);
+ cmds::GetActiveUniformsiv cmd;
// GL_UNIFORM_BLOCK_NAME_LENGTH should not be supported.
cmd.Init(client_program_id_, kBucketId, GL_UNIFORM_BLOCK_NAME_LENGTH,
shared_memory_id_, kSharedMemoryOffset);
@@ -1297,9 +1295,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivResultNotInitFails) {
const GLuint kIndices[] = { 1, 2 };
const size_t kCount = base::size(kIndices);
SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
- GetActiveUniformsiv::Result* result =
- static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
- GetActiveUniformsiv cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniformsiv::Result*>(shared_memory_address_);
+ cmds::GetActiveUniformsiv cmd;
cmd.Init(client_program_id_, kBucketId, GL_UNIFORM_TYPE, shared_memory_id_,
kSharedMemoryOffset);
result->size = 1976; // Any value other than 0.
@@ -1311,9 +1309,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetActiveUniformsivBadSharedMemoryFails) {
const GLuint kIndices[] = { 1, 2 };
const size_t kCount = base::size(kIndices);
SetBucketData(kBucketId, kIndices, sizeof(GLuint) * kCount);
- GetActiveUniformsiv::Result* result =
- static_cast<GetActiveUniformsiv::Result*>(shared_memory_address_);
- GetActiveUniformsiv cmd;
+ auto* result =
+ static_cast<cmds::GetActiveUniformsiv::Result*>(shared_memory_address_);
+ cmds::GetActiveUniformsiv cmd;
result->size = 0;
cmd.Init(client_program_id_,
kBucketId,
@@ -1333,14 +1331,14 @@ TEST_P(GLES2DecoderWithShaderTest, GetShaderInfoLogValidArgs) {
const char* kSource[] = {kSource0};
const char kValidStrEnd = 0;
SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
- ShaderSourceBucket bucket_cmd;
+ cmds::ShaderSourceBucket bucket_cmd;
bucket_cmd.Init(client_shader_id_, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(bucket_cmd));
ClearSharedMemory();
const char* kInfo = "hello";
- CompileShader compile_cmd;
- GetShaderInfoLog cmd;
+ cmds::CompileShader compile_cmd;
+ cmds::GetShaderInfoLog cmd;
EXPECT_CALL(*gl_, ShaderSource(kServiceShaderId, 1, _, _));
EXPECT_CALL(*gl_, CompileShader(kServiceShaderId));
EXPECT_CALL(*gl_, GetShaderiv(kServiceShaderId, GL_COMPILE_STATUS, _))
@@ -1366,7 +1364,7 @@ TEST_P(GLES2DecoderWithShaderTest, GetShaderInfoLogValidArgs) {
TEST_P(GLES2DecoderWithShaderTest, GetShaderInfoLogInvalidArgs) {
const uint32_t kBucketId = 123;
- GetShaderInfoLog cmd;
+ cmds::GetShaderInfoLog cmd;
cmd.Init(kInvalidClientId, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -1380,9 +1378,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetTransformFeedbackVaryingSucceeds) {
const GLsizei kBufferSize = static_cast<GLsizei>(strlen(kName) + 1);
const GLsizei kSize = 2;
const GLenum kType = GL_FLOAT_VEC2;
- GetTransformFeedbackVarying cmd;
- typedef GetTransformFeedbackVarying::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetTransformFeedbackVarying cmd;
+ auto* result = static_cast<cmds::GetTransformFeedbackVarying::Result*>(
+ shared_memory_address_);
result->success = 0;
EXPECT_CALL(*gl_, GetProgramiv(kServiceProgramId, GL_LINK_STATUS, _))
.WillOnce(SetArgPointee<2>(GL_TRUE))
@@ -1422,9 +1420,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetTransformFeedbackVaryingSucceeds) {
TEST_P(GLES3DecoderWithShaderTest, GetTransformFeedbackVaryingNotInitFails) {
const GLuint kIndex = 1;
const uint32_t kBucketId = 123;
- GetTransformFeedbackVarying cmd;
- typedef GetTransformFeedbackVarying::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetTransformFeedbackVarying cmd;
+ auto* result = static_cast<cmds::GetTransformFeedbackVarying::Result*>(
+ shared_memory_address_);
result->success = 1;
cmd.Init(client_program_id_,
kIndex,
@@ -1437,9 +1435,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetTransformFeedbackVaryingNotInitFails) {
TEST_P(GLES3DecoderWithShaderTest, GetTransformFeedbackVaryingBadProgramFails) {
const GLuint kIndex = 1;
const uint32_t kBucketId = 123;
- GetTransformFeedbackVarying cmd;
- typedef GetTransformFeedbackVarying::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetTransformFeedbackVarying cmd;
+ auto* result = static_cast<cmds::GetTransformFeedbackVarying::Result*>(
+ shared_memory_address_);
result->success = 0;
cmd.Init(kInvalidClientId,
kIndex,
@@ -1455,9 +1453,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetTransformFeedbackVaryingBadParamsFails) {
const GLuint kIndex = 1;
const uint32_t kBucketId = 123;
const GLsizei kNumVaryings = 1;
- GetTransformFeedbackVarying cmd;
- typedef GetTransformFeedbackVarying::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetTransformFeedbackVarying cmd;
+ auto* result = static_cast<cmds::GetTransformFeedbackVarying::Result*>(
+ shared_memory_address_);
result->success = 0;
cmd.Init(client_program_id_,
kIndex,
@@ -1480,9 +1478,9 @@ TEST_P(GLES3DecoderWithShaderTest,
GetTransformFeedbackVaryingBadSharedMemoryFails) {
const GLuint kIndex = 1;
const uint32_t kBucketId = 123;
- GetTransformFeedbackVarying cmd;
- typedef GetTransformFeedbackVarying::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ cmds::GetTransformFeedbackVarying cmd;
+ auto* result = static_cast<cmds::GetTransformFeedbackVarying::Result*>(
+ shared_memory_address_);
result->success = 0;
cmd.Init(client_program_id_,
kIndex,
@@ -1505,13 +1503,13 @@ TEST_P(GLES2DecoderTest, CompileShaderValidArgs) {
const char* kSource[] = {kSource0};
const char kValidStrEnd = 0;
SetBucketAsCStrings(kInBucketId, 1, kSource, 1, kValidStrEnd);
- ShaderSourceBucket bucket_cmd;
+ cmds::ShaderSourceBucket bucket_cmd;
bucket_cmd.Init(client_shader_id_, kInBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(bucket_cmd));
ClearSharedMemory();
// Compile shader should not actually call any GL calls yet.
- CompileShader cmd;
+ cmds::CompileShader cmd;
cmd.Init(client_shader_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -1526,10 +1524,10 @@ TEST_P(GLES2DecoderTest, CompileShaderValidArgs) {
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- GetShaderiv::Result* result =
- static_cast<GetShaderiv::Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetShaderiv::Result*>(shared_memory_address_);
result->size = 0;
- GetShaderiv status_cmd;
+ cmds::GetShaderiv status_cmd;
status_cmd.Init(client_shader_id_, GL_COMPILE_STATUS, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(status_cmd));
@@ -1537,7 +1535,7 @@ TEST_P(GLES2DecoderTest, CompileShaderValidArgs) {
}
TEST_P(GLES2DecoderTest, CompileShaderInvalidArgs) {
- CompileShader cmd;
+ cmds::CompileShader cmd;
cmd.Init(kInvalidClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -1555,11 +1553,11 @@ TEST_P(GLES2DecoderTest, ShaderSourceBucketAndGetShaderSourceValidArgs) {
const char* kSource[] = { kSource0 };
const char kValidStrEnd = 0;
SetBucketAsCStrings(kInBucketId, 1, kSource, 1, kValidStrEnd);
- ShaderSourceBucket cmd;
+ cmds::ShaderSourceBucket cmd;
cmd.Init(client_shader_id_, kInBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
ClearSharedMemory();
- GetShaderSource get_cmd;
+ cmds::GetShaderSource get_cmd;
get_cmd.Init(client_shader_id_, kOutBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(get_cmd));
CommonDecoder::Bucket* bucket = decoder_->GetBucket(kOutBucketId);
@@ -1576,7 +1574,7 @@ TEST_P(GLES2DecoderTest, ShaderSourceBucketWithProgramId) {
const char* kSource[] = { kSource0 };
const char kValidStrEnd = 0;
SetBucketAsCStrings(kBucketId, 1, kSource, 1, kValidStrEnd);
- ShaderSourceBucket cmd;
+ cmds::ShaderSourceBucket cmd;
cmd.Init(client_program_id_, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -1589,7 +1587,7 @@ TEST_P(GLES2DecoderTest, ShaderSourceStripComments) {
const char* kSource[] = { kSource0 };
const char kValidStrEnd = 0;
SetBucketAsCStrings(kInBucketId, 1, kSource, 1, kValidStrEnd);
- ShaderSourceBucket cmd;
+ cmds::ShaderSourceBucket cmd;
cmd.Init(client_shader_id_, kInBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -1597,21 +1595,21 @@ TEST_P(GLES2DecoderTest, ShaderSourceStripComments) {
TEST_P(GLES2DecoderWithShaderTest, Uniform1iValidArgs) {
EXPECT_CALL(*gl_, Uniform1i(kUniform1RealLocation, 2));
- Uniform1i cmd;
+ cmds::Uniform1i cmd;
cmd.Init(kUniform1FakeLocation, 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
TEST_P(GLES3DecoderWithShaderTest, Uniform1uiValidArgs) {
EXPECT_CALL(*gl_, Uniform1uiv(kUniform4RealLocation, 1, _));
- Uniform1ui cmd;
+ cmds::Uniform1ui cmd;
cmd.Init(kUniform4FakeLocation, 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
TEST_P(GLES2DecoderWithShaderTest, Uniform1ivImmediateValidArgs) {
- Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform1ivImmediate>();
GLint temp[1] = {
0,
};
@@ -1623,7 +1621,7 @@ TEST_P(GLES2DecoderWithShaderTest, Uniform1ivImmediateValidArgs) {
TEST_P(GLES2DecoderWithShaderTest, Uniform1ivImmediateInvalidValidArgs) {
EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
- Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform1ivImmediate>();
GLint temp[1 * 2] = {
0,
};
@@ -1634,7 +1632,7 @@ TEST_P(GLES2DecoderWithShaderTest, Uniform1ivImmediateInvalidValidArgs) {
TEST_P(GLES2DecoderWithShaderTest, Uniform1ivZeroCount) {
EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
- Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform1ivImmediate>();
GLint temp = 0;
cmd.Init(kUniform1FakeLocation, 0, &temp);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
@@ -1643,7 +1641,7 @@ TEST_P(GLES2DecoderWithShaderTest, Uniform1ivZeroCount) {
TEST_P(GLES2DecoderWithShaderTest, Uniform1iSamplerIsLmited) {
EXPECT_CALL(*gl_, Uniform1i(_, _)).Times(0);
- Uniform1i cmd;
+ cmds::Uniform1i cmd;
cmd.Init(kUniform1FakeLocation, kNumTextureUnits);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -1651,7 +1649,7 @@ TEST_P(GLES2DecoderWithShaderTest, Uniform1iSamplerIsLmited) {
TEST_P(GLES2DecoderWithShaderTest, Uniform1ivSamplerIsLimited) {
EXPECT_CALL(*gl_, Uniform1iv(_, _, _)).Times(0);
- Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform1ivImmediate>();
GLint temp[] = {kNumTextureUnits};
cmd.Init(kUniform1FakeLocation, 1, &temp[0]);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
@@ -1659,7 +1657,7 @@ TEST_P(GLES2DecoderWithShaderTest, Uniform1ivSamplerIsLimited) {
}
TEST_P(GLES2DecoderWithShaderTest, Uniform1ivArray) {
- Uniform1ivImmediate& cmd = *GetImmediateAs<Uniform1ivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform1ivImmediate>();
GLint temp[3] = {
0, 1, 2,
};
@@ -1678,8 +1676,7 @@ TEST_P(GLES2DecoderWithShaderTest, Uniform1ivArray) {
TEST_P(GLES3DecoderWithShaderTest, Uniform1uivImmediateValidArgs) {
- Uniform1uivImmediate& cmd =
- *GetImmediateAs<Uniform1uivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform1uivImmediate>();
GLuint temp[1] = {
0,
};
@@ -1692,7 +1689,7 @@ TEST_P(GLES3DecoderWithShaderTest, Uniform1uivImmediateValidArgs) {
TEST_P(GLES3DecoderWithShaderTest, Uniform1uivImmediateInvalidType) {
EXPECT_CALL(*gl_, Uniform1uiv(_, _, _)).Times(0);
- Uniform1uivImmediate& cmd = *GetImmediateAs<Uniform1uivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform1uivImmediate>();
GLuint temp[1 * 2] = {
0,
};
@@ -1704,7 +1701,7 @@ TEST_P(GLES3DecoderWithShaderTest, Uniform1uivImmediateInvalidType) {
TEST_P(GLES3DecoderWithShaderTest, Uniform1uivZeroCount) {
EXPECT_CALL(*gl_, Uniform1uiv(_, _, _)).Times(0);
- Uniform1uivImmediate& cmd = *GetImmediateAs<Uniform1uivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform1uivImmediate>();
GLuint temp = 0;
cmd.Init(kUniform4FakeLocation, 0, &temp);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
@@ -1713,15 +1710,14 @@ TEST_P(GLES3DecoderWithShaderTest, Uniform1uivZeroCount) {
TEST_P(GLES3DecoderWithShaderTest, Uniform2uiValidArgs) {
EXPECT_CALL(*gl_, Uniform2uiv(kUniform5RealLocation, 1, _));
- Uniform2ui cmd;
+ cmds::Uniform2ui cmd;
cmd.Init(kUniform5FakeLocation, 2, 3);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
TEST_P(GLES3DecoderWithShaderTest, Uniform2uivImmediateValidArgs) {
- Uniform2uivImmediate& cmd =
- *GetImmediateAs<Uniform2uivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform2uivImmediate>();
GLuint temp[2 * 1] = {
0,
};
@@ -1734,15 +1730,14 @@ TEST_P(GLES3DecoderWithShaderTest, Uniform2uivImmediateValidArgs) {
TEST_P(GLES3DecoderWithShaderTest, Uniform3uiValidArgs) {
EXPECT_CALL(*gl_, Uniform3uiv(kUniform6RealLocation, 1, _));
- Uniform3ui cmd;
+ cmds::Uniform3ui cmd;
cmd.Init(kUniform6FakeLocation, 2, 3, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
TEST_P(GLES3DecoderWithShaderTest, Uniform3uivImmediateValidArgs) {
- Uniform3uivImmediate& cmd =
- *GetImmediateAs<Uniform3uivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform3uivImmediate>();
GLuint temp[3 * 1] = {
0,
};
@@ -1755,15 +1750,14 @@ TEST_P(GLES3DecoderWithShaderTest, Uniform3uivImmediateValidArgs) {
TEST_P(GLES3DecoderWithShaderTest, Uniform4uiValidArgs) {
EXPECT_CALL(*gl_, Uniform4uiv(kUniform7RealLocation, 1, _));
- Uniform4ui cmd;
+ cmds::Uniform4ui cmd;
cmd.Init(kUniform7FakeLocation, 2, 3, 4, 5);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
TEST_P(GLES3DecoderWithShaderTest, Uniform4uivImmediateValidArgs) {
- Uniform4uivImmediate& cmd =
- *GetImmediateAs<Uniform4uivImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::Uniform4uivImmediate>();
GLuint temp[4 * 1] = {
0,
};
@@ -1779,7 +1773,7 @@ TEST_P(GLES2DecoderTest, BindAttribLocationBucket) {
const GLint kLocation = 2;
const char* kName = "testing";
SetBucketAsCString(kBucketId, kName);
- BindAttribLocationBucket cmd;
+ cmds::BindAttribLocationBucket cmd;
cmd.Init(client_program_id_, kLocation, kBucketId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -1789,7 +1783,7 @@ TEST_P(GLES2DecoderTest, BindAttribLocationBucketInvalidArgs) {
const GLint kLocation = 2;
const char* kName = "testing";
EXPECT_CALL(*gl_, BindAttribLocation(_, _, _)).Times(0);
- BindAttribLocationBucket cmd;
+ cmds::BindAttribLocationBucket cmd;
// check bucket does not exist.
cmd.Init(client_program_id_, kLocation, kBucketId);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
@@ -1807,11 +1801,10 @@ TEST_P(GLES2DecoderTest, BindAttribLocationBucketInvalidArgs) {
TEST_P(GLES2DecoderWithShaderTest, GetAttribLocation) {
const uint32_t kBucketId = 123;
const char* kNonExistentName = "foobar";
- typedef GetAttribLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::GetAttribLocation::Result*>();
SetBucketAsCString(kBucketId, kAttrib2Name);
*result = -1;
- GetAttribLocation cmd;
+ cmds::GetAttribLocation cmd;
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -1826,10 +1819,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetAttribLocation) {
TEST_P(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) {
const uint32_t kBucketId = 123;
- typedef GetAttribLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::GetAttribLocation::Result*>();
*result = -1;
- GetAttribLocation cmd;
+ cmds::GetAttribLocation cmd;
// Check no bucket
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
@@ -1855,11 +1847,10 @@ TEST_P(GLES2DecoderWithShaderTest, GetAttribLocationInvalidArgs) {
TEST_P(GLES3DecoderWithShaderTest, GetFragDataLocation) {
const uint32_t kBucketId = 123;
- typedef GetFragDataLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::GetFragDataLocation::Result*>();
SetBucketAsCString(kBucketId, kOutputVariable1NameESSL3);
*result = -1;
- GetFragDataLocation cmd;
+ cmds::GetFragDataLocation cmd;
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -1868,10 +1859,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetFragDataLocation) {
TEST_P(GLES3DecoderWithShaderTest, GetFragDataLocationInvalidArgs) {
const uint32_t kBucketId = 123;
- typedef GetFragDataLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::GetFragDataLocation::Result*>();
*result = -1;
- GetFragDataLocation cmd;
+ cmds::GetFragDataLocation cmd;
// Check no bucket
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
@@ -1900,11 +1890,10 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformBlockIndex) {
const uint32_t kBucketId = 123;
const GLuint kIndex = 10;
const char* kName = "color";
- typedef GetUniformBlockIndex::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::GetUniformBlockIndex::Result*>();
SetBucketAsCString(kBucketId, kName);
*result = GL_INVALID_INDEX;
- GetUniformBlockIndex cmd;
+ cmds::GetUniformBlockIndex cmd;
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_CALL(*gl_, GetUniformBlockIndex(kServiceProgramId, StrEq(kName)))
@@ -1916,10 +1905,9 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformBlockIndex) {
TEST_P(GLES3DecoderWithShaderTest, GetUniformBlockIndexInvalidArgs) {
const uint32_t kBucketId = 123;
- typedef GetUniformBlockIndex::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::GetUniformBlockIndex::Result*>();
*result = GL_INVALID_INDEX;
- GetUniformBlockIndex cmd;
+ cmds::GetUniformBlockIndex cmd;
// Check no bucket
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
@@ -1947,11 +1935,10 @@ TEST_P(GLES3DecoderWithShaderTest, GetUniformBlockIndexInvalidArgs) {
TEST_P(GLES2DecoderWithShaderTest, GetUniformLocation) {
const uint32_t kBucketId = 123;
const char* kNonExistentName = "foobar";
- typedef GetUniformLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::GetUniformLocation::Result*>();
SetBucketAsCString(kBucketId, kUniform2Name);
*result = -1;
- GetUniformLocation cmd;
+ cmds::GetUniformLocation cmd;
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -1966,10 +1953,9 @@ TEST_P(GLES2DecoderWithShaderTest, GetUniformLocation) {
TEST_P(GLES2DecoderWithShaderTest, GetUniformLocationInvalidArgs) {
const uint32_t kBucketId = 123;
- typedef GetUniformLocation::Result Result;
- Result* result = GetSharedMemoryAs<Result*>();
+ auto* result = GetSharedMemoryAs<cmds::GetUniformLocation::Result*>();
*result = -1;
- GetUniformLocation cmd;
+ cmds::GetUniformLocation cmd;
// Check no bucket
cmd.Init(client_program_id_, kBucketId, shared_memory_id_,
kSharedMemoryOffset);
@@ -2002,8 +1988,8 @@ TEST_P(GLES3DecoderWithShaderTest, Basic) {
TEST_P(GLES3DecoderWithShaderTest, UniformBlockBindingValidArgs) {
EXPECT_CALL(*gl_, UniformBlockBinding(kServiceProgramId, 1, 3));
- SpecializedSetup<UniformBlockBinding, 0>(true);
- UniformBlockBinding cmd;
+ SpecializedSetup<cmds::UniformBlockBinding, 0>(true);
+ cmds::UniformBlockBinding cmd;
cmd.Init(client_program_id_, 1, 3);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2017,7 +2003,7 @@ TEST_P(GLES2DecoderWithShaderTest, BindUniformLocationCHROMIUMBucket) {
const char* kBadName2 = "testing[1]";
SetBucketAsCString(kBucketId, kName);
- BindUniformLocationCHROMIUMBucket cmd;
+ cmds::BindUniformLocationCHROMIUMBucket cmd;
cmd.Init(client_program_id_,
kLocation,
kBucketId);
@@ -2100,7 +2086,7 @@ TEST_P(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) {
EXPECT_CALL(*gl_, UseProgram(kServiceProgramId))
.Times(1)
.RetiresOnSaturation();
- UseProgram cmd;
+ cmds::UseProgram cmd;
cmd.Init(client_program_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -2109,7 +2095,7 @@ TEST_P(GLES2DecoderManualInitTest, ClearUniformsBeforeFirstProgramUse) {
TEST_P(GLES2DecoderWithShaderTest, UseDeletedProgram) {
DoDeleteProgram(client_program_id_, kServiceProgramId);
{
- UseProgram cmd;
+ cmds::UseProgram cmd;
cmd.Init(client_program_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -2122,7 +2108,7 @@ TEST_P(GLES2DecoderWithShaderTest, DetachDeletedShader) {
EXPECT_CALL(*gl_, DetachShader(kServiceProgramId, kServiceFragmentShaderId))
.Times(1)
.RetiresOnSaturation();
- DetachShader cmd;
+ cmds::DetachShader cmd;
cmd.Init(client_program_id_, client_fragment_shader_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
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
index 8aa4c2e97e7..76f6ab40a98 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_decoder_unittest_textures.cc
@@ -65,14 +65,12 @@ class EmulatingRGBImageStub : public gl::GLImageStub {
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;
+ cmds::GenerateMipmap cmd;
cmd.Init(GL_TEXTURE_2D);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -95,7 +93,7 @@ TEST_P(GLES2DecoderTest, GenerateMipmapHandlesOutOfMemory) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_OUT_OF_MEMORY))
.RetiresOnSaturation();
- GenerateMipmap cmd;
+ cmds::GenerateMipmap cmd;
cmd.Init(GL_TEXTURE_2D);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
@@ -116,7 +114,7 @@ TEST_P(GLES2DecoderTest, GenerateMipmapClearsUnclearedTexture) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- GenerateMipmap cmd;
+ cmds::GenerateMipmap cmd;
cmd.Init(GL_TEXTURE_2D);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -130,7 +128,7 @@ TEST_P(GLES3DecoderTest, GenerateMipmapBaseLevel) {
{
EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 2));
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 2);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -144,7 +142,7 @@ TEST_P(GLES3DecoderTest, GenerateMipmapBaseLevel) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- GenerateMipmap cmd;
+ cmds::GenerateMipmap cmd;
cmd.Init(GL_TEXTURE_2D);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -152,8 +150,8 @@ TEST_P(GLES3DecoderTest, GenerateMipmapBaseLevel) {
TEST_P(GLES2DecoderTest, ActiveTextureValidArgs) {
EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1));
- SpecializedSetup<ActiveTexture, 0>(true);
- ActiveTexture cmd;
+ SpecializedSetup<cmds::ActiveTexture, 0>(true);
+ cmds::ActiveTexture cmd;
cmd.Init(GL_TEXTURE1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -161,8 +159,8 @@ TEST_P(GLES2DecoderTest, ActiveTextureValidArgs) {
TEST_P(GLES2DecoderTest, ActiveTextureInvalidArgs) {
EXPECT_CALL(*gl_, ActiveTexture(_)).Times(0);
- SpecializedSetup<ActiveTexture, 0>(false);
- ActiveTexture cmd;
+ SpecializedSetup<cmds::ActiveTexture, 0>(false);
+ cmds::ActiveTexture cmd;
cmd.Init(GL_TEXTURE0 - 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -189,7 +187,7 @@ TEST_P(GLES2DecoderTest, TexSubImage2DValidArgs) {
shared_memory_address_))
.Times(1)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA,
GL_UNSIGNED_BYTE, shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -220,7 +218,7 @@ TEST_P(GLES2DecoderTest, TexSubImage2DBadArgs) {
GL_UNSIGNED_BYTE,
0,
0);
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
// Invalid target.
cmd.Init(GL_TEXTURE0, 1, 0, 0, kWidth, kHeight, GL_RGBA, GL_UNSIGNED_BYTE,
@@ -314,7 +312,7 @@ TEST_P(GLES3DecoderTest, TexSubImage3DValidArgs) {
kHeight, kDepth, GL_RGBA, GL_UNSIGNED_BYTE))
.Times(1)
.RetiresOnSaturation();
- TexSubImage3D cmd;
+ cmds::TexSubImage3D cmd;
cmd.Init(GL_TEXTURE_3D, 1, 1, 0, 0, kWidth - 1, kHeight, kDepth, GL_RGBA,
GL_UNSIGNED_BYTE, shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -338,7 +336,7 @@ TEST_P(GLES3DecoderTest, TexSubImage3DBadArgs) {
DoBindTexture(GL_TEXTURE_3D, client_texture_id_, kServiceTextureId);
DoTexImage3D(GL_TEXTURE_3D, 1, GL_RGBA, kWidth, kHeight, kDepth, 0, GL_RGBA,
GL_UNSIGNED_BYTE, 0, 0);
- TexSubImage3D cmd;
+ cmds::TexSubImage3D cmd;
// Invalid target.
cmd.Init(GL_TEXTURE0, 1, 0, 0, 0, kWidth, kHeight, kDepth, GL_RGBA,
@@ -444,7 +442,7 @@ TEST_P(GLES3DecoderTest, TexSubImage2DTypesDoNotMatchUnsizedFormat) {
shared_memory_address_))
.Times(1)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA,
GL_UNSIGNED_BYTE, shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -469,7 +467,7 @@ TEST_P(GLES3DecoderTest, TexSubImage2DTypesDoNotMatchSizedFormat) {
shared_memory_address_))
.Times(1)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 1, 1, 0, kWidth - 1, kHeight, GL_RGBA,
GL_UNSIGNED_SHORT_4_4_4_4, shared_memory_id_, kSharedMemoryOffset,
GL_FALSE);
@@ -487,7 +485,7 @@ TEST_P(GLES2DecoderTest, CopyTexSubImage2DValidArgs) {
CopyTexSubImage2D(GL_TEXTURE_2D, 1, 0, 0, 0, 0, kWidth, kHeight))
.Times(1)
.RetiresOnSaturation();
- CopyTexSubImage2D cmd;
+ cmds::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());
@@ -507,7 +505,7 @@ TEST_P(GLES2DecoderTest, CopyTexSubImage2DBadArgs) {
GL_UNSIGNED_BYTE,
0,
0);
- CopyTexSubImage2D cmd;
+ cmds::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());
@@ -537,7 +535,7 @@ TEST_P(GLES2DecoderTest, TexImage2DRedefinitionSucceeds) {
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;
+ cmds::TexImage2D cmd;
if (ii == 0) {
EXPECT_CALL(*gl_,
TexImage2D(GL_TEXTURE_2D,
@@ -580,7 +578,7 @@ TEST_P(GLES2DecoderTest, TexImage2DRedefinitionSucceeds) {
// 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;
+ cmds::TexSubImage2D cmd2;
cmd2.Init(GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight - 1, GL_RGBA,
GL_UNSIGNED_BYTE, shared_memory_id_, kSharedMemoryOffset,
GL_TRUE);
@@ -620,7 +618,7 @@ TEST_P(GLES2DecoderTest, TexImage2DGLError) {
_))
.Times(1)
.RetiresOnSaturation();
- TexImage2D cmd;
+ cmds::TexImage2D cmd;
cmd.Init(target, level, internal_format, width, height, format, type,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -652,7 +650,7 @@ TEST_P(GLES2DecoderTest, CopyTexImage2DGLError) {
target, level, internal_format, 0, 0, width, height, border))
.Times(1)
.RetiresOnSaturation();
- CopyTexImage2D cmd;
+ cmds::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());
@@ -689,7 +687,7 @@ TEST_P(GLES2DecoderManualInitTest, CopyTexImage2DUnsizedInternalFormat) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kNewServiceId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kNewClientId);
+ GenHelper<cmds::GenTexturesImmediate>(kNewClientId);
TextureManager* manager = group().texture_manager();
@@ -732,7 +730,7 @@ TEST_P(GLES2DecoderManualInitTest, CopyTexImage2DUnsizedInternalFormat) {
0, 0, width, height, border);
EXPECT_EQ(GL_NO_ERROR, GetGLError());
} else {
- CopyTexImage2D cmd;
+ cmds::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());
@@ -770,7 +768,7 @@ TEST_P(GLES2DecoderManualInitTest, CopyTexImage2DUnsizedInternalFormatES3) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kNewServiceId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kNewClientId);
+ GenHelper<cmds::GenTexturesImmediate>(kNewClientId);
TextureManager* manager = group().texture_manager();
@@ -819,7 +817,7 @@ TEST_P(GLES2DecoderManualInitTest, CopyTexImage2DUnsizedInternalFormatES3) {
0, 0, width, height, border);
EXPECT_EQ(GL_NO_ERROR, GetGLError());
} else {
- CopyTexImage2D cmd;
+ cmds::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());
@@ -844,7 +842,7 @@ TEST_P(GLES3DecoderTest, CompressedTexImage3DBucket) {
DoBindTexture(kTarget, client_texture_id_, kServiceTextureId);
- CompressedTexImage3DBucket cmd;
+ cmds::CompressedTexImage3DBucket cmd;
cmd.Init(kTarget,
kLevel,
kInternalFormat,
@@ -892,7 +890,7 @@ TEST_P(GLES3DecoderTest, CompressedTexImage3DBucketBucketSizeIsZero) {
DoBindTexture(kTarget, client_texture_id_, kServiceTextureId);
// Bad bucket
- CompressedTexImage3DBucket cmd;
+ cmds::CompressedTexImage3DBucket cmd;
cmd.Init(kTarget,
kLevel,
kInternalFormat,
@@ -948,7 +946,7 @@ TEST_P(GLES2DecoderTest, CompressedTexImage3DFailsOnES2) {
bucket->SetSize(kImageSize);
{
- CompressedTexImage3DBucket cmd;
+ cmds::CompressedTexImage3DBucket cmd;
cmd.Init(kTarget,
kLevel,
kInternalFormat,
@@ -960,7 +958,7 @@ TEST_P(GLES2DecoderTest, CompressedTexImage3DFailsOnES2) {
}
{
- CompressedTexSubImage3DBucket cmd;
+ cmds::CompressedTexSubImage3DBucket cmd;
cmd.Init(kTarget,
kLevel,
0, 0, 0,
@@ -979,7 +977,7 @@ TEST_P(GLES2DecoderTest, CopyTexSubImage3DFailsOnES2) {
const GLsizei kWidth = 4;
const GLsizei kHeight = 4;
- CopyTexSubImage3D cmd;
+ cmds::CopyTexSubImage3D cmd;
cmd.Init(kTarget,
kLevel,
0, 0, 0,
@@ -1001,7 +999,7 @@ TEST_P(GLES3DecoderTest, CopyTexSubImage3DFaiures) {
const GLsizei kHeight = 2;
const GLsizei kDepth = 2;
- CopyTexSubImage3D cmd;
+ cmds::CopyTexSubImage3D cmd;
// No texture bound
cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
@@ -1050,7 +1048,7 @@ TEST_P(GLES3DecoderTest, CopyTexSubImage3DCheckArgs) {
kX, kY, kWidth, kHeight))
.Times(1)
.RetiresOnSaturation();
- CopyTexSubImage3D cmd;
+ cmds::CopyTexSubImage3D cmd;
cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
kX, kY, kWidth, kHeight);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -1130,8 +1128,8 @@ TEST_P(GLES3DecoderTest, CopyTexSubImage3DFeedbackLoopSucceeds0) {
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTextureLayer tex_layer;
- CopyTexSubImage3D cmd;
+ cmds::FramebufferTextureLayer tex_layer;
+ cmds::CopyTexSubImage3D cmd;
// The source and the target for CopyTexSubImage3D are the same 3d texture.
// But level of 3D texture != level of read attachment in fbo.
@@ -1185,8 +1183,8 @@ TEST_P(GLES3DecoderTest, CopyTexSubImage3DFeedbackLoopSucceeds1) {
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTextureLayer tex_layer;
- CopyTexSubImage3D cmd;
+ cmds::FramebufferTextureLayer tex_layer;
+ cmds::CopyTexSubImage3D cmd;
// The source and the target for CopyTexSubImage3D are the same 3d texture.
// But zoffset of 3D texture != layer of read attachment in fbo.
@@ -1237,8 +1235,8 @@ TEST_P(GLES3DecoderTest, CopyTexSubImage3DFeedbackLoopFails) {
DoBindFramebuffer(
GL_FRAMEBUFFER, client_framebuffer_id_, kServiceFramebufferId);
- FramebufferTextureLayer tex_layer;
- CopyTexSubImage3D cmd;
+ cmds::FramebufferTextureLayer tex_layer;
+ cmds::CopyTexSubImage3D cmd;
// The source and the target for CopyTexSubImage3D are the same 3d texture.
// And level / zoffset of 3D texture equal to level / layer of read attachment
@@ -1309,7 +1307,7 @@ TEST_P(GLES3DecoderTest, CopyTexSubImage3DClearTheUncleared3DTexture) {
.Times(1)
.RetiresOnSaturation();
- CopyTexSubImage3D cmd;
+ cmds::CopyTexSubImage3D cmd;
cmd.Init(kTarget, kLevel, kXoffset, kYoffset, kZoffset,
kX, kY, kWidth, kHeight);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -1333,7 +1331,7 @@ TEST_P(GLES3DecoderTest, CompressedTexImage3DFailsWithBadImageSize) {
DoBindTexture(kTarget, client_texture_id_, kServiceTextureId);
- CompressedTexImage3DBucket cmd;
+ cmds::CompressedTexImage3DBucket cmd;
cmd.Init(kTarget,
kLevel,
kInternalFormat,
@@ -1361,7 +1359,7 @@ TEST_P(GLES3DecoderTest, CompressedTexSubImage3DFails) {
DoBindTexture(kTarget, client_texture_id_, kServiceTextureId);
- CompressedTexImage3DBucket tex_cmd;
+ cmds::CompressedTexImage3DBucket tex_cmd;
tex_cmd.Init(kTarget,
kLevel,
kInternalFormat,
@@ -1388,7 +1386,7 @@ TEST_P(GLES3DecoderTest, CompressedTexSubImage3DFails) {
const GLint kSubHeight = 4;
const GLint kSubDepth = 4;
const GLenum kFormat = kInternalFormat;
- CompressedTexSubImage3DBucket cmd;
+ cmds::CompressedTexSubImage3DBucket cmd;
// Incorrect image size.
cmd.Init(kTarget,
@@ -1546,7 +1544,7 @@ TEST_P(GLES3DecoderTest, CompressedTexSubImage3DBadSHM) {
DoBindTexture(kTarget, client_texture_id_, kServiceTextureId);
- CompressedTexImage3DBucket tex_cmd;
+ cmds::CompressedTexImage3DBucket tex_cmd;
tex_cmd.Init(kTarget, kLevel, kInternalFormat, kWidth, kHeight, kDepth,
kBucketId);
EXPECT_CALL(*gl_,
@@ -1570,7 +1568,7 @@ TEST_P(GLES3DecoderTest, CompressedTexSubImage3DBadSHM) {
const GLenum kFormat = kInternalFormat;
const GLsizei kSubImageSize = 64;
const GLsizei kBadSubImageSize = 65;
- CompressedTexSubImage3D cmd;
+ cmds::CompressedTexSubImage3D cmd;
// Invalid args + NULL SHM -> GL error
cmd.Init(kTarget, kLevel, kXOffset, kYOffset, kZOffset, kSubWidth, kSubHeight,
@@ -1616,7 +1614,7 @@ TEST_P(GLES3DecoderTest, CompressedTexImage2DBucketBucketSizeIsZero) {
DoBindTexture(kTarget, client_texture_id_, kServiceTextureId);
// Bad bucket
- CompressedTexImage2DBucket cmd;
+ cmds::CompressedTexImage2DBucket cmd;
cmd.Init(kTarget,
kLevel,
kInternalFormat,
@@ -1663,7 +1661,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DBucketBadBucket) {
const uint32_t kBadBucketId = 123;
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CompressedTexImage2DBucket cmd;
+ cmds::CompressedTexImage2DBucket cmd;
cmd.Init(GL_TEXTURE_2D,
0,
GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
@@ -1671,7 +1669,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DBucketBadBucket) {
4,
kBadBucketId);
EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
- CompressedTexSubImage2DBucket cmd2;
+ cmds::CompressedTexSubImage2DBucket cmd2;
cmd2.Init(GL_TEXTURE_2D,
0,
0,
@@ -1721,7 +1719,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DS3TCWebGL) {
for (size_t ii = 0; ii < base::size(test_data); ++ii) {
const S3TCTestData& test = test_data[ii];
- CompressedTexImage2DBucket cmd;
+ cmds::CompressedTexImage2DBucket cmd;
// test small width.
DoCompressedTexImage2D(
GL_TEXTURE_2D, 1, test.format, 2, 4, 0, test.block_size, kBucketId);
@@ -1786,7 +1784,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DS3TCWebGL) {
kBucketId);
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- CompressedTexSubImage2DBucket sub_cmd;
+ cmds::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);
@@ -1878,7 +1876,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DS3TC) {
for (size_t ii = 0; ii < base::size(test_data); ++ii) {
const S3TCTestData& test = test_data[ii];
- CompressedTexImage2DBucket cmd;
+ cmds::CompressedTexImage2DBucket cmd;
// test small width.
DoCompressedTexImage2D(
GL_TEXTURE_2D, 1, test.format, 2, 4, 0, test.block_size, kBucketId);
@@ -1943,7 +1941,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DS3TC) {
kBucketId);
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- CompressedTexSubImage2DBucket sub_cmd;
+ cmds::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);
@@ -2022,7 +2020,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DETC1) {
const GLenum kFormat = GL_ETC1_RGB8_OES;
const size_t kBlockSize = 8;
- CompressedTexImage2DBucket cmd;
+ cmds::CompressedTexImage2DBucket cmd;
// test small width.
DoCompressedTexImage2D(GL_TEXTURE_2D, 0, kFormat, 4, 8, 0, 16, kBucketId);
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2049,7 +2047,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DETC1) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Test CompressedTexSubImage not allowed
- CompressedTexSubImage2DBucket sub_cmd;
+ cmds::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));
@@ -2062,14 +2060,14 @@ TEST_P(GLES2DecoderManualInitTest, CompressedTexImage2DETC1) {
GLenum type, internal_format;
EXPECT_TRUE(texture->GetLevelType(GL_TEXTURE_2D, 0, &type, &internal_format));
EXPECT_EQ(kFormat, internal_format);
- TexSubImage2D texsub_cmd;
+ cmds::TexSubImage2D texsub_cmd;
texsub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 4, 4, GL_RGBA, GL_UNSIGNED_BYTE,
shared_memory_id_, 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;
+ cmds::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());
@@ -2083,10 +2081,10 @@ TEST_P(GLES2DecoderTest, CopyTextureCHROMIUMBadTarget) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kNewServiceId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kNewClientId);
+ GenHelper<cmds::GenTexturesImmediate>(kNewClientId);
const GLenum kBadTarget = GL_RGB;
- CopyTextureCHROMIUM cmd;
+ cmds::CopyTextureCHROMIUM cmd;
cmd.Init(client_texture_id_, 0, kBadTarget, kNewClientId, 0, GL_RGBA,
GL_UNSIGNED_BYTE, GL_FALSE, GL_FALSE, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2106,7 +2104,7 @@ TEST_P(GLES2DecoderTest, CopySubTextureCHROMIUMBadTarget) {
0, 0);
const GLenum kBadTarget = GL_RGB;
- CopySubTextureCHROMIUM cmd;
+ cmds::CopySubTextureCHROMIUM cmd;
cmd.Init(client_texture_id_, 0, kBadTarget, kNewClientId, 0, 1, 1, 2, 2, 3, 3,
GL_FALSE, GL_FALSE, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2122,7 +2120,7 @@ TEST_P(GLES2DecoderManualInitTest, EGLImageExternalBindTexture) {
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_EXTERNAL_OES, kNewServiceId));
EXPECT_CALL(*gl_, GenTextures(1, _))
.WillOnce(SetArgPointee<1>(kNewServiceId));
- BindTexture cmd;
+ cmds::BindTexture cmd;
cmd.Init(GL_TEXTURE_EXTERNAL_OES, kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2143,13 +2141,13 @@ TEST_P(GLES2DecoderManualInitTest, EGLImageExternalGetBinding) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_,
GetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, result->GetData()))
.Times(0);
result->size = 0;
- GetIntegerv cmd;
+ cmds::GetIntegerv cmd;
cmd.Init(GL_TEXTURE_BINDING_EXTERNAL_OES,
shared_memory_id_,
shared_memory_offset_);
@@ -2200,7 +2198,7 @@ TEST_P(GLES2DecoderManualInitTest, EGLImageExternalTextureParam) {
*gl_,
TexParameteri(
GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
- TexParameteri cmd;
+ cmds::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());
@@ -2234,7 +2232,7 @@ TEST_P(GLES2DecoderManualInitTest, EGLImageExternalTextureParamInvalid) {
InitDecoder(init);
DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(GL_TEXTURE_EXTERNAL_OES,
GL_TEXTURE_MIN_FILTER,
GL_NEAREST_MIPMAP_NEAREST);
@@ -2274,7 +2272,7 @@ TEST_P(GLES2DecoderManualInitTest, EGLImageExternalTexImage2DError) {
GLenum type = GL_UNSIGNED_BYTE;
DoBindTexture(GL_TEXTURE_EXTERNAL_OES, client_texture_id_, kServiceTextureId);
ASSERT_TRUE(GetTexture(client_texture_id_) != nullptr);
- TexImage2D cmd;
+ cmds::TexImage2D cmd;
cmd.Init(target, level, internal_format, width, height, format, type,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2287,13 +2285,13 @@ TEST_P(GLES2DecoderManualInitTest, DefaultTextureZero) {
InitState init;
InitDecoder(init);
- BindTexture cmd1;
+ cmds::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;
+ cmds::BindTexture cmd2;
cmd2.Init(GL_TEXTURE_CUBE_MAP, 0);
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_CUBE_MAP, 0));
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
@@ -2305,14 +2303,14 @@ TEST_P(GLES2DecoderManualInitTest, DefaultTextureBGR) {
init.bind_generates_resource = true;
InitDecoder(init);
- BindTexture cmd1;
+ cmds::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;
+ cmds::BindTexture cmd2;
cmd2.Init(GL_TEXTURE_CUBE_MAP, 0);
EXPECT_CALL(*gl_,
BindTexture(GL_TEXTURE_CUBE_MAP,
@@ -2327,26 +2325,26 @@ TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameterf) {
InitDecoder(init);
{
- BindTexture cmd1;
+ cmds::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;
+ cmds::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;
+ cmds::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;
+ cmds::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());
@@ -2358,26 +2356,26 @@ TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteri) {
InitDecoder(init);
{
- BindTexture cmd1;
+ cmds::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;
+ cmds::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;
+ cmds::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;
+ cmds::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());
@@ -2389,15 +2387,14 @@ TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameterfv) {
InitDecoder(init);
{
- BindTexture cmd1;
+ cmds::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>();
+ auto& cmd2 = *GetImmediateAs<cmds::TexParameterfvImmediate>();
cmd2.Init(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,
&data);
@@ -2406,15 +2403,14 @@ TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameterfv) {
}
{
- BindTexture cmd1;
+ cmds::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>();
+ auto& cmd2 = *GetImmediateAs<cmds::TexParameterfvImmediate>();
cmd2.Init(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_MAG_FILTER,
&data);
@@ -2428,15 +2424,14 @@ TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteriv) {
InitDecoder(init);
{
- BindTexture cmd1;
+ cmds::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>();
+ auto& cmd2 = *GetImmediateAs<cmds::TexParameterfvImmediate>();
cmd2.Init(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,
&data);
@@ -2445,15 +2440,14 @@ TEST_P(GLES2DecoderManualInitTest, NoDefaultTexParameteriv) {
}
{
- BindTexture cmd1;
+ cmds::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>();
+ auto& cmd2 = *GetImmediateAs<cmds::TexParameterfvImmediate>();
cmd2.Init(GL_TEXTURE_CUBE_MAP,
GL_TEXTURE_MAG_FILTER,
&data);
@@ -2466,13 +2460,13 @@ TEST_P(GLES2DecoderManualInitTest, NoDefaultTexImage2D) {
InitState init;
InitDecoder(init);
- BindTexture cmd1;
+ cmds::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;
+ cmds::TexImage2D cmd2;
cmd2.Init(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, GL_RGBA, GL_UNSIGNED_BYTE,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
@@ -2483,13 +2477,13 @@ TEST_P(GLES2DecoderManualInitTest, NoDefaultTexSubImage2D) {
InitState init;
InitDecoder(init);
- BindTexture cmd1;
+ cmds::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;
+ cmds::TexSubImage2D cmd2;
cmd2.Init(GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd2));
@@ -2504,7 +2498,7 @@ TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleBindTexture) {
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_RECTANGLE_ARB, kNewServiceId));
EXPECT_CALL(*gl_, GenTextures(1, _))
.WillOnce(SetArgPointee<1>(kNewServiceId));
- BindTexture cmd;
+ cmds::BindTexture cmd;
cmd.Init(GL_TEXTURE_RECTANGLE_ARB, kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -2525,13 +2519,13 @@ TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleGetBinding) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
EXPECT_CALL(*gl_,
GetIntegerv(GL_TEXTURE_BINDING_RECTANGLE_ARB, result->GetData()))
.Times(0);
result->size = 0;
- GetIntegerv cmd;
+ cmds::GetIntegerv cmd;
cmd.Init(GL_TEXTURE_BINDING_RECTANGLE_ARB,
shared_memory_id_,
shared_memory_offset_);
@@ -2582,7 +2576,7 @@ TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParam) {
*gl_,
TexParameteri(
GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE));
- TexParameteri cmd;
+ cmds::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());
@@ -2616,7 +2610,7 @@ TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTextureParamInvalid) {
DoBindTexture(
GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(GL_TEXTURE_RECTANGLE_ARB,
GL_TEXTURE_MIN_FILTER,
GL_NEAREST_MIPMAP_NEAREST);
@@ -2657,7 +2651,7 @@ TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2D) {
GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
ASSERT_TRUE(GetTexture(client_texture_id_) != nullptr);
- TexImage2D cmd;
+ cmds::TexImage2D cmd;
cmd.Init(target, level, internal_format, width, height, format, type,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2683,7 +2677,7 @@ TEST_P(GLES2DecoderManualInitTest, ARBTextureRectangleTexImage2DInvalid) {
GL_TEXTURE_RECTANGLE_ARB, client_texture_id_, kServiceTextureId);
ASSERT_TRUE(GetTexture(client_texture_id_) != nullptr);
- TexImage2D cmd;
+ cmds::TexImage2D cmd;
cmd.Init(target, level, internal_format, width, height, format, type,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2702,7 +2696,7 @@ TEST_P(GLES2DecoderTest, TexSubImage2DClearsAfterTexImage2DNULL) {
GL_UNSIGNED_BYTE, shared_memory_address_))
.Times(2)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 2, 1, GL_RGBA, GL_UNSIGNED_BYTE,
shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2735,7 +2729,7 @@ TEST_P(GLES2DecoderTest, TexSubImage2DDoesNotClearAfterTexImage2DNULLThenData) {
shared_memory_address_))
.Times(1)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 1, 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE,
shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2761,7 +2755,7 @@ TEST_P(GLES2DecoderTest, TexSubImage2DClearsAfterTexImage2DWithDataThenNULL) {
DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE,
shared_memory_id_, kSharedMemoryOffset);
// Put in no data.
- TexImage2D tex_cmd;
+ cmds::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.
@@ -2774,7 +2768,7 @@ TEST_P(GLES2DecoderTest, TexSubImage2DClearsAfterTexImage2DWithDataThenNULL) {
GL_UNSIGNED_BYTE, shared_memory_address_))
.Times(2)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 2, 1, GL_RGBA, GL_UNSIGNED_BYTE,
shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2801,7 +2795,7 @@ TEST_P(GLES3DecoderTest, ClearLevelWithBoundUnpackBuffer) {
GL_UNSIGNED_BYTE, 0))
.Times(1)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 2, 1, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0,
GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2838,7 +2832,7 @@ TEST_P(GLES2DecoderTest, CopyTexImage2DMarksTextureAsCleared) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2855,7 +2849,7 @@ TEST_P(GLES2DecoderTest, CopyTexSubImage2DTwiceMarksTextureAsCleared) {
EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1))
.Times(1)
.RetiresOnSaturation();
- CopyTexSubImage2D cmd;
+ cmds::CopyTexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -2865,7 +2859,7 @@ TEST_P(GLES2DecoderTest, CopyTexSubImage2DTwiceMarksTextureAsCleared) {
EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 1, 0, 0, 2, 1))
.Times(1)
.RetiresOnSaturation();
- CopyTexSubImage2D cmd;
+ cmds::CopyTexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 1, 0, 0, 2, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -2887,7 +2881,7 @@ TEST_P(GLES2DecoderTest, CopyTexSubImage2DTwiceClearsUnclearedTexture) {
EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1))
.Times(1)
.RetiresOnSaturation();
- CopyTexSubImage2D cmd;
+ cmds::CopyTexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -2902,7 +2896,7 @@ TEST_P(GLES2DecoderTest, CopyTexSubImage2DTwiceClearsUnclearedTexture) {
EXPECT_CALL(*gl_, CopyTexSubImage2D(GL_TEXTURE_2D, 0, 1, 1, 0, 0, 1, 1))
.Times(1)
.RetiresOnSaturation();
- CopyTexSubImage2D cmd;
+ cmds::CopyTexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 1, 1, 0, 0, 1, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -2923,7 +2917,7 @@ TEST_P(GLES2DecoderTest, CopyTexSubImage2DClearsUnclearedBackBufferSizedTexture)
kBackBufferWidth, kBackBufferHeight))
.Times(1)
.RetiresOnSaturation();
- CopyTexSubImage2D cmd;
+ cmds::CopyTexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 0, 0, kBackBufferWidth, kBackBufferHeight);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2953,7 +2947,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- CompressedTexImage2D cmd;
+ cmds::CompressedTexImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 8,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2965,7 +2959,7 @@ TEST_P(GLES2DecoderManualInitTest, CompressedImage2DMarksTextureAsCleared) {
TEST_P(GLES2DecoderTest, TextureUsageAngleExtNotEnabledByDefault) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(
GL_TEXTURE_2D, GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -2986,8 +2980,8 @@ TEST_P(GLES2DecoderTest, ProduceAndConsumeDirectTextureCHROMIUM) {
Texture* texture = texture_ref->texture();
EXPECT_EQ(kServiceTextureId, texture->service_id());
- ProduceTextureDirectCHROMIUMImmediate& produce_cmd =
- *GetImmediateAs<ProduceTextureDirectCHROMIUMImmediate>();
+ auto& produce_cmd =
+ *GetImmediateAs<cmds::ProduceTextureDirectCHROMIUMImmediate>();
produce_cmd.Init(client_texture_id_, mailbox.name);
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(produce_cmd, sizeof(mailbox.name)));
@@ -3020,8 +3014,8 @@ TEST_P(GLES2DecoderTest, ProduceAndConsumeDirectTextureCHROMIUM) {
// Consume the texture into a new client ID.
GLuint new_texture_id = kNewClientId;
- CreateAndConsumeTextureINTERNALImmediate& consume_cmd =
- *GetImmediateAs<CreateAndConsumeTextureINTERNALImmediate>();
+ auto& consume_cmd =
+ *GetImmediateAs<cmds::CreateAndConsumeTextureINTERNALImmediate>();
consume_cmd.Init(new_texture_id, mailbox.name);
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(consume_cmd, sizeof(mailbox.name)));
@@ -3063,12 +3057,12 @@ TEST_P(GLES2DecoderTest, CreateAndConsumeTextureCHROMIUMInvalidMailbox) {
.RetiresOnSaturation();
EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)).Times(1).RetiresOnSaturation();
- ActiveTexture& texture_cmd = *GetImmediateAs<ActiveTexture>();
+ auto& texture_cmd = *GetImmediateAs<cmds::ActiveTexture>();
texture_cmd.Init(GL_TEXTURE1);
EXPECT_EQ(error::kNoError, ExecuteCmd(texture_cmd));
- CreateAndConsumeTextureINTERNALImmediate& consume_cmd =
- *GetImmediateAs<CreateAndConsumeTextureINTERNALImmediate>();
+ auto& consume_cmd =
+ *GetImmediateAs<cmds::CreateAndConsumeTextureINTERNALImmediate>();
consume_cmd.Init(new_texture_id, mailbox.name);
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(consume_cmd, sizeof(mailbox.name)));
@@ -3097,8 +3091,8 @@ TEST_P(GLES2DecoderTest, CreateAndConsumeTextureCHROMIUMInvalidTexture) {
group().texture_manager()->GetTexture(client_texture_id_);
ASSERT_TRUE(texture_ref != nullptr);
- ProduceTextureDirectCHROMIUMImmediate& produce_cmd =
- *GetImmediateAs<ProduceTextureDirectCHROMIUMImmediate>();
+ auto& produce_cmd =
+ *GetImmediateAs<cmds::ProduceTextureDirectCHROMIUMImmediate>();
produce_cmd.Init(client_texture_id_, mailbox.name);
EXPECT_EQ(
error::kNoError,
@@ -3107,8 +3101,8 @@ TEST_P(GLES2DecoderTest, CreateAndConsumeTextureCHROMIUMInvalidTexture) {
// Attempt to consume the mailbox with an invalid texture id.
GLuint new_texture_id = 0;
- CreateAndConsumeTextureINTERNALImmediate& consume_cmd =
- *GetImmediateAs<CreateAndConsumeTextureINTERNALImmediate>();
+ auto& consume_cmd =
+ *GetImmediateAs<cmds::CreateAndConsumeTextureINTERNALImmediate>();
consume_cmd.Init(new_texture_id, mailbox.name);
EXPECT_EQ(error::kNoError,
ExecuteImmediateCmd(consume_cmd, sizeof(mailbox.name)));
@@ -3201,8 +3195,8 @@ TEST_P(GLES2DecoderTest, CreateAndTexStorage2DSharedImageCHROMIUM) {
gfx::ColorSpace(), 0, &memory_tracker, kNewServiceId),
&memory_tracker);
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3231,8 +3225,8 @@ TEST_P(GLES2DecoderTest,
.WillOnce(SetArgPointee<1>(kNewServiceId))
.RetiresOnSaturation();
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
@@ -3262,8 +3256,8 @@ TEST_P(GLES2DecoderTest,
gfx::ColorSpace(), 0, &memory_tracker, kNewServiceId),
&memory_tracker);
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(client_texture_id_, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
@@ -3285,29 +3279,29 @@ TEST_P(GLES2DecoderTest, BeginEndSharedImageAccessCRHOMIUM) {
gfx::ColorSpace(), 0, &memory_tracker, kNewServiceId),
&memory_tracker);
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Begin/end read access for the created image.
- BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
read_access_cmd.Init(kNewClientId, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(read_access_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EndSharedImageAccessDirectCHROMIUM read_end_cmd;
+ cmds::EndSharedImageAccessDirectCHROMIUM read_end_cmd;
read_end_cmd.Init(kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(read_end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Begin/end read/write access for the created image.
- BeginSharedImageAccessDirectCHROMIUM readwrite_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM readwrite_access_cmd;
readwrite_access_cmd.Init(kNewClientId,
GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(readwrite_access_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
- EndSharedImageAccessDirectCHROMIUM readwrite_end_cmd;
+ cmds::EndSharedImageAccessDirectCHROMIUM readwrite_end_cmd;
readwrite_end_cmd.Init(kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(readwrite_end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3319,7 +3313,7 @@ TEST_P(GLES2DecoderTest, BeginEndSharedImageAccessCRHOMIUM) {
TEST_P(GLES2DecoderTest, BeginSharedImageAccessDirectCHROMIUMInvalidMode) {
// Try to begin access with an invalid mode.
- BeginSharedImageAccessDirectCHROMIUM bad_mode_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM bad_mode_access_cmd;
bad_mode_access_cmd.Init(client_texture_id_, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(bad_mode_access_cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -3327,7 +3321,7 @@ TEST_P(GLES2DecoderTest, BeginSharedImageAccessDirectCHROMIUMInvalidMode) {
TEST_P(GLES2DecoderTest, BeginSharedImageAccessDirectCHROMIUMNotSharedImage) {
// Try to begin access with a texture that is not a shared image.
- BeginSharedImageAccessDirectCHROMIUM not_shared_image_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM not_shared_image_access_cmd;
not_shared_image_access_cmd.Init(
client_texture_id_, GL_SHARED_IMAGE_ACCESS_MODE_READWRITE_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(not_shared_image_access_cmd));
@@ -3345,8 +3339,8 @@ TEST_P(GLES2DecoderTest, BeginSharedImageAccessDirectCHROMIUMCantBeginAccess) {
gfx::ColorSpace(), 0, &memory_tracker, kNewServiceId),
&memory_tracker);
- CreateAndTexStorage2DSharedImageINTERNALImmediate& cmd =
- *GetImmediateAs<CreateAndTexStorage2DSharedImageINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<
+ cmds::CreateAndTexStorage2DSharedImageINTERNALImmediate>();
cmd.Init(kNewClientId, GL_NONE, mailbox.name);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailbox.name)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3359,7 +3353,7 @@ TEST_P(GLES2DecoderTest, BeginSharedImageAccessDirectCHROMIUMCantBeginAccess) {
static_cast<TestSharedImageBacking::TestSharedImageRepresentation*>(
texture_ref->shared_image())
->set_can_access(false);
- BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
+ cmds::BeginSharedImageAccessDirectCHROMIUM read_access_cmd;
read_access_cmd.Init(kNewClientId, GL_SHARED_IMAGE_ACCESS_MODE_READ_CHROMIUM);
EXPECT_EQ(error::kNoError, ExecuteCmd(read_access_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -3371,7 +3365,7 @@ TEST_P(GLES2DecoderTest, BeginSharedImageAccessDirectCHROMIUMCantBeginAccess) {
TEST_P(GLES2DecoderTest, EndSharedImageAccessDirectCHROMIUMNotSharedImage) {
// Try to end access with a texture that is not a shared image.
- EndSharedImageAccessDirectCHROMIUM not_shared_image_end_cmd;
+ cmds::EndSharedImageAccessDirectCHROMIUM not_shared_image_end_cmd;
not_shared_image_end_cmd.Init(client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(not_shared_image_end_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -3390,7 +3384,7 @@ TEST_P(GLES2DecoderManualInitTest, DepthTextureBadArgs) {
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
// Check trying to upload data fails.
- TexImage2D tex_cmd;
+ cmds::TexImage2D tex_cmd;
tex_cmd.Init(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 1, 1, GL_DEPTH_COMPONENT,
GL_UNSIGNED_INT, shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(tex_cmd));
@@ -3421,7 +3415,7 @@ TEST_P(GLES2DecoderManualInitTest, DepthTextureBadArgs) {
EXPECT_EQ(GL_NO_ERROR, GetGLError());
// Check that trying to update it fails.
- TexSubImage2D tex_sub_cmd;
+ cmds::TexSubImage2D tex_sub_cmd;
tex_sub_cmd.Init(GL_TEXTURE_2D, 0, 0, 0, 1, 1, GL_DEPTH_COMPONENT,
GL_UNSIGNED_INT, shared_memory_id_, kSharedMemoryOffset,
GL_FALSE);
@@ -3429,13 +3423,13 @@ TEST_P(GLES2DecoderManualInitTest, DepthTextureBadArgs) {
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
// Check that trying to CopyTexImage2D fails
- CopyTexImage2D copy_tex_cmd;
+ cmds::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;
+ cmds::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());
@@ -3462,7 +3456,7 @@ TEST_P(GLES2DecoderManualInitTest, GenerateMipmapDepthTexture) {
GL_UNSIGNED_INT,
0,
0);
- GenerateMipmap cmd;
+ cmds::GenerateMipmap cmd;
cmd.Init(GL_TEXTURE_2D);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
@@ -3518,7 +3512,7 @@ TEST_P(GLES2DecoderTest, BindTexImage2DCHROMIUMCubeMapNotAllowed) {
GetImageManagerForTest()->AddImage(image.get(), 1);
DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
- BindTexImage2DCHROMIUM bind_tex_image_2d_cmd;
+ cmds::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());
@@ -3530,7 +3524,7 @@ TEST_P(GLES2DecoderTest,
GetImageManagerForTest()->AddImage(image.get(), 1);
DoBindTexture(GL_TEXTURE_CUBE_MAP, client_texture_id_, kServiceTextureId);
- BindTexImage2DWithInternalformatCHROMIUM bind_tex_image_2d_cmd;
+ cmds::BindTexImage2DWithInternalformatCHROMIUM bind_tex_image_2d_cmd;
bind_tex_image_2d_cmd.Init(GL_TEXTURE_2D, GL_BACK, 1); // Invalid enum
EXPECT_EQ(error::kNoError, ExecuteCmd(bind_tex_image_2d_cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -3593,7 +3587,7 @@ TEST_P(GLES2DecoderTest, GLImageAttachedAfterSubTexImage2D) {
height, format, type, _))
.Times(1)
.RetiresOnSaturation();
- TexSubImage2D tex_sub_image_2d_cmd;
+ cmds::TexSubImage2D tex_sub_image_2d_cmd;
tex_sub_image_2d_cmd.Init(target, level, xoffset, yoffset, width, height,
format, type, pixels_shm_id, pixels_shm_offset,
internal);
@@ -3683,7 +3677,7 @@ TEST_P(GLES2DecoderTest, ReleaseTexImage2DCHROMIUM) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd;
+ cmds::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(
@@ -3699,6 +3693,8 @@ class MockGLImage : public gl::GLImage {
// Overridden from gl::GLImage:
MOCK_METHOD0(GetSize, gfx::Size());
MOCK_METHOD0(GetInternalFormat, unsigned());
+ MOCK_METHOD0(GetDataFormat, unsigned());
+ MOCK_METHOD0(GetDataType, unsigned());
MOCK_METHOD0(ShouldBindOrCopy, gl::GLImage::BindOrCopy());
MOCK_METHOD1(BindTexImage, bool(unsigned));
MOCK_METHOD1(ReleaseTexImage, void(unsigned));
@@ -3753,12 +3749,20 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
.Times(1)
.WillOnce(Return(GL_RGBA))
.RetiresOnSaturation();
+ EXPECT_CALL(*image.get(), GetDataFormat())
+ .Times(1)
+ .WillOnce(Return(GL_RGBA))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*image.get(), GetDataType())
+ .Times(1)
+ .WillOnce(Return(GL_UNSIGNED_BYTE))
+ .RetiresOnSaturation();
// ScopedGLErrorSuppressor calls GetError on its constructor and destructor.
DoBindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId);
Mock::VerifyAndClearExpectations(gl_.get());
EXPECT_CALL(*gl_, ActiveTexture(GL_TEXTURE1)).Times(1).RetiresOnSaturation();
- ActiveTexture texture_cmd;
+ cmds::ActiveTexture texture_cmd;
texture_cmd.Init(GL_TEXTURE1);
EXPECT_EQ(error::kNoError, ExecuteCmd(texture_cmd));
Mock::VerifyAndClearExpectations(gl_.get());
@@ -3794,7 +3798,7 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
.RetiresOnSaturation();
}
- DrawArrays cmd;
+ cmds::DrawArrays cmd;
cmd.Init(GL_TRIANGLES, 0, kNumVertices);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -3803,7 +3807,7 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
Mock::VerifyAndClearExpectations(gl_.get());
// Re-bind image to texture.
- ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd;
+ cmds::ReleaseTexImage2DCHROMIUM release_tex_image_2d_cmd;
release_tex_image_2d_cmd.Init(GL_TEXTURE_2D, kImageId);
EXPECT_EQ(error::kNoError, ExecuteCmd(release_tex_image_2d_cmd));
EXPECT_CALL(*image.get(), BindTexImage(GL_TEXTURE_2D))
@@ -3817,6 +3821,14 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
.Times(1)
.WillOnce(Return(GL_RGBA))
.RetiresOnSaturation();
+ EXPECT_CALL(*image.get(), GetDataFormat())
+ .Times(1)
+ .WillOnce(Return(GL_RGBA))
+ .RetiresOnSaturation();
+ EXPECT_CALL(*image.get(), GetDataType())
+ .Times(1)
+ .WillOnce(Return(GL_UNSIGNED_BYTE))
+ .RetiresOnSaturation();
DoBindTexImage2DCHROMIUM(GL_TEXTURE_2D, kImageId);
DoBindFramebuffer(
@@ -3845,7 +3857,7 @@ TEST_P(GLES2DecoderWithShaderTest, CopyTexImage) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- FramebufferTexture2D fbtex_cmd;
+ cmds::FramebufferTexture2D fbtex_cmd;
fbtex_cmd.Init(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D,
@@ -3888,7 +3900,7 @@ TEST_P(GLES2DecoderManualInitTest, DrawWithGLImageExternal) {
InSequence s;
EXPECT_CALL(*gl_, DrawElements(_, _, _, _)).Times(1);
- DrawElements cmd;
+ cmds::DrawElements cmd;
cmd.Init(GL_TRIANGLES,
kValidIndexRangeCount,
GL_UNSIGNED_SHORT,
@@ -3977,7 +3989,7 @@ TEST_P(GLES2DecoderManualInitTest, TexSubImage2DFloatOnGLES3) {
shared_memory_address_))
.Times(1)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight, GL_RGBA, GL_FLOAT,
shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -4009,7 +4021,7 @@ TEST_P(GLES2DecoderManualInitTest, TexSubImage2DFloatDoesClearOnGLES3) {
GL_FLOAT, shared_memory_address_))
.Times(2)
.RetiresOnSaturation();
- TexSubImage2D cmd;
+ cmds::TexSubImage2D cmd;
cmd.Init(GL_TEXTURE_2D, 0, 0, 0, kWidth, kHeight - 1, GL_RGBA, GL_FLOAT,
shared_memory_id_, kSharedMemoryOffset, GL_FALSE);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -4130,9 +4142,9 @@ class GLES2DecoderCompressedFormatsTest : public GLES2DecoderManualInitTest {
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- GetIntegerv cmd;
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
+ cmds::GetIntegerv cmd;
result->size = 0;
EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0).RetiresOnSaturation();
cmd.Init(GL_NUM_COMPRESSED_TEXTURE_FORMATS,
@@ -4234,9 +4246,9 @@ TEST_P(GLES2DecoderManualInitTest, GetNoCompressedTextureFormats) {
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetIntegerv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
- GetIntegerv cmd;
+ auto* result =
+ static_cast<cmds::GetIntegerv::Result*>(shared_memory_address_);
+ cmds::GetIntegerv cmd;
result->size = 0;
EXPECT_CALL(*gl_, GetIntegerv(_, _)).Times(0).RetiresOnSaturation();
cmd.Init(GL_NUM_COMPRESSED_TEXTURE_FORMATS,
@@ -4265,7 +4277,7 @@ TEST_P(GLES2DecoderManualInitTest, TexStorageInvalidLevels) {
InitDecoder(init);
DoBindTexture(GL_TEXTURE_RECTANGLE_ARB, client_texture_id_,
kServiceTextureId);
- TexStorage2DEXT cmd;
+ cmds::TexStorage2DEXT cmd;
cmd.Init(GL_TEXTURE_RECTANGLE_ARB, 2, GL_RGBA8, 4, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -4279,19 +4291,19 @@ TEST_P(GLES2DecoderManualInitTest, TexStorageInvalidSize) {
InitDecoder(init);
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
{
- TexStorage2DEXT cmd;
+ cmds::TexStorage2DEXT cmd;
cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 4);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
{
- TexStorage2DEXT cmd;
+ cmds::TexStorage2DEXT cmd;
cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 4, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
}
{
- TexStorage2DEXT cmd;
+ cmds::TexStorage2DEXT cmd;
cmd.Init(GL_TEXTURE_2D, 1, GL_RGBA8, 0, 0);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -4316,7 +4328,7 @@ class GLES2DecoderTexStorageFormatAndTypeTest
*gl_, TexStorage2DEXT(GL_TEXTURE_2D, kLevels, format, kWidth, kHeight))
.Times(1)
.RetiresOnSaturation();
- TexStorage2DEXT cmd;
+ cmds::TexStorage2DEXT cmd;
cmd.Init(GL_TEXTURE_2D, kLevels, format, kWidth, kHeight);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -4382,7 +4394,7 @@ TEST_P(GLES3DecoderTest, TexStorage3DValidArgs) {
EXPECT_CALL(*gl_, TexStorage3D(GL_TEXTURE_3D, 2, GL_RGB565, 4, 5, 6))
.Times(1)
.RetiresOnSaturation();
- TexStorage3D cmd;
+ cmds::TexStorage3D cmd;
cmd.Init(GL_TEXTURE_3D, 2, GL_RGB565, 4, 5, 6);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -4507,7 +4519,7 @@ TEST_P(GLES3DecoderTest, ClearLevel3DMultipleCallsPerLayer) {
}
TEST_P(GLES3DecoderTest, BindSamplerInvalidUnit) {
- BindSampler cmd;
+ cmds::BindSampler cmd;
cmd.Init(kNumTextureUnits, client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -4531,7 +4543,7 @@ TEST_P(GLES2DecoderWithShaderTest, CHROMIUMImageEmulatingRGB) {
EXPECT_CALL(*gl_, GenTextures(_, _))
.WillOnce(SetArgPointee<1>(kFBOServiceTextureId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kFBOClientTextureId);
+ GenHelper<cmds::GenTexturesImmediate>(kFBOClientTextureId);
DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
kServiceFramebufferId);
@@ -4582,7 +4594,7 @@ TEST_P(GLES2DecoderWithShaderTest, CHROMIUMImageEmulatingRGB) {
}
DoBindTexture(GL_TEXTURE_2D, client_texture_id_, kServiceTextureId);
- CopyTexImage2D cmd;
+ cmds::CopyTexImage2D cmd;
cmd.Init(target, level, destination_texture_format, 0, 0, width, height);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
GLenum expectation = should_succeed ? GL_NO_ERROR : GL_INVALID_OPERATION;
@@ -4603,7 +4615,7 @@ TEST_P(GLES2DecoderTest, BindTextureValidArgs) {
.Times(1)
.RetiresOnSaturation();
}
- BindTexture cmd;
+ cmds::BindTexture cmd;
cmd.Init(GL_TEXTURE_2D, client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -4623,7 +4635,7 @@ TEST_P(GLES2DecoderTest, BindTextureValidArgsNewId) {
.Times(1)
.RetiresOnSaturation();
}
- BindTexture cmd;
+ cmds::BindTexture cmd;
cmd.Init(GL_TEXTURE_2D, kNewClientId);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -4632,7 +4644,7 @@ TEST_P(GLES2DecoderTest, BindTextureValidArgsNewId) {
TEST_P(GLES2DecoderTest, BindTextureInvalidArgs) {
EXPECT_CALL(*gl_, BindTexture(_, _)).Times(0);
- BindTexture cmd;
+ cmds::BindTexture cmd;
cmd.Init(GL_TEXTURE_1D, client_texture_id_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -4650,14 +4662,14 @@ TEST_P(GLES3DecoderTest, TexSwizzleAllowed) {
{
EXPECT_CALL(*gl_, TexParameteri(kTarget, kSwizzleParam, kSwizzleValue));
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(kTarget, kSwizzleParam, kSwizzleValue);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
}
{
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(kTarget, kSwizzleParam, kInvalidSwizzleValue);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -4668,10 +4680,10 @@ TEST_P(GLES3DecoderTest, TexSwizzleAllowed) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetTexParameteriv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
result->size = 0;
- GetTexParameteriv cmd;
+ cmds::GetTexParameteriv cmd;
cmd.Init(kTarget, kSwizzleParam, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(decoder_->GetGLES2Util()->GLGetNumValuesReturned(kSwizzleParam),
@@ -4687,17 +4699,17 @@ TEST_P(WebGL2DecoderTest, TexSwizzleDisabled) {
const GLenum kSwizzleValue = GL_BLUE;
{
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(kTarget, kSwizzleParam, kSwizzleValue);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
}
{
- typedef GetTexParameteriv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
result->size = 0;
- GetTexParameteriv cmd;
+ cmds::GetTexParameteriv cmd;
cmd.Init(kTarget, kSwizzleParam, shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
@@ -4818,7 +4830,7 @@ TEST_P(GLES2DecoderTest, CopySubTextureCHROMIUMTwiceClearsUnclearedTexture) {
EXPECT_CALL(*gl_, GenTextures(1, _))
.WillOnce(SetArgPointee<1>(kNewServiceId))
.RetiresOnSaturation();
- GenHelper<GenTexturesImmediate>(kNewClientId);
+ GenHelper<cmds::GenTexturesImmediate>(kNewClientId);
DoBindTexture(GL_TEXTURE_2D, kNewClientId, kNewServiceId);
DoTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0,
0);
@@ -4835,7 +4847,7 @@ TEST_P(GLES2DecoderTest, CopySubTextureCHROMIUMTwiceClearsUnclearedTexture) {
SetupClearTextureExpectations(kNewServiceId, kServiceTextureId,
GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
GL_UNSIGNED_BYTE, 0, 0, 2, 2, 0);
- CopySubTextureCHROMIUM cmd;
+ cmds::CopySubTextureCHROMIUM cmd;
cmd.Init(kNewClientId /* source_id */, 0 /* source_level */,
GL_TEXTURE_2D /* dest_target */, client_texture_id_ /* dest_id */,
0 /* dest_level */, 0 /* xoffset */, 0 /* yoffset */, 0 /* x */,
@@ -4852,7 +4864,7 @@ TEST_P(GLES2DecoderTest, CopySubTextureCHROMIUMTwiceClearsUnclearedTexture) {
SetupClearTextureExpectations(kServiceTextureId, kServiceTextureId,
GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
GL_UNSIGNED_BYTE, 0, 1, 2, 1, 0);
- CopySubTextureCHROMIUM cmd;
+ cmds::CopySubTextureCHROMIUM cmd;
cmd.Init(kNewClientId /* source_id */, 0 /* source_level */,
GL_TEXTURE_2D /* dest_target */, client_texture_id_ /* dest_id */,
0 /* dest_level */, 1 /* xoffset */, 1 /* yoffset */, 0 /* x */,
@@ -4892,7 +4904,7 @@ TEST_P(GLES3DecoderTest, ImmutableTextureBaseLevelMaxLevelClamping) {
EXPECT_CALL(*gl_, TexParameteri(kTarget, GL_TEXTURE_BASE_LEVEL, kBaseLevel))
.Times(1)
.RetiresOnSaturation();
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(kTarget, GL_TEXTURE_BASE_LEVEL, kBaseLevel);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -4900,7 +4912,7 @@ TEST_P(GLES3DecoderTest, ImmutableTextureBaseLevelMaxLevelClamping) {
EXPECT_CALL(*gl_, TexParameteri(kTarget, GL_TEXTURE_MAX_LEVEL, kMaxLevel))
.Times(1)
.RetiresOnSaturation();
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(kTarget, GL_TEXTURE_MAX_LEVEL, kMaxLevel);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -4913,7 +4925,7 @@ TEST_P(GLES3DecoderTest, ImmutableTextureBaseLevelMaxLevelClamping) {
kHeight, kDepth))
.Times(1)
.RetiresOnSaturation();
- TexStorage3D cmd;
+ cmds::TexStorage3D cmd;
cmd.Init(kTarget, kLevels, kInternalFormat, kWidth, kHeight, kDepth);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -4929,7 +4941,7 @@ TEST_P(GLES3DecoderTest, ImmutableTextureBaseLevelMaxLevelClamping) {
*gl_, TexParameteri(kTarget, GL_TEXTURE_BASE_LEVEL, kClampedBaseLevel))
.Times(1)
.RetiresOnSaturation();
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(kTarget, GL_TEXTURE_BASE_LEVEL, kNewBaseLevel);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -4938,7 +4950,7 @@ TEST_P(GLES3DecoderTest, ImmutableTextureBaseLevelMaxLevelClamping) {
TexParameteri(kTarget, GL_TEXTURE_MAX_LEVEL, kClampedMaxLevel))
.Times(1)
.RetiresOnSaturation();
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(kTarget, GL_TEXTURE_MAX_LEVEL, kNewMaxLevel);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
}
@@ -4952,10 +4964,10 @@ TEST_P(GLES3DecoderTest, ImmutableTextureBaseLevelMaxLevelClamping) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetTexParameteriv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
result->size = 0;
- GetTexParameteriv cmd;
+ cmds::GetTexParameteriv cmd;
cmd.Init(kTarget, GL_TEXTURE_BASE_LEVEL, shared_memory_id_,
shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -4966,10 +4978,10 @@ TEST_P(GLES3DecoderTest, ImmutableTextureBaseLevelMaxLevelClamping) {
.WillOnce(Return(GL_NO_ERROR))
.WillOnce(Return(GL_NO_ERROR))
.RetiresOnSaturation();
- typedef GetTexParameteriv::Result Result;
- Result* result = static_cast<Result*>(shared_memory_address_);
+ auto* result =
+ static_cast<cmds::GetTexParameteriv::Result*>(shared_memory_address_);
result->size = 0;
- GetTexParameteriv cmd;
+ cmds::GetTexParameteriv cmd;
cmd.Init(kTarget, GL_TEXTURE_MAX_LEVEL, shared_memory_id_,
shared_memory_offset_);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
@@ -4990,7 +5002,7 @@ TEST_P(GLES3DecoderTest, ClearRenderableLevelsWithOutOfRangeBaseLevel) {
{
EXPECT_CALL(*gl_, TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 55));
- TexParameteri cmd;
+ cmds::TexParameteri cmd;
cmd.Init(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 55);
EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_srgb_converter.cc b/chromium/gpu/command_buffer/service/gles2_cmd_srgb_converter.cc
index 78631ec29eb..ddd9240e9bd 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_srgb_converter.cc
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_srgb_converter.cc
@@ -25,7 +25,7 @@ void SRGBConverter::InitializeSRGBConverterProgram() {
srgb_converter_program_ = glCreateProgram();
- const char* kShaderPrecisionPreamble =
+ const char* kShaderPreamble =
"#ifdef GL_ES\n"
"precision mediump float;\n"
"#define TexCoordPrecision mediump\n"
@@ -52,7 +52,7 @@ void SRGBConverter::InitializeSRGBConverterProgram() {
"#define VARYING out\n";
}
- vs_source += kShaderPrecisionPreamble;
+ vs_source += kShaderPreamble;
// TODO(yizhou): gles 2.0 does not support gl_VertexID.
// Compile the vertex shader
@@ -102,7 +102,7 @@ void SRGBConverter::InitializeSRGBConverterProgram() {
fs_source += "#version 150\n";
}
- fs_source += kShaderPrecisionPreamble;
+ fs_source += kShaderPreamble;
if (feature_info_->gl_version_info().is_es) {
if (feature_info_->gl_version_info().is_es3) {
diff --git a/chromium/gpu/command_buffer/service/gles2_cmd_validation.h b/chromium/gpu/command_buffer/service/gles2_cmd_validation.h
index 0368e63d94f..81a2986b88f 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_validation.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_validation.h
@@ -7,59 +7,12 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_H_
#define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_H_
-#include <algorithm>
-#include <vector>
#include "gpu/command_buffer/common/gles2_cmd_format.h"
+#include "gpu/command_buffer/service/value_validator.h"
namespace gpu {
namespace gles2 {
-// ValueValidator returns true if a value is valid.
-template <typename T>
-class ValueValidator {
- public:
- ValueValidator() = default;
-
- ValueValidator(const T* valid_values, int num_values) {
- AddValues(valid_values, num_values);
- }
-
- void AddValue(const T value) {
- if (!IsValid(value)) {
- valid_values_.push_back(value);
- }
- }
-
- void AddValues(const T* valid_values, int num_values) {
- for (int ii = 0; ii < num_values; ++ii) {
- AddValue(valid_values[ii]);
- }
- }
-
- void RemoveValues(const T* invalid_values, int num_values) {
- for (int ii = 0; ii < num_values; ++ii) {
- auto iter = std::find(
- valid_values_.begin(), valid_values_.end(), invalid_values[ii]);
- if (iter != valid_values_.end()) {
- valid_values_.erase(iter);
- DCHECK(!IsValid(invalid_values[ii]));
- }
- }
- }
-
- bool IsValid(const T value) const {
- return std::find(valid_values_.begin(), valid_values_.end(), value) !=
- valid_values_.end();
- }
-
- const std::vector<T>& GetValues() const {
- return valid_values_;
- }
-
- private:
- std::vector<T> valid_values_;
-};
-
struct Validators {
Validators();
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 5f3e0bb8cc8..6673feae8e0 100644
--- a/chromium/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
+++ b/chromium/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
@@ -251,12 +251,7 @@ class ResetStatusValidator {
};
ResetStatusValidator reset_status;
-class SamplerParameterValidator {
- public:
- bool IsValid(const GLenum value) const;
-};
-SamplerParameterValidator sampler_parameter;
-
+ValueValidator<GLenum> sampler_parameter;
ValueValidator<GLenum> shader_binary_format;
ValueValidator<GLenum> shader_parameter;
class ShaderPrecisionValidator {
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 a061926ab7e..efc505e5507 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
@@ -862,21 +862,11 @@ bool Validators::ResetStatusValidator::IsValid(const GLenum value) const {
return false;
}
-bool Validators::SamplerParameterValidator::IsValid(const GLenum value) const {
- switch (value) {
- case GL_TEXTURE_MAG_FILTER:
- case GL_TEXTURE_MIN_FILTER:
- case GL_TEXTURE_MIN_LOD:
- case GL_TEXTURE_MAX_LOD:
- case GL_TEXTURE_WRAP_S:
- case GL_TEXTURE_WRAP_T:
- case GL_TEXTURE_WRAP_R:
- case GL_TEXTURE_COMPARE_MODE:
- case GL_TEXTURE_COMPARE_FUNC:
- return true;
- }
- return false;
-}
+static const GLenum valid_sampler_parameter_table[] = {
+ GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MIN_LOD,
+ GL_TEXTURE_MAX_LOD, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T,
+ GL_TEXTURE_WRAP_R, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_COMPARE_FUNC,
+};
static const GLenum valid_shader_parameter_table[] = {
GL_SHADER_TYPE, GL_DELETE_STATUS,
@@ -1455,6 +1445,8 @@ Validators::Validators()
base::size(valid_render_buffer_parameter_table)),
render_buffer_target(valid_render_buffer_target_table,
base::size(valid_render_buffer_target_table)),
+ sampler_parameter(valid_sampler_parameter_table,
+ base::size(valid_sampler_parameter_table)),
shader_binary_format(),
shader_parameter(valid_shader_parameter_table,
base::size(valid_shader_parameter_table)),
diff --git a/chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc b/chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc
index a0c75c43e4f..fb9aa52d2c6 100644
--- a/chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc
+++ b/chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.cc
@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/metrics/histogram_macros.h"
+#include "gpu/ipc/common/command_buffer_id.h"
// Macro to reduce code duplication when logging memory in
// GpuCommandBufferMemoryTracker. This is needed as the UMA_HISTOGRAM_* macros
@@ -36,18 +37,18 @@
namespace gpu {
GpuCommandBufferMemoryTracker::GpuCommandBufferMemoryTracker(
- int client_id,
+ CommandBufferId command_buffer_id,
uint64_t client_tracing_id,
- uint64_t context_group_tracing_id,
ContextType context_type,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner)
- : client_id_(client_id),
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ Observer* observer)
+ : command_buffer_id_(command_buffer_id),
client_tracing_id_(client_tracing_id),
- context_group_tracing_id_(context_group_tracing_id),
context_type_(context_type),
memory_pressure_listener_(base::BindRepeating(
&GpuCommandBufferMemoryTracker::LogMemoryStatsPressure,
- base::Unretained(this))) {
+ base::Unretained(this))),
+ observer_(observer) {
// Set up |memory_stats_timer_| to call LogMemoryPeriodic periodically
// via the provided |task_runner|.
memory_stats_timer_.SetTaskRunner(std::move(task_runner));
@@ -61,7 +62,10 @@ GpuCommandBufferMemoryTracker::~GpuCommandBufferMemoryTracker() {
}
void GpuCommandBufferMemoryTracker::TrackMemoryAllocatedChange(uint64_t delta) {
+ uint64_t old_size = size_;
size_ += delta;
+ if (observer_)
+ observer_->OnMemoryAllocatedChange(command_buffer_id_, old_size, size_);
}
uint64_t GpuCommandBufferMemoryTracker::GetSize() const {
@@ -73,11 +77,11 @@ uint64_t GpuCommandBufferMemoryTracker::ClientTracingId() const {
}
int GpuCommandBufferMemoryTracker::ClientId() const {
- return client_id_;
+ return ChannelIdFromCommandBufferId(command_buffer_id_);
}
uint64_t GpuCommandBufferMemoryTracker::ContextGroupTracingId() const {
- return context_group_tracing_id_;
+ return command_buffer_id_.GetUnsafeValue();
}
void GpuCommandBufferMemoryTracker::LogMemoryStatsPeriodic() {
diff --git a/chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.h b/chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.h
index aa854125ed4..bf0d0a681f5 100644
--- a/chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.h
+++ b/chromium/gpu/command_buffer/service/gpu_command_buffer_memory_tracker.h
@@ -13,6 +13,7 @@
#include "gpu/command_buffer/common/context_creation_attribs.h"
#include "gpu/command_buffer/service/memory_tracking.h"
#include "gpu/gpu_gles2_export.h"
+#include "gpu/ipc/common/command_buffer_id.h"
namespace gpu {
@@ -21,11 +22,11 @@ namespace gpu {
class GPU_GLES2_EXPORT GpuCommandBufferMemoryTracker : public MemoryTracker {
public:
GpuCommandBufferMemoryTracker(
- int client_id,
+ CommandBufferId command_buffer_id,
uint64_t client_tracing_id,
- uint64_t context_group_tracing_id,
ContextType context_type,
- scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+ Observer* observer);
~GpuCommandBufferMemoryTracker() override;
// MemoryTracker implementation.
@@ -42,15 +43,16 @@ class GPU_GLES2_EXPORT GpuCommandBufferMemoryTracker : public MemoryTracker {
base::MemoryPressureListener::MemoryPressureLevel pressure_level);
uint64_t size_ = 0;
- const int client_id_;
+ const CommandBufferId command_buffer_id_;
const uint64_t client_tracing_id_;
- const uint64_t context_group_tracing_id_;
// Variables used in memory stat histogram logging.
const ContextType context_type_;
base::RepeatingTimer memory_stats_timer_;
base::MemoryPressureListener memory_pressure_listener_;
+ MemoryTracker::Observer* const observer_;
+
DISALLOW_COPY_AND_ASSIGN(GpuCommandBufferMemoryTracker);
};
diff --git a/chromium/gpu/command_buffer/service/gpu_service_test.h b/chromium/gpu/command_buffer/service/gpu_service_test.h
index 099749cb36a..fa4d5fa24d8 100644
--- a/chromium/gpu/command_buffer/service/gpu_service_test.h
+++ b/chromium/gpu/command_buffer/service/gpu_service_test.h
@@ -42,7 +42,7 @@ class GpuServiceTest : public testing::Test {
bool ran_teardown_;
scoped_refptr<gl::GLContextStub> context_;
scoped_refptr<gl::GLSurfaceStub> surface_;
- base::test::TaskEnvironment task_environment_;
+ base::test::SingleThreadTaskEnvironment task_environment_;
};
} // namespace gles2
diff --git a/chromium/gpu/ipc/common/android/image_reader_gl_owner.cc b/chromium/gpu/command_buffer/service/image_reader_gl_owner.cc
index 56014b15dd6..f233dcf6421 100644
--- a/chromium/gpu/ipc/common/android/image_reader_gl_owner.cc
+++ b/chromium/gpu/command_buffer/service/image_reader_gl_owner.cc
@@ -2,12 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "gpu/ipc/common/android/image_reader_gl_owner.h"
+#include "gpu/command_buffer/service/image_reader_gl_owner.h"
#include <android/native_window_jni.h>
#include <jni.h>
#include <stdint.h>
+#include "base/android/android_hardware_buffer_compat.h"
#include "base/android/jni_android.h"
#include "base/android/scoped_hardware_buffer_fence_sync.h"
#include "base/logging.h"
@@ -303,6 +304,27 @@ ImageReaderGLOwner::GetAHardwareBuffer() {
current_image_ref_->GetReadyFence());
}
+gfx::Rect ImageReaderGLOwner::GetCropRect() {
+ if (!current_image_ref_)
+ return gfx::Rect();
+
+ // Note that to query the crop rectangle, we don't need to wait for the
+ // AImage to be ready by checking the associated image ready fence.
+ AImageCropRect crop_rect;
+ media_status_t return_code =
+ loader_.AImage_getCropRect(current_image_ref_->image(), &crop_rect);
+ if (return_code != AMEDIA_OK) {
+ DLOG(ERROR) << "Error querying crop rectangle from the image : "
+ << return_code;
+ return gfx::Rect();
+ }
+ DCHECK_GE(crop_rect.right, crop_rect.left);
+ DCHECK_GE(crop_rect.bottom, crop_rect.top);
+ return gfx::Rect(crop_rect.left, crop_rect.top,
+ crop_rect.right - crop_rect.left,
+ crop_rect.bottom - crop_rect.top);
+}
+
void ImageReaderGLOwner::RegisterRefOnImage(AImage* image) {
DCHECK(image_reader_);
@@ -349,6 +371,84 @@ void ImageReaderGLOwner::GetTransformMatrix(float mtx[]) {
static constexpr float kYInvertedIdentity[16]{1, 0, 0, 0, 0, -1, 0, 0,
0, 0, 1, 0, 0, 1, 0, 1};
memcpy(mtx, kYInvertedIdentity, sizeof(kYInvertedIdentity));
+
+
+ // Get the crop rectangle associated with this image. The crop rectangle
+ // specifies the region of valid pixels in the image.
+ gfx::Rect crop_rect = GetCropRect();
+ if (crop_rect.IsEmpty())
+ return;
+
+ // Get the AHardwareBuffer to query its dimensions.
+ AHardwareBuffer* buffer = nullptr;
+ loader_.AImage_getHardwareBuffer(current_image_ref_->image(), &buffer);
+ if (!buffer) {
+ DLOG(ERROR) << "Unable to get an AHardwareBuffer from the image";
+ return;
+ }
+
+ // Get the buffer descriptor. Note that for querying the buffer descriptor, we
+ // do not need to wait on the AHB to be ready.
+ AHardwareBuffer_Desc desc;
+ base::AndroidHardwareBufferCompat::GetInstance().Describe(buffer, &desc);
+
+ // Note: Below calculation of shrink_amount and the transform matrix params
+ // tx,ty,sx,sy is copied from the android
+ // SurfaceTexture::computeCurrentTransformMatrix() -
+ // https://android.googlesource.com/platform/frameworks/native/+/5c1139f/libs/gui/SurfaceTexture.cpp#516.
+ // We are assuming here that bilinear filtering is always enabled for
+ // sampling the texture.
+ float shrink_amount = 0.0f;
+ float tx = 0.0f, ty = 0.0f, sx = 1.0f, sy = 1.0f;
+
+ // In order to prevent bilinear sampling beyond the edge of the
+ // crop rectangle we may need to shrink it by 2 texels in each
+ // dimension. Normally this would just need to take 1/2 a texel
+ // off each end, but because the chroma channels of YUV420 images
+ // are subsampled we may need to shrink the crop region by a whole
+ // texel on each side.
+ switch (desc.format) {
+ case AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM:
+ case AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM:
+ case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:
+ case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:
+ // We know there's no subsampling of any channels, so we
+ // only need to shrink by a half a pixel.
+ shrink_amount = 0.5;
+ break;
+ default:
+ // If we don't recognize the format, we must assume the
+ // worst case (that we care about), which is YUV420.
+ shrink_amount = 1.0;
+ }
+
+ int32_t crop_rect_width = crop_rect.width();
+ int32_t crop_rect_height = crop_rect.height();
+ int32_t crop_rect_left = crop_rect.x();
+ int32_t crop_rect_bottom = crop_rect.y() + crop_rect_height;
+ int32_t buffer_width = desc.width;
+ int32_t buffer_height = desc.height;
+ DCHECK_GT(buffer_width, 0);
+ DCHECK_GT(buffer_height, 0);
+
+ // Only shrink the dimensions that are not the size of the buffer.
+ if (crop_rect_width < buffer_width) {
+ tx = (float(crop_rect_left) + shrink_amount) / buffer_width;
+ sx = (float(crop_rect_width) - (2.0f * shrink_amount)) / buffer_width;
+ }
+
+ if (crop_rect_height < buffer_height) {
+ ty = (float(buffer_height - crop_rect_bottom) + shrink_amount) /
+ buffer_height;
+ sy = (float(crop_rect_height) - (2.0f * shrink_amount)) / buffer_height;
+ }
+
+ // Update the transform matrix with above parameters by also taking into
+ // account Y inversion/ vertical flip.
+ mtx[0] = sx;
+ mtx[5] = 0 - sy;
+ mtx[12] = tx;
+ mtx[13] = 1 - ty;
}
void ImageReaderGLOwner::ReleaseBackBuffers() {
diff --git a/chromium/gpu/ipc/common/android/image_reader_gl_owner.h b/chromium/gpu/command_buffer/service/image_reader_gl_owner.h
index bc661310a61..9fb0aef3c23 100644
--- a/chromium/gpu/ipc/common/android/image_reader_gl_owner.h
+++ b/chromium/gpu/command_buffer/service/image_reader_gl_owner.h
@@ -2,14 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef GPU_IPC_COMMON_ANDROID_IMAGE_READER_GL_OWNER_H_
-#define GPU_IPC_COMMON_ANDROID_IMAGE_READER_GL_OWNER_H_
+#ifndef GPU_COMMAND_BUFFER_SERVICE_IMAGE_READER_GL_OWNER_H_
+#define GPU_COMMAND_BUFFER_SERVICE_IMAGE_READER_GL_OWNER_H_
#include <memory>
#include "base/android/android_image_reader_compat.h"
#include "base/containers/flat_map.h"
-#include "gpu/ipc/common/android/texture_owner.h"
+#include "gpu/command_buffer/service/texture_owner.h"
+#include "gpu/gpu_gles2_export.h"
#include "ui/gl/gl_fence_egl.h"
#include "ui/gl/gl_image_ahardwarebuffer.h"
@@ -27,7 +28,7 @@ namespace gpu {
// decoded media frames. Media frames can update the attached surface handle
// with image data and this class helps to create an eglImage using that image
// data present in the surface.
-class GPU_EXPORT ImageReaderGLOwner : public TextureOwner {
+class GPU_GLES2_EXPORT ImageReaderGLOwner : public TextureOwner {
public:
gl::GLContext* GetContext() const override;
gl::GLSurface* GetSurface() const override;
@@ -40,6 +41,7 @@ class GPU_EXPORT ImageReaderGLOwner : public TextureOwner {
void ReleaseBackBuffers() override;
std::unique_ptr<base::android::ScopedHardwareBufferFenceSync>
GetAHardwareBuffer() override;
+ gfx::Rect GetCropRect() override;
const AImageReader* image_reader_for_testing() const { return image_reader_; }
int32_t max_images_for_testing() const { return max_images_; }
@@ -132,4 +134,4 @@ class GPU_EXPORT ImageReaderGLOwner : public TextureOwner {
} // namespace gpu
-#endif // GPU_IPC_COMMON_ANDROID_IMAGE_READER_GL_OWNER_H_
+#endif // GPU_COMMAND_BUFFER_SERVICE_IMAGE_READER_GL_OWNER_H_
diff --git a/chromium/gpu/ipc/common/android/image_reader_gl_owner_unittest.cc b/chromium/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc
index dfe4d151d69..963be9cce2f 100644
--- a/chromium/gpu/ipc/common/android/image_reader_gl_owner_unittest.cc
+++ b/chromium/gpu/command_buffer/service/image_reader_gl_owner_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/ipc/common/android/texture_owner.h"
+#include "gpu/command_buffer/service/texture_owner.h"
#include <stdint.h>
#include <memory>
@@ -11,8 +11,8 @@
#include "base/test/scoped_feature_list.h"
#include "base/test/task_environment.h"
#include "gpu/command_buffer/service/abstract_texture.h"
-#include "gpu/ipc/common/android/image_reader_gl_owner.h"
-#include "gpu/ipc/common/android/mock_abstract_texture.h"
+#include "gpu/command_buffer/service/image_reader_gl_owner.h"
+#include "gpu/command_buffer/service/mock_abstract_texture.h"
#include "media/base/media_switches.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_bindings.h"
diff --git a/chromium/gpu/command_buffer/service/indexed_buffer_binding_host.cc b/chromium/gpu/command_buffer/service/indexed_buffer_binding_host.cc
index 07d0e925cb0..73170d19890 100644
--- a/chromium/gpu/command_buffer/service/indexed_buffer_binding_host.cc
+++ b/chromium/gpu/command_buffer/service/indexed_buffer_binding_host.cc
@@ -10,11 +10,10 @@ namespace gpu {
namespace gles2 {
IndexedBufferBindingHost::IndexedBufferBinding::IndexedBufferBinding()
- : type(kBindBufferNone),
+ : type(IndexedBufferBindingType::kBindBufferNone),
offset(0),
size(0),
- effective_full_buffer_size(0) {
-}
+ effective_full_buffer_size(0) {}
IndexedBufferBindingHost::IndexedBufferBinding::IndexedBufferBinding(
const IndexedBufferBindingHost::IndexedBufferBinding& other)
@@ -30,7 +29,8 @@ IndexedBufferBindingHost::IndexedBufferBinding::~IndexedBufferBinding() =
bool IndexedBufferBindingHost::IndexedBufferBinding::operator==(
const IndexedBufferBindingHost::IndexedBufferBinding& other) const {
- if (type == kBindBufferNone && other.type == kBindBufferNone) {
+ if (type == IndexedBufferBindingType::kBindBufferNone &&
+ other.type == IndexedBufferBindingType::kBindBufferNone) {
// This should be the most common case so an early out.
return true;
}
@@ -47,7 +47,7 @@ void IndexedBufferBindingHost::IndexedBufferBinding::SetBindBufferBase(
Reset();
return;
}
- type = kBindBufferBase;
+ type = IndexedBufferBindingType::kBindBufferBase;
buffer = _buffer;
offset = 0;
size = 0;
@@ -60,7 +60,7 @@ void IndexedBufferBindingHost::IndexedBufferBinding::SetBindBufferRange(
Reset();
return;
}
- type = kBindBufferRange;
+ type = IndexedBufferBindingType::kBindBufferRange;
buffer = _buffer;
offset = _offset;
size = _size;
@@ -68,7 +68,7 @@ void IndexedBufferBindingHost::IndexedBufferBinding::SetBindBufferRange(
}
void IndexedBufferBindingHost::IndexedBufferBinding::Reset() {
- type = kBindBufferNone;
+ type = IndexedBufferBindingType::kBindBufferNone;
buffer = nullptr;
offset = 0;
size = 0;
@@ -191,7 +191,8 @@ void IndexedBufferBindingHost::OnBufferData(Buffer* buffer) {
for (size_t ii = 0; ii < buffer_bindings_.size(); ++ii) {
if (buffer_bindings_[ii].buffer.get() != buffer)
continue;
- if (buffer_bindings_[ii].type == kBindBufferRange &&
+ if (buffer_bindings_[ii].type ==
+ IndexedBufferBindingType::kBindBufferRange &&
buffer_bindings_[ii].effective_full_buffer_size != buffer->size()) {
DoAdjustedBindBufferRange(target_, ii, buffer->service_id(),
buffer_bindings_[ii].offset,
@@ -230,7 +231,9 @@ void IndexedBufferBindingHost::SetIsBound(bool is_bound) {
// is bound, we might need to reset the ranges.
for (size_t ii = 0; ii < buffer_bindings_.size(); ++ii) {
Buffer* buffer = buffer_bindings_[ii].buffer.get();
- if (buffer && buffer_bindings_[ii].type == kBindBufferRange &&
+ if (buffer &&
+ buffer_bindings_[ii].type ==
+ IndexedBufferBindingType::kBindBufferRange &&
buffer_bindings_[ii].effective_full_buffer_size != buffer->size()) {
DoAdjustedBindBufferRange(target_, ii, buffer->service_id(),
buffer_bindings_[ii].offset,
@@ -273,13 +276,13 @@ GLsizeiptr IndexedBufferBindingHost::GetEffectiveBufferSize(
return 0;
GLsizeiptr full_buffer_size = binding.buffer->size();
switch (binding.type) {
- case kBindBufferBase:
+ case IndexedBufferBindingType::kBindBufferBase:
return full_buffer_size;
- case kBindBufferRange:
+ case IndexedBufferBindingType::kBindBufferRange:
if (binding.offset + binding.size > full_buffer_size)
return full_buffer_size - binding.offset;
return binding.size;
- case kBindBufferNone:
+ case IndexedBufferBindingType::kBindBufferNone:
return 0;
}
return buffer_bindings_[index].size;
@@ -303,11 +306,11 @@ void IndexedBufferBindingHost::RestoreBindings(
continue;
}
switch (buffer_bindings_[ii].type) {
- case kBindBufferBase:
- case kBindBufferNone:
+ case IndexedBufferBindingType::kBindBufferBase:
+ case IndexedBufferBindingType::kBindBufferNone:
DoBindBufferBase(ii, buffer_bindings_[ii].buffer.get());
break;
- case kBindBufferRange:
+ case IndexedBufferBindingType::kBindBufferRange:
DoBindBufferRange(ii, buffer_bindings_[ii].buffer.get(),
buffer_bindings_[ii].offset,
buffer_bindings_[ii].size);
diff --git a/chromium/gpu/command_buffer/service/indexed_buffer_binding_host.h b/chromium/gpu/command_buffer/service/indexed_buffer_binding_host.h
index b28018d8fe4..03aaa5fd29f 100644
--- a/chromium/gpu/command_buffer/service/indexed_buffer_binding_host.h
+++ b/chromium/gpu/command_buffer/service/indexed_buffer_binding_host.h
@@ -81,7 +81,7 @@ class GPU_GLES2_EXPORT IndexedBufferBindingHost
bool do_buffer_refcounting_;
private:
- enum IndexedBufferBindingType {
+ enum class IndexedBufferBindingType {
kBindBufferBase,
kBindBufferRange,
kBindBufferNone
diff --git a/chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc b/chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc
index 0404b337f42..79053f13840 100644
--- a/chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc
+++ b/chromium/gpu/command_buffer/service/mailbox_manager_unittest.cc
@@ -17,8 +17,6 @@
namespace gpu {
namespace gles2 {
-using namespace ::testing;
-
static const SyncToken g_sync_token(gpu::CommandBufferNamespace::GPU_IO,
gpu::CommandBufferId::FromUnsafeValue(123),
0);
@@ -191,8 +189,8 @@ class MailboxManagerSyncTest : public MailboxManagerTest {
GLenum wrap_t) {
DCHECK(texture_id);
const GLuint kCurrentTexture = 0;
- EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_2D, _))
- .WillOnce(SetArgPointee<1>(kCurrentTexture))
+ EXPECT_CALL(*gl_, GetIntegerv(GL_TEXTURE_BINDING_2D, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kCurrentTexture))
.RetiresOnSaturation();
EXPECT_CALL(*gl_, BindTexture(GL_TEXTURE_2D, texture_id))
.Times(1)
@@ -233,7 +231,7 @@ TEST_F(MailboxManagerSyncTest, ProduceDestroy) {
Texture* texture = DefineTexture();
Mailbox name = Mailbox::Generate();
- InSequence sequence;
+ testing::InSequence sequence;
manager_->ProduceTexture(name, texture);
EXPECT_EQ(texture, manager_->ConsumeTexture(name));
@@ -243,7 +241,7 @@ TEST_F(MailboxManagerSyncTest, ProduceDestroy) {
}
TEST_F(MailboxManagerSyncTest, ProduceSyncDestroy) {
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture = DefineTexture();
Mailbox name = Mailbox::Generate();
@@ -261,7 +259,7 @@ TEST_F(MailboxManagerSyncTest, ProduceSyncDestroy) {
}
TEST_F(MailboxManagerSyncTest, ProduceSyncMultipleMailbox) {
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture = DefineTexture();
Mailbox name = Mailbox::Generate();
@@ -285,7 +283,7 @@ TEST_F(MailboxManagerSyncTest, ProduceSyncMultipleMailbox) {
// makes sure a redefinition becomes visible there too.
TEST_F(MailboxManagerSyncTest, ProduceConsumeResize) {
const GLuint kNewTextureId = 1234;
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture = DefineTexture();
Mailbox name = Mailbox::Generate();
@@ -297,8 +295,8 @@ TEST_F(MailboxManagerSyncTest, ProduceConsumeResize) {
manager_->PushTextureUpdates(g_sync_token);
manager2_->PullTextureUpdates(g_sync_token);
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId));
SetupUpdateTexParamExpectations(
kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
Texture* new_texture = Texture::CheckedCast(manager2_->ConsumeTexture(name));
@@ -372,14 +370,14 @@ TEST_F(MailboxManagerSyncTest, ProduceConsumeBidirectional) {
// 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));
+ testing::InSequence sequence;
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId1));
SetupUpdateTexParamExpectations(
kNewTextureId1, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
new_texture1 = manager2_->ConsumeTexture(name1);
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId2));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId2));
SetupUpdateTexParamExpectations(
kNewTextureId2, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
new_texture2 = manager_->ConsumeTexture(name2);
@@ -400,7 +398,7 @@ TEST_F(MailboxManagerSyncTest, ProduceConsumeBidirectional) {
EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR),
SetParameter(texture2, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
- Mock::VerifyAndClearExpectations(gl_.get());
+ testing::Mock::VerifyAndClearExpectations(gl_.get());
// Synchronize in both directions
manager_->PushTextureUpdates(g_sync_token);
@@ -435,8 +433,8 @@ TEST_F(MailboxManagerSyncTest, ClearedStateSynced) {
manager_->PushTextureUpdates(g_sync_token);
manager2_->PullTextureUpdates(g_sync_token);
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId));
SetupUpdateTexParamExpectations(
kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
Texture* new_texture = Texture::CheckedCast(manager2_->ConsumeTexture(name));
@@ -482,8 +480,8 @@ TEST_F(MailboxManagerSyncTest, SyncIncompleteTexture) {
manager2_->PullTextureUpdates(g_sync_token);
// Should sync to new texture which is not defined.
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId));
SetupUpdateTexParamExpectations(kNewTextureId, texture->min_filter(),
texture->mag_filter(), texture->wrap_s(),
texture->wrap_t());
@@ -520,7 +518,7 @@ TEST_F(MailboxManagerSyncTest, SyncIncompleteTexture) {
// only a single texture also within a synchronized manager instance.
TEST_F(MailboxManagerSyncTest, SharedThroughMultipleMailboxes) {
const GLuint kNewTextureId = 1234;
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture = DefineTexture();
Mailbox name1 = Mailbox::Generate();
@@ -530,8 +528,8 @@ TEST_F(MailboxManagerSyncTest, SharedThroughMultipleMailboxes) {
// Share
manager_->PushTextureUpdates(g_sync_token);
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId));
manager2_->PullTextureUpdates(g_sync_token);
SetupUpdateTexParamExpectations(
kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
@@ -559,7 +557,7 @@ TEST_F(MailboxManagerSyncTest, SharedThroughMultipleMailboxes) {
// B: consume M should return new_texture
TEST_F(MailboxManagerSyncTest, ProduceBothWays) {
const GLuint kNewTextureId = 1234;
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture1 = DefineTexture();
Texture* texture2 = DefineTexture();
@@ -569,8 +567,8 @@ TEST_F(MailboxManagerSyncTest, ProduceBothWays) {
// Share
manager_->PushTextureUpdates(g_sync_token);
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId));
SetupUpdateTexParamExpectations(
kNewTextureId, GL_LINEAR, GL_LINEAR, GL_REPEAT, GL_REPEAT);
TextureBase* new_texture = manager2_->ConsumeTexture(name);
@@ -597,7 +595,7 @@ TEST_F(MailboxManagerSyncTest, ProduceBothWays) {
// B: push updates
TEST_F(MailboxManagerSyncTest, ProduceTextureNotDefined) {
const GLuint kNewTextureId = 1234;
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture = CreateTexture();
const GLsizei levels_needed = TextureManager::ComputeMipMapCount(
@@ -611,8 +609,8 @@ TEST_F(MailboxManagerSyncTest, ProduceTextureNotDefined) {
// Share
manager_->PushTextureUpdates(g_sync_token);
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId));
SetupUpdateTexParamExpectations(kNewTextureId, GL_LINEAR, GL_LINEAR,
GL_REPEAT, GL_REPEAT);
TextureBase* new_texture = manager2_->ConsumeTexture(name);
@@ -634,7 +632,7 @@ TEST_F(MailboxManagerSyncTest, ProduceTextureNotDefined) {
TEST_F(MailboxManagerSyncTest, ProduceTextureDefinedNotLevel0) {
const GLuint kNewTextureId = 1234;
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture = CreateTexture();
const GLsizei levels_needed = TextureManager::ComputeMipMapCount(
@@ -650,8 +648,8 @@ TEST_F(MailboxManagerSyncTest, ProduceTextureDefinedNotLevel0) {
// Share
manager_->PushTextureUpdates(g_sync_token);
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId));
SetupUpdateTexParamExpectations(kNewTextureId, GL_LINEAR, GL_LINEAR,
GL_REPEAT, GL_REPEAT);
TextureBase* new_texture = manager2_->ConsumeTexture(name);
@@ -673,7 +671,7 @@ TEST_F(MailboxManagerSyncTest, ProduceTextureDefinedNotLevel0) {
TEST_F(MailboxManagerSyncTest, ProduceTextureDefined0Size) {
const GLuint kNewTextureId = 1234;
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture = CreateTexture();
const GLsizei levels_needed = TextureManager::ComputeMipMapCount(
@@ -689,8 +687,8 @@ TEST_F(MailboxManagerSyncTest, ProduceTextureDefined0Size) {
// Share
manager_->PushTextureUpdates(g_sync_token);
- EXPECT_CALL(*gl_, GenTextures(1, _))
- .WillOnce(SetArgPointee<1>(kNewTextureId));
+ EXPECT_CALL(*gl_, GenTextures(1, testing::_))
+ .WillOnce(testing::SetArgPointee<1>(kNewTextureId));
SetupUpdateTexParamExpectations(kNewTextureId, GL_LINEAR, GL_LINEAR,
GL_REPEAT, GL_REPEAT);
TextureBase* new_texture = manager2_->ConsumeTexture(name);
@@ -711,7 +709,7 @@ TEST_F(MailboxManagerSyncTest, ProduceTextureDefined0Size) {
}
TEST_F(MailboxManagerSyncTest, ProduceTextureNotBound) {
- InSequence sequence;
+ testing::InSequence sequence;
Texture* texture = CreateTexture();
Mailbox name = Mailbox::Generate();
diff --git a/chromium/gpu/command_buffer/service/memory_tracking.h b/chromium/gpu/command_buffer/service/memory_tracking.h
index 05dcc9ec7b7..3ce58ed998b 100644
--- a/chromium/gpu/command_buffer/service/memory_tracking.h
+++ b/chromium/gpu/command_buffer/service/memory_tracking.h
@@ -13,6 +13,7 @@
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/trace_event/trace_event.h"
+#include "gpu/command_buffer/common/command_buffer_id.h"
namespace gpu {
@@ -20,6 +21,20 @@ namespace gpu {
// statistics to the global GpuMemoryManager.
class MemoryTracker {
public:
+ // Observe all changes in memory notified to this MemoryTracker.
+ class Observer {
+ public:
+ Observer() = default;
+ virtual ~Observer() = default;
+
+ virtual void OnMemoryAllocatedChange(CommandBufferId id,
+ uint64_t old_size,
+ uint64_t new_size) = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Observer);
+ };
+
virtual ~MemoryTracker() = default;
virtual void TrackMemoryAllocatedChange(uint64_t delta) = 0;
virtual uint64_t GetSize() const = 0;
diff --git a/chromium/gpu/ipc/common/android/mock_abstract_texture.cc b/chromium/gpu/command_buffer/service/mock_abstract_texture.cc
index f8cfe4c239b..58086e2555b 100644
--- a/chromium/gpu/ipc/common/android/mock_abstract_texture.cc
+++ b/chromium/gpu/command_buffer/service/mock_abstract_texture.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/ipc/common/android/mock_abstract_texture.h"
+#include "gpu/command_buffer/service/mock_abstract_texture.h"
namespace gpu {
diff --git a/chromium/gpu/ipc/common/android/mock_abstract_texture.h b/chromium/gpu/command_buffer/service/mock_abstract_texture.h
index 4419c7c9fb7..f4d903edce5 100644
--- a/chromium/gpu/ipc/common/android/mock_abstract_texture.h
+++ b/chromium/gpu/command_buffer/service/mock_abstract_texture.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef GPU_IPC_COMMON_ANDROID_MOCK_ABSTRACT_TEXTURE_H_
-#define GPU_IPC_COMMON_ANDROID_MOCK_ABSTRACT_TEXTURE_H_
+#ifndef GPU_COMMAND_BUFFER_SERVICE_MOCK_ABSTRACT_TEXTURE_H_
+#define GPU_COMMAND_BUFFER_SERVICE_MOCK_ABSTRACT_TEXTURE_H_
#include "base/memory/weak_ptr.h"
#include "gpu/command_buffer/service/abstract_texture.h"
@@ -42,4 +42,4 @@ class MockAbstractTexture
} // namespace gpu
-#endif // GPU_IPC_COMMON_ANDROID_MOCK_ABSTRACT_TEXTURE_H_
+#endif // GPU_COMMAND_BUFFER_SERVICE_MOCK_ABSTRACT_TEXTURE_H_
diff --git a/chromium/gpu/ipc/common/android/mock_texture_owner.cc b/chromium/gpu/command_buffer/service/mock_texture_owner.cc
index 428b8ef16a5..9b6bb6e4ae0 100644
--- a/chromium/gpu/ipc/common/android/mock_texture_owner.cc
+++ b/chromium/gpu/command_buffer/service/mock_texture_owner.cc
@@ -2,9 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "gpu/ipc/common/android/mock_texture_owner.h"
+#include "gpu/command_buffer/service/mock_texture_owner.h"
-#include "gpu/ipc/common/android/mock_abstract_texture.h"
+#include "gpu/command_buffer/service/mock_abstract_texture.h"
namespace gpu {
diff --git a/chromium/gpu/ipc/common/android/mock_texture_owner.h b/chromium/gpu/command_buffer/service/mock_texture_owner.h
index 595c21383fa..d5cad689f3a 100644
--- a/chromium/gpu/ipc/common/android/mock_texture_owner.h
+++ b/chromium/gpu/command_buffer/service/mock_texture_owner.h
@@ -2,13 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef GPU_IPC_COMMON_ANDROID_MOCK_TEXTURE_OWNER_H_
-#define GPU_IPC_COMMON_ANDROID_MOCK_TEXTURE_OWNER_H_
+#ifndef GPU_COMMAND_BUFFER_SERVICE_MOCK_TEXTURE_OWNER_H_
+#define GPU_COMMAND_BUFFER_SERVICE_MOCK_TEXTURE_OWNER_H_
#include <memory>
#include "base/android/scoped_hardware_buffer_fence_sync.h"
-#include "gpu/ipc/common/android/texture_owner.h"
+#include "gpu/command_buffer/service/texture_owner.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_bindings.h"
@@ -44,9 +44,15 @@ class MockTextureOwner : public TextureOwner {
return nullptr;
}
+ gfx::Rect GetCropRect() override {
+ ++get_crop_rect_count;
+ return gfx::Rect();
+ }
+
gl::GLContext* fake_context;
gl::GLSurface* fake_surface;
int get_a_hardware_buffer_count = 0;
+ int get_crop_rect_count = 0;
bool expect_update_tex_image;
protected:
@@ -55,4 +61,4 @@ class MockTextureOwner : public TextureOwner {
} // namespace gpu
-#endif // GPU_IPC_COMMON_ANDROID_MOCK_TEXTURE_OWNER_H_
+#endif // GPU_COMMAND_BUFFER_SERVICE_MOCK_TEXTURE_OWNER_H_
diff --git a/chromium/gpu/command_buffer/service/program_manager.cc b/chromium/gpu/command_buffer/service/program_manager.cc
index 5d98b20cf2a..28d0dad5f52 100644
--- a/chromium/gpu/command_buffer/service/program_manager.cc
+++ b/chromium/gpu/command_buffer/service/program_manager.cc
@@ -250,7 +250,7 @@ size_t LocationCountForAttribType(GLenum type) {
Program::UniformInfo::UniformInfo()
: size(0),
type(GL_NONE),
- accepts_api_type(0),
+ accepts_api_type(UniformApiType::kUniformNone),
fake_location_base(0),
is_array(false) {}
@@ -261,91 +261,99 @@ Program::UniformInfo::UniformInfo(const std::string& client_name,
const std::vector<GLint>& service_locations)
: size(service_locations.size()),
type(_type),
- accepts_api_type(0),
+ accepts_api_type(UniformApiType::kUniformNone),
fake_location_base(client_location_base),
is_array(_is_array),
name(client_name),
element_locations(service_locations) {
switch (type) {
case GL_INT:
- accepts_api_type = kUniform1i;
+ accepts_api_type = UniformApiType::kUniform1i;
break;
case GL_INT_VEC2:
- accepts_api_type = kUniform2i;
+ accepts_api_type = UniformApiType::kUniform2i;
break;
case GL_INT_VEC3:
- accepts_api_type = kUniform3i;
+ accepts_api_type = UniformApiType::kUniform3i;
break;
case GL_INT_VEC4:
- accepts_api_type = kUniform4i;
+ accepts_api_type = UniformApiType::kUniform4i;
break;
case GL_UNSIGNED_INT:
- accepts_api_type = kUniform1ui;
+ accepts_api_type = UniformApiType::kUniform1ui;
break;
case GL_UNSIGNED_INT_VEC2:
- accepts_api_type = kUniform2ui;
+ accepts_api_type = UniformApiType::kUniform2ui;
break;
case GL_UNSIGNED_INT_VEC3:
- accepts_api_type = kUniform3ui;
+ accepts_api_type = UniformApiType::kUniform3ui;
break;
case GL_UNSIGNED_INT_VEC4:
- accepts_api_type = kUniform4ui;
+ accepts_api_type = UniformApiType::kUniform4ui;
break;
case GL_BOOL:
- accepts_api_type = kUniform1i | kUniform1ui | kUniform1f;
+ accepts_api_type = UniformApiType::kUniform1i |
+ UniformApiType::kUniform1ui |
+ UniformApiType::kUniform1f;
break;
case GL_BOOL_VEC2:
- accepts_api_type = kUniform2i | kUniform2ui | kUniform2f;
+ accepts_api_type = UniformApiType::kUniform2i |
+ UniformApiType::kUniform2ui |
+ UniformApiType::kUniform2f;
break;
case GL_BOOL_VEC3:
- accepts_api_type = kUniform3i | kUniform3ui | kUniform3f;
+ accepts_api_type = UniformApiType::kUniform3i |
+ UniformApiType::kUniform3ui |
+ UniformApiType::kUniform3f;
break;
case GL_BOOL_VEC4:
- accepts_api_type = kUniform4i | kUniform4ui | kUniform4f;
+ accepts_api_type = UniformApiType::kUniform4i |
+ UniformApiType::kUniform4ui |
+ UniformApiType::kUniform4f;
break;
case GL_FLOAT:
- accepts_api_type = kUniform1f;
+ accepts_api_type = UniformApiType::kUniform1f;
break;
case GL_FLOAT_VEC2:
- accepts_api_type = kUniform2f;
+ accepts_api_type = UniformApiType::kUniform2f;
break;
case GL_FLOAT_VEC3:
- accepts_api_type = kUniform3f;
+ accepts_api_type = UniformApiType::kUniform3f;
break;
case GL_FLOAT_VEC4:
- accepts_api_type = kUniform4f;
+ accepts_api_type = UniformApiType::kUniform4f;
break;
case GL_FLOAT_MAT2:
- accepts_api_type = kUniformMatrix2f;
+ accepts_api_type = UniformApiType::kUniformMatrix2f;
break;
case GL_FLOAT_MAT3:
- accepts_api_type = kUniformMatrix3f;
+ accepts_api_type = UniformApiType::kUniformMatrix3f;
break;
case GL_FLOAT_MAT4:
- accepts_api_type = kUniformMatrix4f;
+ accepts_api_type = UniformApiType::kUniformMatrix4f;
break;
case GL_FLOAT_MAT2x3:
- accepts_api_type = kUniformMatrix2x3f;
+ accepts_api_type = UniformApiType::kUniformMatrix2x3f;
break;
case GL_FLOAT_MAT2x4:
- accepts_api_type = kUniformMatrix2x4f;
+ accepts_api_type = UniformApiType::kUniformMatrix2x4f;
break;
case GL_FLOAT_MAT3x2:
- accepts_api_type = kUniformMatrix3x2f;
+ accepts_api_type = UniformApiType::kUniformMatrix3x2f;
break;
case GL_FLOAT_MAT3x4:
- accepts_api_type = kUniformMatrix3x4f;
+ accepts_api_type = UniformApiType::kUniformMatrix3x4f;
break;
case GL_FLOAT_MAT4x2:
- accepts_api_type = kUniformMatrix4x2f;
+ accepts_api_type = UniformApiType::kUniformMatrix4x2f;
break;
case GL_FLOAT_MAT4x3:
- accepts_api_type = kUniformMatrix4x3f;
+ accepts_api_type = UniformApiType::kUniformMatrix4x3f;
break;
case GL_SAMPLER_2D:
@@ -365,7 +373,7 @@ Program::UniformInfo::UniformInfo(const std::string& client_name,
case GL_UNSIGNED_INT_SAMPLER_3D:
case GL_UNSIGNED_INT_SAMPLER_CUBE:
case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
- accepts_api_type = kUniform1i;
+ accepts_api_type = UniformApiType::kUniform1i;
break;
default:
@@ -1115,7 +1123,7 @@ void Program::UpdateFragmentInputs() {
std::string client_element_name =
parsed_client_name.base_name() + array_spec;
- auto it = bind_fragment_input_location_map_.find(client_element_name);
+ it = bind_fragment_input_location_map_.find(client_element_name);
if (it != bind_fragment_input_location_map_.end() && it->second >= 0) {
size_t client_location = static_cast<size_t>(it->second);
std::string service_element_name =
diff --git a/chromium/gpu/command_buffer/service/program_manager.h b/chromium/gpu/command_buffer/service/program_manager.h
index b4646ba080f..b9847dfa228 100644
--- a/chromium/gpu/command_buffer/service/program_manager.h
+++ b/chromium/gpu/command_buffer/service/program_manager.h
@@ -35,6 +35,39 @@ class ProgressReporter;
class Shader;
class ShaderManager;
+enum class UniformApiType : uint32_t {
+ kUniformNone = 0,
+ 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,
+ kUniform1ui = 1 << 11,
+ kUniform2ui = 1 << 12,
+ kUniform3ui = 1 << 13,
+ kUniform4ui = 1 << 14,
+ kUniformMatrix2x3f = 1 << 15,
+ kUniformMatrix2x4f = 1 << 16,
+ kUniformMatrix3x2f = 1 << 17,
+ kUniformMatrix3x4f = 1 << 18,
+ kUniformMatrix4x2f = 1 << 19,
+ kUniformMatrix4x3f = 1 << 20,
+};
+
+inline constexpr UniformApiType operator|(UniformApiType a, UniformApiType b) {
+ return static_cast<UniformApiType>(uint32_t(a) | uint32_t(b));
+}
+
+inline constexpr UniformApiType operator&(UniformApiType a, UniformApiType b) {
+ return static_cast<UniformApiType>(uint32_t(a) & uint32_t(b));
+}
+
// This is used to track which attributes a particular program needs
// so we can verify at glDrawXXX time that every attribute is either disabled
// or if enabled that it points to a valid source.
@@ -42,35 +75,8 @@ class GPU_GLES2_EXPORT Program : public base::RefCounted<Program> {
public:
static const int kMaxAttachedShaders = 2;
- enum VaryingsPackingOption {
- kCountOnlyStaticallyUsed,
- kCountAll
- };
+ enum VaryingsPackingOption { kCountOnlyStaticallyUsed, kCountAll };
- enum UniformApiType {
- kUniformNone = 0,
- 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,
- kUniform1ui = 1 << 11,
- kUniform2ui = 1 << 12,
- kUniform3ui = 1 << 13,
- kUniform4ui = 1 << 14,
- kUniformMatrix2x3f = 1 << 15,
- kUniformMatrix2x4f = 1 << 16,
- kUniformMatrix3x2f = 1 << 17,
- kUniformMatrix3x4f = 1 << 18,
- kUniformMatrix4x2f = 1 << 19,
- kUniformMatrix4x3f = 1 << 20,
- };
struct FragmentInputInfo {
FragmentInputInfo(GLenum _type, GLuint _location)
: type(_type), location(_location) {}
@@ -125,7 +131,7 @@ class GPU_GLES2_EXPORT Program : public base::RefCounted<Program> {
GLsizei size;
GLenum type;
- uint32_t accepts_api_type;
+ UniformApiType accepts_api_type;
GLint fake_location_base;
bool is_array;
std::string name;
diff --git a/chromium/gpu/command_buffer/service/raster_cmd_validation.h b/chromium/gpu/command_buffer/service/raster_cmd_validation.h
index 10e6552b386..f1eb739a3ce 100644
--- a/chromium/gpu/command_buffer/service/raster_cmd_validation.h
+++ b/chromium/gpu/command_buffer/service/raster_cmd_validation.h
@@ -7,57 +7,12 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_RASTER_CMD_VALIDATION_H_
#define GPU_COMMAND_BUFFER_SERVICE_RASTER_CMD_VALIDATION_H_
-#include <algorithm>
-#include <vector>
#include "gpu/command_buffer/common/raster_cmd_format.h"
+#include "gpu/command_buffer/service/value_validator.h"
namespace gpu {
namespace raster {
-// ValueValidator returns true if a value is valid.
-template <typename T>
-class ValueValidator {
- public:
- ValueValidator() = default;
-
- ValueValidator(const T* valid_values, int num_values) {
- AddValues(valid_values, num_values);
- }
-
- void AddValue(const T value) {
- if (!IsValid(value)) {
- valid_values_.push_back(value);
- }
- }
-
- void AddValues(const T* valid_values, int num_values) {
- for (int ii = 0; ii < num_values; ++ii) {
- AddValue(valid_values[ii]);
- }
- }
-
- void RemoveValues(const T* invalid_values, int num_values) {
- for (int ii = 0; ii < num_values; ++ii) {
- auto iter = std::find(valid_values_.begin(), valid_values_.end(),
- invalid_values[ii]);
- if (iter != valid_values_.end()) {
- valid_values_.erase(iter);
- DCHECK(!IsValid(invalid_values[ii]));
- }
- }
- }
-
- bool IsValid(const T value) const {
- return std::find(valid_values_.begin(), valid_values_.end(), value) !=
- valid_values_.end();
- }
-
- const std::vector<T>& GetValues() const { return valid_values_; }
-
- private:
- std::vector<T> valid_values_;
-};
-
struct Validators {
Validators();
diff --git a/chromium/gpu/command_buffer/service/raster_cmd_validation_implementation_autogen.h b/chromium/gpu/command_buffer/service/raster_cmd_validation_implementation_autogen.h
index d8209580179..030b62fa323 100644
--- a/chromium/gpu/command_buffer/service/raster_cmd_validation_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/service/raster_cmd_validation_implementation_autogen.h
@@ -81,7 +81,6 @@ static const viz::ResourceFormat valid_viz_resource_format_table[] = {
viz::ResourceFormat::RGBX_8888, viz::ResourceFormat::BGRX_8888,
viz::ResourceFormat::RGBX_1010102, viz::ResourceFormat::BGRX_1010102,
viz::ResourceFormat::YVU_420, viz::ResourceFormat::YUV_420_BIPLANAR,
- viz::ResourceFormat::UYVY_422,
};
Validators::Validators()
diff --git a/chromium/gpu/command_buffer/service/raster_decoder.cc b/chromium/gpu/command_buffer/service/raster_decoder.cc
index 775a118035f..6ad44fdc6c8 100644
--- a/chromium/gpu/command_buffer/service/raster_decoder.cc
+++ b/chromium/gpu/command_buffer/service/raster_decoder.cc
@@ -1941,9 +1941,8 @@ void RasterDecoderImpl::DoCopySubTextureINTERNALGL(
gr_context());
gles2::Texture::ImageState image_state;
- gl::GLImage* image =
- source_texture->GetLevelImage(source_target, 0, &image_state);
- if (image) {
+ if (gl::GLImage* image =
+ source_texture->GetLevelImage(source_target, 0, &image_state)) {
base::Optional<ScopedPixelUnpackState> pixel_unpack_state;
if (image->GetType() == gl::GLImage::Type::MEMORY &&
shared_context_state_->need_context_state_reset()) {
diff --git a/chromium/gpu/command_buffer/service/raster_decoder_unittest.cc b/chromium/gpu/command_buffer/service/raster_decoder_unittest.cc
index cf58f06b868..4d50d172abd 100644
--- a/chromium/gpu/command_buffer/service/raster_decoder_unittest.cc
+++ b/chromium/gpu/command_buffer/service/raster_decoder_unittest.cc
@@ -32,8 +32,6 @@ using ::testing::_;
using ::testing::Return;
using ::testing::SetArgPointee;
-using namespace gpu::raster::cmds;
-
namespace gpu {
namespace raster {
@@ -61,9 +59,9 @@ INSTANTIATE_TEST_SUITE_P(Service,
const GLsync kGlSync = reinterpret_cast<GLsync>(0xdeadbeef);
TEST_P(RasterDecoderTest, BeginEndQueryEXTCommandsCompletedCHROMIUM) {
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
begin_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, kNewClientId,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
@@ -86,7 +84,7 @@ TEST_P(RasterDecoderTest, BeginEndQueryEXTCommandsCompletedCHROMIUM) {
.RetiresOnSaturation();
#endif
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -127,9 +125,9 @@ TEST_P(RasterDecoderTest, BeginEndQueryEXTCommandsCompletedCHROMIUM) {
}
TEST_P(RasterDecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
// Test valid parameters work.
begin_cmd.Init(GL_COMMANDS_ISSUED_CHROMIUM, kNewClientId, shared_memory_id_,
@@ -145,7 +143,7 @@ TEST_P(RasterDecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
EXPECT_TRUE(query->IsActive());
// Test end succeeds.
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(GL_COMMANDS_ISSUED_CHROMIUM, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -154,9 +152,9 @@ TEST_P(RasterDecoderTest, BeginEndQueryEXTCommandsIssuedCHROMIUM) {
}
TEST_P(RasterDecoderTest, QueryCounterEXTCommandsIssuedTimestampCHROMIUM) {
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
- QueryCounterEXT query_counter_cmd;
+ cmds::QueryCounterEXT query_counter_cmd;
query_counter_cmd.Init(kNewClientId, GL_COMMANDS_ISSUED_TIMESTAMP_CHROMIUM,
shared_memory_id_, kSharedMemoryOffset, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(query_counter_cmd));
@@ -188,7 +186,7 @@ TEST_P(RasterDecoderTest, CopyTexSubImage2DSizeMismatch) {
{
// This will initialize the bottom right corner of destination.
SetScopedTextureBinderExpectations(GL_TEXTURE_2D);
- auto& cmd = *GetImmediateAs<CopySubTextureINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::CopySubTextureINTERNALImmediate>();
cmd.Init(1, 1, 0, 0, 1, 1, mailboxes);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailboxes)));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
@@ -198,7 +196,7 @@ TEST_P(RasterDecoderTest, CopyTexSubImage2DSizeMismatch) {
{
// Dest rect outside of dest bounds
- auto& cmd = *GetImmediateAs<CopySubTextureINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::CopySubTextureINTERNALImmediate>();
cmd.Init(2, 2, 0, 0, 1, 1, mailboxes);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailboxes)));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -208,7 +206,7 @@ TEST_P(RasterDecoderTest, CopyTexSubImage2DSizeMismatch) {
{
// Source rect outside of source bounds
- auto& cmd = *GetImmediateAs<CopySubTextureINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::CopySubTextureINTERNALImmediate>();
cmd.Init(0, 0, 0, 0, 2, 2, mailboxes);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailboxes)));
EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
@@ -235,7 +233,7 @@ TEST_P(RasterDecoderTest, CopyTexSubImage2DTwiceClearsUnclearedTexture) {
GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
GL_UNSIGNED_BYTE, 0, 0, 2, 2, 0);
SetScopedTextureBinderExpectations(GL_TEXTURE_2D);
- auto& cmd = *GetImmediateAs<CopySubTextureINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::CopySubTextureINTERNALImmediate>();
cmd.Init(0, 0, 0, 0, 2, 1, mailboxes);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailboxes)));
}
@@ -248,7 +246,7 @@ TEST_P(RasterDecoderTest, CopyTexSubImage2DTwiceClearsUnclearedTexture) {
GL_TEXTURE_2D, GL_TEXTURE_2D, 0, GL_RGBA,
GL_UNSIGNED_BYTE, 0, 1, 2, 1, 0);
SetScopedTextureBinderExpectations(GL_TEXTURE_2D);
- auto& cmd = *GetImmediateAs<CopySubTextureINTERNALImmediate>();
+ auto& cmd = *GetImmediateAs<cmds::CopySubTextureINTERNALImmediate>();
cmd.Init(1, 1, 0, 0, 1, 1, mailboxes);
EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(mailboxes)));
}
@@ -270,7 +268,7 @@ TEST_P(RasterDecoderManualInitTest, CopyTexSubImage2DValidateColorFormat) {
CreateFakeTexture(kNewServiceId, viz::ResourceFormat::RED_8,
/*width=*/2, /*height=*/2, /*cleared=*/true);
- auto& copy_cmd = *GetImmediateAs<CopySubTextureINTERNALImmediate>();
+ auto& copy_cmd = *GetImmediateAs<cmds::CopySubTextureINTERNALImmediate>();
GLbyte mailboxes[sizeof(gpu::Mailbox) * 2];
CopyMailboxes(mailboxes, client_texture_mailbox_, dest_texture_mailbox);
copy_cmd.Init(0, 0, 0, 0, 2, 1, mailboxes);
diff --git a/chromium/gpu/command_buffer/service/raster_decoder_unittest_base.h b/chromium/gpu/command_buffer/service/raster_decoder_unittest_base.h
index 9a8dee029be..65992bcfb24 100644
--- a/chromium/gpu/command_buffer/service/raster_decoder_unittest_base.h
+++ b/chromium/gpu/command_buffer/service/raster_decoder_unittest_base.h
@@ -235,7 +235,7 @@ class RasterDecoderTestBase : public ::testing::TestWithParam<bool>,
MemoryTypeTracker memory_tracker_;
std::vector<std::unique_ptr<SharedImageRepresentationFactoryRef>>
shared_images_;
- base::test::TaskEnvironment task_environment_;
+ base::test::SingleThreadTaskEnvironment task_environment_;
gles2::MockCopyTextureResourceManager* copy_texture_manager_; // not owned
GLuint next_fake_texture_client_id_ = 271828;
};
diff --git a/chromium/gpu/command_buffer/service/raster_decoder_unittest_context_lost.cc b/chromium/gpu/command_buffer/service/raster_decoder_unittest_context_lost.cc
index 054a41e19a9..2f778122fa8 100644
--- a/chromium/gpu/command_buffer/service/raster_decoder_unittest_context_lost.cc
+++ b/chromium/gpu/command_buffer/service/raster_decoder_unittest_context_lost.cc
@@ -18,8 +18,6 @@ using ::testing::SetArrayArgument;
namespace gpu {
namespace raster {
-using namespace cmds;
-
class RasterDecoderOOMTest : public RasterDecoderManualInitTest {
protected:
void Init(bool has_robustness) {
@@ -119,7 +117,7 @@ class RasterDecoderLostContextTest : public RasterDecoderManualInitTest {
.RetiresOnSaturation();
EXPECT_CALL(*gl_, GetGraphicsResetStatusARB())
.WillOnce(Return(reset_status));
- GetError cmd;
+ cmds::GetError cmd;
cmd.Init(shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
EXPECT_EQ(static_cast<GLuint>(GL_NO_ERROR), *GetSharedMemoryAs<GLenum*>());
@@ -130,7 +128,7 @@ class RasterDecoderLostContextTest : public RasterDecoderManualInitTest {
EXPECT_CALL(*gl_, GetError())
.WillOnce(Return(GL_CONTEXT_LOST_KHR))
.RetiresOnSaturation();
- GetError cmd;
+ cmds::GetError cmd;
cmd.Init(shared_memory_id_, shared_memory_offset_);
EXPECT_EQ(error::kLostContext, ExecuteCmd(cmd));
}
@@ -169,9 +167,9 @@ TEST_P(RasterDecoderLostContextTest, QueryDestroyAfterLostFromMakeCurrent) {
Init(/*has_robustness=*/false);
const GLsync kGlSync = reinterpret_cast<GLsync>(0xdeadbeef);
- GenHelper<GenQueriesEXTImmediate>(kNewClientId);
+ GenHelper<cmds::GenQueriesEXTImmediate>(kNewClientId);
- BeginQueryEXT begin_cmd;
+ cmds::BeginQueryEXT begin_cmd;
begin_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, kNewClientId,
shared_memory_id_, kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
@@ -193,7 +191,7 @@ TEST_P(RasterDecoderLostContextTest, QueryDestroyAfterLostFromMakeCurrent) {
.RetiresOnSaturation();
#endif
- EndQueryEXT end_cmd;
+ cmds::EndQueryEXT end_cmd;
end_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM, 1);
EXPECT_EQ(error::kNoError, ExecuteCmd(end_cmd));
EXPECT_EQ(GL_NO_ERROR, GetGLError());
diff --git a/chromium/gpu/command_buffer/service/sampler_manager.cc b/chromium/gpu/command_buffer/service/sampler_manager.cc
index 1f9ca3e01b5..b46ff35cf8e 100644
--- a/chromium/gpu/command_buffer/service/sampler_manager.cc
+++ b/chromium/gpu/command_buffer/service/sampler_manager.cc
@@ -27,8 +27,8 @@ SamplerState::SamplerState()
compare_func(GL_LEQUAL),
compare_mode(GL_NONE),
max_lod(1000.0f),
- min_lod(-1000.0f) {
-}
+ min_lod(-1000.0f),
+ max_anisotropy_ext(1.0f) {}
Sampler::Sampler(SamplerManager* manager, GLuint client_id, GLuint service_id)
: manager_(manager),
@@ -121,6 +121,9 @@ GLenum Sampler::SetParameterf(
case GL_TEXTURE_MAX_LOD:
sampler_state_.max_lod = param;
break;
+ case GL_TEXTURE_MAX_ANISOTROPY_EXT:
+ sampler_state_.max_anisotropy_ext = param;
+ break;
default:
return GL_INVALID_ENUM;
}
diff --git a/chromium/gpu/command_buffer/service/sampler_manager.h b/chromium/gpu/command_buffer/service/sampler_manager.h
index 0ea9ce42af6..2b46c8dd099 100644
--- a/chromium/gpu/command_buffer/service/sampler_manager.h
+++ b/chromium/gpu/command_buffer/service/sampler_manager.h
@@ -33,6 +33,7 @@ struct SamplerState {
GLenum compare_mode;
GLfloat max_lod;
GLfloat min_lod;
+ GLfloat max_anisotropy_ext;
};
class GPU_GLES2_EXPORT Sampler : public base::RefCounted<Sampler> {
diff --git a/chromium/gpu/command_buffer/service/scheduler.cc b/chromium/gpu/command_buffer/service/scheduler.cc
index 7c52490bff7..2f9b109a657 100644
--- a/chromium/gpu/command_buffer/service/scheduler.cc
+++ b/chromium/gpu/command_buffer/service/scheduler.cc
@@ -430,6 +430,10 @@ bool Scheduler::ShouldYield(SequenceId sequence_id) {
return running_sequence->ShouldYieldTo(next_sequence);
}
+base::WeakPtr<Scheduler> Scheduler::AsWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+}
+
void Scheduler::SyncTokenFenceReleased(const SyncToken& sync_token,
uint32_t order_num,
SequenceId release_sequence_id,
diff --git a/chromium/gpu/command_buffer/service/scheduler.h b/chromium/gpu/command_buffer/service/scheduler.h
index b9ed75c3f04..a2a6c5d2e3f 100644
--- a/chromium/gpu/command_buffer/service/scheduler.h
+++ b/chromium/gpu/command_buffer/service/scheduler.h
@@ -92,6 +92,8 @@ class GPU_EXPORT Scheduler {
// If the sequence should yield so that a higher priority sequence may run.
bool ShouldYield(SequenceId sequence_id);
+ base::WeakPtr<Scheduler> AsWeakPtr();
+
private:
struct SchedulingState {
diff --git a/chromium/gpu/command_buffer/service/service_utils.cc b/chromium/gpu/command_buffer/service/service_utils.cc
index a1ed819c1b9..b7e5ae0fefe 100644
--- a/chromium/gpu/command_buffer/service/service_utils.cc
+++ b/chromium/gpu/command_buffer/service/service_utils.cc
@@ -11,6 +11,7 @@
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/gpu_switches.h"
+#include "gpu/config/gpu_finch_features.h"
#include "ui/gl/gl_switches.h"
#include "ui/gl/gl_utils.h"
@@ -155,16 +156,20 @@ GpuPreferences ParseGpuPreferences(const base::CommandLine* command_line) {
gpu_preferences.enable_webgpu =
command_line->HasSwitch(switches::kEnableUnsafeWebGPU);
if (command_line->HasSwitch(switches::kUseVulkan)) {
+ DLOG_IF(ERROR, base::FeatureList::IsEnabled(features::kVulkan))
+ << "--enabled-features=Vulkan is overrided by --use-vulkan.";
auto value = command_line->GetSwitchValueASCII(switches::kUseVulkan);
if (value.empty() || value == switches::kVulkanImplementationNameNative) {
- gpu_preferences.use_vulkan = VulkanImplementationName::kNative;
+ gpu_preferences.use_vulkan = VulkanImplementationName::kForcedNative;
} else if (value == switches::kVulkanImplementationNameSwiftshader) {
gpu_preferences.use_vulkan = VulkanImplementationName::kSwiftshader;
} else {
gpu_preferences.use_vulkan = VulkanImplementationName::kNone;
}
} else {
- gpu_preferences.use_vulkan = VulkanImplementationName::kNone;
+ gpu_preferences.use_vulkan = base::FeatureList::IsEnabled(features::kVulkan)
+ ? gpu::VulkanImplementationName::kNative
+ : gpu::VulkanImplementationName::kNone;
}
gpu_preferences.disable_vulkan_surface =
command_line->HasSwitch(switches::kDisableVulkanSurface);
diff --git a/chromium/gpu/command_buffer/service/shared_context_state.cc b/chromium/gpu/command_buffer/service/shared_context_state.cc
index 27eb0385ea8..37897dcf917 100644
--- a/chromium/gpu/command_buffer/service/shared_context_state.cc
+++ b/chromium/gpu/command_buffer/service/shared_context_state.cc
@@ -149,13 +149,19 @@ void SharedContextState::InitializeGrContext(
// in GetCapabilities and ensuring these are also used by the
// PaintOpBufferSerializer.
GrContextOptions options;
+ if (GrContextIsMetal()) {
+ options.fRuntimeProgramCacheSize = 1024;
+ }
options.fDriverBugWorkarounds =
GrDriverBugWorkarounds(workarounds.ToIntSet());
options.fDisableCoverageCountingPaths = true;
options.fGlyphCacheTextureMaximumBytes = glyph_cache_max_texture_bytes_;
options.fPersistentCache = cache;
options.fAvoidStencilBuffers = workarounds.avoid_stencil_buffers;
- options.fDisallowGLSLBinaryCaching = workarounds.disable_program_disk_cache;
+ if (workarounds.disable_program_disk_cache) {
+ options.fShaderCacheStrategy =
+ GrContextOptions::ShaderCacheStrategy::kBackendSource;
+ }
options.fShaderErrorHandler = this;
// TODO(csmartdalton): enable internal multisampling after the related Skia
// rolls are in.
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc b/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
index 2035b4a24c7..44e0e1752dd 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.cc
@@ -54,7 +54,7 @@
namespace gpu {
namespace {
-sk_sp<SkPromiseImageTexture> CreatePromiseTexture(
+sk_sp<SkPromiseImageTexture> CreatePromiseTextureAHB(
viz::VulkanContextProvider* context_provider,
base::android::ScopedHardwareBufferHandle ahb_handle,
gfx::Size size,
@@ -98,8 +98,8 @@ sk_sp<SkPromiseImageTexture> CreatePromiseTexture(
return promise_texture;
}
-void DestroyVkPromiseTexture(viz::VulkanContextProvider* context_provider,
- sk_sp<SkPromiseImageTexture> promise_texture) {
+void DestroyVkPromiseTextureAHB(viz::VulkanContextProvider* context_provider,
+ sk_sp<SkPromiseImageTexture> promise_texture) {
DCHECK(promise_texture);
DCHECK(promise_texture->unique());
@@ -128,7 +128,8 @@ class SharedImageBackingAHB : public SharedImageBacking {
uint32_t usage,
base::android::ScopedHardwareBufferHandle handle,
size_t estimated_size,
- bool is_thread_safe);
+ bool is_thread_safe,
+ base::ScopedFD initial_upload_fd);
~SharedImageBackingAHB() override;
@@ -268,8 +269,8 @@ class SharedImageRepresentationSkiaVkAHB
}
~SharedImageRepresentationSkiaVkAHB() override {
- DestroyVkPromiseTexture(context_state_->vk_context_provider(),
- std::move(promise_texture_));
+ DestroyVkPromiseTextureAHB(context_state_->vk_context_provider(),
+ std::move(promise_texture_));
DCHECK_EQ(mode_, RepresentationAccessMode::kNone);
DCHECK(!surface_);
}
@@ -439,7 +440,8 @@ SharedImageBackingAHB::SharedImageBackingAHB(
uint32_t usage,
base::android::ScopedHardwareBufferHandle handle,
size_t estimated_size,
- bool is_thread_safe)
+ bool is_thread_safe,
+ base::ScopedFD initial_upload_fd)
: SharedImageBacking(mailbox,
format,
size,
@@ -447,7 +449,8 @@ SharedImageBackingAHB::SharedImageBackingAHB(
usage,
estimated_size,
is_thread_safe),
- hardware_buffer_handle_(std::move(handle)) {
+ hardware_buffer_handle_(std::move(handle)),
+ write_sync_fd_(std::move(initial_upload_fd)) {
DCHECK(hardware_buffer_handle_.is_valid());
}
@@ -530,7 +533,7 @@ SharedImageBackingAHB::ProduceSkia(
// Check whether we are in Vulkan mode OR GL mode and accordingly create
// Skia representation.
if (context_state->GrContextIsVulkan()) {
- sk_sp<SkPromiseImageTexture> promise_texture = CreatePromiseTexture(
+ sk_sp<SkPromiseImageTexture> promise_texture = CreatePromiseTextureAHB(
context_state->vk_context_provider(), GetAhbHandle(), size(), format());
if (!promise_texture)
return nullptr;
@@ -678,15 +681,13 @@ gles2::Texture* SharedImageBackingAHB::GenGLTexture() {
cleared_rect = gfx::Rect(size());
}
- GLenum gl_format = viz::GLDataFormat(format());
- GLenum gl_type = viz::GLDataType(format());
texture->SetLevelInfo(target, 0, egl_image->GetInternalFormat(),
- size().width(), size().height(), 1, 0, gl_format,
- gl_type, cleared_rect);
+ size().width(), size().height(), 1, 0,
+ egl_image->GetDataFormat(), egl_image->GetDataType(),
+ cleared_rect);
texture->SetLevelImage(target, 0, egl_image.get(), gles2::Texture::BOUND);
texture->SetImmutable(true, false);
api->glBindTextureFn(target, old_texture_binding);
- DCHECK_EQ(egl_image->GetInternalFormat(), gl_format);
return texture;
}
@@ -814,15 +815,16 @@ bool SharedImageBackingFactoryAHB::ValidateUsage(
return true;
}
-std::unique_ptr<SharedImageBacking>
-SharedImageBackingFactoryAHB::CreateSharedImage(
+std::unique_ptr<SharedImageBacking> SharedImageBackingFactoryAHB::MakeBacking(
const Mailbox& mailbox,
viz::ResourceFormat format,
const gfx::Size& size,
const gfx::ColorSpace& color_space,
uint32_t usage,
- bool is_thread_safe) {
+ bool is_thread_safe,
+ base::span<const uint8_t> pixel_data) {
DCHECK(base::AndroidHardwareBufferCompat::IsSupportAvailable());
+ DCHECK(format != viz::ETC1);
if (!ValidateUsage(usage, size, format)) {
return nullptr;
@@ -852,6 +854,10 @@ SharedImageBackingFactoryAHB::CreateSharedImage(
if (usage & SHARED_IMAGE_USAGE_SCANOUT)
hwb_desc.usage |= gl::SurfaceControl::RequiredUsage();
+ // Add WRITE usage as we'll it need to upload data
+ if (!pixel_data.empty())
+ hwb_desc.usage |= AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY;
+
// Number of images in an image array.
hwb_desc.layers = 1;
@@ -867,10 +873,44 @@ SharedImageBackingFactoryAHB::CreateSharedImage(
return nullptr;
}
+ auto handle = base::android::ScopedHardwareBufferHandle::Adopt(buffer);
+
+ base::ScopedFD initial_upload_fd;
+ // Upload data if necessary
+ if (!pixel_data.empty()) {
+ // Get description about buffer to obtain stride
+ AHardwareBuffer_Desc hwb_info;
+ base::AndroidHardwareBufferCompat::GetInstance().Describe(buffer,
+ &hwb_info);
+
+ void* address = nullptr;
+ if (int error = base::AndroidHardwareBufferCompat::GetInstance().Lock(
+ buffer, AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY, -1, 0, &address)) {
+ LOG(ERROR) << "Failed to lock AHardwareBuffer: " << error;
+ return nullptr;
+ }
+
+ int bytes_per_pixel = BitsPerPixel(format) / 8;
+
+ // NOTE: hwb_info.stride is in pixels
+ int dst_stride = bytes_per_pixel * hwb_info.stride;
+ int src_stride = bytes_per_pixel * size.width();
+
+ for (int y = 0; y < size.height(); y++) {
+ void* dst = reinterpret_cast<uint8_t*>(address) + dst_stride * y;
+ const void* src = pixel_data.data() + src_stride * y;
+
+ memcpy(dst, src, src_stride);
+ }
+
+ int32_t fence = -1;
+ base::AndroidHardwareBufferCompat::GetInstance().Unlock(buffer, &fence);
+ initial_upload_fd = base::ScopedFD(fence);
+ }
+
auto backing = std::make_unique<SharedImageBackingAHB>(
- mailbox, format, size, color_space, usage,
- base::android::ScopedHardwareBufferHandle::Adopt(buffer), estimated_size,
- is_thread_safe);
+ mailbox, format, size, color_space, usage, std::move(handle),
+ estimated_size, is_thread_safe, std::move(initial_upload_fd));
return backing;
}
@@ -881,9 +921,24 @@ SharedImageBackingFactoryAHB::CreateSharedImage(
const gfx::Size& size,
const gfx::ColorSpace& color_space,
uint32_t usage,
+ bool is_thread_safe) {
+ return MakeBacking(mailbox, format, size, color_space, usage, is_thread_safe,
+ base::span<uint8_t>());
+}
+
+std::unique_ptr<SharedImageBacking>
+SharedImageBackingFactoryAHB::CreateSharedImage(
+ const Mailbox& mailbox,
+ viz::ResourceFormat format,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage,
base::span<const uint8_t> pixel_data) {
- NOTIMPLEMENTED();
- return nullptr;
+ auto backing =
+ MakeBacking(mailbox, format, size, color_space, usage, false, pixel_data);
+ if (backing)
+ backing->OnWriteSucceeded();
+ return backing;
}
bool SharedImageBackingFactoryAHB::CanImportGpuMemoryBuffer(
@@ -925,7 +980,8 @@ SharedImageBackingFactoryAHB::CreateSharedImage(
return std::make_unique<SharedImageBackingAHB>(
mailbox, resource_format, size, color_space, usage,
- std::move(handle.android_hardware_buffer), estimated_size, false);
+ std::move(handle.android_hardware_buffer), estimated_size, false,
+ base::ScopedFD());
}
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h b/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h
index 2eba9570e3d..dea781e0371 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer.h
@@ -63,6 +63,15 @@ class GPU_GLES2_EXPORT SharedImageBackingFactoryAHB
const gfx::Size& size,
viz::ResourceFormat format) const;
+ std::unique_ptr<SharedImageBacking> MakeBacking(
+ const Mailbox& mailbox,
+ viz::ResourceFormat format,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage,
+ bool is_thread_safe,
+ base::span<const uint8_t> pixel_data);
+
struct FormatInfo {
FormatInfo();
~FormatInfo();
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc b/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc
index 32c2114bf8e..6647d31d95d 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc
@@ -73,6 +73,47 @@ class SharedImageBackingFactoryAHBTest : public testing::Test {
GrContext* gr_context() { return context_state_->gr_context(); }
+ std::vector<uint8_t> ReadPixels(Mailbox mailbox, gfx::Size size) {
+ auto skia_representation =
+ shared_image_representation_factory_->ProduceSkia(mailbox,
+ context_state_.get());
+ EXPECT_TRUE(skia_representation);
+ std::vector<GrBackendSemaphore> begin_semaphores;
+ std::vector<GrBackendSemaphore> end_semaphores;
+ base::Optional<SharedImageRepresentationSkia::ScopedReadAccess>
+ scoped_read_access;
+ scoped_read_access.emplace(skia_representation.get(), &begin_semaphores,
+ &end_semaphores);
+ auto* promise_texture = scoped_read_access->promise_image_texture();
+ EXPECT_EQ(0u, begin_semaphores.size());
+ EXPECT_EQ(0u, end_semaphores.size());
+ EXPECT_TRUE(promise_texture);
+ GrBackendTexture backend_texture = promise_texture->backendTexture();
+ EXPECT_TRUE(backend_texture.isValid());
+ EXPECT_EQ(size.width(), backend_texture.width());
+ EXPECT_EQ(size.height(), backend_texture.height());
+
+ // Create an Sk Image from GrBackendTexture.
+ auto sk_image = SkImage::MakeFromTexture(
+ gr_context(), promise_texture->backendTexture(),
+ kTopLeft_GrSurfaceOrigin, kRGBA_8888_SkColorType, kOpaque_SkAlphaType,
+ nullptr);
+
+ SkImageInfo dst_info =
+ SkImageInfo::Make(size.width(), size.height(), kRGBA_8888_SkColorType,
+ kOpaque_SkAlphaType, nullptr);
+
+ const int num_pixels = size.width() * size.height();
+ std::vector<uint8_t> dst_pixels(num_pixels * 4);
+
+ // Read back pixels from Sk Image.
+ EXPECT_TRUE(sk_image->readPixels(dst_info, dst_pixels.data(),
+ dst_info.minRowBytes(), 0, 0));
+ scoped_read_access.reset();
+
+ return dst_pixels;
+ }
+
protected:
scoped_refptr<gl::GLSurface> surface_;
scoped_refptr<gl::GLContext> context_;
@@ -197,41 +238,7 @@ TEST_F(SharedImageBackingFactoryAHBTest, GLSkiaGL) {
api->glClearFn(GL_COLOR_BUFFER_BIT);
gl_representation.reset();
- // Next create a SharedImageRepresentationSkia to read back the texture data.
- auto skia_representation = shared_image_representation_factory_->ProduceSkia(
- mailbox, context_state_.get());
- EXPECT_TRUE(skia_representation);
- std::vector<GrBackendSemaphore> begin_semaphores;
- std::vector<GrBackendSemaphore> end_semaphores;
- base::Optional<SharedImageRepresentationSkia::ScopedReadAccess>
- scoped_read_access;
- scoped_read_access.emplace(skia_representation.get(), &begin_semaphores,
- &end_semaphores);
- auto* promise_texture = scoped_read_access->promise_image_texture();
- EXPECT_EQ(0u, begin_semaphores.size());
- EXPECT_EQ(0u, end_semaphores.size());
- EXPECT_TRUE(promise_texture);
- GrBackendTexture backend_texture = promise_texture->backendTexture();
- EXPECT_TRUE(backend_texture.isValid());
- EXPECT_EQ(size.width(), backend_texture.width());
- EXPECT_EQ(size.height(), backend_texture.height());
-
- // Create an Sk Image from GrBackendTexture.
- auto sk_image = SkImage::MakeFromTexture(
- gr_context(), promise_texture->backendTexture(), kTopLeft_GrSurfaceOrigin,
- kRGBA_8888_SkColorType, kOpaque_SkAlphaType, nullptr);
-
- SkImageInfo dst_info =
- SkImageInfo::Make(size.width(), size.height(), kRGBA_8888_SkColorType,
- kOpaque_SkAlphaType, nullptr);
-
- const int num_pixels = size.width() * size.height();
- std::unique_ptr<uint8_t[]> dst_pixels(new uint8_t[num_pixels * 4]());
-
- // Read back pixels from Sk Image.
- EXPECT_TRUE(sk_image->readPixels(dst_info, dst_pixels.get(),
- dst_info.minRowBytes(), 0, 0));
- scoped_read_access.reset();
+ auto dst_pixels = ReadPixels(mailbox, size);
// Compare the pixel values.
EXPECT_EQ(dst_pixels[0], 0);
@@ -239,7 +246,40 @@ TEST_F(SharedImageBackingFactoryAHBTest, GLSkiaGL) {
EXPECT_EQ(dst_pixels[2], 0);
EXPECT_EQ(dst_pixels[3], 255);
- skia_representation.reset();
+ factory_ref.reset();
+ EXPECT_FALSE(mailbox_manager_.ConsumeTexture(mailbox));
+}
+
+TEST_F(SharedImageBackingFactoryAHBTest, InitialData) {
+ if (!base::AndroidHardwareBufferCompat::IsSupportAvailable())
+ return;
+
+ auto mailbox = Mailbox::GenerateForSharedImage();
+ auto format = viz::ResourceFormat::RGBA_8888;
+ gfx::Size size(4, 4);
+
+ std::vector<uint8_t> initial_data(size.width() * size.height() * 4);
+
+ for (size_t i = 0; i < initial_data.size(); i++) {
+ initial_data[i] = static_cast<uint8_t>(i);
+ }
+
+ auto color_space = gfx::ColorSpace::CreateSRGB();
+ uint32_t usage = SHARED_IMAGE_USAGE_GLES2 | SHARED_IMAGE_USAGE_DISPLAY;
+ auto backing = backing_factory_->CreateSharedImage(
+ mailbox, format, size, color_space, usage, initial_data);
+ EXPECT_TRUE(backing);
+
+ std::unique_ptr<SharedImageRepresentationFactoryRef> factory_ref =
+ shared_image_manager_.Register(std::move(backing),
+ memory_type_tracker_.get());
+
+ auto dst_pixels = ReadPixels(mailbox, size);
+
+ // Compare the pixel values.
+ DCHECK(dst_pixels.size() == initial_data.size());
+
+ EXPECT_EQ(dst_pixels, initial_data);
factory_ref.reset();
EXPECT_FALSE(mailbox_manager_.ConsumeTexture(mailbox));
}
@@ -250,7 +290,7 @@ TEST_F(SharedImageBackingFactoryAHBTest, InvalidFormat) {
return;
auto mailbox = Mailbox::GenerateForSharedImage();
- auto format = viz::ResourceFormat::UYVY_422;
+ auto format = viz::ResourceFormat::YUV_420_BIPLANAR;
gfx::Size size(256, 256);
auto color_space = gfx::ColorSpace::CreateSRGB();
uint32_t usage = SHARED_IMAGE_USAGE_GLES2;
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc b/chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc
index 9634c13428c..100c60b3fd7 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.cc
@@ -13,12 +13,19 @@
#include "gpu/command_buffer/service/shared_image_representation.h"
#include "gpu/command_buffer/service/texture_manager.h"
#include "ui/gfx/buffer_format_util.h"
+#include "ui/gl/buildflags.h"
#include "ui/gl/direct_composition_surface_win.h"
#include "ui/gl/gl_angle_util_win.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_image_d3d.h"
#include "ui/gl/trace_util.h"
+// Usage of BUILDFLAG(USE_DAWN) needs to be after the include for
+// ui/gl/buildflags.h
+#if BUILDFLAG(USE_DAWN)
+#include <dawn_native/D3D12Backend.h>
+#endif // BUILDFLAG(USE_DAWN)
+
namespace gpu {
namespace {
@@ -70,6 +77,38 @@ bool ClearBackBuffer(Microsoft::WRL::ComPtr<IDXGISwapChain1>& swap_chain,
return true;
}
+base::Optional<DXGI_FORMAT> VizFormatToDXGIFormat(
+ viz::ResourceFormat viz_resource_format) {
+ switch (viz_resource_format) {
+ case viz::RGBA_F16:
+ return DXGI_FORMAT_R16G16B16A16_FLOAT;
+ case viz::BGRA_8888:
+ return DXGI_FORMAT_B8G8R8A8_UNORM;
+ case viz::RGBA_8888:
+ return DXGI_FORMAT_R8G8B8A8_UNORM;
+ default:
+ NOTREACHED();
+ return {};
+ }
+}
+
+#if BUILDFLAG(USE_DAWN)
+base::Optional<DawnTextureFormat> VizResourceFormatToDawnTextureFormat(
+ viz::ResourceFormat viz_resource_format) {
+ switch (viz_resource_format) {
+ case viz::RGBA_F16:
+ return DAWN_TEXTURE_FORMAT_RGBA16_FLOAT;
+ case viz::BGRA_8888:
+ return DAWN_TEXTURE_FORMAT_BGRA8_UNORM;
+ case viz::RGBA_8888:
+ return DAWN_TEXTURE_FORMAT_RGBA8_UNORM;
+ default:
+ NOTREACHED();
+ return {};
+ }
+}
+#endif // BUILDFLAG(USE_DAWN)
+
} // anonymous namespace
// Representation of a SharedImageBackingD3D as a GL Texture.
@@ -113,6 +152,42 @@ class SharedImageRepresentationGLTexturePassthroughD3D
scoped_refptr<gles2::TexturePassthrough> texture_passthrough_;
};
+// Representation of a SharedImageBackingD3D as a Dawn Texture
+#if BUILDFLAG(USE_DAWN)
+class SharedImageRepresentationDawnD3D : public SharedImageRepresentationDawn {
+ public:
+ SharedImageRepresentationDawnD3D(SharedImageManager* manager,
+ SharedImageBacking* backing,
+ MemoryTypeTracker* tracker,
+ DawnDevice device)
+ : SharedImageRepresentationDawn(manager, backing, tracker),
+ device_(device),
+ dawn_procs_(dawn_native::GetProcs()) {
+ DCHECK(device_);
+
+ // Keep a reference to the device so that it stays valid (it might become
+ // lost in which case operations will be noops).
+ dawn_procs_.deviceReference(device_);
+ }
+
+ ~SharedImageRepresentationDawnD3D() override {
+ EndAccess();
+ dawn_procs_.deviceRelease(device_);
+ }
+
+ DawnTexture BeginAccess(DawnTextureUsage usage) override;
+ void EndAccess() override;
+
+ private:
+ DawnDevice device_;
+ DawnTexture texture_ = nullptr;
+
+ // TODO(cwallez@chromium.org): Load procs only once when the factory is
+ // created and pass a pointer to them around?
+ DawnProcTable dawn_procs_;
+};
+#endif // BUILDFLAG(USE_DAWN)
+
// Implementation of SharedImageBacking that holds buffer (front buffer/back
// buffer of swap chain) texture (as gles2::Texture/gles2::TexturePassthrough)
// and a reference to created swap chain.
@@ -128,7 +203,9 @@ class SharedImageBackingD3D : public SharedImageBacking {
gles2::Texture* texture,
scoped_refptr<gles2::TexturePassthrough> texture_passthrough,
scoped_refptr<gl::GLImageD3D> image,
- size_t buffer_index)
+ size_t buffer_index,
+ Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture,
+ base::win::ScopedHandle shared_handle)
: SharedImageBacking(mailbox,
format,
size,
@@ -141,8 +218,10 @@ class SharedImageBackingD3D : public SharedImageBacking {
texture_(texture),
texture_passthrough_(std::move(texture_passthrough)),
image_(std::move(image)),
- buffer_index_(buffer_index) {
- DCHECK(swap_chain_);
+ buffer_index_(buffer_index),
+ d3d11_texture_(std::move(d3d11_texture)),
+ shared_handle_(std::move(shared_handle)) {
+ DCHECK(d3d11_texture_);
DCHECK((texture_ && !texture_passthrough_) ||
(!texture_ && texture_passthrough_));
}
@@ -171,6 +250,18 @@ class SharedImageBackingD3D : public SharedImageBacking {
return true;
}
+ std::unique_ptr<SharedImageRepresentationDawn> ProduceDawn(
+ SharedImageManager* manager,
+ MemoryTypeTracker* tracker,
+ DawnDevice device) override {
+#if BUILDFLAG(USE_DAWN)
+ return std::make_unique<SharedImageRepresentationDawnD3D>(manager, this,
+ tracker, device);
+#else
+ return nullptr;
+#endif // BUILDFLAG(USE_DAWN)
+ }
+
void Destroy() override {
if (texture_) {
texture_->RemoveLightweightRef(have_context());
@@ -181,6 +272,8 @@ class SharedImageBackingD3D : public SharedImageBacking {
texture_passthrough_ = nullptr;
}
swap_chain_ = nullptr;
+ d3d11_texture_.Reset();
+ shared_handle_.Close();
}
void OnMemoryDump(const std::string& dump_name,
@@ -203,6 +296,8 @@ class SharedImageBackingD3D : public SharedImageBacking {
image_->OnMemoryDump(pmd, client_tracing_id, dump_name);
}
+ HANDLE GetSharedHandle() const { return shared_handle_.Get(); }
+
bool PresentSwapChain() override {
TRACE_EVENT0("gpu", "SharedImageBackingD3D::PresentSwapChain");
if (buffer_index_ != 0) {
@@ -266,13 +361,76 @@ class SharedImageBackingD3D : public SharedImageBacking {
scoped_refptr<gles2::TexturePassthrough> texture_passthrough_;
scoped_refptr<gl::GLImageD3D> image_;
const size_t buffer_index_;
+ Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture_;
+ base::win::ScopedHandle shared_handle_;
+
DISALLOW_COPY_AND_ASSIGN(SharedImageBackingD3D);
};
+#if BUILDFLAG(USE_DAWN)
+DawnTexture SharedImageRepresentationDawnD3D::BeginAccess(
+ DawnTextureUsage usage) {
+ SharedImageBackingD3D* d3d_image_backing =
+ static_cast<SharedImageBackingD3D*>(backing());
+
+ const HANDLE shared_handle = d3d_image_backing->GetSharedHandle();
+ const viz::ResourceFormat viz_resource_format = d3d_image_backing->format();
+ const base::Optional<DawnTextureFormat> dawn_texture_format =
+ VizResourceFormatToDawnTextureFormat(viz_resource_format);
+ if (!dawn_texture_format.has_value()) {
+ DLOG(ERROR) << "Unsupported viz format found: " << viz_resource_format;
+ return nullptr;
+ }
+
+ DawnTextureDescriptor desc;
+ desc.nextInChain = nullptr;
+ desc.format = dawn_texture_format.value();
+ desc.usage = usage;
+ desc.dimension = DAWN_TEXTURE_DIMENSION_2D;
+ desc.size = {size().width(), size().height(), 1};
+ desc.arrayLayerCount = 1;
+ desc.mipLevelCount = 1;
+ desc.sampleCount = 1;
+
+ texture_ =
+ dawn_native::d3d12::WrapSharedHandle(device_, &desc, shared_handle);
+ if (texture_) {
+ // Keep a reference to the texture so that it stays valid (its content
+ // might be destroyed).
+ dawn_procs_.textureReference(texture_);
+
+ // Assume that the user of this representation will write to the texture
+ // so set the cleared flag so that other representations don't overwrite
+ // the result.
+ // TODO(cwallez@chromium.org): This is incorrect and allows reading
+ // uninitialized data. When !IsCleared we should tell dawn_native to
+ // consider the texture lazy-cleared.
+ SetCleared();
+ }
+
+ return texture_;
+}
+
+void SharedImageRepresentationDawnD3D::EndAccess() {
+ if (!texture_) {
+ return;
+ }
+
+ // TODO(cwallez@chromium.org): query dawn_native to know if the texture was
+ // cleared and set IsCleared appropriately.
+
+ // All further operations on the textures are errors (they would be racy
+ // with other backings).
+ dawn_procs_.textureDestroy(texture_);
+
+ dawn_procs_.textureRelease(texture_);
+ texture_ = nullptr;
+}
+#endif // BUILDFLAG(USE_DAWN)
+
SharedImageBackingFactoryD3D::SharedImageBackingFactoryD3D(bool use_passthrough)
: use_passthrough_(use_passthrough),
d3d11_device_(gl::QueryD3D11DeviceObjectFromANGLE()) {
- DCHECK(d3d11_device_);
}
SharedImageBackingFactoryD3D::~SharedImageBackingFactoryD3D() = default;
@@ -304,8 +462,10 @@ std::unique_ptr<SharedImageBacking> SharedImageBackingFactoryD3D::MakeBacking(
const gfx::Size& size,
const gfx::ColorSpace& color_space,
uint32_t usage,
- const Microsoft::WRL::ComPtr<IDXGISwapChain1>& swap_chain,
- size_t buffer_index) {
+ Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain,
+ size_t buffer_index,
+ Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture,
+ base::win::ScopedHandle shared_handle) {
gl::GLApi* const api = gl::g_current_gl_context;
ScopedRestoreTexture2D scoped_restore(api);
@@ -318,21 +478,27 @@ std::unique_ptr<SharedImageBacking> SharedImageBackingFactoryD3D::MakeBacking(
api->glTexParameteriFn(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
api->glTexParameteriFn(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture;
- HRESULT hr =
- swap_chain->GetBuffer(buffer_index, IID_PPV_ARGS(&d3d11_texture));
- if (FAILED(hr)) {
- DLOG(ERROR) << "GetBuffer failed with error " << std::hex << hr;
- return nullptr;
+ if (swap_chain) {
+ DCHECK(!d3d11_texture);
+ DCHECK(!shared_handle.IsValid());
+ const HRESULT hr =
+ swap_chain->GetBuffer(buffer_index, IID_PPV_ARGS(&d3d11_texture));
+ if (FAILED(hr)) {
+ DLOG(ERROR) << "GetBuffer failed with error " << std::hex;
+ return nullptr;
+ }
+ } else {
+ DCHECK(d3d11_texture);
}
- DCHECK(d3d11_texture);
-
- gfx::BufferFormat buffer_format = format == viz::RGBA_F16
- ? gfx::BufferFormat::RGBA_F16
- : gfx::BufferFormat::BGRA_8888;
+ // The GL internal format can differ from the underlying swap chain format
+ // e.g. RGBA8 or RGB8 instead of BGRA8.
+ const GLenum internal_format = viz::GLInternalFormat(format);
+ const GLenum data_type = viz::GLDataType(format);
+ const GLenum data_format = viz::GLDataFormat(format);
auto image = base::MakeRefCounted<gl::GLImageD3D>(
- size, buffer_format, std::move(d3d11_texture), swap_chain);
+ size, internal_format, data_type, d3d11_texture, swap_chain);
+ DCHECK_EQ(image->GetDataFormat(), data_format);
if (!image->Initialize()) {
DLOG(ERROR) << "GLImageD3D::Initialize failed";
return nullptr;
@@ -354,13 +520,6 @@ std::unique_ptr<SharedImageBacking> SharedImageBackingFactoryD3D::MakeBacking(
&texture_memory_size);
texture_passthrough->SetEstimatedSize(texture_memory_size);
} else {
- // Image internal format could be different from |format| e.g. BGRA vs RGBA.
- GLuint internal_format = image->GetInternalFormat();
- GLenum gl_format =
- gles2::TextureManager::ExtractFormatFromStorageFormat(internal_format);
- GLenum gl_type =
- gles2::TextureManager::ExtractTypeFromStorageFormat(internal_format);
-
texture = new gles2::Texture(service_id);
texture->SetLightweightRef();
texture->SetTarget(target, 1);
@@ -370,7 +529,7 @@ std::unique_ptr<SharedImageBacking> SharedImageBackingFactoryD3D::MakeBacking(
texture->sampler_state_.wrap_t = GL_CLAMP_TO_EDGE;
texture->SetLevelInfo(target, 0 /* level */, internal_format, size.width(),
size.height(), 1 /* depth */, 0 /* border */,
- gl_format, gl_type, gfx::Rect(size));
+ data_format, data_type, gfx::Rect(size));
texture->SetLevelImage(target, 0 /* level */, image.get(),
gles2::Texture::BOUND);
texture->SetImmutable(true, false);
@@ -378,7 +537,8 @@ std::unique_ptr<SharedImageBacking> SharedImageBackingFactoryD3D::MakeBacking(
return std::make_unique<SharedImageBackingD3D>(
mailbox, format, size, color_space, usage, std::move(swap_chain), texture,
- std::move(texture_passthrough), std::move(image), buffer_index);
+ std::move(texture_passthrough), std::move(image), buffer_index,
+ std::move(d3d11_texture), std::move(shared_handle));
}
SharedImageBackingFactoryD3D::SwapChainBackings
@@ -389,10 +549,18 @@ SharedImageBackingFactoryD3D::CreateSwapChain(
const gfx::Size& size,
const gfx::ColorSpace& color_space,
uint32_t usage) {
+ if (!SharedImageBackingFactoryD3D::IsSwapChainSupported())
+ return {nullptr, nullptr};
+
+ DXGI_FORMAT swap_chain_format;
switch (format) {
case viz::RGBA_8888:
+ case viz::RGBX_8888:
case viz::BGRA_8888:
+ swap_chain_format = DXGI_FORMAT_B8G8R8A8_UNORM;
+ break;
case viz::RGBA_F16:
+ swap_chain_format = DXGI_FORMAT_R16G16B16A16_FLOAT;
break;
default:
DLOG(ERROR) << gfx::BufferFormatToString(viz::BufferFormat(format))
@@ -410,14 +578,10 @@ SharedImageBackingFactoryD3D::CreateSwapChain(
dxgi_adapter->GetParent(IID_PPV_ARGS(&dxgi_factory));
DCHECK(dxgi_factory);
- DXGI_FORMAT output_format = format == viz::RGBA_F16
- ? DXGI_FORMAT_R16G16B16A16_FLOAT
- : DXGI_FORMAT_B8G8R8A8_UNORM;
-
DXGI_SWAP_CHAIN_DESC1 desc = {};
desc.Width = size.width();
desc.Height = size.height();
- desc.Format = output_format;
+ desc.Format = swap_chain_format;
desc.Stereo = FALSE;
desc.SampleDesc.Count = 1;
desc.BufferCount = 2;
@@ -425,6 +589,8 @@ SharedImageBackingFactoryD3D::CreateSwapChain(
desc.Scaling = DXGI_SCALING_STRETCH;
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
desc.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING;
+ desc.AlphaMode = viz::HasAlpha(format) ? DXGI_ALPHA_MODE_PREMULTIPLIED
+ : DXGI_ALPHA_MODE_IGNORE;
Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain;
@@ -456,13 +622,15 @@ SharedImageBackingFactoryD3D::CreateSwapChain(
auto back_buffer_backing =
MakeBacking(back_buffer_mailbox, format, size, color_space, usage,
- swap_chain, 0 /* buffer_index */);
+ swap_chain, 0 /* buffer_index */, nullptr /* d3d11_texture */,
+ base::win::ScopedHandle());
if (!back_buffer_backing)
return {nullptr, nullptr};
auto front_buffer_backing =
MakeBacking(front_buffer_mailbox, format, size, color_space, usage,
- swap_chain, 1 /* buffer_index */);
+ swap_chain, 1 /* buffer_index */, nullptr /* d3d11_texture */,
+ base::win::ScopedHandle());
if (!front_buffer_backing)
return {nullptr, nullptr};
@@ -477,8 +645,65 @@ SharedImageBackingFactoryD3D::CreateSharedImage(
const gfx::ColorSpace& color_space,
uint32_t usage,
bool is_thread_safe) {
- NOTIMPLEMENTED();
- return nullptr;
+ DCHECK(!is_thread_safe);
+
+ // Without D3D11, we cannot do shared images. This will happen if we're
+ // running with Vulkan, D3D9, GL or with the non-passthrough command decoder
+ // in tests.
+ if (!d3d11_device_) {
+ return nullptr;
+ }
+
+ const base::Optional<DXGI_FORMAT> dxgi_format = VizFormatToDXGIFormat(format);
+ if (!dxgi_format.has_value()) {
+ DLOG(ERROR) << "Unsupported viz format found: " << format;
+ return nullptr;
+ }
+
+ D3D11_TEXTURE2D_DESC desc;
+ desc.Width = size.width();
+ desc.Height = size.height();
+ desc.MipLevels = 1;
+ desc.ArraySize = 1;
+ desc.Format = dxgi_format.value();
+ desc.SampleDesc.Count = 1;
+ desc.SampleDesc.Quality = 0;
+ desc.Usage = D3D11_USAGE_DEFAULT;
+ desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
+ desc.CPUAccessFlags = 0;
+ desc.MiscFlags =
+ D3D11_RESOURCE_MISC_SHARED_NTHANDLE | D3D11_RESOURCE_MISC_SHARED;
+ Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture;
+ HRESULT hr = d3d11_device_->CreateTexture2D(&desc, nullptr, &d3d11_texture);
+ if (FAILED(hr)) {
+ DLOG(ERROR) << "CreateTexture2D failed with error " << std::hex << hr;
+ return nullptr;
+ }
+
+ Microsoft::WRL::ComPtr<IDXGIResource1> dxgi_resource;
+ hr = d3d11_texture.As(&dxgi_resource);
+ if (FAILED(hr)) {
+ DLOG(ERROR) << "QueryInterface for IDXGIResource failed with error "
+ << std::hex << hr;
+ return nullptr;
+ }
+
+ HANDLE shared_handle;
+ hr = dxgi_resource->CreateSharedHandle(
+ nullptr, DXGI_SHARED_RESOURCE_READ | DXGI_SHARED_RESOURCE_WRITE, nullptr,
+ &shared_handle);
+ if (FAILED(hr)) {
+ DLOG(ERROR) << "Unable to create shared handle for DXGIResource "
+ << std::hex << hr;
+ return nullptr;
+ }
+
+ // Put the shared handle into an RAII object as quickly as possible to
+ // ensure we do not leak it.
+ base::win::ScopedHandle scoped_shared_handle(shared_handle);
+
+ return MakeBacking(mailbox, format, size, color_space, usage, nullptr, 0,
+ std::move(d3d11_texture), std::move(scoped_shared_handle));
}
std::unique_ptr<SharedImageBacking>
@@ -511,7 +736,6 @@ SharedImageBackingFactoryD3D::CreateSharedImage(
// this factory.
bool SharedImageBackingFactoryD3D::CanImportGpuMemoryBuffer(
gfx::GpuMemoryBufferType memory_buffer_type) {
- NOTIMPLEMENTED();
return false;
}
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.h b/chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.h
index a108e24659b..632b70a7328 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.h
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_d3d.h
@@ -88,8 +88,8 @@ class GPU_GLES2_EXPORT SharedImageBackingFactoryD3D
gfx::GpuMemoryBufferType memory_buffer_type) override;
private:
- // Wraps the swap chain buffer (front buffer/back buffer) into GLimage and
- // creates a GL texture and stores it as gles2::Texture or as
+ // Wraps the optional swap chain buffer (front buffer/back buffer) and texture
+ // into GLimage and creates a GL texture and stores it as gles2::Texture or as
// gles2::TexturePassthrough in the backing that is created.
std::unique_ptr<SharedImageBacking> MakeBacking(
const Mailbox& mailbox,
@@ -97,8 +97,10 @@ class GPU_GLES2_EXPORT SharedImageBackingFactoryD3D
const gfx::Size& size,
const gfx::ColorSpace& color_space,
uint32_t usage,
- const Microsoft::WRL::ComPtr<IDXGISwapChain1>& swap_chain,
- size_t buffer_index);
+ Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain,
+ size_t buffer_index,
+ const Microsoft::WRL::ComPtr<ID3D11Texture2D> d3d11_texture,
+ base::win::ScopedHandle shared_handle);
// Whether we're using the passthrough command decoder and should generate
// passthrough textures.
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc b/chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc
index 00788068d82..86a1c5869be 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture.cc
@@ -13,7 +13,6 @@
#include "base/trace_event/trace_event.h"
#include "components/viz/common/resources/resource_format_utils.h"
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
-#include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
#include "gpu/command_buffer/common/shared_image_trace_utils.h"
#include "gpu/command_buffer/common/shared_image_usage.h"
#include "gpu/command_buffer/service/gles2_cmd_decoder.h"
@@ -30,6 +29,7 @@
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/color_space.h"
#include "ui/gfx/geometry/size.h"
+#include "ui/gl/buffer_format_utils.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_fence.h"
#include "ui/gl/gl_gl_api_implementation.h"
@@ -763,7 +763,7 @@ SharedImageBackingFactoryGLTexture::SharedImageBackingFactoryGLTexture(
info.allow_scanout = true;
info.buffer_format = buffer_format;
DCHECK_EQ(info.gl_format,
- gpu::InternalFormatForGpuMemoryBufferFormat(buffer_format));
+ gl::BufferFormatToGLInternalFormat(buffer_format));
if (base::Contains(gpu_preferences.texture_target_exception_list,
gfx::BufferUsageAndFormat(gfx::BufferUsage::SCANOUT,
buffer_format)))
@@ -943,7 +943,8 @@ SharedImageBackingFactoryGLTexture::CreateSharedImage(
const gfx::ColorSpace& color_space,
uint32_t usage) {
if (!gpu_memory_buffer_formats_.Has(buffer_format)) {
- LOG(ERROR) << "CreateSharedImage: unsupported buffer format";
+ LOG(ERROR) << "CreateSharedImage: unsupported buffer format "
+ << gfx::BufferFormatToString(buffer_format);
return nullptr;
}
@@ -1009,10 +1010,8 @@ SharedImageBackingFactoryGLTexture::CreateSharedImage(
GLuint internal_format =
is_rgb_emulation ? GL_RGB : image->GetInternalFormat();
- GLenum gl_format =
- gles2::TextureManager::ExtractFormatFromStorageFormat(internal_format);
- GLenum gl_type =
- gles2::TextureManager::ExtractTypeFromStorageFormat(internal_format);
+ GLenum gl_format = is_rgb_emulation ? GL_RGB : image->GetDataFormat();
+ GLenum gl_type = image->GetDataType();
return MakeBacking(use_passthrough_, mailbox, target, service_id, image,
image_state, internal_format, gl_format, gl_type, nullptr,
@@ -1090,8 +1089,11 @@ SharedImageBackingFactoryGLTexture::MakeBacking(
if (passthrough) {
scoped_refptr<gles2::TexturePassthrough> passthrough_texture =
base::MakeRefCounted<gles2::TexturePassthrough>(service_id, target);
- if (image)
+ if (image) {
passthrough_texture->SetLevelImage(target, 0, image.get());
+ passthrough_texture->set_is_bind_pending(image_state ==
+ gles2::Texture::UNBOUND);
+ }
// Get the texture size from ANGLE and set it on the passthrough texture.
GLint texture_memory_size = 0;
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc b/chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc
index d67c23de400..7741f5627fb 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc
@@ -30,6 +30,7 @@
#include "third_party/skia/include/gpu/GrBackendSurface.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/color_space.h"
+#include "ui/gl/buffer_format_utils.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_context.h"
#include "ui/gl/gl_image_shared_memory.h"
@@ -461,7 +462,7 @@ TEST_P(SharedImageBackingFactoryGLTextureTest, InitialDataWrongSize) {
TEST_P(SharedImageBackingFactoryGLTextureTest, InvalidFormat) {
auto mailbox = Mailbox::GenerateForSharedImage();
- auto format = viz::ResourceFormat::UYVY_422;
+ auto format = viz::ResourceFormat::YUV_420_BIPLANAR;
gfx::Size size(256, 256);
auto color_space = gfx::ColorSpace::CreateSRGB();
uint32_t usage = SHARED_IMAGE_USAGE_GLES2;
@@ -561,7 +562,10 @@ class StubImage : public gl::GLImageStub {
gfx::Size GetSize() override { return size_; }
unsigned GetInternalFormat() override {
- return InternalFormatForGpuMemoryBufferFormat(format_);
+ return gl::BufferFormatToGLInternalFormat(format_);
+ }
+ unsigned GetDataType() override {
+ return gl::BufferFormatToGLDataType(format_);
}
BindOrCopy ShouldBindOrCopy() override { return BIND; }
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm b/chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
index 37763d445a7..2ca66f3146b 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface.mm
@@ -554,7 +554,7 @@ class SharedImageBackingIOSurface : public SharedImageBacking {
gles2::Texture::BOUND);
texture->SetImmutable(true, false);
- DCHECK_EQ(image->GetInternalFormat(), gl_info.format);
+ DCHECK_EQ(image->GetInternalFormat(), gl_info.internal_format);
api->glBindTextureFn(GL_TEXTURE_RECTANGLE, old_texture_binding);
return texture;
diff --git a/chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc b/chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc
index 0d4103ea296..0d03b524d98 100644
--- a/chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc
+++ b/chromium/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc
@@ -29,6 +29,7 @@
#include "ui/gl/init/gl_factory.h"
#if BUILDFLAG(USE_DAWN)
+#include <dawn/dawn_proc.h>
#include <dawn/dawncpp.h>
#include <dawn_native/DawnNative.h>
#endif // BUILDFLAG(USE_DAWN)
@@ -267,7 +268,7 @@ TEST_F(SharedImageBackingFactoryIOSurfaceTest, Dawn_SkiaGL) {
dawn::Device device = dawn::Device::Acquire(adapter_it->CreateDevice());
DawnProcTable procs = dawn_native::GetProcs();
- dawnSetProcs(&procs);
+ dawnProcSetProcs(&procs);
// Create a backing using mailbox.
auto mailbox = Mailbox::GenerateForSharedImage();
@@ -300,12 +301,9 @@ TEST_F(SharedImageBackingFactoryIOSurfaceTest, Dawn_SkiaGL) {
color_desc.storeOp = dawn::StoreOp::Store;
color_desc.clearColor = {0, 255, 0, 255};
- dawn::RenderPassColorAttachmentDescriptor* color_attachments_ptr =
- &color_desc;
-
dawn::RenderPassDescriptor renderPassDesc;
renderPassDesc.colorAttachmentCount = 1;
- renderPassDesc.colorAttachments = &color_attachments_ptr;
+ renderPassDesc.colorAttachments = &color_desc;
renderPassDesc.depthStencilAttachment = nullptr;
dawn::CommandEncoder encoder = device.CreateCommandEncoder();
@@ -358,7 +356,7 @@ TEST_F(SharedImageBackingFactoryIOSurfaceTest, Dawn_SkiaGL) {
// Shut down Dawn
device = dawn::Device();
- dawnSetProcs(nullptr);
+ dawnProcSetProcs(nullptr);
skia_representation.reset();
factory_ref.reset();
diff --git a/chromium/gpu/command_buffer/service/shared_image_factory.cc b/chromium/gpu/command_buffer/service/shared_image_factory.cc
index fcdc0b212ff..4e5ec471f5d 100644
--- a/chromium/gpu/command_buffer/service/shared_image_factory.cc
+++ b/chromium/gpu/command_buffer/service/shared_image_factory.cc
@@ -105,7 +105,10 @@ SharedImageFactory::SharedImageFactory(
workarounds, gpu_feature_info, use_gl);
#else
// Others
- DCHECK(!using_vulkan_);
+ if (using_vulkan_)
+ LOG(ERROR) << "ERROR: using_vulkan_ = true and interop_backing_factory_ is "
+ "not set";
+
#endif
if (enable_wrapped_sk_image && context_state) {
wrapped_sk_image_factory_ =
@@ -114,12 +117,10 @@ SharedImageFactory::SharedImageFactory(
#if defined(OS_WIN)
// For Windows
- if (SharedImageBackingFactoryD3D::IsSwapChainSupported()) {
- bool use_passthrough = gpu_preferences.use_passthrough_cmd_decoder &&
- gles2::PassthroughCommandDecoderSupported();
- d3d_backing_factory_ =
- std::make_unique<SharedImageBackingFactoryD3D>(use_passthrough);
- }
+ bool use_passthrough = gpu_preferences.use_passthrough_cmd_decoder &&
+ gles2::PassthroughCommandDecoderSupported();
+ interop_backing_factory_ =
+ std::make_unique<SharedImageBackingFactoryD3D>(use_passthrough);
#endif // OS_WIN
#if defined(OS_FUCHSIA)
@@ -243,10 +244,14 @@ bool SharedImageFactory::CreateSwapChain(const Mailbox& front_buffer_mailbox,
const gfx::Size& size,
const gfx::ColorSpace& color_space,
uint32_t usage) {
- if (!d3d_backing_factory_)
+ if (!SharedImageBackingFactoryD3D::IsSwapChainSupported())
return false;
+
+ SharedImageBackingFactoryD3D* d3d_backing_factory =
+ static_cast<SharedImageBackingFactoryD3D*>(
+ interop_backing_factory_.get());
bool allow_legacy_mailbox = true;
- auto backings = d3d_backing_factory_->CreateSwapChain(
+ auto backings = d3d_backing_factory->CreateSwapChain(
front_buffer_mailbox, back_buffer_mailbox, format, size, color_space,
usage);
return RegisterBacking(std::move(backings.front_buffer),
@@ -255,7 +260,7 @@ bool SharedImageFactory::CreateSwapChain(const Mailbox& front_buffer_mailbox,
}
bool SharedImageFactory::PresentSwapChain(const Mailbox& mailbox) {
- if (!d3d_backing_factory_)
+ if (!SharedImageBackingFactoryD3D::IsSwapChainSupported())
return false;
auto it = shared_images_.find(mailbox);
if (it == shared_images_.end()) {
diff --git a/chromium/gpu/command_buffer/service/shared_image_factory.h b/chromium/gpu/command_buffer/service/shared_image_factory.h
index c40e307f639..eea81d438bb 100644
--- a/chromium/gpu/command_buffer/service/shared_image_factory.h
+++ b/chromium/gpu/command_buffer/service/shared_image_factory.h
@@ -35,10 +35,6 @@ class SharedImageBackingFactoryGLTexture;
struct GpuFeatureInfo;
struct GpuPreferences;
-#if defined(OS_WIN)
-class SharedImageBackingFactoryD3D;
-#endif // OS_WIN
-
#if defined(OS_FUCHSIA)
class SysmemBufferCollection;
#endif // OS_FUCHSIA
@@ -135,17 +131,13 @@ class GPU_GLES2_EXPORT SharedImageFactory {
// eventually.
std::unique_ptr<SharedImageBackingFactoryGLTexture> gl_backing_factory_;
- // Used for creating shared image which can be shared between gl and vulakn.
+ // Used for creating shared image which can be shared between GL, Vulkan and
+ // D3D12.
std::unique_ptr<SharedImageBackingFactory> interop_backing_factory_;
// Non-null if compositing with SkiaRenderer.
std::unique_ptr<raster::WrappedSkImageFactory> wrapped_sk_image_factory_;
-#if defined(OS_WIN)
- // Used for creating DXGI Swap Chain.
- std::unique_ptr<SharedImageBackingFactoryD3D> d3d_backing_factory_;
-#endif // OS_WIN
-
#if defined(OS_FUCHSIA)
viz::VulkanContextProvider* vulkan_context_provider_;
base::flat_map<gfx::SysmemBufferCollectionId,
diff --git a/chromium/gpu/command_buffer/service/shared_image_representation.h b/chromium/gpu/command_buffer/service/shared_image_representation.h
index a0e1bfc4a25..ab27e2335f5 100644
--- a/chromium/gpu/command_buffer/service/shared_image_representation.h
+++ b/chromium/gpu/command_buffer/service/shared_image_representation.h
@@ -6,6 +6,7 @@
#define GPU_COMMAND_BUFFER_SERVICE_SHARED_IMAGE_REPRESENTATION_H_
#include <dawn/dawn.h>
+#include <dawn/dawn_proc_table.h>
#include "base/callback_helpers.h"
#include "build/build_config.h"
diff --git a/chromium/gpu/command_buffer/service/shared_image_video.cc b/chromium/gpu/command_buffer/service/shared_image_video.cc
index f2c9af36ca8..c6a25df8246 100644
--- a/chromium/gpu/command_buffer/service/shared_image_video.cc
+++ b/chromium/gpu/command_buffer/service/shared_image_video.cc
@@ -20,7 +20,7 @@
#include "gpu/command_buffer/service/shared_image_representation_skia_gl.h"
#include "gpu/command_buffer/service/skia_utils.h"
#include "gpu/command_buffer/service/texture_manager.h"
-#include "gpu/ipc/common/android/texture_owner.h"
+#include "gpu/command_buffer/service/texture_owner.h"
#include "gpu/vulkan/vulkan_device_queue.h"
#include "gpu/vulkan/vulkan_fence_helper.h"
#include "gpu/vulkan/vulkan_function_pointers.h"
@@ -33,7 +33,7 @@
namespace gpu {
namespace {
-sk_sp<SkPromiseImageTexture> CreatePromiseTexture(
+sk_sp<SkPromiseImageTexture> CreatePromiseTextureVideo(
viz::VulkanContextProvider* context_provider,
base::android::ScopedHardwareBufferHandle ahb_handle,
gfx::Size size,
@@ -93,8 +93,9 @@ sk_sp<SkPromiseImageTexture> CreatePromiseTexture(
return promise_texture;
}
-void DestroyVkPromiseTexture(viz::VulkanContextProvider* context_provider,
- sk_sp<SkPromiseImageTexture> promise_texture) {
+void DestroyVkPromiseTextureVideo(
+ viz::VulkanContextProvider* context_provider,
+ sk_sp<SkPromiseImageTexture> promise_texture) {
DCHECK(promise_texture);
DCHECK(promise_texture->unique());
@@ -179,20 +180,22 @@ void SharedImageVideo::OnContextLost() {
context_state_ = nullptr;
}
-base::Optional<VulkanYCbCrInfo> SharedImageVideo::GetYcbcrInfo() {
+base::Optional<VulkanYCbCrInfo> SharedImageVideo::GetYcbcrInfo(
+ StreamTextureSharedImageInterface* stream_texture_sii,
+ scoped_refptr<SharedContextState> context_state) {
// For non-vulkan context, return null.
- if (!context_state_->GrContextIsVulkan())
+ if (!context_state->GrContextIsVulkan())
return base::nullopt;
// GetAHardwareBuffer() renders the latest image and gets AHardwareBuffer
// from it.
- auto scoped_hardware_buffer = stream_texture_sii_->GetAHardwareBuffer();
+ auto scoped_hardware_buffer = stream_texture_sii->GetAHardwareBuffer();
if (!scoped_hardware_buffer) {
return base::nullopt;
}
DCHECK(scoped_hardware_buffer->buffer());
- auto* context_provider = context_state_->vk_context_provider();
+ auto* context_provider = context_state->vk_context_provider();
VulkanImplementation* vk_implementation =
context_provider->GetVulkanImplementation();
VkDevice vk_device = context_provider->GetDeviceQueue()->GetVulkanDevice();
@@ -295,8 +298,8 @@ class SharedImageRepresentationVideoSkiaVk
// |promise_texture_| could be null if we never being read.
if (!promise_texture_)
return;
- DestroyVkPromiseTexture(context_state_->vk_context_provider(),
- std::move(promise_texture_));
+ DestroyVkPromiseTextureVideo(context_state_->vk_context_provider(),
+ std::move(promise_texture_));
}
sk_sp<SkSurface> BeginWriteAccess(
@@ -326,8 +329,8 @@ class SharedImageRepresentationVideoSkiaVk
LOG(ERROR) << "Failed to get the hardware buffer.";
return nullptr;
}
+ DCHECK(scoped_hardware_buffer_->buffer());
}
- DCHECK(scoped_hardware_buffer_->buffer());
// Wait on the sync fd attached to the buffer to make sure buffer is
// ready before the read. This is done by inserting the sync fd semaphore
@@ -339,7 +342,7 @@ class SharedImageRepresentationVideoSkiaVk
if (!promise_texture_) {
// Create the promise texture.
- promise_texture_ = CreatePromiseTexture(
+ promise_texture_ = CreatePromiseTextureVideo(
context_state_->vk_context_provider(),
scoped_hardware_buffer_->TakeBuffer(), size(), format());
}
diff --git a/chromium/gpu/command_buffer/service/shared_image_video.h b/chromium/gpu/command_buffer/service/shared_image_video.h
index da3079dae9d..58800e20eb5 100644
--- a/chromium/gpu/command_buffer/service/shared_image_video.h
+++ b/chromium/gpu/command_buffer/service/shared_image_video.h
@@ -54,7 +54,9 @@ class GPU_GLES2_EXPORT SharedImageVideo
// Returns ycbcr information. This is only valid in vulkan context and
// nullopt for other context.
- base::Optional<VulkanYCbCrInfo> GetYcbcrInfo();
+ static base::Optional<VulkanYCbCrInfo> GetYcbcrInfo(
+ StreamTextureSharedImageInterface* stream_texture_sii,
+ scoped_refptr<SharedContextState> context_state);
protected:
std::unique_ptr<SharedImageRepresentationGLTexture> ProduceGLTexture(
diff --git a/chromium/gpu/command_buffer/service/skia_utils.cc b/chromium/gpu/command_buffer/service/skia_utils.cc
index a2b41ae7209..b4f9d29a89d 100644
--- a/chromium/gpu/command_buffer/service/skia_utils.cc
+++ b/chromium/gpu/command_buffer/service/skia_utils.cc
@@ -19,6 +19,7 @@
#if BUILDFLAG(ENABLE_VULKAN)
#include "gpu/vulkan/vulkan_device_queue.h"
#include "gpu/vulkan/vulkan_fence_helper.h"
+#include "gpu/vulkan/vulkan_function_pointers.h"
#endif
namespace gpu {
@@ -131,4 +132,45 @@ void DeleteGrBackendTexture(SharedContextState* context_state,
#endif
}
+#if BUILDFLAG(ENABLE_VULKAN)
+
+GrVkYcbcrConversionInfo CreateGrVkYcbcrConversionInfo(
+ VkPhysicalDevice physical_device,
+ VkImageTiling tiling,
+ const base::Optional<VulkanYCbCrInfo>& ycbcr_info) {
+ if (!ycbcr_info)
+ return GrVkYcbcrConversionInfo();
+
+ VkFormat vk_format = static_cast<VkFormat>(ycbcr_info->image_format);
+ VkFormatFeatureFlags format_features =
+ static_cast<VkFormatFeatureFlags>(ycbcr_info->format_features);
+
+ // |format_features| is expected to be set for external images. For regular
+ // (non-external) images it may be set to 0. In that case we need to get the
+ // value from Vulkan.
+ if (format_features == 0) {
+ DCHECK_NE(vk_format, 0);
+ VkFormatProperties format_props = {};
+
+ // vkGetPhysicalDeviceFormatProperties() is safe to call on any thread.
+ vkGetPhysicalDeviceFormatProperties(physical_device, vk_format,
+ &format_props);
+ format_features = (tiling == VK_IMAGE_TILING_LINEAR)
+ ? format_props.linearTilingFeatures
+ : format_props.optimalTilingFeatures;
+ }
+
+ return GrVkYcbcrConversionInfo(
+ vk_format, ycbcr_info->external_format,
+ static_cast<VkSamplerYcbcrModelConversion>(
+ ycbcr_info->suggested_ycbcr_model),
+ static_cast<VkSamplerYcbcrRange>(ycbcr_info->suggested_ycbcr_range),
+ static_cast<VkChromaLocation>(ycbcr_info->suggested_xchroma_offset),
+ static_cast<VkChromaLocation>(ycbcr_info->suggested_ychroma_offset),
+ static_cast<VkFilter>(VK_FILTER_LINEAR),
+ /*forceExplicitReconstruction=*/false, format_features);
+}
+
+#endif // BUILDFLAG(ENABLE_VULKAN)
+
} // namespace gpu
diff --git a/chromium/gpu/command_buffer/service/skia_utils.h b/chromium/gpu/command_buffer/service/skia_utils.h
index 9fe069cdbc7..7968e96cbb5 100644
--- a/chromium/gpu/command_buffer/service/skia_utils.h
+++ b/chromium/gpu/command_buffer/service/skia_utils.h
@@ -6,10 +6,14 @@
#define GPU_COMMAND_BUFFER_SERVICE_SKIA_UTILS_H_
#include "base/callback_forward.h"
+#include "base/optional.h"
#include "components/viz/common/resources/resource_format.h"
#include "gpu/gpu_gles2_export.h"
+#include "gpu/ipc/common/vulkan_ycbcr_info.h"
+#include "gpu/vulkan/buildflags.h"
#include "third_party/skia/include/core/SkSurface.h"
#include "third_party/skia/include/gpu/GrTypes.h"
+#include "third_party/skia/include/gpu/vk/GrVkTypes.h"
// Forwardly declare a few GL types to avoid including GL header files.
typedef int GLint;
@@ -62,6 +66,14 @@ GPU_GLES2_EXPORT void AddVulkanCleanupTaskForSkiaFlush(
GPU_GLES2_EXPORT void DeleteGrBackendTexture(
SharedContextState* context_state,
GrBackendTexture* backend_textures);
+
+#if BUILDFLAG(ENABLE_VULKAN)
+GPU_GLES2_EXPORT GrVkYcbcrConversionInfo CreateGrVkYcbcrConversionInfo(
+ VkPhysicalDevice physical_device,
+ VkImageTiling tiling,
+ const base::Optional<VulkanYCbCrInfo>& ycbcr_info);
+#endif // BUILDFLAG(ENABLE_VULKAN)
+
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_SERVICE_SKIA_UTILS_H_
diff --git a/chromium/gpu/ipc/common/android/surface_texture_gl_owner.cc b/chromium/gpu/command_buffer/service/surface_texture_gl_owner.cc
index 5d9e1548dce..d4c85e8bc89 100644
--- a/chromium/gpu/ipc/common/android/surface_texture_gl_owner.cc
+++ b/chromium/gpu/command_buffer/service/surface_texture_gl_owner.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/ipc/common/android/surface_texture_gl_owner.h"
+#include "gpu/command_buffer/service/surface_texture_gl_owner.h"
#include <memory>
@@ -101,4 +101,9 @@ SurfaceTextureGLOwner::GetAHardwareBuffer() {
return nullptr;
}
+gfx::Rect SurfaceTextureGLOwner::GetCropRect() {
+ NOTREACHED() << "Don't use GetCropRect with SurfaceTextureGLOwner";
+ return gfx::Rect();
+}
+
} // namespace gpu
diff --git a/chromium/gpu/ipc/common/android/surface_texture_gl_owner.h b/chromium/gpu/command_buffer/service/surface_texture_gl_owner.h
index 1b5b5fb2332..11fcf22f37a 100644
--- a/chromium/gpu/ipc/common/android/surface_texture_gl_owner.h
+++ b/chromium/gpu/command_buffer/service/surface_texture_gl_owner.h
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef GPU_IPC_COMMON_ANDROID_SURFACE_TEXTURE_GL_OWNER_H_
-#define GPU_IPC_COMMON_ANDROID_SURFACE_TEXTURE_GL_OWNER_H_
+#ifndef GPU_COMMAND_BUFFER_SERVICE_SURFACE_TEXTURE_GL_OWNER_H_
+#define GPU_COMMAND_BUFFER_SERVICE_SURFACE_TEXTURE_GL_OWNER_H_
#include "base/threading/thread_checker.h"
+#include "gpu/command_buffer/service/texture_owner.h"
#include "gpu/gpu_export.h"
-#include "gpu/ipc/common/android/texture_owner.h"
#include "ui/gl/android/surface_texture.h"
namespace base {
@@ -37,6 +37,7 @@ class GPU_EXPORT SurfaceTextureGLOwner : public TextureOwner {
void ReleaseBackBuffers() override;
std::unique_ptr<base::android::ScopedHardwareBufferFenceSync>
GetAHardwareBuffer() override;
+ gfx::Rect GetCropRect() override;
protected:
void OnTextureDestroyed(gles2::AbstractTexture*) override;
@@ -62,4 +63,4 @@ class GPU_EXPORT SurfaceTextureGLOwner : public TextureOwner {
} // namespace gpu
-#endif // GPU_IPC_COMMON_ANDROID_SURFACE_TEXTURE_GL_OWNER_H_
+#endif // GPU_COMMAND_BUFFER_SERVICE_SURFACE_TEXTURE_GL_OWNER_H_
diff --git a/chromium/gpu/ipc/common/android/surface_texture_gl_owner_unittest.cc b/chromium/gpu/command_buffer/service/surface_texture_gl_owner_unittest.cc
index ca0b8f4ea61..01d3ece4f48 100644
--- a/chromium/gpu/ipc/common/android/surface_texture_gl_owner_unittest.cc
+++ b/chromium/gpu/command_buffer/service/surface_texture_gl_owner_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/ipc/common/android/surface_texture_gl_owner.h"
+#include "gpu/command_buffer/service/surface_texture_gl_owner.h"
#include <stdint.h>
@@ -11,7 +11,7 @@
#include "base/bind.h"
#include "base/logging.h"
#include "base/test/task_environment.h"
-#include "gpu/ipc/common/android/mock_abstract_texture.h"
+#include "gpu/command_buffer/service/mock_abstract_texture.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gl/gl_bindings.h"
diff --git a/chromium/gpu/command_buffer/service/texture_definition.cc b/chromium/gpu/command_buffer/service/texture_definition.cc
index 0ecb37588e7..e0b48d0ccc8 100644
--- a/chromium/gpu/command_buffer/service/texture_definition.cc
+++ b/chromium/gpu/command_buffer/service/texture_definition.cc
@@ -34,6 +34,7 @@ class GLImageSync : public gl::GLImage {
// Implement GLImage.
gfx::Size GetSize() override;
unsigned GetInternalFormat() override;
+ unsigned GetDataType() override;
BindOrCopy ShouldBindOrCopy() override;
bool BindTexImage(unsigned target) override;
void ReleaseTexImage(unsigned target) override;
@@ -84,6 +85,10 @@ unsigned GLImageSync::GetInternalFormat() {
return GL_RGBA;
}
+unsigned GLImageSync::GetDataType() {
+ return GL_UNSIGNED_BYTE;
+}
+
GLImageSync::BindOrCopy GLImageSync::ShouldBindOrCopy() {
return BIND;
}
diff --git a/chromium/gpu/command_buffer/service/texture_manager.cc b/chromium/gpu/command_buffer/service/texture_manager.cc
index fd43b324147..67dee8e9ed4 100644
--- a/chromium/gpu/command_buffer/service/texture_manager.cc
+++ b/chromium/gpu/command_buffer/service/texture_manager.cc
@@ -2589,11 +2589,9 @@ GLsizei TextureManager::ComputeMipMapCount(GLenum target,
case GL_TEXTURE_RECTANGLE_ARB:
return 1;
case GL_TEXTURE_3D:
- return 1 +
- base::bits::Log2Floor(std::max(std::max(width, height), depth));
+ return 1 + base::bits::Log2Floor(std::max({width, height, depth}));
default:
- return 1 +
- base::bits::Log2Floor(std::max(width, height));
+ return 1 + base::bits::Log2Floor(std::max(width, height));
}
}
@@ -2759,9 +2757,9 @@ bool TextureManager::ValidateTexImage(ContextState* state,
const DoTexImageArguments& args,
TextureRef** texture_ref) {
const Validators* validators = feature_info_->validators();
- if (((args.command_type == DoTexImageArguments::kTexImage2D) &&
+ if (((args.command_type == DoTexImageArguments::CommandType::kTexImage2D) &&
!validators->texture_target.IsValid(args.target)) ||
- ((args.command_type == DoTexImageArguments::kTexImage3D) &&
+ ((args.command_type == DoTexImageArguments::CommandType::kTexImage3D) &&
!validators->texture_3_d_target.IsValid(args.target))) {
ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(
error_state, function_name, args.target, "target");
@@ -2956,7 +2954,7 @@ void TextureManager::ValidateAndDoTexImage(
if (texture_state->unpack_overlapping_rows_separately_unpack_buffer &&
buffer) {
ContextState::Dimension dimension =
- (args.command_type == DoTexImageArguments::kTexImage3D)
+ (args.command_type == DoTexImageArguments::CommandType::kTexImage3D)
? ContextState::k3D
: ContextState::k2D;
const PixelStoreParams unpack_params(state->GetUnpackParams(dimension));
@@ -2970,11 +2968,22 @@ void TextureManager::ValidateAndDoTexImage(
args);
DoTexSubImageArguments sub_args = {
- args.target, args.level, 0, 0, 0, args.width, args.height, args.depth,
- args.format, args.type, args.pixels, args.pixels_size, args.padding,
- args.command_type == DoTexImageArguments::kTexImage3D
- ? DoTexSubImageArguments::kTexSubImage3D
- : DoTexSubImageArguments::kTexSubImage2D};
+ args.target,
+ args.level,
+ 0,
+ 0,
+ 0,
+ args.width,
+ args.height,
+ args.depth,
+ args.format,
+ args.type,
+ args.pixels,
+ args.pixels_size,
+ args.padding,
+ args.command_type == DoTexImageArguments::CommandType::kTexImage3D
+ ? DoTexSubImageArguments::CommandType::kTexSubImage3D
+ : DoTexSubImageArguments::CommandType::kTexSubImage2D};
DoTexSubImageRowByRowWorkaround(texture_state, state, sub_args,
unpack_params);
@@ -2983,7 +2992,7 @@ void TextureManager::ValidateAndDoTexImage(
}
}
- if (args.command_type == DoTexImageArguments::kTexImage3D &&
+ if (args.command_type == DoTexImageArguments::CommandType::kTexImage3D &&
texture_state->unpack_image_height_workaround_with_unpack_buffer &&
buffer) {
ContextState::Dimension dimension = ContextState::k3D;
@@ -3008,7 +3017,7 @@ void TextureManager::ValidateAndDoTexImage(
args.pixels,
args.pixels_size,
args.padding,
- DoTexSubImageArguments::kTexSubImage3D};
+ DoTexSubImageArguments::CommandType::kTexSubImage3D};
DoTexSubImageLayerByLayerWorkaround(texture_state, state, sub_args,
unpack_params);
@@ -3028,11 +3037,22 @@ void TextureManager::ValidateAndDoTexImage(
args);
DoTexSubImageArguments sub_args = {
- args.target, args.level, 0, 0, 0, args.width, args.height, args.depth,
- args.format, args.type, args.pixels, args.pixels_size, args.padding,
- args.command_type == DoTexImageArguments::kTexImage3D ?
- DoTexSubImageArguments::kTexSubImage3D :
- DoTexSubImageArguments::kTexSubImage2D};
+ args.target,
+ args.level,
+ 0,
+ 0,
+ 0,
+ args.width,
+ args.height,
+ args.depth,
+ args.format,
+ args.type,
+ args.pixels,
+ args.pixels_size,
+ args.padding,
+ args.command_type == DoTexImageArguments::CommandType::kTexImage3D
+ ? DoTexSubImageArguments::CommandType::kTexSubImage3D
+ : DoTexSubImageArguments::CommandType::kTexSubImage2D};
DoTexSubImageWithAlignmentWorkaround(texture_state, state, sub_args);
SetLevelCleared(texture_ref, args.target, args.level, true);
@@ -3070,9 +3090,11 @@ bool TextureManager::ValidateTexSubImage(ContextState* state,
TextureRef** texture_ref) {
const Validators* validators = feature_info_->validators();
- if ((args.command_type == DoTexSubImageArguments::kTexSubImage2D &&
+ if ((args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage2D &&
!validators->texture_target.IsValid(args.target)) ||
- (args.command_type == DoTexSubImageArguments::kTexSubImage3D &&
+ (args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage3D &&
!validators->texture_3_d_target.IsValid(args.target))) {
ERRORSTATE_SET_GL_ERROR_INVALID_ENUM(error_state, function_name,
args.target, "target");
@@ -3201,7 +3223,8 @@ void TextureManager::ValidateAndDoTexSubImage(
args.width != tex_width || args.height != tex_height ||
args.depth != tex_depth) {
gfx::Rect cleared_rect;
- if (args.command_type == DoTexSubImageArguments::kTexSubImage2D &&
+ if (args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage2D &&
CombineAdjacentRects(
texture->GetLevelClearedRect(args.target, args.level),
gfx::Rect(args.xoffset, args.yoffset, args.width, args.height),
@@ -3230,7 +3253,8 @@ void TextureManager::ValidateAndDoTexSubImage(
if (texture_state->unpack_overlapping_rows_separately_unpack_buffer &&
buffer) {
ContextState::Dimension dimension =
- (args.command_type == DoTexSubImageArguments::kTexSubImage3D)
+ (args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage3D)
? ContextState::k3D
: ContextState::k2D;
const PixelStoreParams unpack_params(state->GetUnpackParams(dimension));
@@ -3245,7 +3269,8 @@ void TextureManager::ValidateAndDoTexSubImage(
}
}
- if (args.command_type == DoTexSubImageArguments::kTexSubImage3D &&
+ if (args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage3D &&
texture_state->unpack_image_height_workaround_with_unpack_buffer &&
buffer) {
ContextState::Dimension dimension = ContextState::k3D;
@@ -3276,7 +3301,8 @@ void TextureManager::ValidateAndDoTexSubImage(
texture->GetLevelType(args.target, args.level, &tex_type, &internal_format);
// NOTE: In OpenGL ES 2/3 border is always zero. If that changes we'll need
// to look it up.
- if (args.command_type == DoTexSubImageArguments::kTexSubImage3D) {
+ if (args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage3D) {
glTexImage3D(args.target, args.level,
AdjustTexInternalFormat(feature_info_.get(), internal_format,
args.type),
@@ -3293,7 +3319,8 @@ void TextureManager::ValidateAndDoTexSubImage(
}
} else {
TRACE_EVENT0("gpu", "SubImage");
- if (args.command_type == DoTexSubImageArguments::kTexSubImage3D) {
+ if (args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage3D) {
glTexSubImage3D(args.target, args.level, args.xoffset, args.yoffset,
args.zoffset, args.width, args.height, args.depth,
AdjustTexFormat(feature_info_.get(), args.format),
@@ -3315,7 +3342,8 @@ void TextureManager::DoTexSubImageWithAlignmentWorkaround(
DCHECK(args.width > 0 && args.height > 0 && args.depth > 0);
uint32_t offset = ToGLuint(args.pixels);
- if (args.command_type == DoTexSubImageArguments::kTexSubImage2D) {
+ if (args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage2D) {
PixelStoreParams params = state->GetUnpackParams(ContextState::k2D);
if (args.height > 1) {
glTexSubImage2D(args.target, args.level, args.xoffset, args.yoffset,
@@ -3436,7 +3464,8 @@ void TextureManager::DoTexSubImageRowByRowWorkaround(
row_bytes += unpack_params.alignment - alignment_diff;
}
DCHECK_EQ(0, row_bytes % unpack_params.alignment);
- if (args.command_type == DoTexSubImageArguments::kTexSubImage3D) {
+ if (args.command_type ==
+ DoTexSubImageArguments::CommandType::kTexSubImage3D) {
GLsizei image_height = args.height;
if (unpack_params.image_height != 0) {
image_height = unpack_params.image_height;
@@ -3651,7 +3680,7 @@ void TextureManager::DoTexImage(DecoderTextureState* texture_state,
ERRORSTATE_COPY_REAL_GL_ERRORS_TO_WRAPPER(error_state, function_name);
{
- if (args.command_type == DoTexImageArguments::kTexImage3D) {
+ if (args.command_type == DoTexImageArguments::CommandType::kTexImage3D) {
glTexImage3D(args.target, args.level,
AdjustTexInternalFormat(feature_info_.get(),
args.internal_format, args.type),
@@ -3668,7 +3697,7 @@ void TextureManager::DoTexImage(DecoderTextureState* texture_state,
}
}
GLenum error = ERRORSTATE_PEEK_GL_ERROR(error_state, function_name);
- if (args.command_type == DoTexImageArguments::kTexImage3D) {
+ if (args.command_type == DoTexImageArguments::CommandType::kTexImage3D) {
UMA_HISTOGRAM_CUSTOM_ENUMERATION("GPU.Error_TexImage3D", error,
GetAllGLErrors());
} else {
diff --git a/chromium/gpu/command_buffer/service/texture_manager.h b/chromium/gpu/command_buffer/service/texture_manager.h
index 6c0063119ed..aedf7ccef99 100644
--- a/chromium/gpu/command_buffer/service/texture_manager.h
+++ b/chromium/gpu/command_buffer/service/texture_manager.h
@@ -1162,7 +1162,7 @@ class GPU_GLES2_EXPORT TextureManager
}
struct DoTexImageArguments {
- enum TexImageCommandType {
+ enum class CommandType {
kTexImage2D,
kTexImage3D,
};
@@ -1179,7 +1179,7 @@ class GPU_GLES2_EXPORT TextureManager
const void* pixels;
uint32_t pixels_size;
uint32_t padding;
- TexImageCommandType command_type;
+ CommandType command_type;
};
bool ValidateTexImage(ContextState* state,
@@ -1198,7 +1198,7 @@ class GPU_GLES2_EXPORT TextureManager
const DoTexImageArguments& args);
struct DoTexSubImageArguments {
- enum TexSubImageCommandType {
+ enum class CommandType {
kTexSubImage2D,
kTexSubImage3D,
};
@@ -1216,7 +1216,7 @@ class GPU_GLES2_EXPORT TextureManager
const void* pixels;
uint32_t pixels_size;
uint32_t padding;
- TexSubImageCommandType command_type;
+ CommandType command_type;
};
bool ValidateTexSubImage(ContextState* state,
diff --git a/chromium/gpu/ipc/common/android/texture_owner.cc b/chromium/gpu/command_buffer/service/texture_owner.cc
index 6bb94289983..309b5b9b3f4 100644
--- a/chromium/gpu/ipc/common/android/texture_owner.cc
+++ b/chromium/gpu/command_buffer/service/texture_owner.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/ipc/common/android/texture_owner.h"
+#include "gpu/command_buffer/service/texture_owner.h"
#include <memory>
@@ -13,9 +13,9 @@
#include "gpu/command_buffer/service/abstract_texture_impl_shared_context_state.h"
#include "gpu/command_buffer/service/decoder_context.h"
#include "gpu/command_buffer/service/feature_info.h"
+#include "gpu/command_buffer/service/image_reader_gl_owner.h"
+#include "gpu/command_buffer/service/surface_texture_gl_owner.h"
#include "gpu/command_buffer/service/texture_base.h"
-#include "gpu/ipc/common/android/image_reader_gl_owner.h"
-#include "gpu/ipc/common/android/surface_texture_gl_owner.h"
#include "ui/gl/scoped_binders.h"
namespace gpu {
diff --git a/chromium/gpu/ipc/common/android/texture_owner.h b/chromium/gpu/command_buffer/service/texture_owner.h
index b4746cfb6ac..61e637a3bad 100644
--- a/chromium/gpu/ipc/common/android/texture_owner.h
+++ b/chromium/gpu/command_buffer/service/texture_owner.h
@@ -2,15 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef GPU_IPC_COMMON_ANDROID_TEXTURE_OWNER_H_
-#define GPU_IPC_COMMON_ANDROID_TEXTURE_OWNER_H_
+#ifndef GPU_COMMAND_BUFFER_SERVICE_TEXTURE_OWNER_H_
+#define GPU_COMMAND_BUFFER_SERVICE_TEXTURE_OWNER_H_
#include <android/hardware_buffer.h>
#include "base/memory/ref_counted.h"
#include "base/memory/ref_counted_delete_on_sequence.h"
#include "base/single_thread_task_runner.h"
-#include "gpu/gpu_export.h"
+#include "gpu/gpu_gles2_export.h"
#include "ui/gl/android/scoped_java_surface.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_context.h"
@@ -37,7 +37,7 @@ class AbstractTexture;
// be called on any thread. It's safe to keep and drop refptrs to it on any
// thread; it will be automatically destructed on the thread it was constructed
// on.
-class GPU_EXPORT TextureOwner
+class GPU_GLES2_EXPORT TextureOwner
: public base::RefCountedDeleteOnSequence<TextureOwner> {
public:
// Creates a GL texture using the current platform GL context and returns a
@@ -92,6 +92,10 @@ class GPU_EXPORT TextureOwner
virtual std::unique_ptr<base::android::ScopedHardwareBufferFenceSync>
GetAHardwareBuffer() = 0;
+ // Provides the crop rectangle associated with the most recent image. The
+ // crop rectangle specifies the region of valid pixels in the image.
+ virtual gfx::Rect GetCropRect() = 0;
+
// Set the callback function to run when a new frame is available.
// |frame_available_cb| is thread safe and can be called on any thread. This
// method should be called only once, i.e., once a callback is provided, it
@@ -136,4 +140,4 @@ class GPU_EXPORT TextureOwner
} // namespace gpu
-#endif // GPU_IPC_COMMON_ANDROID_TEXTURE_OWNER_H_
+#endif // GPU_COMMAND_BUFFER_SERVICE_TEXTURE_OWNER_H_
diff --git a/chromium/gpu/command_buffer/service/value_validator.h b/chromium/gpu/command_buffer/service/value_validator.h
new file mode 100644
index 00000000000..dd166899aa2
--- /dev/null
+++ b/chromium/gpu/command_buffer/service/value_validator.h
@@ -0,0 +1,61 @@
+// Copyright 2019 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.
+
+// Contains the definition of ValueValidator for the uses in *_cmd_validation.h
+
+#ifndef GPU_COMMAND_BUFFER_SERVICE_VALUE_VALIDATOR_H_
+#define GPU_COMMAND_BUFFER_SERVICE_VALUE_VALIDATOR_H_
+
+#include <algorithm>
+#include <vector>
+
+namespace gpu {
+
+// ValueValidator returns true if a value is valid.
+template <typename T>
+class ValueValidator {
+ public:
+ ValueValidator() = default;
+
+ ValueValidator(const T* valid_values, int num_values) {
+ AddValues(valid_values, num_values);
+ }
+
+ void AddValue(const T value) {
+ if (!IsValid(value)) {
+ valid_values_.push_back(value);
+ }
+ }
+
+ void AddValues(const T* valid_values, int num_values) {
+ for (int ii = 0; ii < num_values; ++ii) {
+ AddValue(valid_values[ii]);
+ }
+ }
+
+ void RemoveValues(const T* invalid_values, int num_values) {
+ for (int ii = 0; ii < num_values; ++ii) {
+ auto iter = std::find(valid_values_.begin(), valid_values_.end(),
+ invalid_values[ii]);
+ if (iter != valid_values_.end()) {
+ valid_values_.erase(iter);
+ DCHECK(!IsValid(invalid_values[ii]));
+ }
+ }
+ }
+
+ bool IsValid(const T value) const {
+ return std::find(valid_values_.begin(), valid_values_.end(), value) !=
+ valid_values_.end();
+ }
+
+ const std::vector<T>& GetValues() const { return valid_values_; }
+
+ private:
+ std::vector<T> valid_values_;
+};
+
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_SERVICE_VALUE_VALIDATOR_H_
diff --git a/chromium/gpu/command_buffer/service/webgpu_cmd_validation.h b/chromium/gpu/command_buffer/service/webgpu_cmd_validation.h
index 5b9d460e4ca..5b432763581 100644
--- a/chromium/gpu/command_buffer/service/webgpu_cmd_validation.h
+++ b/chromium/gpu/command_buffer/service/webgpu_cmd_validation.h
@@ -7,9 +7,10 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_WEBGPU_CMD_VALIDATION_H_
#define GPU_COMMAND_BUFFER_SERVICE_WEBGPU_CMD_VALIDATION_H_
-#include <algorithm>
-#include <vector>
+#include "base/stl_util.h"
+#include "gpu/command_buffer/common/webgpu_cmd_enums.h"
#include "gpu/command_buffer/common/webgpu_cmd_format.h"
+#include "gpu/command_buffer/service/value_validator.h"
namespace gpu {
namespace webgpu {
diff --git a/chromium/gpu/command_buffer/service/webgpu_cmd_validation_autogen.h b/chromium/gpu/command_buffer/service/webgpu_cmd_validation_autogen.h
index 18fd85321dc..5115063553c 100644
--- a/chromium/gpu/command_buffer/service/webgpu_cmd_validation_autogen.h
+++ b/chromium/gpu/command_buffer/service/webgpu_cmd_validation_autogen.h
@@ -11,4 +11,6 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_WEBGPU_CMD_VALIDATION_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_SERVICE_WEBGPU_CMD_VALIDATION_AUTOGEN_H_
+ValueValidator<PowerPreference> power_preference;
+
#endif // GPU_COMMAND_BUFFER_SERVICE_WEBGPU_CMD_VALIDATION_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/service/webgpu_cmd_validation_implementation_autogen.h b/chromium/gpu/command_buffer/service/webgpu_cmd_validation_implementation_autogen.h
index ee3bf3df64f..dad69a28277 100644
--- a/chromium/gpu/command_buffer/service/webgpu_cmd_validation_implementation_autogen.h
+++ b/chromium/gpu/command_buffer/service/webgpu_cmd_validation_implementation_autogen.h
@@ -11,6 +11,13 @@
#ifndef GPU_COMMAND_BUFFER_SERVICE_WEBGPU_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
#define GPU_COMMAND_BUFFER_SERVICE_WEBGPU_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
-Validators::Validators() {}
+static const PowerPreference valid_power_preference_table[] = {
+ PowerPreference::kHighPerformance,
+ PowerPreference::kLowPower,
+};
+
+Validators::Validators()
+ : power_preference(valid_power_preference_table,
+ base::size(valid_power_preference_table)) {}
#endif // GPU_COMMAND_BUFFER_SERVICE_WEBGPU_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_
diff --git a/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc b/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc
index 9aefcad2dc4..28dde0fc57f 100644
--- a/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc
+++ b/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc
@@ -15,7 +15,9 @@
#include "base/logging.h"
#include "base/macros.h"
#include "base/trace_event/trace_event.h"
+#include "build/build_config.h"
#include "gpu/command_buffer/common/mailbox.h"
+#include "gpu/command_buffer/common/webgpu_cmd_enums.h"
#include "gpu/command_buffer/common/webgpu_cmd_format.h"
#include "gpu/command_buffer/common/webgpu_cmd_ids.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
@@ -98,6 +100,19 @@ bool WireServerCommandSerializer::Flush() {
return true;
}
+dawn_native::DeviceType PowerPreferenceToDawnDeviceType(
+ PowerPreference power_preference) {
+ switch (power_preference) {
+ case PowerPreference::kLowPower:
+ return dawn_native::DeviceType::IntegratedGPU;
+ case PowerPreference::kHighPerformance:
+ return dawn_native::DeviceType::DiscreteGPU;
+ default:
+ NOTREACHED();
+ return dawn_native::DeviceType::CPU;
+ }
+}
+
} // namespace
class WebGPUDecoderImpl final : public WebGPUDecoder {
@@ -327,7 +342,12 @@ class WebGPUDecoderImpl final : public WebGPUDecoder {
// only if not returning an error.
error::Error current_decoder_error_ = error::kNoError;
- DawnDevice CreateDefaultDevice();
+ void DiscoverAdapters();
+
+ dawn_native::Adapter GetPreferredAdapter(
+ PowerPreference power_preference) const;
+
+ error::Error InitDawnDeviceAndSetWireServer(dawn_native::Adapter* adapter);
std::unique_ptr<SharedImageRepresentationFactory>
shared_image_representation_factory_;
@@ -341,6 +361,7 @@ class WebGPUDecoderImpl final : public WebGPUDecoder {
std::unique_ptr<WireServerCommandSerializer> wire_serializer_;
std::unique_ptr<DawnServiceMemoryTransferService> memory_transfer_service_;
std::unique_ptr<dawn_native::Instance> dawn_instance_;
+ std::vector<dawn_native::Adapter> dawn_adapters_;
DawnProcTable dawn_procs_;
DawnDevice dawn_device_ = nullptr;
std::unique_ptr<dawn_wire::WireServer> wire_server_;
@@ -401,9 +422,23 @@ WebGPUDecoderImpl::~WebGPUDecoderImpl() {
}
ContextResult WebGPUDecoderImpl::Initialize() {
- dawn_device_ = CreateDefaultDevice();
+ DiscoverAdapters();
+ return ContextResult::kSuccess;
+}
+
+error::Error WebGPUDecoderImpl::InitDawnDeviceAndSetWireServer(
+ dawn_native::Adapter* adapter) {
+ DCHECK(adapter != nullptr && (*adapter));
+
+ // TODO(jiawei.shao@intel.com): support multiple Dawn devices.
+ if (dawn_device_ != nullptr) {
+ DCHECK(wire_server_);
+ return error::kNoError;
+ }
+
+ dawn_device_ = adapter->CreateDevice();
if (dawn_device_ == nullptr) {
- return ContextResult::kFatalFailure;
+ return error::kLostContext;
}
dawn_wire::WireServerDescriptor descriptor = {};
@@ -414,49 +449,78 @@ ContextResult WebGPUDecoderImpl::Initialize() {
wire_server_ = std::make_unique<dawn_wire::WireServer>(descriptor);
- return ContextResult::kSuccess;
+ return error::kNoError;
}
-DawnDevice WebGPUDecoderImpl::CreateDefaultDevice() {
+void WebGPUDecoderImpl::DiscoverAdapters() {
dawn_instance_->DiscoverDefaultAdapters();
std::vector<dawn_native::Adapter> adapters = dawn_instance_->GetAdapters();
+ for (const dawn_native::Adapter& adapter : adapters) {
+#if defined(OS_WIN)
+ // On Windows 10, we pick D3D12 backend because the rest of Chromium renders
+ // with D3D11. By the same token, we pick the first adapter because ANGLE also
+ // picks the first adapter. Later, we'll need to centralize adapter picking
+ // such that Dawn and ANGLE are told which adapter to use by Chromium. If we
+ // decide to handle multiple adapters, code on the Chromium side will need to
+ // change to do appropriate cross adapter copying to make this happen, either
+ // manually or by using DirectComposition.
+ if (adapter.GetBackendType() == dawn_native::BackendType::D3D12) {
+#else
+ if (adapter.GetBackendType() != dawn_native::BackendType::Null &&
+ adapter.GetBackendType() != dawn_native::BackendType::OpenGL) {
+#endif
+ dawn_adapters_.push_back(adapter);
+ }
+ }
+}
+dawn_native::Adapter WebGPUDecoderImpl::GetPreferredAdapter(
+ PowerPreference power_preference) const {
+ dawn_native::DeviceType preferred_device_type =
+ PowerPreferenceToDawnDeviceType(power_preference);
+
+ dawn_native::Adapter discrete_gpu_adapter = {};
dawn_native::Adapter integrated_gpu_adapter = {};
dawn_native::Adapter cpu_adapter = {};
dawn_native::Adapter unknown_adapter = {};
- for (dawn_native::Adapter adapter : adapters) {
- if (adapter.GetBackendType() != dawn_native::BackendType::Null &&
- adapter.GetBackendType() != dawn_native::BackendType::OpenGL) {
- switch (adapter.GetDeviceType()) {
- case dawn_native::DeviceType::DiscreteGPU:
- // For now, we always prefer the discrete GPU
- return adapter.CreateDevice();
- case dawn_native::DeviceType::IntegratedGPU:
- integrated_gpu_adapter = adapter;
- break;
- case dawn_native::DeviceType::CPU:
- cpu_adapter = adapter;
- break;
- case dawn_native::DeviceType::Unknown:
- unknown_adapter = adapter;
- break;
- default:
- NOTREACHED();
- break;
- }
+ for (const dawn_native::Adapter& adapter : dawn_adapters_) {
+ if (adapter.GetDeviceType() == preferred_device_type) {
+ return adapter;
+ }
+ switch (adapter.GetDeviceType()) {
+ case dawn_native::DeviceType::DiscreteGPU:
+ discrete_gpu_adapter = adapter;
+ break;
+ case dawn_native::DeviceType::IntegratedGPU:
+ integrated_gpu_adapter = adapter;
+ break;
+ case dawn_native::DeviceType::CPU:
+ cpu_adapter = adapter;
+ break;
+ case dawn_native::DeviceType::Unknown:
+ unknown_adapter = adapter;
+ break;
+ default:
+ NOTREACHED();
+ break;
}
}
+
+ // For now, we always prefer the discrete GPU
+ if (discrete_gpu_adapter) {
+ return discrete_gpu_adapter;
+ }
if (integrated_gpu_adapter) {
- return integrated_gpu_adapter.CreateDevice();
+ return integrated_gpu_adapter;
}
if (cpu_adapter) {
- return cpu_adapter.CreateDevice();
+ return cpu_adapter;
}
if (unknown_adapter) {
- return unknown_adapter.CreateDevice();
+ return unknown_adapter;
}
- return nullptr;
+ return dawn_native::Adapter();
}
const char* WebGPUDecoderImpl::GetCommandName(unsigned int command_id) const {
@@ -532,6 +596,24 @@ error::Error WebGPUDecoderImpl::DoCommands(unsigned int num_commands,
return result;
}
+error::Error WebGPUDecoderImpl::HandleRequestAdapter(
+ uint32_t immediate_data_size,
+ const volatile void* cmd_data) {
+ const volatile webgpu::cmds::RequestAdapter& c =
+ *static_cast<const volatile webgpu::cmds::RequestAdapter*>(cmd_data);
+
+ PowerPreference power_preference =
+ static_cast<PowerPreference>(c.power_preference);
+ dawn_native::Adapter requested_adapter =
+ GetPreferredAdapter(power_preference);
+ if (!requested_adapter) {
+ return error::kLostContext;
+ }
+
+ // TODO(jiawei.shao@intel.com): support creating device with device descriptor
+ return InitDawnDeviceAndSetWireServer(&requested_adapter);
+}
+
error::Error WebGPUDecoderImpl::HandleDawnCommands(
uint32_t immediate_data_size,
const volatile void* cmd_data) {
@@ -554,8 +636,7 @@ error::Error WebGPUDecoderImpl::HandleDawnCommands(
TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("gpu.dawn"),
"WebGPUDecoderImpl::HandleDawnCommands", "bytes", size);
- std::vector<char> commands(shm_commands, shm_commands + size);
- if (!wire_server_->HandleCommands(commands.data(), size)) {
+ if (!wire_server_->HandleCommands(shm_commands, size)) {
NOTREACHED();
return error::kLostContext;
}
diff --git a/chromium/gpu/command_buffer/service/webgpu_decoder_unittest.cc b/chromium/gpu/command_buffer/service/webgpu_decoder_unittest.cc
index 7eceeaf5ebb..b7cda9ce398 100644
--- a/chromium/gpu/command_buffer/service/webgpu_decoder_unittest.cc
+++ b/chromium/gpu/command_buffer/service/webgpu_decoder_unittest.cc
@@ -6,6 +6,7 @@
#include "gpu/command_buffer/client/client_test_helper.h"
#include "gpu/command_buffer/common/shared_image_usage.h"
+#include "gpu/command_buffer/common/webgpu_cmd_enums.h"
#include "gpu/command_buffer/common/webgpu_cmd_format.h"
#include "gpu/command_buffer/service/context_group.h"
#include "gpu/command_buffer/service/decoder_client.h"
@@ -14,6 +15,9 @@
#include "gpu/command_buffer/service/shared_image_manager.h"
#include "gpu/command_buffer/service/test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_context.h"
+#include "ui/gl/gl_surface.h"
+#include "ui/gl/init/gl_factory.h"
using ::testing::_;
using ::testing::Return;
@@ -27,12 +31,31 @@ class WebGPUDecoderTest : public ::testing::Test {
WebGPUDecoderTest() {}
void SetUp() override {
+ // Shared image factories for some backends take a dependency on GL.
+ // Failure to create a test context with a surface and making it current
+ // will result in a "NoContext" context being current that asserts on all
+ // GL calls.
+ gl::init::InitializeGLNoExtensionsOneOff();
+ gl_surface_ = gl::init::CreateOffscreenGLSurface(gfx::Size(1, 1));
+ gl_context_ = gl::init::CreateGLContext(nullptr, gl_surface_.get(),
+ gl::GLContextAttribs());
+ gl_context_->MakeCurrent(gl_surface_.get());
+
command_buffer_service_.reset(new FakeCommandBufferServiceBase());
decoder_.reset(WebGPUDecoder::Create(nullptr, command_buffer_service_.get(),
&shared_image_manager_, nullptr,
&outputter_));
if (decoder_->Initialize() != ContextResult::kSuccess) {
decoder_ = nullptr;
+ } else {
+ cmds::RequestAdapter requestAdapterCmd;
+ requestAdapterCmd.Init(
+ static_cast<uint32_t>(webgpu::PowerPreference::kHighPerformance));
+ if (ExecuteCmd(requestAdapterCmd) == error::kLostContext) {
+ decoder_ = nullptr;
+ } else {
+ ASSERT_EQ(error::kNoError, ExecuteCmd(requestAdapterCmd));
+ }
}
factory_ = std::make_unique<SharedImageFactory>(
@@ -45,6 +68,10 @@ class WebGPUDecoderTest : public ::testing::Test {
void TearDown() override {
factory_->DestroyAllSharedImages(true);
factory_.reset();
+
+ gl_surface_.reset();
+ gl_context_.reset();
+ gl::init::ShutdownGL(false);
}
bool WebGPUSupported() const { return decoder_ != nullptr; }
@@ -75,7 +102,8 @@ class WebGPUDecoderTest : public ::testing::Test {
gles2::TraceOutputter outputter_;
SharedImageManager shared_image_manager_;
std::unique_ptr<SharedImageFactory> factory_;
- scoped_refptr<gles2::ContextGroup> group_;
+ scoped_refptr<gl::GLSurface> gl_surface_;
+ scoped_refptr<gl::GLContext> gl_context_;
};
TEST_F(WebGPUDecoderTest, DawnCommands) {
diff --git a/chromium/gpu/command_buffer/service/wrapped_sk_image.cc b/chromium/gpu/command_buffer/service/wrapped_sk_image.cc
index dfa25c25b00..f14240546e9 100644
--- a/chromium/gpu/command_buffer/service/wrapped_sk_image.cc
+++ b/chromium/gpu/command_buffer/service/wrapped_sk_image.cc
@@ -52,8 +52,8 @@ class WrappedSkImage : public SharedImageBacking {
}
void Destroy() override {
- DCHECK(backend_texture_.isValid());
- DeleteGrBackendTexture(context_state_, &backend_texture_);
+ promise_texture_.reset();
+ image_.reset();
}
bool IsCleared() const override { return cleared_; }
@@ -89,7 +89,7 @@ class WrappedSkImage : public SharedImageBacking {
DCHECK(context_state_->IsCurrent(nullptr));
return SkSurface::MakeFromBackendTexture(
- context_state_->gr_context(), backend_texture_,
+ context_state_->gr_context(), image_->getBackendTexture(false),
kTopLeft_GrSurfaceOrigin, final_msaa_count, GetSkColorType(),
color_space().ToSkColorSpace(), &surface_props);
}
@@ -130,9 +130,6 @@ class WrappedSkImage : public SharedImageBacking {
context_state_->set_need_context_state_reset(true);
- // Initializing to bright green makes it obvious if the pixels are not
- // properly set before they are displayed (e.g. https://crbug.com/956555).
- // We don't do this on release builds because there is a slight overhead.
#if BUILDFLAG(ENABLE_VULKAN)
auto is_protected = context_state_->GrContextIsVulkan() &&
context_state_->vk_context_provider()
@@ -144,45 +141,63 @@ class WrappedSkImage : public SharedImageBacking {
auto is_protected = GrProtected::kNo;
#endif
-#if DCHECK_IS_ON()
- backend_texture_ = context_state_->gr_context()->createBackendTexture(
- size().width(), size().height(), GetSkColorType(), SkColors::kGreen,
- GrMipMapped::kNo, GrRenderable::kYes, is_protected);
-#else
- backend_texture_ = context_state_->gr_context()->createBackendTexture(
- size().width(), size().height(), GetSkColorType(), GrMipMapped::kNo,
- GrRenderable::kYes, is_protected);
-#endif
-
- if (!backend_texture_.isValid())
- return false;
-
if (!data.empty()) {
- SkBitmap bitmap;
- if (!bitmap.installPixels(info, const_cast<uint8_t*>(data.data()),
- info.minRowBytes())) {
- return false;
+ if (format() == viz::ResourceFormat::ETC1) {
+ auto sk_data = SkData::MakeWithCopy(data.data(), data.size());
+ image_ = SkImage::MakeFromCompressed(
+ context_state_->gr_context(), sk_data, size().width(),
+ size().height(), SkImage::kETC1_CompressionType);
+ } else {
+ SkBitmap bitmap;
+ if (!bitmap.installPixels(info, const_cast<uint8_t*>(data.data()),
+ info.minRowBytes())) {
+ return false;
+ }
+ image_ = SkImage::MakeFromBitmap(bitmap);
+ // Move image to GPU
+ if (image_)
+ image_ = image_->makeTextureImage(context_state_->gr_context());
}
- sk_sp<SkSurface> surface = SkSurface::MakeFromBackendTexture(
- context_state_->gr_context(), backend_texture_,
- kTopLeft_GrSurfaceOrigin, /*sampleCnt=*/0, GetSkColorType(),
- color_space().ToSkColorSpace(), /*surfaceProps=*/nullptr);
- surface->writePixels(bitmap, /*dstX=*/0, /*dstY=*/0);
+
+ if (!image_)
+ return false;
+
OnWriteSucceeded();
+ } else {
+ // Initializing to bright green makes it obvious if the pixels are not
+ // properly set before they are displayed (e.g. https://crbug.com/956555).
+ // We don't do this on release builds because there is a slight overhead.
+
+#if DCHECK_IS_ON()
+ auto backend_texture = context_state_->gr_context()->createBackendTexture(
+ size().width(), size().height(), GetSkColorType(), SkColors::kBlue,
+ GrMipMapped::kNo, GrRenderable::kYes, is_protected);
+#else
+ auto backend_texture = context_state_->gr_context()->createBackendTexture(
+ size().width(), size().height(), GetSkColorType(), GrMipMapped::kNo,
+ GrRenderable::kYes, is_protected);
+#endif
+ image_ = SkImage::MakeFromAdoptedTexture(
+ context_state_->gr_context(), backend_texture,
+ GrSurfaceOrigin::kTopLeft_GrSurfaceOrigin, info.colorType(),
+ info.alphaType(), color_space().ToSkColorSpace());
}
- promise_texture_ = SkPromiseImageTexture::Make(backend_texture_);
+ auto backend_texture = image_->getBackendTexture(true);
+ DCHECK(backend_texture.isValid());
- switch (backend_texture_.backend()) {
+ promise_texture_ = SkPromiseImageTexture::Make(backend_texture);
+
+ switch (backend_texture.backend()) {
case GrBackendApi::kOpenGL: {
GrGLTextureInfo tex_info;
- if (backend_texture_.getGLTextureInfo(&tex_info))
+ if (backend_texture.getGLTextureInfo(&tex_info))
tracing_id_ = tex_info.fID;
break;
}
case GrBackendApi::kVulkan: {
GrVkImageInfo image_info;
- if (backend_texture_.getVkImageInfo(&image_info))
+ if (backend_texture.getVkImageInfo(&image_info))
tracing_id_ = reinterpret_cast<uint64_t>(image_info.fImage);
break;
}
@@ -190,13 +205,14 @@ class WrappedSkImage : public SharedImageBacking {
NOTREACHED();
return false;
}
+
return true;
}
SharedContextState* const context_state_;
- GrBackendTexture backend_texture_;
sk_sp<SkPromiseImageTexture> promise_texture_;
+ sk_sp<SkImage> image_;
bool cleared_ = false;
diff --git a/chromium/gpu/command_buffer/webgpu_cmd_buffer_functions.txt b/chromium/gpu/command_buffer/webgpu_cmd_buffer_functions.txt
index 53dbe0052a3..9c0589804dd 100644
--- a/chromium/gpu/command_buffer/webgpu_cmd_buffer_functions.txt
+++ b/chromium/gpu/command_buffer/webgpu_cmd_buffer_functions.txt
@@ -9,3 +9,4 @@
GL_APICALL void GL_APIENTRY wgDawnCommands (const char* commands, size_t size);
GL_APICALL void GL_APIENTRY wgAssociateMailbox (GLuint device_id, GLuint device_generation, GLuint id, GLuint generation, GLuint usage, const GLbyte* mailbox);
GL_APICALL void GL_APIENTRY wgDissociateMailbox (GLuint texture_id, GLuint texture_generation);
+GL_APICALL void GL_APIENTRY wgRequestAdapter (EnumClassPowerPreference power_preference = PowerPreference::kHighPerformance);
diff --git a/chromium/gpu/config/BUILD.gn b/chromium/gpu/config/BUILD.gn
index 6fa086638cd..d595e1b10f6 100644
--- a/chromium/gpu/config/BUILD.gn
+++ b/chromium/gpu/config/BUILD.gn
@@ -97,8 +97,8 @@ jumbo_source_set("config_sources") {
sources = [
"dx_diag_node.cc",
"dx_diag_node.h",
- "gpu_blacklist.cc",
- "gpu_blacklist.h",
+ "gpu_blocklist.cc",
+ "gpu_blocklist.h",
"gpu_control_list.cc",
"gpu_control_list.h",
"gpu_crash_keys.cc",
@@ -157,6 +157,7 @@ jumbo_source_set("config_sources") {
"//base",
"//build:branding_buildflags",
"//gpu/ipc/common:gpu_preferences_interface",
+ "//gpu/vulkan:buildflags",
"//media:media_buildflags",
"//third_party/re2",
"//ui/gl",
diff --git a/chromium/gpu/config/gpu_blacklist.cc b/chromium/gpu/config/gpu_blocklist.cc
index 66eebdd1a16..7fb9cf5042f 100644
--- a/chromium/gpu/config/gpu_blacklist.cc
+++ b/chromium/gpu/config/gpu_blocklist.cc
@@ -2,29 +2,29 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "gpu/config/gpu_blacklist.h"
+#include "gpu/config/gpu_blocklist.h"
#include "gpu/config/gpu_feature_type.h"
#include "gpu/config/software_rendering_list_autogen.h"
namespace gpu {
-GpuBlacklist::GpuBlacklist(const GpuControlListData& data)
+GpuBlocklist::GpuBlocklist(const GpuControlListData& data)
: GpuControlList(data) {}
-GpuBlacklist::~GpuBlacklist() = default;
+GpuBlocklist::~GpuBlocklist() = default;
// static
-std::unique_ptr<GpuBlacklist> GpuBlacklist::Create() {
+std::unique_ptr<GpuBlocklist> GpuBlocklist::Create() {
GpuControlListData data(kSoftwareRenderingListEntryCount,
kSoftwareRenderingListEntries);
return Create(data);
}
// static
-std::unique_ptr<GpuBlacklist> GpuBlacklist::Create(
+std::unique_ptr<GpuBlocklist> GpuBlocklist::Create(
const GpuControlListData& data) {
- std::unique_ptr<GpuBlacklist> list(new GpuBlacklist(data));
+ std::unique_ptr<GpuBlocklist> list(new GpuBlocklist(data));
list->AddSupportedFeature("accelerated_2d_canvas",
GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS);
list->AddSupportedFeature("gpu_compositing",
@@ -48,11 +48,12 @@ std::unique_ptr<GpuBlacklist> GpuBlacklist::Create(
list->AddSupportedFeature("android_surface_control",
GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL);
list->AddSupportedFeature("metal", GPU_FEATURE_TYPE_METAL);
+ list->AddSupportedFeature("vulkan", GPU_FEATURE_TYPE_VULKAN);
return list;
}
// static
-bool GpuBlacklist::AreEntryIndicesValid(
+bool GpuBlocklist::AreEntryIndicesValid(
const std::vector<uint32_t>& entry_indices) {
return GpuControlList::AreEntryIndicesValid(entry_indices,
kSoftwareRenderingListEntryCount);
diff --git a/chromium/gpu/config/gpu_blacklist.h b/chromium/gpu/config/gpu_blocklist.h
index db0e2b30d1d..f5ba03f06a8 100644
--- a/chromium/gpu/config/gpu_blacklist.h
+++ b/chromium/gpu/config/gpu_blocklist.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef GPU_CONFIG_GPU_BLACKLIST_H_
-#define GPU_CONFIG_GPU_BLACKLIST_H_
+#ifndef GPU_CONFIG_GPU_BLOCKLIST_H_
+#define GPU_CONFIG_GPU_BLOCKLIST_H_
#include <memory>
@@ -12,21 +12,21 @@
namespace gpu {
-class GPU_EXPORT GpuBlacklist : public GpuControlList {
+class GPU_EXPORT GpuBlocklist : public GpuControlList {
public:
- ~GpuBlacklist() override;
+ ~GpuBlocklist() override;
- static std::unique_ptr<GpuBlacklist> Create();
- static std::unique_ptr<GpuBlacklist> Create(const GpuControlListData& data);
+ static std::unique_ptr<GpuBlocklist> Create();
+ static std::unique_ptr<GpuBlocklist> Create(const GpuControlListData& data);
static bool AreEntryIndicesValid(const std::vector<uint32_t>& entry_indices);
private:
- explicit GpuBlacklist(const GpuControlListData& data);
+ explicit GpuBlocklist(const GpuControlListData& data);
- DISALLOW_COPY_AND_ASSIGN(GpuBlacklist);
+ DISALLOW_COPY_AND_ASSIGN(GpuBlocklist);
};
} // namespace gpu
-#endif // GPU_CONFIG_GPU_BLACKLIST_H_
+#endif // GPU_CONFIG_GPU_BLOCKLIST_H_
diff --git a/chromium/gpu/config/gpu_blacklist_unittest.cc b/chromium/gpu/config/gpu_blocklist_unittest.cc
index 5e0d43483ce..ff2264eb48b 100644
--- a/chromium/gpu/config/gpu_blacklist_unittest.cc
+++ b/chromium/gpu/config/gpu_blocklist_unittest.cc
@@ -4,21 +4,19 @@
#include <vector>
-#include "gpu/config/gpu_blacklist.h"
+#include "gpu/config/gpu_blocklist.h"
#include "gpu/config/gpu_feature_type.h"
#include "gpu/config/gpu_info.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace gpu {
-class GpuBlacklistTest : public testing::Test {
+class GpuBlocklistTest : public testing::Test {
public:
- GpuBlacklistTest() = default;
- ~GpuBlacklistTest() override = default;
+ GpuBlocklistTest() = default;
+ ~GpuBlocklistTest() override = default;
- const GPUInfo& gpu_info() const {
- return gpu_info_;
- }
+ const GPUInfo& gpu_info() const { return gpu_info_; }
void RunFeatureTest(GpuFeatureType feature_type) {
const int kFeatureListForEntry1[1] = {feature_type};
@@ -49,16 +47,16 @@ class GpuBlacklistTest : public testing::Test {
0, // gpu_series size
nullptr, // gpu_series
{GpuControlList::kUnknown, GpuControlList::kVersionStyleNumerical,
- nullptr, nullptr}, // intel_gpu_generation
- nullptr, // more conditions
+ nullptr, nullptr}, // intel_gpu_generation
+ nullptr, // more conditions
},
0, // exceptions count
nullptr, // exceptions
}};
GpuControlListData data(1, kTestEntries);
- std::unique_ptr<GpuBlacklist> blacklist = GpuBlacklist::Create(data);
+ std::unique_ptr<GpuBlocklist> blacklist = GpuBlocklist::Create(data);
std::set<int> type =
- blacklist->MakeDecision(GpuBlacklist::kOsMacosx, "10.12.3", gpu_info());
+ blacklist->MakeDecision(GpuBlocklist::kOsMacosx, "10.12.3", gpu_info());
EXPECT_EQ(1u, type.size());
EXPECT_EQ(1u, type.count(feature_type));
}
@@ -79,45 +77,40 @@ class GpuBlacklistTest : public testing::Test {
GPUInfo gpu_info_;
};
-#define GPU_BLACKLIST_FEATURE_TEST(test_name, feature_type) \
- TEST_F(GpuBlacklistTest, test_name) { RunFeatureTest(feature_type); }
+#define GPU_BLOCKLIST_FEATURE_TEST(test_name, feature_type) \
+ TEST_F(GpuBlocklistTest, test_name) { RunFeatureTest(feature_type); }
-GPU_BLACKLIST_FEATURE_TEST(Accelerated2DCanvas,
+GPU_BLOCKLIST_FEATURE_TEST(Accelerated2DCanvas,
GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS)
-GPU_BLACKLIST_FEATURE_TEST(GpuCompositing,
- GPU_FEATURE_TYPE_GPU_COMPOSITING)
+GPU_BLOCKLIST_FEATURE_TEST(GpuCompositing, GPU_FEATURE_TYPE_GPU_COMPOSITING)
-GPU_BLACKLIST_FEATURE_TEST(AcceleratedWebGL, GPU_FEATURE_TYPE_ACCELERATED_WEBGL)
+GPU_BLOCKLIST_FEATURE_TEST(AcceleratedWebGL, GPU_FEATURE_TYPE_ACCELERATED_WEBGL)
-GPU_BLACKLIST_FEATURE_TEST(Flash3D,
- GPU_FEATURE_TYPE_FLASH3D)
+GPU_BLOCKLIST_FEATURE_TEST(Flash3D, GPU_FEATURE_TYPE_FLASH3D)
-GPU_BLACKLIST_FEATURE_TEST(FlashStage3D,
- GPU_FEATURE_TYPE_FLASH_STAGE3D)
+GPU_BLOCKLIST_FEATURE_TEST(FlashStage3D, GPU_FEATURE_TYPE_FLASH_STAGE3D)
-GPU_BLACKLIST_FEATURE_TEST(FlashStage3DBaseline,
+GPU_BLOCKLIST_FEATURE_TEST(FlashStage3DBaseline,
GPU_FEATURE_TYPE_FLASH_STAGE3D_BASELINE)
-GPU_BLACKLIST_FEATURE_TEST(AcceleratedVideoDecode,
+GPU_BLOCKLIST_FEATURE_TEST(AcceleratedVideoDecode,
GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE)
-GPU_BLACKLIST_FEATURE_TEST(GpuRasterization,
- GPU_FEATURE_TYPE_GPU_RASTERIZATION)
+GPU_BLOCKLIST_FEATURE_TEST(GpuRasterization, GPU_FEATURE_TYPE_GPU_RASTERIZATION)
-GPU_BLACKLIST_FEATURE_TEST(OOPRasterization, GPU_FEATURE_TYPE_OOP_RASTERIZATION)
+GPU_BLOCKLIST_FEATURE_TEST(OOPRasterization, GPU_FEATURE_TYPE_OOP_RASTERIZATION)
-GPU_BLACKLIST_FEATURE_TEST(WebGL2,
- GPU_FEATURE_TYPE_ACCELERATED_WEBGL2)
+GPU_BLOCKLIST_FEATURE_TEST(WebGL2, GPU_FEATURE_TYPE_ACCELERATED_WEBGL2)
-GPU_BLACKLIST_FEATURE_TEST(ProtectedVideoDecode,
+GPU_BLOCKLIST_FEATURE_TEST(ProtectedVideoDecode,
GPU_FEATURE_TYPE_PROTECTED_VIDEO_DECODE)
// Test for invariant "Assume the newly last added entry has the largest ID".
// See GpuControlList::GpuControlList.
// It checks software_rendering_list.json
-TEST_F(GpuBlacklistTest, TestBlacklistIsValid) {
- std::unique_ptr<GpuBlacklist> list(GpuBlacklist::Create());
+TEST_F(GpuBlocklistTest, TestBlocklistIsValid) {
+ std::unique_ptr<GpuBlocklist> list(GpuBlocklist::Create());
uint32_t max_entry_id = list->max_entry_id();
std::vector<uint32_t> indices(list->num_entries());
diff --git a/chromium/gpu/config/gpu_crash_keys.cc b/chromium/gpu/config/gpu_crash_keys.cc
index 5650578cb9c..4641a8d45ac 100644
--- a/chromium/gpu/config/gpu_crash_keys.cc
+++ b/chromium/gpu/config/gpu_crash_keys.cc
@@ -10,7 +10,11 @@ namespace crash_keys {
#if !defined(OS_ANDROID)
crash_reporter::CrashKeyString<16> gpu_vendor_id("gpu-venid");
crash_reporter::CrashKeyString<16> gpu_device_id("gpu-devid");
-#endif
+#endif // !OS_ANDROID
+#if defined(OS_WIN)
+crash_reporter::CrashKeyString<16> gpu_sub_sys_id("gpu-subid");
+crash_reporter::CrashKeyString<16> gpu_revision("gpu-rev");
+#endif // OS_WIN
crash_reporter::CrashKeyString<64> gpu_driver_version("gpu-driver");
crash_reporter::CrashKeyString<16> gpu_pixel_shader_version("gpu-psver");
crash_reporter::CrashKeyString<16> gpu_vertex_shader_version("gpu-vsver");
diff --git a/chromium/gpu/config/gpu_crash_keys.h b/chromium/gpu/config/gpu_crash_keys.h
index 3bceaa16e5e..0de896df550 100644
--- a/chromium/gpu/config/gpu_crash_keys.h
+++ b/chromium/gpu/config/gpu_crash_keys.h
@@ -16,7 +16,11 @@ namespace crash_keys {
#if !defined(OS_ANDROID)
extern GPU_EXPORT crash_reporter::CrashKeyString<16> gpu_vendor_id;
extern GPU_EXPORT crash_reporter::CrashKeyString<16> gpu_device_id;
-#endif
+#endif // !OS_ANDROID
+#if defined(OS_WIN)
+extern GPU_EXPORT crash_reporter::CrashKeyString<16> gpu_sub_sys_id;
+extern GPU_EXPORT crash_reporter::CrashKeyString<16> gpu_revision;
+#endif // OS_WIN
extern GPU_EXPORT crash_reporter::CrashKeyString<64> gpu_driver_version;
extern GPU_EXPORT crash_reporter::CrashKeyString<16> gpu_pixel_shader_version;
extern GPU_EXPORT crash_reporter::CrashKeyString<16> gpu_vertex_shader_version;
diff --git a/chromium/gpu/config/gpu_driver_bug_list.json b/chromium/gpu/config/gpu_driver_bug_list.json
index 1ab33b0f547..75bf27f8502 100644
--- a/chromium/gpu/config/gpu_driver_bug_list.json
+++ b/chromium/gpu/config/gpu_driver_bug_list.json
@@ -170,10 +170,10 @@
},
{
"id": 31,
- "cr_bugs": [154715, 10068, 269829, 294779, 285292],
- "description": "The Mali-Txxx driver does not guarantee flush ordering",
+ "cr_bugs": [154715, 10068, 269829, 294779, 285292, 1018528],
+ "description": "The Mali-3xx/4xx/Txxx driver does not guarantee flush ordering",
"gl_vendor": "ARM.*",
- "gl_renderer": "Mali-T.*",
+ "gl_renderer": "Mali-[T34].*",
"features": [
"use_virtualized_gl_contexts"
]
@@ -808,19 +808,6 @@
]
},
{
- "id": 101,
- "description": "The Mali-Txxx driver hangs when reading from currently displayed buffer",
- "cr_bugs": [457511],
- "os": {
- "type": "chromeos"
- },
- "gl_vendor": "ARM.*",
- "gl_renderer": "Mali-T.*",
- "features": [
- "disable_non_empty_post_sub_buffers_for_onscreen_surfaces"
- ]
- },
- {
"id": 102,
"description": "Adreno 420 driver loses FBO attachment contents on bound FBO deletion",
"cr_bugs": [457027],
@@ -3034,7 +3021,7 @@
},
{
"id": 285,
- "cr_bugs": [914976],
+ "cr_bugs": [914976, 1000113],
"description": "Context flush ordering doesn't seem to work on AMD",
"vendor_id": "0x1002",
"os": {
@@ -3042,6 +3029,15 @@
},
"features": [
"use_virtualized_gl_contexts"
+ ],
+ "exceptions": [
+ {
+ "driver_vendor": "Mesa",
+ "driver_version": {
+ "op": ">=",
+ "value": "19.0"
+ }
+ }
]
},
{
@@ -3179,22 +3175,6 @@
]
},
{
- "id": 298,
- "cr_bugs": [941716],
- "description": "AImageReader is very crashy on this driver version",
- "os": {
- "type" : "android"
- },
- "gl_vendor": "Qualcomm.*",
- "driver_version": {
- "op": "=",
- "value": "269.0"
- },
- "features": [
- "disable_aimagereader"
- ]
- },
- {
"id": 299,
"description": "Context lost recovery often fails on PowerVR Rogue GE8* GPUs on Android.",
"cr_bugs": [942106],
@@ -3339,6 +3319,18 @@
},
{
"id": 311,
+ "cr_bugs": [998038],
+ "description": "Don't use IOSurface backed GMBs for half float textures with swiftshader",
+ "os": {
+ "type" : "macosx"
+ },
+ "gl_renderer": "Google SwiftShader*",
+ "features": [
+ "disable_half_float_for_gmb"
+ ]
+ },
+ {
+ "id": 312,
"cr_bugs": [991869],
"description": "Crash on Mali-T8x when using glTexImage2D",
"os": {
@@ -3373,6 +3365,15 @@
"disabled_extensions": [
"GL_EXT_shader_framebuffer_fetch"
]
- }
+ },
+ {
+ "id": 315,
+ "cr_bugs": [964010],
+ "description": "Disable GL_MESA_framebuffer_flip_y for desktop GL",
+ "gl_type": "gl",
+ "disabled_extensions": [
+ "GL_MESA_framebuffer_flip_y"
+ ]
+ }
]
}
diff --git a/chromium/gpu/config/gpu_extra_info.h b/chromium/gpu/config/gpu_extra_info.h
index 7c0f1432779..39bce1eab21 100644
--- a/chromium/gpu/config/gpu_extra_info.h
+++ b/chromium/gpu/config/gpu_extra_info.h
@@ -35,6 +35,9 @@ struct GPU_EXPORT ANGLEFeature {
// Status, can be "enabled" or "disabled".
std::string status;
+
+ // Condition, contains the condition that set 'status'.
+ std::string condition;
};
using ANGLEFeatures = std::vector<ANGLEFeature>;
diff --git a/chromium/gpu/config/gpu_feature_info.cc b/chromium/gpu/config/gpu_feature_info.cc
index acc6224b333..52d65772dcc 100644
--- a/chromium/gpu/config/gpu_feature_info.cc
+++ b/chromium/gpu/config/gpu_feature_info.cc
@@ -6,7 +6,7 @@
#include <algorithm>
-#include "gpu/config/gpu_blacklist.h"
+#include "gpu/config/gpu_blocklist.h"
#include "gpu/config/gpu_driver_bug_list.h"
#include "gpu/config/gpu_driver_bug_workaround_type.h"
#include "ui/gl/gl_context.h"
diff --git a/chromium/gpu/config/gpu_feature_type.h b/chromium/gpu/config/gpu_feature_type.h
index 5ac3ab5c4f8..deaa886ce4d 100644
--- a/chromium/gpu/config/gpu_feature_type.h
+++ b/chromium/gpu/config/gpu_feature_type.h
@@ -24,6 +24,7 @@ enum GpuFeatureType {
GPU_FEATURE_TYPE_OOP_RASTERIZATION,
GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL,
GPU_FEATURE_TYPE_METAL,
+ GPU_FEATURE_TYPE_VULKAN,
NUMBER_OF_GPU_FEATURE_TYPES
};
diff --git a/chromium/gpu/config/gpu_finch_features.cc b/chromium/gpu/config/gpu_finch_features.cc
index 68832b35755..ddb2ed78da4 100644
--- a/chromium/gpu/config/gpu_finch_features.cc
+++ b/chromium/gpu/config/gpu_finch_features.cc
@@ -37,7 +37,7 @@ const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer",
// and using overlays on Android.
// Note that the feature only works with VizDisplayCompositor enabled.
const base::Feature kAndroidSurfaceControl{"AndroidSurfaceControl",
- base::FEATURE_DISABLED_BY_DEFAULT};
+ base::FEATURE_ENABLED_BY_DEFAULT};
#endif
// Enable GPU Rasterization by default. This can still be overridden by
@@ -120,6 +120,10 @@ const base::Feature kVaapiJpegImageDecodeAcceleration{
const base::Feature kVaapiWebPImageDecodeAcceleration{
"VaapiWebPImageDecodeAcceleration", base::FEATURE_DISABLED_BY_DEFAULT};
+// Enable Vulkan graphics backend if --use-vulkan flag is not used. Otherwise
+// --use-vulkan will be followed.
+const base::Feature kVulkan{"Vulkan", base::FEATURE_DISABLED_BY_DEFAULT};
+
#if defined(OS_ANDROID)
bool IsAndroidSurfaceControlEnabled() {
if (!gl::SurfaceControl::IsSupported())
diff --git a/chromium/gpu/config/gpu_finch_features.h b/chromium/gpu/config/gpu_finch_features.h
index 3a4524d0ad1..ed12b079d11 100644
--- a/chromium/gpu/config/gpu_finch_features.h
+++ b/chromium/gpu/config/gpu_finch_features.h
@@ -50,6 +50,8 @@ GPU_EXPORT extern const base::Feature kVaapiJpegImageDecodeAcceleration;
GPU_EXPORT extern const base::Feature kVaapiWebPImageDecodeAcceleration;
+GPU_EXPORT extern const base::Feature kVulkan;
+
#if defined(OS_ANDROID)
GPU_EXPORT bool IsAndroidSurfaceControlEnabled();
#endif
diff --git a/chromium/gpu/config/gpu_info.cc b/chromium/gpu/config/gpu_info.cc
index 56c61fbcee5..91cf6c1090e 100644
--- a/chromium/gpu/config/gpu_info.cc
+++ b/chromium/gpu/config/gpu_info.cc
@@ -5,6 +5,7 @@
#include <stdint.h>
#include "gpu/config/gpu_info.h"
+#include "gpu/config/gpu_util.h"
namespace {
@@ -13,6 +14,10 @@ void EnumerateGPUDevice(const gpu::GPUInfo::GPUDevice& device,
enumerator->BeginGPUDevice();
enumerator->AddInt("vendorId", device.vendor_id);
enumerator->AddInt("deviceId", device.device_id);
+#if defined(OS_WIN)
+ enumerator->AddInt("subSysId", device.sub_sys_id);
+ enumerator->AddInt("revision", device.revision);
+#endif // OS_WIN
enumerator->AddBool("active", device.active);
enumerator->AddString("vendorString", device.vendor_string);
enumerator->AddString("deviceString", device.device_string);
@@ -41,6 +46,8 @@ void EnumerateVideoEncodeAcceleratorSupportedProfile(
gpu::GPUInfo::Enumerator* enumerator) {
enumerator->BeginVideoEncodeAcceleratorSupportedProfile();
enumerator->AddInt("profile", profile.profile);
+ enumerator->AddInt("minResolutionWidth", profile.min_resolution.width());
+ enumerator->AddInt("minResolutionHeight", profile.min_resolution.height());
enumerator->AddInt("maxResolutionWidth", profile.max_resolution.width());
enumerator->AddInt("maxResolutionHeight", profile.max_resolution.height());
enumerator->AddInt("maxFramerateNumerator", profile.max_framerate_numerator);
@@ -102,9 +109,10 @@ void EnumerateDx12VulkanVersionInfo(const gpu::Dx12VulkanVersionInfo& info,
enumerator->BeginDx12VulkanVersionInfo();
enumerator->AddBool("supportsDx12", info.supports_dx12);
enumerator->AddBool("supportsVulkan", info.supports_vulkan);
- enumerator->AddInt("dx12FeatureLevel",
- static_cast<int>(info.d3d12_feature_level));
- enumerator->AddInt("vulkanVersion", static_cast<int>(info.vulkan_version));
+ enumerator->AddString("dx12FeatureLevel",
+ gpu::D3DFeatureLevelToString(info.d3d12_feature_level));
+ enumerator->AddString("vulkanVersion",
+ gpu::VulkanVersionToString(info.vulkan_version));
enumerator->EndDx12VulkanVersionInfo();
}
#endif
@@ -153,11 +161,7 @@ operator=(const ImageDecodeAcceleratorSupportedProfile& other) = default;
ImageDecodeAcceleratorSupportedProfile& ImageDecodeAcceleratorSupportedProfile::
operator=(ImageDecodeAcceleratorSupportedProfile&& other) = default;
-GPUInfo::GPUDevice::GPUDevice()
- : vendor_id(0),
- device_id(0),
- active(false),
- cuda_compute_capability_major(0) {}
+GPUInfo::GPUDevice::GPUDevice() = default;
GPUInfo::GPUDevice::GPUDevice(const GPUInfo::GPUDevice& other) = default;
diff --git a/chromium/gpu/config/gpu_info.h b/chromium/gpu/config/gpu_info.h
index e032a312602..720fdc8d866 100644
--- a/chromium/gpu/config/gpu_info.h
+++ b/chromium/gpu/config/gpu_info.h
@@ -114,6 +114,7 @@ struct GPU_EXPORT VideoDecodeAcceleratorCapabilities {
// Specification of an encoding profile supported by a hardware encoder.
struct GPU_EXPORT VideoEncodeAcceleratorSupportedProfile {
VideoCodecProfile profile;
+ gfx::Size min_resolution;
gfx::Size max_resolution;
uint32_t max_framerate_numerator;
uint32_t max_framerate_denominator;
@@ -194,15 +195,24 @@ struct GPU_EXPORT GPUInfo {
GPUDevice& operator=(GPUDevice&& other) noexcept;
// The DWORD (uint32_t) representing the graphics card vendor id.
- uint32_t vendor_id;
+ uint32_t vendor_id = 0u;
// The DWORD (uint32_t) representing the graphics card device id.
// Device ids are unique to vendor, not to one another.
- uint32_t device_id;
+ uint32_t device_id = 0u;
+
+#if defined(OS_WIN)
+ // The graphics card subsystem id.
+ // The lower 16 bits represents the subsystem vendor id.
+ uint32_t sub_sys_id = 0u;
+
+ // The graphics card revision number.
+ uint32_t revision = 0u;
+#endif // OS_WIN
// Whether this GPU is the currently used one.
// Currently this field is only supported and meaningful on OS X.
- bool active;
+ bool active = false;
// The strings that describe the GPU.
// In Linux these strings are obtained through libpci.
@@ -216,7 +226,7 @@ struct GPU_EXPORT GPUInfo {
// NVIDIA CUDA compute capability, major version. 0 if undetermined. Can be
// used to determine the hardware generation that the GPU belongs to.
- int cuda_compute_capability_major;
+ int cuda_compute_capability_major = 0;
};
GPUInfo();
diff --git a/chromium/gpu/config/gpu_info_collector.cc b/chromium/gpu/config/gpu_info_collector.cc
index dcfe740c186..cdc50836c75 100644
--- a/chromium/gpu/config/gpu_info_collector.cc
+++ b/chromium/gpu/config/gpu_info_collector.cc
@@ -51,6 +51,7 @@ namespace {
#define EGL_FEATURE_COUNT_ANGLE 0x3465
#define EGL_FEATURE_OVERRIDES_ENABLED_ANGLE 0x3466
#define EGL_FEATURE_OVERRIDES_DISABLED_ANGLE 0x3467
+#define EGL_FEATURE_CONDITION_ANGLE 0x3468
#endif /* EGL_ANGLE_feature_control */
scoped_refptr<gl::GLSurface> InitializeGLSurface() {
@@ -422,6 +423,8 @@ bool CollectGpuExtraInfo(GpuExtraInfo* gpu_extra_info) {
QueryEGLStringi(display, EGL_FEATURE_BUG_ANGLE, i);
gpu_extra_info->angle_features[i].status =
QueryEGLStringi(display, EGL_FEATURE_STATUS_ANGLE, i);
+ gpu_extra_info->angle_features[i].condition =
+ QueryEGLStringi(display, EGL_FEATURE_CONDITION_ANGLE, i);
}
}
diff --git a/chromium/gpu/config/gpu_info_collector_win.cc b/chromium/gpu/config/gpu_info_collector_win.cc
index 65feab82637..b7ff063de6a 100644
--- a/chromium/gpu/config/gpu_info_collector_win.cc
+++ b/chromium/gpu/config/gpu_info_collector_win.cc
@@ -106,7 +106,7 @@ bool CollectDriverInfoD3D(GPUInfo* gpu_info) {
TRACE_EVENT0("gpu", "CollectDriverInfoD3D");
Microsoft::WRL::ComPtr<IDXGIFactory> dxgi_factory;
- const HRESULT hr = ::CreateDXGIFactory(IID_PPV_ARGS(&dxgi_factory));
+ HRESULT hr = ::CreateDXGIFactory(IID_PPV_ARGS(&dxgi_factory));
if (FAILED(hr))
return false;
@@ -123,10 +123,12 @@ bool CollectDriverInfoD3D(GPUInfo* gpu_info) {
GPUInfo::GPUDevice device;
device.vendor_id = desc.VendorId;
device.device_id = desc.DeviceId;
+ device.sub_sys_id = desc.SubSysId;
+ device.revision = desc.Revision;
LARGE_INTEGER umd_version;
- const HRESULT hr = dxgi_adapter->CheckInterfaceSupport(
- __uuidof(IDXGIDevice), &umd_version);
+ hr = dxgi_adapter->CheckInterfaceSupport(__uuidof(IDXGIDevice),
+ &umd_version);
if (SUCCEEDED(hr)) {
device.driver_version = base::StringPrintf(
"%d.%d.%d.%d", HIWORD(umd_version.HighPart),
@@ -227,21 +229,13 @@ bool BadAMDVulkanDriverVersion() {
return false;
}
- const VS_FIXEDFILEINFO* fixed_file_info =
- file_version_info->fixed_file_info();
- const int major = HIWORD(fixed_file_info->dwFileVersionMS);
- const int minor = LOWORD(fixed_file_info->dwFileVersionMS);
- const int minor_1 = HIWORD(fixed_file_info->dwFileVersionLS);
-
// From the Canary crash logs, the broken amdvlk64.dll versions
// are 1.0.39.0, 1.0.51.0 and 1.0.54.0. In the manual test, version
// 9.2.10.1 dated 12/6/2017 works and version 1.0.54.0 dated 11/2/1017
// crashes. All version numbers small than 1.0.54.0 will be marked as
// broken.
- if (major == 1 && minor == 0 && minor_1 <= 54) {
- return true;
- }
- return false;
+ const base::Version kBadAMDVulkanDriverVersion("1.0.54.0");
+ return file_version_info->GetFileVersion() <= kBadAMDVulkanDriverVersion;
}
bool BadVulkanDllVersion() {
@@ -251,13 +245,6 @@ bool BadVulkanDllVersion() {
if (!file_version_info)
return false;
- const VS_FIXEDFILEINFO* fixed_file_info =
- file_version_info->fixed_file_info();
- const int major = HIWORD(fixed_file_info->dwFileVersionMS);
- const int minor = LOWORD(fixed_file_info->dwFileVersionMS);
- const int build_1 = HIWORD(fixed_file_info->dwFileVersionLS);
- const int build_2 = LOWORD(fixed_file_info->dwFileVersionLS);
-
// From the logs, most vulkan-1.dll crashs are from the following versions.
// As of 7/23/2018.
// 0.0.0.0 - # of crashes: 6556
@@ -269,13 +256,12 @@ bool BadVulkanDllVersion() {
// The GPU could be from any vendor, but only some certain models would crash.
// For those that don't crash, they usually return failures upon GPU vulkan
// support querying even though the GPU drivers can support it.
- if ((major == 0 && minor == 0 && build_1 == 0 && build_2 == 0) ||
- (major == 1 && minor == 0 && build_1 == 26 && build_2 == 0) ||
- (major == 1 && minor == 0 && build_1 == 33 && build_2 == 0) ||
- (major == 1 && minor == 0 && build_1 == 42 && build_2 == 0) ||
- (major == 1 && minor == 0 && build_1 == 42 && build_2 == 1) ||
- (major == 1 && minor == 0 && build_1 == 51 && build_2 == 0)) {
- return true;
+ base::Version fv = file_version_info->GetFileVersion();
+ const char* const kBadVulkanDllVersion[] = {
+ "0.0.0.0", "1.0.26.0", "1.0.33.0", "1.0.42.0", "1.0.42.1", "1.0.51.0"};
+ for (const char* bad_version : kBadVulkanDllVersion) {
+ if (fv == base::Version(bad_version))
+ return true;
}
return false;
}
diff --git a/chromium/gpu/config/gpu_lists_version.h b/chromium/gpu/config/gpu_lists_version.h
index b894576b31f..c0781d029c3 100644
--- a/chromium/gpu/config/gpu_lists_version.h
+++ b/chromium/gpu/config/gpu_lists_version.h
@@ -3,6 +3,6 @@
#ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_
#define GPU_CONFIG_GPU_LISTS_VERSION_H_
-#define GPU_LISTS_VERSION "c1109b707b1eda5d98eb2ed6bd74083bc352f482"
+#define GPU_LISTS_VERSION "cd3a886c28f57603dea2a9050d2aadef3e8c30a4"
#endif // GPU_CONFIG_GPU_LISTS_VERSION_H_
diff --git a/chromium/gpu/config/gpu_preferences.h b/chromium/gpu/config/gpu_preferences.h
index 49f6724bc6b..656b72c0c13 100644
--- a/chromium/gpu/config/gpu_preferences.h
+++ b/chromium/gpu/config/gpu_preferences.h
@@ -29,10 +29,11 @@ const size_t kDefaultMaxProgramCacheMemoryBytes = 2 * 1024 * 1024;
const size_t kLowEndMaxProgramCacheMemoryBytes = 128 * 1024;
#endif
-enum VulkanImplementationName : uint32_t {
+enum class VulkanImplementationName : uint32_t {
kNone = 0,
kNative = 1,
- kSwiftshader = 2,
+ kForcedNative = 2, // Cannot override by GPU blacklist.
+ kSwiftshader = 3,
kLast = kSwiftshader,
};
diff --git a/chromium/gpu/config/gpu_util.cc b/chromium/gpu/config/gpu_util.cc
index 51ea316e92b..235874e7f3b 100644
--- a/chromium/gpu/config/gpu_util.cc
+++ b/chromium/gpu/config/gpu_util.cc
@@ -14,7 +14,7 @@
#include "base/strings/string_split.h"
#include "base/strings/stringprintf.h"
#include "build/build_config.h"
-#include "gpu/config/gpu_blacklist.h"
+#include "gpu/config/gpu_blocklist.h"
#include "gpu/config/gpu_crash_keys.h"
#include "gpu/config/gpu_driver_bug_list.h"
#include "gpu/config/gpu_driver_bug_workaround_type.h"
@@ -24,6 +24,7 @@
#include "gpu/config/gpu_info_collector.h"
#include "gpu/config/gpu_preferences.h"
#include "gpu/config/gpu_switches.h"
+#include "gpu/vulkan/buildflags.h"
#include "ui/gfx/extension_set.h"
#include "ui/gl/buildflags.h"
#include "ui/gl/gl_switches.h"
@@ -72,6 +73,24 @@ GpuFeatureStatus GetMetalFeatureStatus(
#endif
}
+GpuFeatureStatus GetVulkanFeatureStatus(
+ const std::set<int>& blacklisted_features,
+ const GpuPreferences& gpu_preferences) {
+#if BUILDFLAG(ENABLE_VULKAN)
+ // Only blacklist native vulkan.
+ if (gpu_preferences.use_vulkan == VulkanImplementationName::kNative &&
+ blacklisted_features.count(GPU_FEATURE_TYPE_VULKAN))
+ return kGpuFeatureStatusBlacklisted;
+
+ if (gpu_preferences.use_vulkan == VulkanImplementationName::kNone)
+ return kGpuFeatureStatusDisabled;
+
+ return kGpuFeatureStatusEnabled;
+#else
+ return kGpuFeatureStatusDisabled;
+#endif
+}
+
GpuFeatureStatus GetGpuRasterizationFeatureStatus(
const std::set<int>& blacklisted_features,
const base::CommandLine& command_line) {
@@ -312,6 +331,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoWithHardwareAccelerationDisabled() {
kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] =
kGpuFeatureStatusDisabled;
+ gpu_feature_info.status_values[GPU_FEATURE_TYPE_VULKAN] =
+ kGpuFeatureStatusDisabled;
#if DCHECK_IS_ON()
for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) {
DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]);
@@ -348,6 +369,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoWithNoGpu() {
kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] =
kGpuFeatureStatusDisabled;
+ gpu_feature_info.status_values[GPU_FEATURE_TYPE_VULKAN] =
+ kGpuFeatureStatusDisabled;
#if DCHECK_IS_ON()
for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) {
DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]);
@@ -384,6 +407,8 @@ GpuFeatureInfo ComputeGpuFeatureInfoForSwiftShader() {
kGpuFeatureStatusDisabled;
gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] =
kGpuFeatureStatusDisabled;
+ gpu_feature_info.status_values[GPU_FEATURE_TYPE_VULKAN] =
+ kGpuFeatureStatusDisabled;
#if DCHECK_IS_ON()
for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) {
DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]);
@@ -416,7 +441,7 @@ GpuFeatureInfo ComputeGpuFeatureInfo(const GPUInfo& gpu_info,
std::set<int> blacklisted_features;
if (!gpu_preferences.ignore_gpu_blacklist &&
!command_line->HasSwitch(switches::kUseGpuInTests)) {
- std::unique_ptr<GpuBlacklist> list(GpuBlacklist::Create());
+ std::unique_ptr<GpuBlocklist> list(GpuBlocklist::Create());
if (gpu_preferences.log_gpu_control_list_decisions)
list->EnableControlListLogging("gpu_blacklist");
unsigned target_test_group = 0u;
@@ -465,6 +490,8 @@ GpuFeatureInfo ComputeGpuFeatureInfo(const GPUInfo& gpu_info,
gpu_preferences);
gpu_feature_info.status_values[GPU_FEATURE_TYPE_METAL] =
GetMetalFeatureStatus(blacklisted_features, gpu_preferences);
+ gpu_feature_info.status_values[GPU_FEATURE_TYPE_VULKAN] =
+ GetVulkanFeatureStatus(blacklisted_features, gpu_preferences);
#if DCHECK_IS_ON()
for (int ii = 0; ii < NUMBER_OF_GPU_FEATURE_TYPES; ++ii) {
DCHECK_NE(kGpuFeatureStatusUndefined, gpu_feature_info.status_values[ii]);
@@ -542,7 +569,12 @@ void SetKeysForCrashLogging(const GPUInfo& gpu_info) {
base::StringPrintf("0x%04x", active_gpu.vendor_id));
crash_keys::gpu_device_id.Set(
base::StringPrintf("0x%04x", active_gpu.device_id));
-#endif
+#endif // !OS_ANDROID
+#if defined(OS_WIN)
+ crash_keys::gpu_sub_sys_id.Set(
+ base::StringPrintf("0x%08x", active_gpu.sub_sys_id));
+ crash_keys::gpu_revision.Set(base::StringPrintf("%u", active_gpu.revision));
+#endif // OS_WIN
crash_keys::gpu_driver_version.Set(active_gpu.driver_version);
crash_keys::gpu_pixel_shader_version.Set(gpu_info.pixel_shader_version);
crash_keys::gpu_vertex_shader_version.Set(gpu_info.vertex_shader_version);
@@ -755,4 +787,27 @@ std::string GetIntelGpuGeneration(uint32_t vendor_id, uint32_t device_id) {
return "";
}
+#if defined(OS_WIN)
+std::string D3DFeatureLevelToString(uint32_t d3d_feature_level) {
+ if (d3d_feature_level == 0) {
+ return "Not supported";
+ } else {
+ return base::StringPrintf("D3D %d.%d", (d3d_feature_level >> 12) & 0xF,
+ (d3d_feature_level >> 8) & 0xF);
+ }
+}
+
+std::string VulkanVersionToString(uint32_t vulkan_version) {
+ if (vulkan_version == 0) {
+ return "Not supported";
+ } else {
+ // Vulkan version number VK_MAKE_VERSION(major, minor, patch)
+ // (((major) << 22) | ((minor) << 12) | (patch))
+ return base::StringPrintf(
+ "Vulkan API %d.%d.%d", (vulkan_version >> 22) & 0x3FF,
+ (vulkan_version >> 12) & 0x3FF, vulkan_version & 0xFFF);
+ }
+}
+#endif // OS_WIN
+
} // namespace gpu
diff --git a/chromium/gpu/config/gpu_util.h b/chromium/gpu/config/gpu_util.h
index ebb8299e27a..d1cfed531c9 100644
--- a/chromium/gpu/config/gpu_util.h
+++ b/chromium/gpu/config/gpu_util.h
@@ -80,6 +80,11 @@ GPU_EXPORT GpuSeriesType GetGpuSeriesType(uint32_t vendor_id,
GPU_EXPORT std::string GetIntelGpuGeneration(uint32_t vendor_id,
uint32_t device_id);
+#if defined(OS_WIN)
+GPU_EXPORT std::string D3DFeatureLevelToString(uint32_t d3d_feature_level);
+GPU_EXPORT std::string VulkanVersionToString(uint32_t vulkan_version);
+#endif // OS_WIN
+
} // namespace gpu
#endif // GPU_CONFIG_GPU_UTIL_H_
diff --git a/chromium/gpu/config/gpu_workaround_list.txt b/chromium/gpu/config/gpu_workaround_list.txt
index 97ebf3b7dd7..5d5beda9b0e 100644
--- a/chromium/gpu/config/gpu_workaround_list.txt
+++ b/chromium/gpu/config/gpu_workaround_list.txt
@@ -114,4 +114,5 @@ wake_up_gpu_before_drawing
use_copyteximage2d_instead_of_readpixels_on_multisampled_textures
use_eqaa_storage_samples_2
max_3d_array_texture_size_1024
-prefer_draw_to_copy \ No newline at end of file
+disable_half_float_for_gmb
+prefer_draw_to_copy
diff --git a/chromium/gpu/ipc/client/BUILD.gn b/chromium/gpu/ipc/client/BUILD.gn
index ad92416bfd4..a0ce8932fdc 100644
--- a/chromium/gpu/ipc/client/BUILD.gn
+++ b/chromium/gpu/ipc/client/BUILD.gn
@@ -33,11 +33,11 @@ source_set("ipc_client_sources") {
]
deps = [
"//base",
+ "//cc/paint",
"//gpu/command_buffer/client:client_sources",
"//gpu/command_buffer/common:common_sources",
"//gpu/config:config_sources",
"//gpu/ipc/common:ipc_common_sources",
- "//media/parsers",
"//mojo/public/cpp/system",
"//ui/gfx:color_space",
"//ui/gfx/geometry",
diff --git a/chromium/gpu/ipc/client/DEPS b/chromium/gpu/ipc/client/DEPS
index b6aef8dfbda..5a3dccc1667 100644
--- a/chromium/gpu/ipc/client/DEPS
+++ b/chromium/gpu/ipc/client/DEPS
@@ -11,9 +11,7 @@ specific_include_rules = {
"+components/viz/test/test_gpu_memory_buffer_manager.h",
],
"image_decode_accelerator_proxy.cc": [
- "+media/parsers/jpeg_parser.h",
- "+media/parsers/vp8_parser.h",
- "+media/parsers/webp_parser.h",
+ "+cc/paint/paint_image.h",
],
"raster_in_process_context_tests.cc": [
"+components/viz/common/resources/resource_format.h",
diff --git a/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc b/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc
index 5470e9d978f..1ea1ee14598 100644
--- a/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc
+++ b/chromium/gpu/ipc/client/command_buffer_proxy_impl.cc
@@ -141,6 +141,7 @@ bool CommandBufferProxyImpl::OnMessageReceived(const IPC::Message& message) {
IPC_BEGIN_MESSAGE_MAP(CommandBufferProxyImpl, message)
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_Destroyed, OnDestroyed);
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_ConsoleMsg, OnConsoleMessage);
+ IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_GpuSwitched, OnGpuSwitched);
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SignalAck, OnSignalAck);
IPC_MESSAGE_HANDLER(GpuCommandBufferMsg_SwapBuffersCompleted,
OnSwapBuffersCompleted);
@@ -189,6 +190,11 @@ void CommandBufferProxyImpl::OnConsoleMessage(
message.id);
}
+void CommandBufferProxyImpl::OnGpuSwitched() {
+ if (gpu_control_client_)
+ gpu_control_client_->OnGpuSwitched();
+}
+
void CommandBufferProxyImpl::AddDeletionObserver(DeletionObserver* observer) {
std::unique_ptr<base::AutoLock> lock;
if (lock_)
diff --git a/chromium/gpu/ipc/client/command_buffer_proxy_impl.h b/chromium/gpu/ipc/client/command_buffer_proxy_impl.h
index 29740358774..67cecbdf8ee 100644
--- a/chromium/gpu/ipc/client/command_buffer_proxy_impl.h
+++ b/chromium/gpu/ipc/client/command_buffer_proxy_impl.h
@@ -178,6 +178,7 @@ class GPU_EXPORT CommandBufferProxyImpl : public gpu::CommandBuffer,
void OnDestroyed(gpu::error::ContextLostReason reason,
gpu::error::Error error);
void OnConsoleMessage(const GPUCommandBufferConsoleMessage& message);
+ void OnGpuSwitched();
void OnSignalAck(uint32_t id, const CommandBuffer::State& state);
void OnSwapBuffersCompleted(const SwapBuffersCompleteParams& params);
void OnBufferPresented(uint64_t swap_id,
diff --git a/chromium/gpu/ipc/client/gpu_channel_host.cc b/chromium/gpu/ipc/client/gpu_channel_host.cc
index d571329f3bd..4b8c1374bb0 100644
--- a/chromium/gpu/ipc/client/gpu_channel_host.cc
+++ b/chromium/gpu/ipc/client/gpu_channel_host.cc
@@ -98,10 +98,18 @@ bool GpuChannelHost::Send(IPC::Message* msg) {
bool signaled =
pending_sync.done_event->TimedWait(kGpuChannelHostMaxWaitTime);
+ base::TimeDelta wait_duration = base::TimeTicks::Now() - start_time;
+
// Histogram of wait-for-sync time, used for monitoring the GPU watchdog.
- UMA_HISTOGRAM_CUSTOM_TIMES(
- "GPU.GPUChannelHostWaitTime", base::TimeTicks::Now() - start_time,
- base::TimeDelta::FromSeconds(1), kGpuChannelHostMaxWaitTime, 50);
+ UMA_HISTOGRAM_CUSTOM_TIMES("GPU.GPUChannelHostWaitTime2", wait_duration,
+ base::TimeDelta::FromSeconds(1),
+ kGpuChannelHostMaxWaitTime, 50);
+
+ // Histogram to measure how long the browser UI thread spends blocked.
+ UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
+ "GPU.GPUChannelHostWaitTime.MicroSeconds", wait_duration,
+ base::TimeDelta::FromMicroseconds(10), base::TimeDelta::FromSeconds(10),
+ 50);
// Continue waiting for the event if not signaled
if (!signaled)
diff --git a/chromium/gpu/ipc/client/image_decode_accelerator_proxy.cc b/chromium/gpu/ipc/client/image_decode_accelerator_proxy.cc
index 7765f6eff41..76029007347 100644
--- a/chromium/gpu/ipc/client/image_decode_accelerator_proxy.cc
+++ b/chromium/gpu/ipc/client/image_decode_accelerator_proxy.cc
@@ -4,23 +4,18 @@
#include "gpu/ipc/client/image_decode_accelerator_proxy.h"
-#include <string.h>
-
#include <algorithm>
#include <memory>
#include <utility>
#include <vector>
#include "base/logging.h"
-#include "base/numerics/safe_conversions.h"
+#include "cc/paint/paint_image.h"
#include "gpu/command_buffer/common/constants.h"
#include "gpu/config/gpu_info.h"
#include "gpu/ipc/client/gpu_channel_host.h"
#include "gpu/ipc/common/command_buffer_id.h"
#include "gpu/ipc/common/gpu_messages.h"
-#include "media/parsers/jpeg_parser.h"
-#include "media/parsers/vp8_parser.h"
-#include "media/parsers/webp_parser.h"
#include "ui/gfx/color_space.h"
#include "ui/gfx/geometry/size.h"
@@ -28,126 +23,67 @@ namespace gpu {
namespace {
-bool IsJpegImage(base::span<const uint8_t> encoded_data) {
- if (encoded_data.size() < 3u)
- return false;
- return memcmp("\xFF\xD8\xFF", encoded_data.data(), 3u) == 0;
-}
-
-ImageDecodeAcceleratorType GetImageType(
- base::span<const uint8_t> encoded_data) {
- static_assert(static_cast<int>(ImageDecodeAcceleratorType::kMaxValue) == 2,
- "GetImageType() must be adapted to support all image types in "
- "ImageDecodeAcceleratorType");
-
- if (IsJpegImage(encoded_data))
- return ImageDecodeAcceleratorType::kJpeg;
-
- if (media::IsLossyWebPImage(encoded_data))
- return ImageDecodeAcceleratorType::kWebP;
-
- return ImageDecodeAcceleratorType::kUnknown;
-}
-
-bool GetJpegSubsampling(const media::JpegParseResult& parse_result,
- ImageDecodeAcceleratorSubsampling* subsampling) {
- static_assert(
- static_cast<int>(ImageDecodeAcceleratorSubsampling::kMaxValue) == 2,
- "GetJpegSubsampling() must be adapted to support all "
- "subsampling factors in ImageDecodeAcceleratorSubsampling");
-
- // Currently, only 3 components are supported (this excludes, for example,
- // grayscale and CMYK JPEGs).
- if (parse_result.frame_header.num_components != 3u)
- return false;
-
- const uint8_t comp0_h =
- parse_result.frame_header.components[0].horizontal_sampling_factor;
- const uint8_t comp0_v =
- parse_result.frame_header.components[0].vertical_sampling_factor;
- const uint8_t comp1_h =
- parse_result.frame_header.components[1].horizontal_sampling_factor;
- const uint8_t comp1_v =
- parse_result.frame_header.components[1].vertical_sampling_factor;
- const uint8_t comp2_h =
- parse_result.frame_header.components[2].horizontal_sampling_factor;
- const uint8_t comp2_v =
- parse_result.frame_header.components[2].vertical_sampling_factor;
-
- if (comp1_h != 1u || comp1_v != 1u || comp2_h != 1u || comp2_v != 1u)
- return false;
-
- if (comp0_h == 2u && comp0_v == 2u) {
- *subsampling = ImageDecodeAcceleratorSubsampling::k420;
- return true;
- } else if (comp0_h == 2u && comp0_v == 1u) {
- *subsampling = ImageDecodeAcceleratorSubsampling::k422;
- return true;
- } else if (comp0_h == 1u && comp0_v == 1u) {
- *subsampling = ImageDecodeAcceleratorSubsampling::k444;
- return true;
- }
- return false;
+// TODO(crbug.com/984971): for WebPs we may need to compute the coded size
+// instead and check that against the supported dimensions.
+bool IsSupportedImageSize(
+ const cc::ImageHeaderMetadata* image_data,
+ const ImageDecodeAcceleratorSupportedProfile& supported_profile) {
+ DCHECK(image_data);
+
+ gfx::Size image_size;
+ if (image_data->coded_size.has_value())
+ image_size = image_data->coded_size.value();
+ else
+ image_size = image_data->image_size;
+
+ return image_size.width() >=
+ supported_profile.min_encoded_dimensions.width() &&
+ image_size.height() >=
+ supported_profile.min_encoded_dimensions.height() &&
+ image_size.width() <=
+ supported_profile.max_encoded_dimensions.width() &&
+ image_size.height() <=
+ supported_profile.max_encoded_dimensions.height();
}
bool IsSupportedJpegImage(
- base::span<const uint8_t> encoded_data,
+ const cc::ImageHeaderMetadata* image_data,
const ImageDecodeAcceleratorSupportedProfile& supported_profile) {
- DCHECK(IsJpegImage(encoded_data));
+ DCHECK(image_data);
+ DCHECK_EQ(cc::ImageType::kJPEG, image_data->image_type);
DCHECK_EQ(ImageDecodeAcceleratorType::kJpeg, supported_profile.image_type);
- // First, parse the JPEG file. This fails for progressive JPEGs (which we
- // don't support anyway).
- media::JpegParseResult parse_result;
- if (!media::ParseJpegPicture(encoded_data.data(), encoded_data.size(),
- &parse_result)) {
+ DCHECK(image_data->jpeg_is_progressive.has_value());
+ if (image_data->jpeg_is_progressive.value())
return false;
- }
- // Now, check the chroma subsampling format.
+ // Check the chroma subsampling format.
+ static_assert(
+ // TODO(andrescj): refactor to instead have a static_assert at the
+ // declaration site of ImageDecodeAcceleratorSubsampling to make sure it
+ // has the same number of entries as cc::YUVSubsampling.
+ static_cast<int>(ImageDecodeAcceleratorSubsampling::kMaxValue) == 2,
+ "IsSupportedJpegImage() must be adapted to support all subsampling "
+ "factors in ImageDecodeAcceleratorSubsampling");
ImageDecodeAcceleratorSubsampling subsampling;
- if (!GetJpegSubsampling(parse_result, &subsampling))
- return false;
- if (std::find(supported_profile.subsamplings.cbegin(),
- supported_profile.subsamplings.cend(),
- subsampling) == supported_profile.subsamplings.cend()) {
- return false;
- }
-
- // Now, check the dimensions.
- const int encoded_width =
- base::strict_cast<int>(parse_result.frame_header.coded_width);
- const int encoded_height =
- base::strict_cast<int>(parse_result.frame_header.coded_height);
- if (encoded_width < supported_profile.min_encoded_dimensions.width() ||
- encoded_height < supported_profile.min_encoded_dimensions.height() ||
- encoded_width > supported_profile.max_encoded_dimensions.width() ||
- encoded_height > supported_profile.max_encoded_dimensions.height()) {
- return false;
+ switch (image_data->yuv_subsampling) {
+ case cc::YUVSubsampling::k420:
+ subsampling = ImageDecodeAcceleratorSubsampling::k420;
+ break;
+ case cc::YUVSubsampling::k422:
+ subsampling = ImageDecodeAcceleratorSubsampling::k422;
+ break;
+ case cc::YUVSubsampling::k444:
+ subsampling = ImageDecodeAcceleratorSubsampling::k444;
+ break;
+ default:
+ // Currently not supporting any other subsampling format.
+ return false;
}
- return true;
-}
-
-bool IsSupportedWebPImage(
- base::span<const uint8_t> encoded_data,
- const ImageDecodeAcceleratorSupportedProfile& supported_profile) {
- DCHECK(media::IsLossyWebPImage(encoded_data));
- DCHECK_EQ(ImageDecodeAcceleratorType::kWebP, supported_profile.image_type);
-
- const std::unique_ptr<media::Vp8FrameHeader> parse_result =
- media::ParseWebPImage(encoded_data);
- if (!parse_result)
- return false;
-
- // TODO(crbug.com/984971): we may need to compute the coded size instead and
- // check that against the supported dimensions.
- const int width = base::strict_cast<int>(parse_result->width);
- const int height = base::strict_cast<int>(parse_result->height);
- return width >= supported_profile.min_encoded_dimensions.width() &&
- height >= supported_profile.min_encoded_dimensions.height() &&
- width <= supported_profile.max_encoded_dimensions.width() &&
- height <= supported_profile.max_encoded_dimensions.height();
+ return std::find(supported_profile.subsamplings.cbegin(),
+ supported_profile.subsamplings.cend(),
+ subsampling) != supported_profile.subsamplings.cend();
}
} // namespace
@@ -159,13 +95,39 @@ ImageDecodeAcceleratorProxy::ImageDecodeAcceleratorProxy(GpuChannelHost* host,
ImageDecodeAcceleratorProxy::~ImageDecodeAcceleratorProxy() {}
bool ImageDecodeAcceleratorProxy::IsImageSupported(
- base::span<const uint8_t> encoded_data) const {
+ const cc::ImageHeaderMetadata* image_metadata) const {
DCHECK(host_);
- const ImageDecodeAcceleratorType image_type = GetImageType(encoded_data);
- if (image_type == ImageDecodeAcceleratorType::kUnknown)
+ if (!image_metadata)
+ return false;
+
+ // Image is supported only if all the encoded data was received prior to any
+ // decoding work. Otherwise, it means that the software decoder has already
+ // started decoding the image, so we just let it finish.
+ if (!image_metadata->all_data_received_prior_to_decode)
return false;
+ // Image is supported only if the image doesn't have an embedded color space.
+ // This is because we don't currently send the embedded color profile with the
+ // decode request.
+ if (image_metadata->has_embedded_color_profile)
+ return false;
+
+ static_assert(static_cast<int>(ImageDecodeAcceleratorType::kMaxValue) == 2,
+ "IsImageSupported() must be adapted to support all image types "
+ "in ImageDecodeAcceleratorType");
+ ImageDecodeAcceleratorType image_type = ImageDecodeAcceleratorType::kUnknown;
+ switch (image_metadata->image_type) {
+ case cc::ImageType::kJPEG:
+ image_type = ImageDecodeAcceleratorType::kJpeg;
+ break;
+ case cc::ImageType::kWEBP:
+ image_type = ImageDecodeAcceleratorType::kWebP;
+ break;
+ default:
+ return false;
+ }
+
// Find the image decode accelerator supported profile according to the type
// of the image.
const std::vector<ImageDecodeAcceleratorSupportedProfile>& profiles =
@@ -178,19 +140,45 @@ bool ImageDecodeAcceleratorProxy::IsImageSupported(
if (profile_it == profiles.cend())
return false;
+ // Verify that the image size is supported.
+ if (!IsSupportedImageSize(image_metadata, *profile_it))
+ return false;
+
// Validate the image according to that profile.
switch (image_type) {
case ImageDecodeAcceleratorType::kJpeg:
- return IsSupportedJpegImage(encoded_data, *profile_it);
+ return IsSupportedJpegImage(image_metadata, *profile_it);
case ImageDecodeAcceleratorType::kWebP:
- return IsSupportedWebPImage(encoded_data, *profile_it);
+ DCHECK(image_metadata->webp_is_non_extended_lossy.has_value());
+ return image_metadata->webp_is_non_extended_lossy.value();
case ImageDecodeAcceleratorType::kUnknown:
- // No Op. Should not reach due to a check above.
+ // Should not reach due to a check above.
+ NOTREACHED();
break;
}
return false;
}
+bool ImageDecodeAcceleratorProxy::IsJpegDecodeAccelerationSupported() const {
+ const auto& profiles =
+ host_->gpu_info().image_decode_accelerator_supported_profiles;
+ for (const auto& profile : profiles) {
+ if (profile.image_type == ImageDecodeAcceleratorType::kJpeg)
+ return true;
+ }
+ return false;
+}
+
+bool ImageDecodeAcceleratorProxy::IsWebPDecodeAccelerationSupported() const {
+ const auto& profiles =
+ host_->gpu_info().image_decode_accelerator_supported_profiles;
+ for (const auto& profile : profiles) {
+ if (profile.image_type == ImageDecodeAcceleratorType::kWebP)
+ return true;
+ }
+ return false;
+}
+
SyncToken ImageDecodeAcceleratorProxy::ScheduleImageDecode(
base::span<const uint8_t> encoded_data,
const gfx::Size& output_size,
@@ -204,7 +192,6 @@ SyncToken ImageDecodeAcceleratorProxy::ScheduleImageDecode(
DCHECK(host_);
DCHECK_EQ(host_->channel_id(),
ChannelIdFromCommandBufferId(raster_decoder_command_buffer_id));
- DCHECK(IsImageSupported(encoded_data));
GpuChannelMsg_ScheduleImageDecode_Params params;
params.encoded_data =
diff --git a/chromium/gpu/ipc/client/image_decode_accelerator_proxy.h b/chromium/gpu/ipc/client/image_decode_accelerator_proxy.h
index b40a3feda80..a47df5d6957 100644
--- a/chromium/gpu/ipc/client/image_decode_accelerator_proxy.h
+++ b/chromium/gpu/ipc/client/image_decode_accelerator_proxy.h
@@ -50,11 +50,18 @@ class ImageDecodeAcceleratorProxy : public ImageDecodeAcceleratorInterface {
ImageDecodeAcceleratorProxy(GpuChannelHost* host, int32_t route_id);
~ImageDecodeAcceleratorProxy() override;
- // Determines if an encoded image is supported by the hardware accelerator.
- // The ScheduleImageDecode() method should only be called for images for which
- // IsImageSupported() returns true. Otherwise, the client faces a GPU channel
- // teardown if the decode fails.
- bool IsImageSupported(base::span<const uint8_t> encoded_data) const override;
+ // Determines if |image_metadata| corresponds to an image that can be decoded
+ // using hardware decode acceleration. The ScheduleImageDecode() method should
+ // only be called for images for which IsImageSupported() returns true.
+ // Otherwise, the client faces a GPU channel teardown if the decode fails.
+ bool IsImageSupported(
+ const cc::ImageHeaderMetadata* image_metadata) const override;
+
+ // Determines if hardware decode acceleration is supported for JPEG images.
+ bool IsJpegDecodeAccelerationSupported() const override;
+
+ // Determines if hardware decode acceleration is supported for WebP images.
+ bool IsWebPDecodeAccelerationSupported() const override;
// Schedules a hardware-accelerated image decode on the GPU process. The image
// in |encoded_data| is decoded and scaled to |output_size|. Upon completion
diff --git a/chromium/gpu/ipc/common/BUILD.gn b/chromium/gpu/ipc/common/BUILD.gn
index 49c798f3d9b..9ff12f1a402 100644
--- a/chromium/gpu/ipc/common/BUILD.gn
+++ b/chromium/gpu/ipc/common/BUILD.gn
@@ -55,6 +55,7 @@ source_set("command_buffer_traits_sources") {
deps = [
"//base",
+ "//gpu/ipc/common:vulkan_ycbcr_info",
"//ui/gfx/ipc/buffer_types",
"//ui/gfx/ipc/geometry",
]
@@ -142,6 +143,8 @@ source_set("ipc_common_sources") {
if (is_android) {
sources += [
+ "android/scoped_surface_request_conduit.cc",
+ "android/scoped_surface_request_conduit.h",
"gpu_surface_lookup.cc",
"gpu_surface_lookup.h",
"gpu_surface_tracker.cc",
@@ -167,84 +170,13 @@ if (is_android) {
"//ui/gl",
]
visibility = [
+ "//android_webview/browser/gfx",
"//gpu/*",
"//media/gpu:gpu",
]
}
}
-if (is_android) {
- component("android_texture_owner") {
- sources = [
- "android/image_reader_gl_owner.cc",
- "android/image_reader_gl_owner.h",
- "android/scoped_surface_request_conduit.cc",
- "android/scoped_surface_request_conduit.h",
- "android/surface_texture_gl_owner.cc",
- "android/surface_texture_gl_owner.h",
- "android/texture_owner.cc",
- "android/texture_owner.h",
- ]
- configs += [ "//gpu:gpu_implementation" ]
- deps = [
- ":android_image_reader_utils",
- "//base",
- "//gpu/command_buffer/service:gles2_sources",
- "//gpu/command_buffer/service:service_sources",
- "//ui/gl",
- ]
- libs = [ "android" ]
- visibility = [
- "//gpu/*",
- "//media/gpu:gpu",
- "//content/browser:browser",
- ]
- }
-}
-
-if (is_android) {
- jumbo_static_library("android_texture_owner_test_support") {
- testonly = true
- sources = [
- "android/mock_abstract_texture.cc",
- "android/mock_abstract_texture.h",
- "android/mock_texture_owner.cc",
- "android/mock_texture_owner.h",
- ]
- deps = [
- ":android_texture_owner",
- "//base/test:test_support",
- "//gpu:test_support",
- "//testing/gmock",
- "//testing/gtest",
- "//ui/gl",
- "//ui/gl/init",
- ]
- }
-}
-
-if (is_android) {
- source_set("android_texture_owner_unittests") {
- testonly = true
- sources = [
- "android/image_reader_gl_owner_unittest.cc",
- "android/surface_texture_gl_owner_unittest.cc",
- ]
-
- deps = [
- ":android_texture_owner",
- ":android_texture_owner_test_support",
- "//base/test:test_support",
- "//gpu:test_support",
- "//media/base:base",
- "//testing/gmock",
- "//testing/gtest",
- "//ui/gl",
- "//ui/gl/init",
- ]
- }
-}
-
# Depend on this to use surface_handle.h without pulling in all of gpu ipc.
source_set("surface_handle_type") {
public = [
@@ -256,7 +188,7 @@ source_set("surface_handle_type") {
]
}
-source_set("vulkan_ycbcr_info") {
+component("vulkan_ycbcr_info") {
sources = [
"vulkan_ycbcr_info.cc",
"vulkan_ycbcr_info.h",
@@ -264,6 +196,7 @@ source_set("vulkan_ycbcr_info") {
deps = [
"//base",
]
+ configs += [ "//gpu:gpu_implementation" ]
}
mojom("interfaces") {
diff --git a/chromium/gpu/ipc/common/DEPS b/chromium/gpu/ipc/common/DEPS
index 418e2243cec..3725d168c54 100644
--- a/chromium/gpu/ipc/common/DEPS
+++ b/chromium/gpu/ipc/common/DEPS
@@ -5,5 +5,4 @@ include_rules = [
"+mojo",
"+ui/base",
"+ui/latency",
- "+media/base/media_switches.h",
]
diff --git a/chromium/gpu/ipc/common/gpu_client_ids.h b/chromium/gpu/ipc/common/gpu_client_ids.h
index 4189674c43b..56302c370fd 100644
--- a/chromium/gpu/ipc/common/gpu_client_ids.h
+++ b/chromium/gpu/ipc/common/gpu_client_ids.h
@@ -22,6 +22,11 @@ constexpr int32_t kInProcessCommandBufferClientId = -1;
// namespace for these shaders.
constexpr int32_t kGrShaderCacheClientId = -2;
+// The ID used by PlatformVideoFramePool for video decoding buffer allocation
+// in the GPU process. These are never accessed on the host side so we can use
+// the same client ID for all clients.
+constexpr int32_t kPlatformVideoFramePoolClientId = -3;
+
inline bool IsReservedClientId(int32_t client_id) {
return client_id < 0;
}
diff --git a/chromium/gpu/ipc/common/gpu_command_buffer_traits.cc b/chromium/gpu/ipc/common/gpu_command_buffer_traits.cc
index da79b60bd23..0db1b8784e6 100644
--- a/chromium/gpu/ipc/common/gpu_command_buffer_traits.cc
+++ b/chromium/gpu/ipc/common/gpu_command_buffer_traits.cc
@@ -11,6 +11,7 @@
#include "gpu/command_buffer/common/mailbox_holder.h"
#include "gpu/command_buffer/common/sync_token.h"
#include "gpu/command_buffer/common/texture_in_use_response.h"
+#include "gpu/ipc/common/vulkan_ycbcr_info.h"
// Generate param traits write methods.
#include "ipc/param_traits_write_macros.h"
@@ -141,4 +142,41 @@ void ParamTraits<gpu::MailboxHolder>::Log(const param_type& p, std::string* l) {
*l += base::StringPrintf(":%04x@", p.texture_target);
}
+void ParamTraits<gpu::VulkanYCbCrInfo>::Write(base::Pickle* m,
+ const param_type& p) {
+ WriteParam(m, p.image_format);
+ WriteParam(m, p.external_format);
+ WriteParam(m, p.suggested_ycbcr_model);
+ WriteParam(m, p.suggested_ycbcr_range);
+ WriteParam(m, p.suggested_xchroma_offset);
+ WriteParam(m, p.suggested_ychroma_offset);
+ WriteParam(m, p.format_features);
+}
+
+bool ParamTraits<gpu::VulkanYCbCrInfo>::Read(const base::Pickle* m,
+ base::PickleIterator* iter,
+ param_type* p) {
+ if (!ReadParam(m, iter, &p->image_format) ||
+ !ReadParam(m, iter, &p->external_format) ||
+ !ReadParam(m, iter, &p->suggested_ycbcr_model) ||
+ !ReadParam(m, iter, &p->suggested_ycbcr_range) ||
+ !ReadParam(m, iter, &p->suggested_xchroma_offset) ||
+ !ReadParam(m, iter, &p->suggested_ychroma_offset) ||
+ !ReadParam(m, iter, &p->format_features)) {
+ return false;
+ }
+ return true;
+}
+
+// Note that we are casting uint64_t explicitly to long long otherwise it gets
+// implicit cast to long for 64 bit OS and long long for 32 bit OS.
+void ParamTraits<gpu::VulkanYCbCrInfo>::Log(const param_type& p,
+ std::string* l) {
+ *l += base::StringPrintf(
+ "[%u] , [%llu], [%u], [%u], [%u], [%u], [%u]", p.image_format,
+ static_cast<long long>(p.external_format), p.suggested_ycbcr_model,
+ p.suggested_ycbcr_range, p.suggested_xchroma_offset,
+ p.suggested_ychroma_offset, p.format_features);
+}
+
} // namespace IPC
diff --git a/chromium/gpu/ipc/common/gpu_command_buffer_traits.h b/chromium/gpu/ipc/common/gpu_command_buffer_traits.h
index 5b1ff5c20ab..25a300b16f5 100644
--- a/chromium/gpu/ipc/common/gpu_command_buffer_traits.h
+++ b/chromium/gpu/ipc/common/gpu_command_buffer_traits.h
@@ -15,6 +15,7 @@ struct Mailbox;
struct MailboxHolder;
struct SyncToken;
struct TextureInUseResponse;
+struct VulkanYCbCrInfo;
}
namespace IPC {
@@ -59,6 +60,16 @@ struct GPU_EXPORT ParamTraits<gpu::MailboxHolder> {
static void Log(const param_type& p, std::string* l);
};
+template <>
+struct GPU_EXPORT ParamTraits<gpu::VulkanYCbCrInfo> {
+ using param_type = gpu::VulkanYCbCrInfo;
+ static void Write(base::Pickle* m, const param_type& p);
+ static bool Read(const base::Pickle* m,
+ base::PickleIterator* iter,
+ param_type* p);
+ static void Log(const param_type& p, std::string* l);
+};
+
} // namespace IPC
#endif // GPU_IPC_COMMON_GPU_COMMAND_BUFFER_TRAITS_H_
diff --git a/chromium/gpu/ipc/common/gpu_extra_info.mojom b/chromium/gpu/ipc/common/gpu_extra_info.mojom
index 1144d653323..f3f45ce281f 100644
--- a/chromium/gpu/ipc/common/gpu_extra_info.mojom
+++ b/chromium/gpu/ipc/common/gpu_extra_info.mojom
@@ -12,6 +12,7 @@ struct ANGLEFeature {
string description;
string bug;
string status;
+ string condition;
};
// gpu:GpuExtraInfo
diff --git a/chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.cc b/chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.cc
index e124f1eafff..19d27d8c313 100644
--- a/chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.cc
+++ b/chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.cc
@@ -13,7 +13,7 @@ bool StructTraits<gpu::mojom::ANGLEFeatureDataView, gpu::ANGLEFeature>::Read(
gpu::ANGLEFeature* out) {
return data.ReadName(&out->name) && data.ReadCategory(&out->category) &&
data.ReadDescription(&out->description) && data.ReadBug(&out->bug) &&
- data.ReadStatus(&out->status);
+ data.ReadStatus(&out->status) && data.ReadCondition(&out->condition);
}
// static
diff --git a/chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.h b/chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.h
index 4f1a676bb1f..9fd5c226490 100644
--- a/chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.h
+++ b/chromium/gpu/ipc/common/gpu_extra_info_mojom_traits.h
@@ -35,6 +35,10 @@ struct StructTraits<gpu::mojom::ANGLEFeatureDataView, gpu::ANGLEFeature> {
static const std::string& status(const gpu::ANGLEFeature& input) {
return input.status;
}
+
+ static const std::string& condition(const gpu::ANGLEFeature& input) {
+ return input.condition;
+ }
};
template <>
diff --git a/chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.cc b/chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.cc
index 43e7e85f5f4..b409a511572 100644
--- a/chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.cc
+++ b/chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.cc
@@ -22,7 +22,7 @@ bool StructTraits<gpu::mojom::GpuFeatureInfoDataView, gpu::GpuFeatureInfo>::
data.ReadDisabledWebglExtensions(&out->disabled_webgl_extensions) &&
data.ReadAppliedGpuBlacklistEntries(
&out->applied_gpu_blacklist_entries) &&
- gpu::GpuBlacklist::AreEntryIndicesValid(
+ gpu::GpuBlocklist::AreEntryIndicesValid(
out->applied_gpu_blacklist_entries) &&
data.ReadAppliedGpuDriverBugListEntries(
&out->applied_gpu_driver_bug_list_entries) &&
diff --git a/chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.h b/chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.h
index 78b8a562dec..bc660e28ff1 100644
--- a/chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.h
+++ b/chromium/gpu/ipc/common/gpu_feature_info_mojom_traits.h
@@ -5,7 +5,7 @@
#ifndef GPU_IPC_COMMON_GPU_FEATURE_INFO_MOJOM_TRAITS_H_
#define GPU_IPC_COMMON_GPU_FEATURE_INFO_MOJOM_TRAITS_H_
-#include "gpu/config/gpu_blacklist.h"
+#include "gpu/config/gpu_blocklist.h"
#include "gpu/config/gpu_driver_bug_list.h"
#include "gpu/config/gpu_feature_info.h"
#include "gpu/ipc/common/gpu_feature_info.mojom.h"
diff --git a/chromium/gpu/ipc/common/gpu_info.mojom b/chromium/gpu/ipc/common/gpu_info.mojom
index d9542f586ff..d0f8b34f23f 100644
--- a/chromium/gpu/ipc/common/gpu_info.mojom
+++ b/chromium/gpu/ipc/common/gpu_info.mojom
@@ -13,6 +13,10 @@ import "ui/gfx/geometry/mojom/geometry.mojom";
struct GpuDevice {
uint32 vendor_id;
uint32 device_id;
+ [EnableIf=is_win]
+ uint32 sub_sys_id;
+ [EnableIf=is_win]
+ uint32 revision;
bool active;
string vendor_string;
string device_string;
@@ -72,6 +76,7 @@ struct VideoDecodeAcceleratorCapabilities {
// gpu::VideoEncodeAcceleratorSupportedProfile
struct VideoEncodeAcceleratorSupportedProfile {
VideoCodecProfile profile;
+ gfx.mojom.Size min_resolution;
gfx.mojom.Size max_resolution;
uint32 max_framerate_numerator;
uint32 max_framerate_denominator;
diff --git a/chromium/gpu/ipc/common/gpu_info_mojom_traits.cc b/chromium/gpu/ipc/common/gpu_info_mojom_traits.cc
index 7a6596058ad..f777a5195e6 100644
--- a/chromium/gpu/ipc/common/gpu_info_mojom_traits.cc
+++ b/chromium/gpu/ipc/common/gpu_info_mojom_traits.cc
@@ -16,6 +16,10 @@ bool StructTraits<gpu::mojom::GpuDeviceDataView, gpu::GPUInfo::GPUDevice>::Read(
gpu::GPUInfo::GPUDevice* out) {
out->vendor_id = data.vendor_id();
out->device_id = data.device_id();
+#if defined(OS_WIN)
+ out->sub_sys_id = data.sub_sys_id();
+ out->revision = data.revision();
+#endif // OS_WIN
out->active = data.active();
out->cuda_compute_capability_major = data.cuda_compute_capability_major();
return data.ReadVendorString(&out->vendor_string) &&
@@ -224,8 +228,9 @@ bool StructTraits<gpu::mojom::VideoEncodeAcceleratorSupportedProfileDataView,
gpu::VideoEncodeAcceleratorSupportedProfile* out) {
out->max_framerate_numerator = data.max_framerate_numerator();
out->max_framerate_denominator = data.max_framerate_denominator();
- return data.ReadProfile(&out->profile) &&
- data.ReadMaxResolution(&out->max_resolution);
+ return data.ReadMinResolution(&out->min_resolution) &&
+ data.ReadMaxResolution(&out->max_resolution) &&
+ data.ReadProfile(&out->profile);
}
// static
diff --git a/chromium/gpu/ipc/common/gpu_info_mojom_traits.h b/chromium/gpu/ipc/common/gpu_info_mojom_traits.h
index d2dea034795..b617a1781e6 100644
--- a/chromium/gpu/ipc/common/gpu_info_mojom_traits.h
+++ b/chromium/gpu/ipc/common/gpu_info_mojom_traits.h
@@ -27,6 +27,16 @@ struct StructTraits<gpu::mojom::GpuDeviceDataView, gpu::GPUInfo::GPUDevice> {
return input.device_id;
}
+#if defined(OS_WIN)
+ static uint32_t sub_sys_id(const gpu::GPUInfo::GPUDevice& input) {
+ return input.sub_sys_id;
+ }
+
+ static uint32_t revision(const gpu::GPUInfo::GPUDevice& input) {
+ return input.revision;
+ }
+#endif // OS_WIN
+
static bool active(const gpu::GPUInfo::GPUDevice& input) {
return input.active;
}
@@ -121,6 +131,11 @@ struct StructTraits<gpu::mojom::VideoEncodeAcceleratorSupportedProfileDataView,
return input.profile;
}
+ static const gfx::Size& min_resolution(
+ const gpu::VideoEncodeAcceleratorSupportedProfile& input) {
+ return input.min_resolution;
+ }
+
static const gfx::Size& max_resolution(
const gpu::VideoEncodeAcceleratorSupportedProfile& input) {
return input.max_resolution;
diff --git a/chromium/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc b/chromium/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc
index e2d7d5d6d7d..537491d960d 100644
--- a/chromium/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc
+++ b/chromium/gpu/ipc/common/gpu_memory_buffer_impl_io_surface.cc
@@ -30,6 +30,7 @@ uint32_t LockFlags(gfx::BufferUsage usage) {
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
case gfx::BufferUsage::SCANOUT_CPU_READ_WRITE:
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
+ case gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE:
return 0;
}
NOTREACHED();
diff --git a/chromium/gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.cc b/chromium/gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.cc
index 00f86254b99..d581fcff6f8 100644
--- a/chromium/gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.cc
+++ b/chromium/gpu/ipc/common/gpu_memory_buffer_impl_native_pixmap.cc
@@ -56,7 +56,8 @@ GpuMemoryBufferImplNativePixmap::CreateFromHandle(
std::unique_ptr<gfx::ClientNativePixmap> native_pixmap =
client_native_pixmap_factory->ImportFromHandle(
CloneHandleForIPC(handle.native_pixmap_handle), size, format, usage);
- DCHECK(native_pixmap);
+ if (!native_pixmap)
+ return nullptr;
return base::WrapUnique(new GpuMemoryBufferImplNativePixmap(
handle.id, size, format, std::move(callback), std::move(native_pixmap),
diff --git a/chromium/gpu/ipc/common/gpu_memory_buffer_impl_shared_memory.cc b/chromium/gpu/ipc/common/gpu_memory_buffer_impl_shared_memory.cc
index e5127037f2c..a97204a0242 100644
--- a/chromium/gpu/ipc/common/gpu_memory_buffer_impl_shared_memory.cc
+++ b/chromium/gpu/ipc/common/gpu_memory_buffer_impl_shared_memory.cc
@@ -163,6 +163,7 @@ bool GpuMemoryBufferImplSharedMemory::IsUsageSupported(gfx::BufferUsage usage) {
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
+ case gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE:
return false;
}
NOTREACHED();
diff --git a/chromium/gpu/ipc/common/gpu_memory_buffer_impl_test_template.h b/chromium/gpu/ipc/common/gpu_memory_buffer_impl_test_template.h
index c2499ca71a6..907b55c14da 100644
--- a/chromium/gpu/ipc/common/gpu_memory_buffer_impl_test_template.h
+++ b/chromium/gpu/ipc/common/gpu_memory_buffer_impl_test_template.h
@@ -14,7 +14,7 @@
#include <memory>
#include "base/bind.h"
-#include "base/task/single_thread_task_executor.h"
+#include "base/test/task_environment.h"
#include "build/build_config.h"
#include "gpu/ipc/common/gpu_memory_buffer_support.h"
#include "mojo/public/cpp/base/shared_memory_mojom_traits.h"
@@ -23,7 +23,7 @@
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/mojom/buffer_types_mojom_traits.h"
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(USE_OZONE)
#include "ui/gl/init/gl_factory.h"
#include "ui/gl/test/gl_surface_test_support.h"
#endif
@@ -50,12 +50,16 @@ class GpuMemoryBufferImplTest : public testing::Test {
return &gpu_memory_buffer_support_;
}
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(USE_OZONE)
// Overridden from testing::Test:
void SetUp() override { gl::GLSurfaceTestSupport::InitializeOneOff(); }
void TearDown() override { gl::init::ShutdownGL(false); }
#endif
+ protected:
+ base::test::TaskEnvironment task_environment_{
+ base::test::TaskEnvironment::MainThreadType::UI};
+
private:
GpuMemoryBufferSupport gpu_memory_buffer_support_;
@@ -87,13 +91,16 @@ TYPED_TEST_P(GpuMemoryBufferImplTest, CreateFromHandle) {
const gfx::Size kBufferSize(8, 8);
for (auto format : gfx::GetBufferFormatsForTesting()) {
- gfx::BufferUsage usages[] = {gfx::BufferUsage::GPU_READ,
- gfx::BufferUsage::SCANOUT,
- gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
- gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
- gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
- gfx::BufferUsage::SCANOUT_VDA_WRITE,
- gfx::BufferUsage::GPU_READ_CPU_READ_WRITE};
+ gfx::BufferUsage usages[] = {
+ gfx::BufferUsage::GPU_READ,
+ gfx::BufferUsage::SCANOUT,
+ gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
+ gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VDA_WRITE,
+ gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE,
+ };
for (auto usage : usages) {
if (!TestFixture::gpu_memory_buffer_support()->IsConfigurationSupported(
TypeParam::kBufferType, format, usage)) {
@@ -124,13 +131,16 @@ TYPED_TEST_P(GpuMemoryBufferImplTest, CreateFromHandleSmallBuffer) {
const gfx::Size kBufferSize(8, 8);
for (auto format : gfx::GetBufferFormatsForTesting()) {
- gfx::BufferUsage usages[] = {gfx::BufferUsage::GPU_READ,
- gfx::BufferUsage::SCANOUT,
- gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
- gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
- gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
- gfx::BufferUsage::SCANOUT_VDA_WRITE,
- gfx::BufferUsage::GPU_READ_CPU_READ_WRITE};
+ gfx::BufferUsage usages[] = {
+ gfx::BufferUsage::GPU_READ,
+ gfx::BufferUsage::SCANOUT,
+ gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
+ gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VDA_WRITE,
+ gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE,
+ };
for (auto usage : usages) {
if (!TestFixture::gpu_memory_buffer_support()->IsConfigurationSupported(
TypeParam::kBufferType, format, usage)) {
@@ -291,18 +301,20 @@ TYPED_TEST_P(GpuMemoryBufferImplTest, PersistentMap) {
}
TYPED_TEST_P(GpuMemoryBufferImplTest, SerializeAndDeserialize) {
- base::SingleThreadTaskExecutor main_task_executor;
const gfx::Size kBufferSize(8, 8);
const gfx::GpuMemoryBufferType kBufferType = TypeParam::kBufferType;
for (auto format : gfx::GetBufferFormatsForTesting()) {
- gfx::BufferUsage usages[] = {gfx::BufferUsage::GPU_READ,
- gfx::BufferUsage::SCANOUT,
- gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
- gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
- gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
- gfx::BufferUsage::SCANOUT_VDA_WRITE,
- gfx::BufferUsage::GPU_READ_CPU_READ_WRITE};
+ gfx::BufferUsage usages[] = {
+ gfx::BufferUsage::GPU_READ,
+ gfx::BufferUsage::SCANOUT,
+ gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
+ gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VDA_WRITE,
+ gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE,
+ };
for (auto usage : usages) {
if (!TestFixture::gpu_memory_buffer_support()->IsConfigurationSupported(
TypeParam::kBufferType, format, usage))
diff --git a/chromium/gpu/ipc/common/gpu_memory_buffer_support.cc b/chromium/gpu/ipc/common/gpu_memory_buffer_support.cc
index fb9af388843..02f52ceeaea 100644
--- a/chromium/gpu/ipc/common/gpu_memory_buffer_support.cc
+++ b/chromium/gpu/ipc/common/gpu_memory_buffer_support.cc
@@ -84,6 +84,7 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferConfigurationSupported(
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
+ case gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE:
return false;
}
NOTREACHED();
@@ -103,13 +104,14 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferConfigurationSupported(
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
+ case gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE:
return false;
}
NOTREACHED();
return false;
#elif defined(USE_OZONE)
- return ui::OzonePlatform::EnsureInstance()->IsNativePixmapConfigSupported(
- format, usage);
+ return ui::OzonePlatform::GetInstance()->IsNativePixmapConfigSupported(format,
+ usage);
#elif defined(OS_LINUX)
return false; // TODO(julian.isorce): Add linux support.
#elif defined(OS_WIN)
@@ -123,11 +125,11 @@ bool GpuMemoryBufferSupport::IsNativeGpuMemoryBufferConfigurationSupported(
case gfx::BufferUsage::SCANOUT_VDA_WRITE:
case gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE:
case gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE:
- return false;
- default:
- NOTREACHED();
+ case gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE:
return false;
}
+ NOTREACHED();
+ return false;
#else
DCHECK_EQ(GetNativeGpuMemoryBufferType(), gfx::EMPTY_BUFFER);
return false;
diff --git a/chromium/gpu/ipc/common/gpu_memory_buffer_support.h b/chromium/gpu/ipc/common/gpu_memory_buffer_support.h
index 7e051c3f551..4963ff8719e 100644
--- a/chromium/gpu/ipc/common/gpu_memory_buffer_support.h
+++ b/chromium/gpu/ipc/common/gpu_memory_buffer_support.h
@@ -28,7 +28,7 @@ namespace gpu {
class GPU_EXPORT GpuMemoryBufferSupport {
public:
GpuMemoryBufferSupport();
- ~GpuMemoryBufferSupport();
+ virtual ~GpuMemoryBufferSupport();
// Returns the native GPU memory buffer factory type. Returns EMPTY_BUFFER
// type if native buffers are not supported.
@@ -53,7 +53,8 @@ class GPU_EXPORT GpuMemoryBufferSupport {
// should match what was used to allocate the |handle|. |callback|, if
// non-null, is called when instance is deleted, which is not necessarily on
// the same thread as this function was called on and instance was created on.
- std::unique_ptr<GpuMemoryBufferImpl> CreateGpuMemoryBufferImplFromHandle(
+ virtual std::unique_ptr<GpuMemoryBufferImpl>
+ CreateGpuMemoryBufferImplFromHandle(
gfx::GpuMemoryBufferHandle handle,
const gfx::Size& size,
gfx::BufferFormat format,
diff --git a/chromium/gpu/ipc/common/gpu_messages.h b/chromium/gpu/ipc/common/gpu_messages.h
index 49d6abafafd..2b8e00f1350 100644
--- a/chromium/gpu/ipc/common/gpu_messages.h
+++ b/chromium/gpu/ipc/common/gpu_messages.h
@@ -14,6 +14,7 @@
#include <vector>
#include "base/memory/shared_memory.h"
+#include "base/optional.h"
#include "base/unguessable_token.h"
#include "build/build_config.h"
#include "components/viz/common/resources/resource_format.h"
@@ -28,6 +29,7 @@
#include "gpu/ipc/common/gpu_command_buffer_traits.h"
#include "gpu/ipc/common/gpu_param_traits.h"
#include "gpu/ipc/common/surface_handle.h"
+#include "gpu/ipc/common/vulkan_ycbcr_info.h"
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_message_macros.h"
#include "ui/gfx/color_space.h"
@@ -228,6 +230,10 @@ IPC_MESSAGE_ROUTED1(GpuStreamTextureMsg_ForwardForSurfaceRequest,
// notifications.
IPC_MESSAGE_ROUTED0(GpuStreamTextureMsg_StartListening)
+// Inform the renderer that a new frame with VulkanYcbcrInfo is available.
+IPC_MESSAGE_ROUTED1(GpuStreamTextureMsg_FrameWithYcbcrInfoAvailable,
+ base::Optional<gpu::VulkanYCbCrInfo>)
+
// Inform the renderer that a new frame is available.
IPC_MESSAGE_ROUTED0(GpuStreamTextureMsg_FrameAvailable)
@@ -289,6 +295,9 @@ IPC_MESSAGE_ROUTED3(GpuCommandBufferMsg_AsyncFlush,
IPC_MESSAGE_ROUTED1(GpuCommandBufferMsg_ConsoleMsg,
GPUCommandBufferConsoleMessage /* msg */)
+// Sent by the GPU process to notify the renderer process of a GPU switch.
+IPC_MESSAGE_ROUTED0(GpuCommandBufferMsg_GpuSwitched)
+
// Register an existing shared memory transfer buffer. The id that can be
// used to identify the transfer buffer from a command buffer.
IPC_MESSAGE_ROUTED2(GpuCommandBufferMsg_RegisterTransferBuffer,
diff --git a/chromium/gpu/ipc/common/gpu_preferences.mojom b/chromium/gpu/ipc/common/gpu_preferences.mojom
index 99d465aa94e..3fd75af7210 100644
--- a/chromium/gpu/ipc/common/gpu_preferences.mojom
+++ b/chromium/gpu/ipc/common/gpu_preferences.mojom
@@ -14,7 +14,8 @@ import "ui/gfx/mojom/buffer_types.mojom";
enum VulkanImplementationName {
kNone = 0,
kNative = 1,
- kSwiftshader = 2,
+ kForcedNative = 2,
+ kSwiftshader = 3,
kLast = kSwiftshader,
};
diff --git a/chromium/gpu/ipc/common/gpu_preferences_mojom_traits.h b/chromium/gpu/ipc/common/gpu_preferences_mojom_traits.h
index 1cb00ea7228..a481a354458 100644
--- a/chromium/gpu/ipc/common/gpu_preferences_mojom_traits.h
+++ b/chromium/gpu/ipc/common/gpu_preferences_mojom_traits.h
@@ -28,6 +28,8 @@ struct EnumTraits<gpu::mojom::VulkanImplementationName,
return gpu::mojom::VulkanImplementationName::kNone;
case gpu::VulkanImplementationName::kNative:
return gpu::mojom::VulkanImplementationName::kNative;
+ case gpu::VulkanImplementationName::kForcedNative:
+ return gpu::mojom::VulkanImplementationName::kForcedNative;
case gpu::VulkanImplementationName::kSwiftshader:
return gpu::mojom::VulkanImplementationName::kSwiftshader;
}
@@ -43,6 +45,9 @@ struct EnumTraits<gpu::mojom::VulkanImplementationName,
case gpu::mojom::VulkanImplementationName::kNative:
*out = gpu::VulkanImplementationName::kNative;
return true;
+ case gpu::mojom::VulkanImplementationName::kForcedNative:
+ *out = gpu::VulkanImplementationName::kForcedNative;
+ return true;
case gpu::mojom::VulkanImplementationName::kSwiftshader:
*out = gpu::VulkanImplementationName::kSwiftshader;
return true;
diff --git a/chromium/gpu/ipc/common/gpu_watchdog_timeout.h b/chromium/gpu/ipc/common/gpu_watchdog_timeout.h
index 326841df282..07332c723ae 100644
--- a/chromium/gpu/ipc/common/gpu_watchdog_timeout.h
+++ b/chromium/gpu/ipc/common/gpu_watchdog_timeout.h
@@ -33,7 +33,7 @@ constexpr int kRestartFactor = 2;
// It takes longer to initialize GPU process in Windows. See
// https://crbug.com/949839 for details.
#if defined(OS_WIN)
-constexpr int kInitFactor = kRestartFactor;
+constexpr int kInitFactor = 4;
#else
constexpr int kInitFactor = 1;
#endif
@@ -43,7 +43,7 @@ constexpr int kInitFactor = 1;
// needs to be bigger than (kGpuWatchdogTimeout * kRestartFactor) for all
// platforms.
constexpr base::TimeDelta kGpuChannelHostMaxWaitTime =
- base::TimeDelta::FromSeconds(60);
+ base::TimeDelta::FromSeconds(120);
} // namespace gpu
diff --git a/chromium/gpu/ipc/common/mojom_traits_unittest.cc b/chromium/gpu/ipc/common/mojom_traits_unittest.cc
index 83346357783..07f4c8bd26a 100644
--- a/chromium/gpu/ipc/common/mojom_traits_unittest.cc
+++ b/chromium/gpu/ipc/common/mojom_traits_unittest.cc
@@ -11,7 +11,8 @@
#include "gpu/ipc/common/gpu_feature_info.mojom.h"
#include "gpu/ipc/common/gpu_feature_info_mojom_traits.h"
#include "gpu/ipc/common/traits_test_service.mojom.h"
-#include "mojo/public/cpp/bindings/binding_set.h"
+#include "mojo/public/cpp/bindings/receiver_set.h"
+#include "mojo/public/cpp/bindings/remote.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace gpu {
@@ -23,10 +24,10 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
StructTraitsTest() = default;
protected:
- mojom::TraitsTestServicePtr GetTraitsTestProxy() {
- mojom::TraitsTestServicePtr proxy;
- traits_test_bindings_.AddBinding(this, mojo::MakeRequest(&proxy));
- return proxy;
+ mojo::Remote<mojom::TraitsTestService> GetTraitsTestRemote() {
+ mojo::Remote<mojom::TraitsTestService> remote;
+ traits_test_receivers_.Add(this, remote.BindNewPipeAndPassReceiver());
+ return remote;
}
private:
@@ -83,7 +84,7 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
}
base::test::TaskEnvironment task_environment_;
- mojo::BindingSet<TraitsTestService> traits_test_bindings_;
+ mojo::ReceiverSet<TraitsTestService> traits_test_receivers_;
DISALLOW_COPY_AND_ASSIGN(StructTraitsTest);
};
@@ -93,9 +94,9 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
TEST_F(StructTraitsTest, DxDiagNode) {
gpu::DxDiagNode input;
input.values["abc"] = "123";
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::DxDiagNode output;
- proxy->EchoDxDiagNode(input, &output);
+ remote->EchoDxDiagNode(input, &output);
gpu::DxDiagNode test_dx_diag_node;
test_dx_diag_node.values["abc"] = "123";
@@ -107,20 +108,32 @@ TEST_F(StructTraitsTest, GPUDevice) {
// Using the values from gpu/config/gpu_info_collector_unittest.cc::nvidia_gpu
const uint32_t vendor_id = 0x10de;
const uint32_t device_id = 0x0df8;
+#if defined(OS_WIN)
+ const uint32_t sub_sys_id = 0xc0d8144d;
+ const uint32_t revision = 4u;
+#endif // OS_WIN
const std::string vendor_string = "vendor_string";
const std::string device_string = "device_string";
input.vendor_id = vendor_id;
input.device_id = device_id;
+#if defined(OS_WIN)
+ input.sub_sys_id = sub_sys_id;
+ input.revision = revision;
+#endif // OS_WIN
input.vendor_string = vendor_string;
input.device_string = device_string;
input.active = false;
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::GPUInfo::GPUDevice output;
- proxy->EchoGpuDevice(input, &output);
+ remote->EchoGpuDevice(input, &output);
EXPECT_EQ(vendor_id, output.vendor_id);
EXPECT_EQ(device_id, output.device_id);
+#if defined(OS_WIN)
+ EXPECT_EQ(sub_sys_id, output.sub_sys_id);
+ EXPECT_EQ(revision, output.revision);
+#endif // OS_WIN
EXPECT_FALSE(output.active);
EXPECT_TRUE(vendor_string.compare(output.vendor_string) == 0);
EXPECT_TRUE(device_string.compare(output.device_string) == 0);
@@ -213,14 +226,18 @@ TEST_F(StructTraitsTest, GpuInfo) {
input.rgba_visual = rgba_visual;
#endif
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::GPUInfo output;
- proxy->EchoGpuInfo(input, &output);
+ remote->EchoGpuInfo(input, &output);
EXPECT_EQ(optimus, output.optimus);
EXPECT_EQ(amd_switchable, output.amd_switchable);
EXPECT_EQ(gpu.vendor_id, output.gpu.vendor_id);
EXPECT_EQ(gpu.device_id, output.gpu.device_id);
+#if defined(OS_WIN)
+ EXPECT_EQ(gpu.sub_sys_id, output.gpu.sub_sys_id);
+ EXPECT_EQ(gpu.revision, output.gpu.revision);
+#endif // OS_WIN
EXPECT_EQ(gpu.active, output.gpu.active);
EXPECT_EQ(gpu.vendor_string, output.gpu.vendor_string);
EXPECT_EQ(gpu.device_string, output.gpu.device_string);
@@ -230,6 +247,10 @@ TEST_F(StructTraitsTest, GpuInfo) {
const gpu::GPUInfo::GPUDevice& actual_gpu = output.secondary_gpus[i];
EXPECT_EQ(expected_gpu.vendor_id, actual_gpu.vendor_id);
EXPECT_EQ(expected_gpu.device_id, actual_gpu.device_id);
+#if defined(OS_WIN)
+ EXPECT_EQ(expected_gpu.sub_sys_id, actual_gpu.sub_sys_id);
+ EXPECT_EQ(expected_gpu.revision, actual_gpu.revision);
+#endif // OS_WIN
EXPECT_EQ(expected_gpu.active, actual_gpu.active);
EXPECT_EQ(expected_gpu.vendor_string, actual_gpu.vendor_string);
EXPECT_EQ(expected_gpu.device_string, actual_gpu.device_string);
@@ -289,9 +310,9 @@ TEST_F(StructTraitsTest, GpuInfo) {
TEST_F(StructTraitsTest, EmptyGpuInfo) {
gpu::GPUInfo input;
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::GPUInfo output;
- proxy->EchoGpuInfo(input, &output);
+ remote->EchoGpuInfo(input, &output);
}
TEST_F(StructTraitsTest, Mailbox) {
@@ -299,9 +320,9 @@ TEST_F(StructTraitsTest, Mailbox) {
0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2};
gpu::Mailbox input;
input.SetName(mailbox_name);
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::Mailbox output;
- proxy->EchoMailbox(input, &output);
+ remote->EchoMailbox(input, &output);
gpu::Mailbox test_mailbox;
test_mailbox.SetName(mailbox_name);
EXPECT_EQ(test_mailbox, output);
@@ -328,9 +349,9 @@ TEST_F(StructTraitsTest, MailboxHolder) {
input.sync_token = sync_token;
input.texture_target = texture_target;
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::MailboxHolder output;
- proxy->EchoMailboxHolder(input, &output);
+ remote->EchoMailboxHolder(input, &output);
EXPECT_EQ(mailbox, output.mailbox);
EXPECT_EQ(sync_token, output.sync_token);
EXPECT_EQ(texture_target, output.texture_target);
@@ -343,9 +364,9 @@ TEST_F(StructTraitsTest, SyncToken) {
const uint64_t release_count = 0xdeadbeefdead;
gpu::SyncToken input(namespace_id, command_buffer_id, release_count);
input.SetVerifyFlush();
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::SyncToken output;
- proxy->EchoSyncToken(input, &output);
+ remote->EchoSyncToken(input, &output);
EXPECT_EQ(namespace_id, output.namespace_id());
EXPECT_EQ(command_buffer_id, output.command_buffer_id());
EXPECT_EQ(release_count, output.release_count());
@@ -368,9 +389,9 @@ TEST_F(StructTraitsTest, VideoDecodeAcceleratorSupportedProfile) {
input.min_resolution = min_resolution;
input.encrypted_only = false;
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::VideoDecodeAcceleratorSupportedProfile output;
- proxy->EchoVideoDecodeAcceleratorSupportedProfile(input, &output);
+ remote->EchoVideoDecodeAcceleratorSupportedProfile(input, &output);
EXPECT_EQ(profile, output.profile);
EXPECT_EQ(max_resolution, output.max_resolution);
EXPECT_EQ(min_resolution, output.min_resolution);
@@ -387,30 +408,32 @@ TEST_F(StructTraitsTest, VideoDecodeAcceleratorCapabilities) {
input.supported_profiles.push_back(
gpu::VideoDecodeAcceleratorSupportedProfile());
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::VideoDecodeAcceleratorCapabilities output;
- proxy->EchoVideoDecodeAcceleratorCapabilities(input, &output);
+ remote->EchoVideoDecodeAcceleratorCapabilities(input, &output);
EXPECT_EQ(flags, output.flags);
EXPECT_EQ(input.supported_profiles.size(), output.supported_profiles.size());
}
TEST_F(StructTraitsTest, VideoEncodeAcceleratorSupportedProfile) {
- const gpu::VideoCodecProfile profile =
- gpu::VideoCodecProfile::H264PROFILE_MAIN;
+ const gpu::VideoCodecProfile profile = VideoCodecProfile::H264PROFILE_MAIN;
+ const gfx::Size min_resolution(320, 180);
const gfx::Size max_resolution(1920, 1080);
const uint32_t max_framerate_numerator = 144;
const uint32_t max_framerate_denominator = 12;
gpu::VideoEncodeAcceleratorSupportedProfile input;
input.profile = profile;
+ input.min_resolution = min_resolution;
input.max_resolution = max_resolution;
input.max_framerate_numerator = max_framerate_numerator;
input.max_framerate_denominator = max_framerate_denominator;
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
gpu::VideoEncodeAcceleratorSupportedProfile output;
- proxy->EchoVideoEncodeAcceleratorSupportedProfile(input, &output);
+ remote->EchoVideoEncodeAcceleratorSupportedProfile(input, &output);
EXPECT_EQ(profile, output.profile);
+ EXPECT_EQ(min_resolution, output.min_resolution);
EXPECT_EQ(max_resolution, output.max_resolution);
EXPECT_EQ(max_framerate_numerator, output.max_framerate_numerator);
EXPECT_EQ(max_framerate_denominator, output.max_framerate_denominator);
@@ -422,9 +445,9 @@ TEST_F(StructTraitsTest, GpuPreferences) {
prefs.disable_gpu_watchdog = true;
prefs.enable_gpu_driver_debug_logging = true;
- mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
+ mojo::Remote<mojom::TraitsTestService> remote = GetTraitsTestRemote();
GpuPreferences echo;
- proxy->EchoGpuPreferences(prefs, &echo);
+ remote->EchoGpuPreferences(prefs, &echo);
EXPECT_TRUE(echo.gpu_startup_dialog);
EXPECT_TRUE(echo.disable_gpu_watchdog);
EXPECT_TRUE(echo.enable_gpu_driver_debug_logging);
diff --git a/chromium/gpu/ipc/common/vulkan_ycbcr_info.cc b/chromium/gpu/ipc/common/vulkan_ycbcr_info.cc
index e6d7fabbae5..50c1527587a 100644
--- a/chromium/gpu/ipc/common/vulkan_ycbcr_info.cc
+++ b/chromium/gpu/ipc/common/vulkan_ycbcr_info.cc
@@ -26,6 +26,9 @@ VulkanYCbCrInfo::VulkanYCbCrInfo(uint32_t image_format,
format_features(format_features) {
// One and only one of the format fields must be non-zero.
DCHECK((image_format == 0) ^ (external_format == 0));
+
+ // |format_features| must be set for external images.
+ DCHECK(external_format == 0 || format_features != 0);
}
} // namespace gpu
diff --git a/chromium/gpu/ipc/common/vulkan_ycbcr_info.h b/chromium/gpu/ipc/common/vulkan_ycbcr_info.h
index 2c99091512d..2c2612a4f73 100644
--- a/chromium/gpu/ipc/common/vulkan_ycbcr_info.h
+++ b/chromium/gpu/ipc/common/vulkan_ycbcr_info.h
@@ -6,11 +6,12 @@
#define GPU_IPC_COMMON_VULKAN_YCBCR_INFO_H_
#include <stdint.h>
+#include "gpu/gpu_export.h"
namespace gpu {
// Sampler Ycbcr conversion information.
-struct VulkanYCbCrInfo {
+struct GPU_EXPORT VulkanYCbCrInfo {
VulkanYCbCrInfo();
VulkanYCbCrInfo(uint32_t image_format,
uint64_t external_format,
@@ -51,8 +52,9 @@ struct VulkanYCbCrInfo {
uint32_t suggested_ychroma_offset;
// Describes the capabilities of the format when used with an image bound to
- // memory imported from buffer. Corresponds to vulkan type:
- // VkFormatFeatureFlags.
+ // memory imported from buffer. Must be set when for external-format image
+ // created from the Android hardware buffer. For regular (not external) images
+ // it can be set 0. Corresponds to Vulkan type: VkFormatFeatureFlags.
uint32_t format_features;
};
diff --git a/chromium/gpu/ipc/host/gpu_memory_buffer_support.cc b/chromium/gpu/ipc/host/gpu_memory_buffer_support.cc
index d5364ff767c..9c46b54ad5d 100644
--- a/chromium/gpu/ipc/host/gpu_memory_buffer_support.cc
+++ b/chromium/gpu/ipc/host/gpu_memory_buffer_support.cc
@@ -35,7 +35,9 @@ GpuMemoryBufferConfigurationSet GetNativeGpuMemoryBufferConfigurations(
gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
gfx::BufferUsage::SCANOUT_VDA_WRITE,
- gfx::BufferUsage::GPU_READ_CPU_READ_WRITE};
+ gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE,
+ };
for (auto format : kBufferFormats) {
for (auto usage : kUsages) {
diff --git a/chromium/gpu/ipc/host/shader_disk_cache.cc b/chromium/gpu/ipc/host/shader_disk_cache.cc
index a5ca7138fa3..73b90030a5c 100644
--- a/chromium/gpu/ipc/host/shader_disk_cache.cc
+++ b/chromium/gpu/ipc/host/shader_disk_cache.cc
@@ -469,6 +469,10 @@ void ShaderCacheFactory::ClearByPath(const base::FilePath& path,
base::OnceClosure callback) {
DCHECK(CalledOnValidThread());
DCHECK(!callback.is_null());
+ if (path.empty()) {
+ std::move(callback).Run();
+ return;
+ }
auto helper = std::make_unique<ShaderClearHelper>(this, GetByPath(path), path,
delete_begin, delete_end,
diff --git a/chromium/gpu/ipc/host/shader_disk_cache_unittest.cc b/chromium/gpu/ipc/host/shader_disk_cache_unittest.cc
index 50cc0a28e1d..6f53c16859d 100644
--- a/chromium/gpu/ipc/host/shader_disk_cache_unittest.cc
+++ b/chromium/gpu/ipc/host/shader_disk_cache_unittest.cc
@@ -79,6 +79,23 @@ TEST_F(ShaderDiskCacheTest, ClearsCache) {
EXPECT_EQ(0, cache->Size());
}
+TEST_F(ShaderDiskCacheTest, ClearByPathTriggersCallback) {
+ InitCache();
+ factory()->Get(kDefaultClientId)->Cache(kCacheKey, kCacheValue);
+ net::TestCompletionCallback test_callback;
+ factory()->ClearByPath(cache_path(), base::Time(), base::Time::Max(),
+ base::BindLambdaForTesting([&]() { test_callback.callback().Run(1); } ));
+ ASSERT_TRUE(test_callback.WaitForResult());
+}
+
+// Important for clearing in-memory profiles.
+TEST_F(ShaderDiskCacheTest, ClearByPathWithEmptyPathTriggersCallback) {
+ net::TestCompletionCallback test_callback;
+ factory()->ClearByPath(base::FilePath(), base::Time(), base::Time::Max(),
+ base::BindLambdaForTesting([&]() { test_callback.callback().Run(1); } ));
+ ASSERT_TRUE(test_callback.WaitForResult());
+}
+
// For https://crbug.com/663589.
TEST_F(ShaderDiskCacheTest, SafeToDeleteCacheMidEntryOpen) {
InitCache();
diff --git a/chromium/gpu/ipc/in_process_command_buffer.cc b/chromium/gpu/ipc/in_process_command_buffer.cc
index c5038c0ce1c..4b98aab3ca3 100644
--- a/chromium/gpu/ipc/in_process_command_buffer.cc
+++ b/chromium/gpu/ipc/in_process_command_buffer.cc
@@ -489,9 +489,8 @@ gpu::ContextResult InProcessCommandBuffer::InitializeOnGpuThread(
base::trace_event::MemoryDumpManager::GetInstance()
->GetTracingProcessId();
memory_tracker = std::make_unique<GpuCommandBufferMemoryTracker>(
- kInProcessCommandBufferClientId, client_tracing_id,
- command_buffer_id_.GetUnsafeValue(), params.attribs.context_type,
- base::ThreadTaskRunnerHandle::Get());
+ command_buffer_id_, client_tracing_id, params.attribs.context_type,
+ base::ThreadTaskRunnerHandle::Get(), /* obserer=*/nullptr);
}
auto feature_info = base::MakeRefCounted<gles2::FeatureInfo>(
@@ -893,16 +892,16 @@ void InProcessCommandBuffer::OnParseError() {
GpuDriverBugWorkarounds workarounds(
GetGpuFeatureInfo().enabled_gpu_driver_bug_workarounds);
- // Work around issues with recovery by allowing a new GPU process to
- // launch.
- if (workarounds.exit_on_context_lost)
- gpu_channel_manager_delegate_->MaybeExitOnContextLost();
-
// Lose all other contexts.
if (gl::GLContext::LosesAllContextsOnContextLost() ||
(context_state_ && context_state_->use_virtualized_gl_contexts())) {
gpu_channel_manager_delegate_->LoseAllContexts();
}
+
+ // Work around issues with recovery by allowing a new GPU process to
+ // launch.
+ if (workarounds.exit_on_context_lost)
+ gpu_channel_manager_delegate_->MaybeExitOnContextLost();
}
}
}
diff --git a/chromium/gpu/ipc/service/BUILD.gn b/chromium/gpu/ipc/service/BUILD.gn
index 69386b28f8b..082ac932cfa 100644
--- a/chromium/gpu/ipc/service/BUILD.gn
+++ b/chromium/gpu/ipc/service/BUILD.gn
@@ -115,10 +115,6 @@ jumbo_component("service") {
"stream_texture_android.h",
]
libs += [ "android" ]
- deps += [
- "//gpu/command_buffer/service:shared_image_video",
- "//gpu/ipc/common:android_texture_owner",
- ]
}
if (is_linux) {
sources += [ "image_transport_surface_linux.cc" ]
@@ -154,6 +150,7 @@ source_set("test_support") {
"//testing/gtest:gtest",
]
deps = [
+ "//base/test:test_support",
"//gpu/ipc/common",
"//ui/gl:test_support",
]
diff --git a/chromium/gpu/ipc/service/command_buffer_stub.cc b/chromium/gpu/ipc/service/command_buffer_stub.cc
index 9096671ace9..e430c664365 100644
--- a/chromium/gpu/ipc/service/command_buffer_stub.cc
+++ b/chromium/gpu/ipc/service/command_buffer_stub.cc
@@ -98,7 +98,6 @@ DevToolsChannelData::CreateForChannel(GpuChannel* channel) {
} // namespace
-
CommandBufferStub::CommandBufferStub(
GpuChannel* channel,
const GPUCreateCommandBufferConfig& init_params,
@@ -657,9 +656,9 @@ std::unique_ptr<MemoryTracker> CommandBufferStub::CreateMemoryTracker(
return current_factory.Run(init_params);
return std::make_unique<GpuCommandBufferMemoryTracker>(
- channel_->client_id(), channel_->client_tracing_id(),
- command_buffer_id_.GetUnsafeValue(), init_params.attribs.context_type,
- channel_->task_runner());
+ command_buffer_id_, channel_->client_tracing_id(),
+ init_params.attribs.context_type, channel_->task_runner(),
+ channel_->gpu_channel_manager()->peak_memory_monitor());
}
// static
diff --git a/chromium/gpu/ipc/service/gles2_command_buffer_stub.cc b/chromium/gpu/ipc/service/gles2_command_buffer_stub.cc
index fb8f12356bc..98a27387fe5 100644
--- a/chromium/gpu/ipc/service/gles2_command_buffer_stub.cc
+++ b/chromium/gpu/ipc/service/gles2_command_buffer_stub.cc
@@ -427,6 +427,10 @@ MemoryTracker* GLES2CommandBufferStub::GetMemoryTracker() const {
return context_group_->memory_tracker();
}
+void GLES2CommandBufferStub::OnGpuSwitched() {
+ Send(new GpuCommandBufferMsg_GpuSwitched(route_id_));
+}
+
bool GLES2CommandBufferStub::HandleMessage(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(GLES2CommandBufferStub, message)
diff --git a/chromium/gpu/ipc/service/gles2_command_buffer_stub.h b/chromium/gpu/ipc/service/gles2_command_buffer_stub.h
index cb7ed845fee..9b3f695c233 100644
--- a/chromium/gpu/ipc/service/gles2_command_buffer_stub.h
+++ b/chromium/gpu/ipc/service/gles2_command_buffer_stub.h
@@ -39,6 +39,9 @@ class GPU_IPC_SERVICE_EXPORT GLES2CommandBufferStub
base::UnsafeSharedMemoryRegion shared_state_shm) override;
MemoryTracker* GetMemoryTracker() const override;
+ // DecoderClient implementation.
+ void OnGpuSwitched() override;
+
// ImageTransportSurfaceDelegate implementation:
#if defined(OS_WIN)
void DidCreateAcceleratedSurfaceChildWindow(
diff --git a/chromium/gpu/ipc/service/gpu_channel_manager.cc b/chromium/gpu/ipc/service/gpu_channel_manager.cc
index 6293897e2c5..1cacaa4c14c 100644
--- a/chromium/gpu/ipc/service/gpu_channel_manager.cc
+++ b/chromium/gpu/ipc/service/gpu_channel_manager.cc
@@ -52,6 +52,49 @@ const int kMaxKeepAliveTimeMs = 200;
#endif
}
+GpuChannelManager::GpuPeakMemoryMonitor::GpuPeakMemoryMonitor()
+ : weak_factory_(this) {}
+
+GpuChannelManager::GpuPeakMemoryMonitor::~GpuPeakMemoryMonitor() {}
+
+uint64_t GpuChannelManager::GpuPeakMemoryMonitor::GetPeakMemoryUsage(
+ uint32_t sequence_num) {
+ auto sequence = sequence_trackers_.find(sequence_num);
+ if (sequence != sequence_trackers_.end())
+ return sequence->second;
+ return 0u;
+}
+
+void GpuChannelManager::GpuPeakMemoryMonitor::StartGpuMemoryTracking(
+ uint32_t sequence_num) {
+ sequence_trackers_.emplace(sequence_num, current_memory_);
+}
+
+void GpuChannelManager::GpuPeakMemoryMonitor::StopGpuMemoryTracking(
+ uint32_t sequence_num) {
+ sequence_trackers_.erase(sequence_num);
+}
+
+void GpuChannelManager::GpuPeakMemoryMonitor::OnMemoryAllocatedChange(
+ CommandBufferId id,
+ uint64_t old_size,
+ uint64_t new_size) {
+ current_memory_ += new_size - old_size;
+ if (old_size < new_size) {
+ // When memory has increased, iterate over the sequences to update their
+ // peak.
+ // TODO(jonross): This should be fine if we typically have 1-2 sequences.
+ // However if that grows we may end up iterating many times are memory
+ // approaches peak. If that is the case we should track a
+ // |peak_since_last_sequence_update_| on the the memory changes. Then only
+ // update the sequences with a new one is added, or the peak is requested.
+ for (auto& sequence : sequence_trackers_) {
+ if (current_memory_ > sequence.second)
+ sequence.second = current_memory_;
+ }
+ }
+}
+
GpuChannelManager::GpuChannelManager(
const GpuPreferences& gpu_preferences,
GpuChannelManagerDelegate* delegate,
@@ -250,6 +293,16 @@ void GpuChannelManager::GetVideoMemoryUsageStats(
video_memory_usage_stats->bytes_allocated = total_size;
}
+void GpuChannelManager::StartPeakMemoryMonitor(uint32_t sequence_num) {
+ peak_memory_monitor_.StartGpuMemoryTracking(sequence_num);
+}
+
+uint64_t GpuChannelManager::GetPeakMemoryUsage(uint32_t sequence_num) {
+ uint64_t total_memory = peak_memory_monitor_.GetPeakMemoryUsage(sequence_num);
+ peak_memory_monitor_.StopGpuMemoryTracking(sequence_num);
+ return total_memory;
+}
+
#if defined(OS_ANDROID)
void GpuChannelManager::DidAccessGpu() {
last_gpu_access_time_ = base::TimeTicks::Now();
@@ -463,16 +516,16 @@ void GpuChannelManager::OnContextLost(bool synthetic_loss) {
if (synthetic_loss)
return;
- // Work around issues with recovery by allowing a new GPU process to launch.
- if (gpu_driver_bug_workarounds_.exit_on_context_lost)
- delegate_->MaybeExitOnContextLost();
-
// Lose all other contexts.
if (gl::GLContext::LosesAllContextsOnContextLost() ||
(shared_context_state_ &&
shared_context_state_->use_virtualized_gl_contexts())) {
delegate_->LoseAllContexts();
}
+
+ // Work around issues with recovery by allowing a new GPU process to launch.
+ if (gpu_driver_bug_workarounds_.exit_on_context_lost)
+ delegate_->MaybeExitOnContextLost();
}
void GpuChannelManager::ScheduleGrContextCleanup() {
diff --git a/chromium/gpu/ipc/service/gpu_channel_manager.h b/chromium/gpu/ipc/service/gpu_channel_manager.h
index 5ea38fb18a9..a8abfe5f4b0 100644
--- a/chromium/gpu/ipc/service/gpu_channel_manager.h
+++ b/chromium/gpu/ipc/service/gpu_channel_manager.h
@@ -12,6 +12,7 @@
#include <unordered_map>
#include <vector>
+#include "base/containers/flat_map.h"
#include "base/macros.h"
#include "base/memory/memory_pressure_listener.h"
#include "base/memory/ref_counted.h"
@@ -23,6 +24,7 @@
#include "gpu/command_buffer/common/constants.h"
#include "gpu/command_buffer/service/gr_cache_controller.h"
#include "gpu/command_buffer/service/gr_shader_cache.h"
+#include "gpu/command_buffer/service/memory_tracking.h"
#include "gpu/command_buffer/service/passthrough_discardable_manager.h"
#include "gpu/command_buffer/service/service_discardable_manager.h"
#include "gpu/command_buffer/service/shader_translator_cache.h"
@@ -138,6 +140,10 @@ class GPU_IPC_SERVICE_EXPORT GpuChannelManager
return gpu_memory_buffer_factory_;
}
+ MemoryTracker::Observer* peak_memory_monitor() {
+ return &peak_memory_monitor_;
+ }
+
#if defined(OS_ANDROID)
void DidAccessGpu();
void OnBackgroundCleanup();
@@ -157,6 +163,13 @@ class GPU_IPC_SERVICE_EXPORT GpuChannelManager
void GetVideoMemoryUsageStats(
VideoMemoryUsageStats* video_memory_usage_stats) const;
+ // Starts tracking the peak memory across all MemoryTrackers for
+ // |sequence_num|. Repeated calls with the same value are ignored.
+ void StartPeakMemoryMonitor(uint32_t sequence_num);
+
+ // Ends the tracking for |sequence_num| and returns the peak memory usage.
+ uint64_t GetPeakMemoryUsage(uint32_t sequence_num);
+
scoped_refptr<SharedContextState> GetSharedContextState(
ContextResult* result);
void ScheduleGrContextCleanup();
@@ -173,6 +186,37 @@ class GPU_IPC_SERVICE_EXPORT GpuChannelManager
void LoseAllContexts();
private:
+ friend class GpuChannelManagerTest;
+
+ // Observes changes in GPU memory, and tracks the peak usage for clients. The
+ // client is responsible for providing a unique |sequence_num| for each time
+ // period in which it wishes to track memory usage.
+ class GPU_IPC_SERVICE_EXPORT GpuPeakMemoryMonitor
+ : public MemoryTracker::Observer {
+ public:
+ GpuPeakMemoryMonitor();
+ ~GpuPeakMemoryMonitor() override;
+
+ uint64_t GetPeakMemoryUsage(uint32_t sequence_num);
+ void StartGpuMemoryTracking(uint32_t sequence_num);
+ void StopGpuMemoryTracking(uint32_t sequence_num);
+
+ private:
+ // MemoryTracker::Observer:
+ void OnMemoryAllocatedChange(CommandBufferId id,
+ uint64_t old_size,
+ uint64_t new_size) override;
+
+ // Tracks all currently requested sequences mapped to the peak memory seen.
+ base::flat_map<uint32_t, uint64_t> sequence_trackers_;
+
+ // Tracks the total current memory across all MemoryTrackers.
+ uint64_t current_memory_ = 0u;
+
+ base::WeakPtrFactory<GpuPeakMemoryMonitor> weak_factory_;
+ DISALLOW_COPY_AND_ASSIGN(GpuPeakMemoryMonitor);
+ };
+
void InternalDestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id, int client_id);
#if defined(OS_ANDROID)
@@ -251,6 +295,8 @@ class GPU_IPC_SERVICE_EXPORT GpuChannelManager
// viz::GpuServiceImpl. The raster decoders will use it for rasterization.
viz::MetalContextProvider* metal_context_provider_ = nullptr;
+ GpuPeakMemoryMonitor peak_memory_monitor_;
+
// Member variables should appear before the WeakPtrFactory, to ensure
// that any WeakPtrs to Controller are invalidated before its members
// variable's destructors are executed, rendering them invalid.
diff --git a/chromium/gpu/ipc/service/gpu_channel_manager_unittest.cc b/chromium/gpu/ipc/service/gpu_channel_manager_unittest.cc
index 5d170b3ed01..8e1d1a70109 100644
--- a/chromium/gpu/ipc/service/gpu_channel_manager_unittest.cc
+++ b/chromium/gpu/ipc/service/gpu_channel_manager_unittest.cc
@@ -5,6 +5,7 @@
#include <stddef.h>
#include <stdint.h>
+#include "gpu/command_buffer/service/memory_tracking.h"
#include "gpu/ipc/common/command_buffer_id.h"
#include "gpu/ipc/common/gpu_messages.h"
#include "gpu/ipc/service/gpu_channel.h"
@@ -19,6 +20,24 @@ class GpuChannelManagerTest : public GpuChannelTestCommon {
: GpuChannelTestCommon(true /* use_stub_bindings */) {}
~GpuChannelManagerTest() override = default;
+ GpuChannelManager::GpuPeakMemoryMonitor* gpu_peak_memory_monitor() {
+ return &channel_manager()->peak_memory_monitor_;
+ }
+
+ uint64_t GetMonitorsPeakMemoryUsage(uint32_t sequence_num) {
+ return channel_manager()->peak_memory_monitor_.GetPeakMemoryUsage(
+ sequence_num);
+ }
+
+ // Helpers to call MemoryTracker::Observer methods of
+ // GpuChannelManager::GpuPeakMemoryMonitor.
+ void OnMemoryAllocatedChange(CommandBufferId id,
+ uint64_t old_size,
+ uint64_t new_size) {
+ static_cast<MemoryTracker::Observer*>(gpu_peak_memory_monitor())
+ ->OnMemoryAllocatedChange(id, old_size, new_size);
+ }
+
#if defined(OS_ANDROID)
void TestApplicationBackgrounded(ContextType type,
bool should_destroy_channel) {
@@ -93,4 +112,81 @@ TEST_F(GpuChannelManagerTest, OnBackgroundedWithWebGL) {
#endif
+// Tests that peak memory usage is only reported for valid sequence numbers,
+// and that polling shuts down the monitoring.
+TEST_F(GpuChannelManagerTest, GpuPeakMemoryOnlyReportedForValidSequence) {
+ GpuChannelManager* manager = channel_manager();
+ const CommandBufferId buffer_id =
+ CommandBufferIdFromChannelAndRoute(42, 1337);
+ const uint64_t current_memory = 42;
+ OnMemoryAllocatedChange(buffer_id, 0u, current_memory);
+
+ const uint32_t sequence_num = 1;
+ manager->StartPeakMemoryMonitor(sequence_num);
+ EXPECT_EQ(current_memory, GetMonitorsPeakMemoryUsage(sequence_num));
+
+ // With no request to listen to memory it should report 0.
+ const uint32_t invalid_sequence_num = 1337;
+ EXPECT_EQ(0u, GetMonitorsPeakMemoryUsage(invalid_sequence_num));
+ EXPECT_EQ(0u, manager->GetPeakMemoryUsage(invalid_sequence_num));
+
+ // The valid sequence should receive a report.
+ EXPECT_EQ(current_memory, manager->GetPeakMemoryUsage(sequence_num));
+ // However it should be shut-down and no longer report anything.
+ EXPECT_EQ(0u, GetMonitorsPeakMemoryUsage(sequence_num));
+ EXPECT_EQ(0u, manager->GetPeakMemoryUsage(sequence_num));
+}
+
+// Tests that while a channel may exist for longer than a request to monitor,
+// that only peaks seen are reported.
+TEST_F(GpuChannelManagerTest,
+ GpuPeakMemoryOnlyReportsPeaksFromObservationTime) {
+ GpuChannelManager* manager = channel_manager();
+
+ const CommandBufferId buffer_id =
+ CommandBufferIdFromChannelAndRoute(42, 1337);
+ const uint64_t initial_memory = 42;
+ OnMemoryAllocatedChange(buffer_id, 0u, initial_memory);
+ const uint64_t reduced_memory = 2;
+ OnMemoryAllocatedChange(buffer_id, initial_memory, reduced_memory);
+
+ const uint32_t sequence_num = 1;
+ manager->StartPeakMemoryMonitor(sequence_num);
+ EXPECT_EQ(reduced_memory, GetMonitorsPeakMemoryUsage(sequence_num));
+
+ // While not the peak memory for the lifetime of |buffer_id| this should be
+ // the peak seen during the observation of |sequence_num|.
+ const uint64_t localized_peak_memory = 24;
+ OnMemoryAllocatedChange(buffer_id, reduced_memory, localized_peak_memory);
+ EXPECT_EQ(localized_peak_memory, manager->GetPeakMemoryUsage(sequence_num));
+}
+
+// Checks that when there are more than one sequence, that each has a separately
+// calulcated peak.
+TEST_F(GpuChannelManagerTest, GetPeakMemoryUsageCalculatedPerSequence) {
+ GpuChannelManager* manager = channel_manager();
+
+ const CommandBufferId buffer_id =
+ CommandBufferIdFromChannelAndRoute(42, 1337);
+ const uint64_t initial_memory = 42;
+ OnMemoryAllocatedChange(buffer_id, 0u, initial_memory);
+
+ // Start the first sequence so it is the only one to see the peak of
+ // |initial_memory|.
+ const uint32_t sequence_num_1 = 1;
+ manager->StartPeakMemoryMonitor(sequence_num_1);
+
+ // Reduce the memory before the second sequence starts.
+ const uint64_t reduced_memory = 2;
+ OnMemoryAllocatedChange(buffer_id, initial_memory, reduced_memory);
+
+ const uint32_t sequence_num_2 = 2;
+ manager->StartPeakMemoryMonitor(sequence_num_2);
+ const uint64_t localized_peak_memory = 24;
+ OnMemoryAllocatedChange(buffer_id, reduced_memory, localized_peak_memory);
+
+ EXPECT_EQ(initial_memory, manager->GetPeakMemoryUsage(sequence_num_1));
+ EXPECT_EQ(localized_peak_memory, manager->GetPeakMemoryUsage(sequence_num_2));
+}
+
} // namespace gpu
diff --git a/chromium/gpu/ipc/service/gpu_init.cc b/chromium/gpu/ipc/service/gpu_init.cc
index ec9fe283577..0aa6832893e 100644
--- a/chromium/gpu/ipc/service/gpu_init.cc
+++ b/chromium/gpu/ipc/service/gpu_init.cc
@@ -273,30 +273,6 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
->GetSupportedFormatsForTexturing();
#endif
-#if BUILDFLAG(ENABLE_VULKAN)
- if (gpu_preferences_.use_vulkan != gpu::VulkanImplementationName::kNone) {
- bool use_swiftshader = gpu_preferences_.use_vulkan ==
- gpu::VulkanImplementationName::kSwiftshader;
- const bool enforce_protected_memory =
- gpu_preferences_.enforce_vulkan_protected_memory;
- vulkan_implementation_ = gpu::CreateVulkanImplementation(
- use_swiftshader,
- enforce_protected_memory ? true : false /* allow_protected_memory */,
- enforce_protected_memory);
- if (!vulkan_implementation_ ||
- !vulkan_implementation_->InitializeVulkanInstance(
- !gpu_preferences_.disable_vulkan_surface)) {
- DLOG(ERROR) << "Failed to create and initialize Vulkan implementation.";
- vulkan_implementation_ = nullptr;
- CHECK(!gpu_preferences_.disable_vulkan_fallback_to_gl_for_testing);
- }
- if (!vulkan_implementation_)
- gpu_preferences_.use_vulkan = gpu::VulkanImplementationName::kNone;
- }
-#else
- gpu_preferences_.use_vulkan = gpu::VulkanImplementationName::kNone;
-#endif
-
if (!use_swiftshader) {
use_swiftshader = EnableSwiftShaderIfNeeded(
command_line, gpu_feature_info_,
@@ -327,30 +303,90 @@ bool GpuInit::InitializeAndStartSandbox(base::CommandLine* command_line,
gles2::PassthroughCommandDecoderSupported();
// We need to collect GL strings (VENDOR, RENDERER) for blacklisting purposes.
- if (!gl_disabled && !use_swiftshader) {
- if (!CollectGraphicsInfo(&gpu_info_, gpu_preferences_))
- return false;
- gpu::SetKeysForCrashLogging(gpu_info_);
- gpu_feature_info_ = gpu::ComputeGpuFeatureInfo(gpu_info_, gpu_preferences_,
- command_line, nullptr);
- use_swiftshader = EnableSwiftShaderIfNeeded(
- command_line, gpu_feature_info_,
- gpu_preferences_.disable_software_rasterizer, false);
- if (use_swiftshader) {
+ if (!gl_disabled) {
+ if (!use_swiftshader) {
+ if (!CollectGraphicsInfo(&gpu_info_, gpu_preferences_))
+ return false;
+ gpu::SetKeysForCrashLogging(gpu_info_);
+ gpu_feature_info_ = gpu::ComputeGpuFeatureInfo(
+ gpu_info_, gpu_preferences_, command_line, nullptr);
+ use_swiftshader = EnableSwiftShaderIfNeeded(
+ command_line, gpu_feature_info_,
+ gpu_preferences_.disable_software_rasterizer, false);
+ if (use_swiftshader) {
#if defined(OS_LINUX)
- VLOG(1) << "Quit GPU process launch to fallback to SwiftShader cleanly "
- << "on Linux";
- return false;
-#else
- gl::init::ShutdownGL(true);
- if (!gl::init::InitializeGLNoExtensionsOneOff()) {
- VLOG(1) << "gl::init::InitializeGLNoExtensionsOneOff with SwiftShader "
- << "failed";
+ VLOG(1) << "Quit GPU process launch to fallback to SwiftShader cleanly "
+ << "on Linux";
return false;
- }
+#else
+ gl::init::ShutdownGL(true);
+ if (!gl::init::InitializeGLNoExtensionsOneOff()) {
+ VLOG(1)
+ << "gl::init::InitializeGLNoExtensionsOneOff with SwiftShader "
+ << "failed";
+ return false;
+ }
#endif // OS_LINUX
+ }
+ } else { // use_swiftshader == true
+ switch (gpu_preferences_.use_vulkan) {
+ case gpu::VulkanImplementationName::kNative: {
+ // Collect GPU info, so we can use backlist to disable vulkan if it is
+ // needed.
+ gpu::GPUInfo gpu_info;
+ if (!CollectGraphicsInfo(&gpu_info, gpu_preferences_))
+ return false;
+ auto gpu_feature_info = gpu::ComputeGpuFeatureInfo(
+ gpu_info, gpu_preferences_, command_line, nullptr);
+ gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
+ gpu_feature_info.status_values[gpu::GPU_FEATURE_TYPE_VULKAN];
+ break;
+ }
+ case gpu::VulkanImplementationName::kForcedNative:
+ case gpu::VulkanImplementationName::kSwiftshader:
+ gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
+ gpu::kGpuFeatureStatusEnabled;
+ break;
+ case gpu::VulkanImplementationName::kNone:
+ gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
+ gpu::kGpuFeatureStatusDisabled;
+ break;
+ }
+ }
+ }
+
+#if BUILDFLAG(ENABLE_VULKAN)
+ if (gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] ==
+ gpu::kGpuFeatureStatusEnabled) {
+ DCHECK_NE(gpu_preferences_.use_vulkan,
+ gpu::VulkanImplementationName::kNone);
+ bool vulkan_use_swiftshader = gpu_preferences_.use_vulkan ==
+ gpu::VulkanImplementationName::kSwiftshader;
+ const bool enforce_protected_memory =
+ gpu_preferences_.enforce_vulkan_protected_memory;
+ vulkan_implementation_ = gpu::CreateVulkanImplementation(
+ vulkan_use_swiftshader,
+ enforce_protected_memory ? true : false /* allow_protected_memory */,
+ enforce_protected_memory);
+ if (!vulkan_implementation_ ||
+ !vulkan_implementation_->InitializeVulkanInstance(
+ !gpu_preferences_.disable_vulkan_surface)) {
+ DLOG(ERROR) << "Failed to create and initialize Vulkan implementation.";
+ vulkan_implementation_ = nullptr;
+ CHECK(!gpu_preferences_.disable_vulkan_fallback_to_gl_for_testing);
}
}
+ if (!vulkan_implementation_) {
+ gpu_preferences_.use_vulkan = gpu::VulkanImplementationName::kNone;
+ gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
+ gpu::kGpuFeatureStatusDisabled;
+ }
+
+#else
+ gpu_preferences_.use_vulkan = gpu::VulkanImplementationName::kNone;
+ gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
+ gpu::kGpuFeatureStatusDisabled;
+#endif
// Collect GPU process info
if (!gl_disabled) {
@@ -508,7 +544,6 @@ void GpuInit::InitializeInProcess(base::CommandLine* command_line,
ui::OzonePlatform::GetInstance()
->GetSurfaceFactoryOzone()
->GetSupportedFormatsForTexturing();
- ui::OzonePlatform::GetInstance()->AfterSandboxEntry();
#endif
bool needs_more_info = true;
#if !defined(IS_CHROMECAST)
diff --git a/chromium/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc b/chromium/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
index c06022446d1..5e5b56c6c34 100644
--- a/chromium/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
+++ b/chromium/gpu/ipc/service/gpu_memory_buffer_factory_io_surface.cc
@@ -11,6 +11,7 @@
#include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
#include "ui/gfx/buffer_format_util.h"
#include "ui/gfx/mac/io_surface.h"
+#include "ui/gl/buffer_format_utils.h"
#include "ui/gl/gl_bindings.h"
#include "ui/gl/gl_image_io_surface.h"
@@ -123,7 +124,7 @@ GpuMemoryBufferFactoryIOSurface::CreateImageForGpuMemoryBuffer(
return scoped_refptr<gl::GLImage>();
}
- unsigned internalformat = gpu::InternalFormatForGpuMemoryBufferFormat(format);
+ unsigned internalformat = gl::BufferFormatToGLInternalFormat(format);
scoped_refptr<gl::GLImageIOSurface> image(
gl::GLImageIOSurface::Create(size, internalformat));
if (!image->Initialize(it->second.get(), handle.id, format)) {
@@ -169,7 +170,7 @@ GpuMemoryBufferFactoryIOSurface::CreateAnonymousImage(const gfx::Size& size,
LOG(ERROR) << "Failed to create IOSurface mach port.";
}
- unsigned internalformat = gpu::InternalFormatForGpuMemoryBufferFormat(format);
+ unsigned internalformat = gl::BufferFormatToGLInternalFormat(format);
scoped_refptr<gl::GLImageIOSurface> image(
gl::GLImageIOSurface::Create(size, internalformat));
// Use an invalid GMB id so that we can differentiate between anonymous and
diff --git a/chromium/gpu/ipc/service/gpu_memory_buffer_factory_test_template.h b/chromium/gpu/ipc/service/gpu_memory_buffer_factory_test_template.h
index 4df68b47da9..900fd2a6209 100644
--- a/chromium/gpu/ipc/service/gpu_memory_buffer_factory_test_template.h
+++ b/chromium/gpu/ipc/service/gpu_memory_buffer_factory_test_template.h
@@ -8,14 +8,15 @@
#ifndef GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_TEST_TEMPLATE_H_
#define GPU_IPC_SERVICE_GPU_MEMORY_BUFFER_FACTORY_TEST_TEMPLATE_H_
+#include "base/test/task_environment.h"
+#include "build/build_config.h"
#include "gpu/ipc/common/gpu_memory_buffer_support.h"
#include "gpu/ipc/service/gpu_memory_buffer_factory.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/buffer_format_util.h"
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(USE_OZONE)
#include "base/command_line.h"
-#include "build/build_config.h"
#include "ui/gl/gl_switches.h"
#include "ui/gl/init/gl_factory.h"
#include "ui/gl/test/gl_surface_test_support.h"
@@ -26,18 +27,23 @@ namespace gpu {
template <typename GpuMemoryBufferFactoryType>
class GpuMemoryBufferFactoryTest : public testing::Test {
public:
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(USE_OZONE)
// Overridden from testing::Test:
void SetUp() override {
+#if defined(OS_WIN)
// This test only works with hardware rendering.
DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kUseGpuInTests));
+#endif
gl::GLSurfaceTestSupport::InitializeOneOff();
}
void TearDown() override { gl::init::ShutdownGL(false); }
-#endif
+#endif // defined(OS_WIN) || defined(USE_OZONE)
protected:
+ base::test::TaskEnvironment task_environment_{
+ base::test::TaskEnvironment::MainThreadType::UI};
+
GpuMemoryBufferFactoryType factory_;
};
@@ -51,13 +57,16 @@ TYPED_TEST_P(GpuMemoryBufferFactoryTest, CreateGpuMemoryBuffer) {
GpuMemoryBufferSupport support;
for (auto format : gfx::GetBufferFormatsForTesting()) {
- gfx::BufferUsage usages[] = {gfx::BufferUsage::GPU_READ,
- gfx::BufferUsage::SCANOUT,
- gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
- gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
- gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
- gfx::BufferUsage::SCANOUT_VDA_WRITE,
- gfx::BufferUsage::GPU_READ_CPU_READ_WRITE};
+ gfx::BufferUsage usages[] = {
+ gfx::BufferUsage::GPU_READ,
+ gfx::BufferUsage::SCANOUT,
+ gfx::BufferUsage::SCANOUT_CAMERA_READ_WRITE,
+ gfx::BufferUsage::CAMERA_AND_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VDA_WRITE,
+ gfx::BufferUsage::GPU_READ_CPU_READ_WRITE,
+ gfx::BufferUsage::SCANOUT_VEA_READ_CAMERA_AND_CPU_READ_WRITE,
+ };
for (auto usage : usages) {
if (!support.IsNativeGpuMemoryBufferConfigurationSupported(format, usage))
continue;
diff --git a/chromium/gpu/ipc/service/gpu_watchdog_thread.cc b/chromium/gpu/ipc/service/gpu_watchdog_thread.cc
index 2b9268decf1..b4b8b36c805 100644
--- a/chromium/gpu/ipc/service/gpu_watchdog_thread.cc
+++ b/chromium/gpu/ipc/service/gpu_watchdog_thread.cc
@@ -24,10 +24,6 @@
#include <windows.h>
#endif
-#if defined(USE_X11)
-#include "ui/gfx/x/x11.h"
-#endif
-
namespace gpu {
namespace {
@@ -47,7 +43,6 @@ const int kGpuTimeout = 10000;
#if defined(USE_X11)
const base::FilePath::CharType kTtyFilePath[] =
FILE_PATH_LITERAL("/sys/class/tty/tty0/active");
-const unsigned char text[20] = "check";
#endif
} // namespace
@@ -66,9 +61,6 @@ GpuWatchdogThreadImplV1::GpuWatchdogThreadImplV1()
suspension_counter_(this)
#if defined(USE_X11)
,
- display_(nullptr),
- window_(0),
- atom_(x11::None),
host_tty_(-1)
#endif
{
@@ -86,7 +78,7 @@ GpuWatchdogThreadImplV1::GpuWatchdogThreadImplV1()
#if defined(USE_X11)
tty_file_ = base::OpenFile(base::FilePath(kTtyFilePath), "r");
- SetupXServer();
+ host_tty_ = GetActiveTTY();
#endif
base::MessageLoopCurrent::Get()->AddTaskObserver(&task_observer_);
GpuWatchdogHistogram(GpuWatchdogThreadEvent::kGpuWatchdogStart);
@@ -233,11 +225,6 @@ GpuWatchdogThreadImplV1::~GpuWatchdogThreadImplV1() {
#if defined(USE_X11)
if (tty_file_)
fclose(tty_file_);
- if (display_) {
- DCHECK(window_);
- XDestroyWindow(display_, window_);
- XCloseDisplay(display_);
- }
#endif
base::MessageLoopCurrent::Get()->RemoveTaskObserver(&task_observer_);
@@ -372,54 +359,6 @@ void GpuWatchdogThreadImplV1::DeliberatelyTerminateToRecoverFromHang() {
}
#endif
-#if defined(USE_X11)
- if (display_) {
- DCHECK(window_);
- XWindowAttributes attributes;
- XGetWindowAttributes(display_, window_, &attributes);
-
- XSelectInput(display_, window_, PropertyChangeMask);
- SetupXChangeProp();
-
- XFlush(display_);
-
- // We wait for the property change event with a timeout. If it arrives we
- // know that X is responsive and is not the cause of the watchdog trigger,
- // so we should terminate. If it times out, it may be due to X taking a long
- // time, but terminating won't help, so ignore the watchdog trigger.
- XEvent event_return;
- base::TimeTicks deadline = base::TimeTicks::Now() + timeout_;
- while (true) {
- base::TimeDelta delta = deadline - base::TimeTicks::Now();
- if (delta < base::TimeDelta()) {
- return;
- } else {
- while (XCheckWindowEvent(display_, window_, PropertyChangeMask,
- &event_return)) {
- if (MatchXEventAtom(&event_return))
- break;
- }
- struct pollfd fds[1];
- fds[0].fd = XConnectionNumber(display_);
- fds[0].events = POLLIN;
- int status = poll(fds, 1, delta.InMilliseconds());
- if (status == -1) {
- if (errno == EINTR) {
- continue;
- } else {
- LOG(FATAL) << "Lost X connection, aborting.";
- break;
- }
- } else if (status == 0) {
- return;
- } else {
- continue;
- }
- }
- }
- }
-#endif
-
// For minimal developer annoyance, don't keep terminating. You need to skip
// the call to base::Process::Terminate below in a debugger for this to be
// useful.
@@ -507,33 +446,6 @@ void GpuWatchdogThreadImplV1::DeliberatelyTerminateToRecoverFromHang() {
terminated = true;
}
-#if defined(USE_X11)
-void GpuWatchdogThreadImplV1::SetupXServer() {
- display_ = XOpenDisplay(nullptr);
- if (display_) {
- window_ =
- XCreateWindow(display_, DefaultRootWindow(display_), 0, 0, 1, 1, 0,
- CopyFromParent, InputOutput, CopyFromParent, 0, nullptr);
- atom_ = XInternAtom(display_, "CHECK", x11::False);
- }
- host_tty_ = GetActiveTTY();
-}
-
-void GpuWatchdogThreadImplV1::SetupXChangeProp() {
- DCHECK(display_);
- XChangeProperty(display_, window_, atom_, XA_STRING, 8, PropModeReplace, text,
- (base::size(text) - 1));
-}
-
-bool GpuWatchdogThreadImplV1::MatchXEventAtom(XEvent* event) {
- if (event->xproperty.window == window_ && event->type == PropertyNotify &&
- event->xproperty.atom == atom_)
- return true;
-
- return false;
-}
-
-#endif
void GpuWatchdogThreadImplV1::AddPowerObserver() {
// As we stop the task runner before destroying this class, the unretained
// reference will always outlive the task.
diff --git a/chromium/gpu/ipc/service/gpu_watchdog_thread.h b/chromium/gpu/ipc/service/gpu_watchdog_thread.h
index 1ecf2490c1e..3112cef2008 100644
--- a/chromium/gpu/ipc/service/gpu_watchdog_thread.h
+++ b/chromium/gpu/ipc/service/gpu_watchdog_thread.h
@@ -20,12 +20,6 @@
#include "ui/gfx/native_widget_types.h"
#include "ui/gl/progress_reporter.h"
-#if defined(USE_X11)
-#include <sys/poll.h>
-#include "ui/base/x/x11_util.h" // nogncheck
-#include "ui/gfx/x/x11_types.h" // nogncheck
-#endif // defined(USE_X11)
-
namespace gpu {
// These values are persisted to logs. Entries should not be renumbered and
@@ -160,11 +154,6 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThreadImplV1
void OnCheckTimeout();
// Do not change the function name. It is used for [GPU HANG] carsh reports.
void DeliberatelyTerminateToRecoverFromHang();
-#if defined(USE_X11)
- void SetupXServer();
- void SetupXChangeProp();
- bool MatchXEventAtom(XEvent* event);
-#endif
void OnAddPowerObserver();
@@ -231,9 +220,6 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThreadImplV1
base::TimeTicks check_timeticks_;
#if defined(USE_X11)
- XDisplay* display_;
- gfx::AcceleratedWidget window_;
- XAtom atom_;
FILE* tty_file_;
int host_tty_;
#endif
diff --git a/chromium/gpu/ipc/service/gpu_watchdog_thread_unittest.cc b/chromium/gpu/ipc/service/gpu_watchdog_thread_unittest.cc
index 407c9b539f9..6beb6aad8d4 100644
--- a/chromium/gpu/ipc/service/gpu_watchdog_thread_unittest.cc
+++ b/chromium/gpu/ipc/service/gpu_watchdog_thread_unittest.cc
@@ -4,6 +4,8 @@
#include "gpu/ipc/service/gpu_watchdog_thread_v2.h"
+#include "base/message_loop/message_loop.h"
+#include "base/message_loop/message_loop_current.h"
#include "base/power_monitor/power_monitor.h"
#include "base/power_monitor/power_monitor_source.h"
#include "base/test/power_monitor_test_base.h"
diff --git a/chromium/gpu/ipc/service/gpu_watchdog_thread_v2.cc b/chromium/gpu/ipc/service/gpu_watchdog_thread_v2.cc
index 148cd5bc6fe..9677124367a 100644
--- a/chromium/gpu/ipc/service/gpu_watchdog_thread_v2.cc
+++ b/chromium/gpu/ipc/service/gpu_watchdog_thread_v2.cc
@@ -99,7 +99,9 @@ void GpuWatchdogThreadImplV2::OnInitComplete() {
void GpuWatchdogThreadImplV2::OnGpuProcessTearDown() {
DCHECK(watched_gpu_task_runner_->BelongsToCurrentThread());
- Arm();
+ in_gpu_process_teardown_ = true;
+ if (!IsArmed())
+ Arm();
}
// Running on the watchdog thread.
@@ -138,13 +140,24 @@ void GpuWatchdogThreadImplV2::ReportProgress() {
void GpuWatchdogThreadImplV2::WillProcessTask(
const base::PendingTask& pending_task) {
DCHECK(watched_gpu_task_runner_->BelongsToCurrentThread());
- Arm();
+
+ // The watchdog is armed at the beginning of the gpu process teardown.
+ // Do not call Arm() during teardown.
+ if (in_gpu_process_teardown_)
+ DCHECK(IsArmed());
+ else
+ Arm();
}
void GpuWatchdogThreadImplV2::DidProcessTask(
const base::PendingTask& pending_task) {
DCHECK(watched_gpu_task_runner_->BelongsToCurrentThread());
- Disarm();
+
+ // Keep the watchdog armed during tear down.
+ if (in_gpu_process_teardown_)
+ InProgress();
+ else
+ Disarm();
}
// Running on the watchdog thread.
@@ -219,7 +232,7 @@ void GpuWatchdogThreadImplV2::Arm() {
base::subtle::NoBarrier_AtomicIncrement(&arm_disarm_counter_, 1);
// Arm/Disarm are always called in sequence. Now it's an odd number.
- DCHECK(base::subtle::NoBarrier_Load(&arm_disarm_counter_) & 1);
+ DCHECK(IsArmed());
}
void GpuWatchdogThreadImplV2::Disarm() {
@@ -228,7 +241,7 @@ void GpuWatchdogThreadImplV2::Disarm() {
base::subtle::NoBarrier_AtomicIncrement(&arm_disarm_counter_, 1);
// Arm/Disarm are always called in sequence. Now it's an even number.
- DCHECK(base::subtle::NoBarrier_Load(&arm_disarm_counter_) % 2 == 0);
+ DCHECK(!IsArmed());
}
void GpuWatchdogThreadImplV2::InProgress() {
@@ -238,7 +251,12 @@ void GpuWatchdogThreadImplV2::InProgress() {
base::subtle::NoBarrier_AtomicIncrement(&arm_disarm_counter_, 2);
// Now it's an odd number.
- DCHECK(base::subtle::NoBarrier_Load(&arm_disarm_counter_) & 1);
+ DCHECK(IsArmed());
+}
+
+bool GpuWatchdogThreadImplV2::IsArmed() {
+ // It's an odd number.
+ return base::subtle::NoBarrier_Load(&arm_disarm_counter_) & 1;
}
// Running on the watchdog thread.
@@ -294,6 +312,7 @@ void GpuWatchdogThreadImplV2::DeliberatelyTerminateToRecoverFromHang() {
base::debug::Alias(&backgrounded_timeticks_);
base::debug::Alias(&foregrounded_timeticks_);
base::debug::Alias(&in_power_suspension_);
+ base::debug::Alias(&in_gpu_process_teardown_);
base::debug::Alias(&is_backgrounded_);
base::debug::Alias(&is_add_power_observer_called_);
base::debug::Alias(&is_power_observer_added_);
diff --git a/chromium/gpu/ipc/service/gpu_watchdog_thread_v2.h b/chromium/gpu/ipc/service/gpu_watchdog_thread_v2.h
index 5523196b5e8..fe5d4d94521 100644
--- a/chromium/gpu/ipc/service/gpu_watchdog_thread_v2.h
+++ b/chromium/gpu/ipc/service/gpu_watchdog_thread_v2.h
@@ -55,13 +55,13 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThreadImplV2
void Arm();
void Disarm();
void InProgress();
+ bool IsArmed();
void OnWatchdogTimeout();
// Do not change the function name. It is used for [GPU HANG] carsh reports.
void DeliberatelyTerminateToRecoverFromHang();
- // This counter is only written on the gpu thread, and read on the watchdog
- // thread.
+ // This counter is only written on the gpu thread, and read on both threads.
base::subtle::Atomic32 arm_disarm_counter_ = 0;
// The counter number read in the last OnWatchdogTimeout() on the watchdog
// thread.
@@ -92,6 +92,9 @@ class GPU_IPC_SERVICE_EXPORT GpuWatchdogThreadImplV2
// The system has entered the power suspension mode.
bool in_power_suspension_ = false;
+ // The GPU process has started tearing down. Accessed only in the gpu process.
+ bool in_gpu_process_teardown_ = false;
+
// OnWatchdogTimeout() is called for the first time after power resume.
bool is_first_timeout_after_power_resume = false;
diff --git a/chromium/gpu/ipc/service/image_transport_surface_overlay_mac.mm b/chromium/gpu/ipc/service/image_transport_surface_overlay_mac.mm
index 10b345d3727..fa1ef9c99b2 100644
--- a/chromium/gpu/ipc/service/image_transport_surface_overlay_mac.mm
+++ b/chromium/gpu/ipc/service/image_transport_surface_overlay_mac.mm
@@ -117,7 +117,10 @@ ImageTransportSurfaceOverlayMacBase<BaseClass>::SwapBuffersInternal(
TRACE_EVENT0("gpu", "ImageTransportSurfaceOverlayMac::SwapBuffersInternal");
// Do a GL fence for flush to apply back-pressure before drawing.
- ApplyBackpressure();
+ {
+ SCOPED_UMA_HISTOGRAM_TIMER("Gpu.Mac.Backpressure");
+ ApplyBackpressure();
+ }
// Update the CALayer tree in the GPU process.
base::TimeTicks before_transaction_time = base::TimeTicks::Now();
diff --git a/chromium/gpu/ipc/service/shared_image_stub.cc b/chromium/gpu/ipc/service/shared_image_stub.cc
index 04a1c83e1ca..3b9158c8d4d 100644
--- a/chromium/gpu/ipc/service/shared_image_stub.cc
+++ b/chromium/gpu/ipc/service/shared_image_stub.cc
@@ -22,12 +22,13 @@ namespace gpu {
SharedImageStub::SharedImageStub(GpuChannel* channel, int32_t route_id)
: channel_(channel),
+ command_buffer_id_(
+ CommandBufferIdFromChannelAndRoute(channel->client_id(), route_id)),
sequence_(channel->scheduler()->CreateSequence(SchedulingPriority::kLow)),
sync_point_client_state_(
channel->sync_point_manager()->CreateSyncPointClientState(
CommandBufferNamespace::GPU_IO,
- CommandBufferIdFromChannelAndRoute(channel->client_id(),
- route_id),
+ command_buffer_id_,
sequence_)) {
base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
this, "gpu::SharedImageStub", channel_->task_runner());
@@ -89,6 +90,61 @@ bool SharedImageStub::OnMessageReceived(const IPC::Message& msg) {
return handled;
}
+bool SharedImageStub::CreateSharedImage(const Mailbox& mailbox,
+ int client_id,
+ gfx::GpuMemoryBufferHandle handle,
+ gfx::BufferFormat format,
+ SurfaceHandle surface_handle,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage) {
+ TRACE_EVENT2("gpu", "SharedImageStub::CreateSharedImage", "width",
+ size.width(), "height", size.height());
+ if (!mailbox.IsSharedImage()) {
+ LOG(ERROR) << "SharedImageStub: Trying to create a SharedImage with a "
+ "non-SharedImage mailbox.";
+ OnError();
+ return false;
+ }
+ if (!MakeContextCurrent()) {
+ OnError();
+ return false;
+ }
+ if (!factory_->CreateSharedImage(mailbox, client_id, std::move(handle),
+ format, surface_handle, size, color_space,
+ usage)) {
+ LOG(ERROR) << "SharedImageStub: Unable to create shared image";
+ OnError();
+ return false;
+ }
+ return true;
+}
+
+bool SharedImageStub::UpdateSharedImage(
+ const Mailbox& mailbox,
+ const gfx::GpuFenceHandle& in_fence_handle) {
+ TRACE_EVENT0("gpu", "SharedImageStub::UpdateSharedImage");
+ std::unique_ptr<gfx::GpuFence> in_fence;
+ if (!in_fence_handle.is_null())
+ in_fence.reset(new gfx::GpuFence(in_fence_handle));
+ if (!mailbox.IsSharedImage()) {
+ LOG(ERROR) << "SharedImageStub: Trying to access a SharedImage with a "
+ "non-SharedImage mailbox.";
+ OnError();
+ return false;
+ }
+ if (!MakeContextCurrent()) {
+ OnError();
+ return false;
+ }
+ if (!factory_->UpdateSharedImage(mailbox, std::move(in_fence))) {
+ LOG(ERROR) << "SharedImageStub: Unable to update shared image";
+ OnError();
+ return false;
+ }
+ return true;
+}
+
void SharedImageStub::OnCreateSharedImage(
const GpuChannelMsg_CreateSharedImage_Params& params) {
TRACE_EVENT2("gpu", "SharedImageStub::OnCreateSharedImage", "width",
@@ -182,26 +238,12 @@ void SharedImageStub::OnCreateGMBSharedImage(
GpuChannelMsg_CreateGMBSharedImage_Params params) {
TRACE_EVENT2("gpu", "SharedImageStub::OnCreateGMBSharedImage", "width",
params.size.width(), "height", params.size.height());
- if (!params.mailbox.IsSharedImage()) {
- LOG(ERROR) << "SharedImageStub: Trying to create a SharedImage with a "
- "non-SharedImage mailbox.";
- OnError();
- return;
- }
-
- if (!MakeContextCurrent()) {
- OnError();
- return;
- }
-
// TODO(piman): add support for SurfaceHandle (for backbuffers for ozone/drm).
- SurfaceHandle surface_handle = kNullSurfaceHandle;
- if (!factory_->CreateSharedImage(params.mailbox, channel_->client_id(),
- std::move(params.handle), params.format,
- surface_handle, params.size,
- params.color_space, params.usage)) {
- LOG(ERROR) << "SharedImageStub: Unable to create shared image";
- OnError();
+ constexpr SurfaceHandle surface_handle = kNullSurfaceHandle;
+ if (!CreateSharedImage(params.mailbox, channel_->client_id(),
+ std::move(params.handle), params.format,
+ surface_handle, params.size, params.color_space,
+ params.usage)) {
return;
}
@@ -218,26 +260,9 @@ void SharedImageStub::OnUpdateSharedImage(
uint32_t release_id,
const gfx::GpuFenceHandle& in_fence_handle) {
TRACE_EVENT0("gpu", "SharedImageStub::OnUpdateSharedImage");
- std::unique_ptr<gfx::GpuFence> in_fence;
- if (!in_fence_handle.is_null())
- in_fence.reset(new gfx::GpuFence(in_fence_handle));
- if (!mailbox.IsSharedImage()) {
- LOG(ERROR) << "SharedImageStub: Trying to access a SharedImage with a "
- "non-SharedImage mailbox.";
- OnError();
- return;
- }
-
- if (!MakeContextCurrent()) {
- OnError();
- return;
- }
- if (!factory_->UpdateSharedImage(mailbox, std::move(in_fence))) {
- LOG(ERROR) << "SharedImageStub: Unable to update shared image";
- OnError();
+ if (!UpdateSharedImage(mailbox, in_fence_handle))
return;
- }
SyncToken sync_token(sync_point_client_state_->namespace_id(),
sync_point_client_state_->command_buffer_id(),
@@ -373,13 +398,12 @@ bool SharedImageStub::MakeContextCurrent() {
// improve performance. https://crbug.com/457431
auto* context = context_state_->real_context();
if (context->IsCurrent(nullptr) ||
- context_state_->real_context()->MakeCurrent(context_state_->surface())) {
+ context->MakeCurrent(context_state_->surface())) {
return true;
- } else {
- context_state_->MarkContextLost();
- LOG(ERROR) << "SharedImageStub: MakeCurrent failed";
- return false;
}
+ context_state_->MarkContextLost();
+ LOG(ERROR) << "SharedImageStub: MakeCurrent failed";
+ return false;
}
ContextResult SharedImageStub::MakeContextCurrentAndCreateFactory() {
@@ -417,7 +441,11 @@ void SharedImageStub::OnError() {
}
void SharedImageStub::TrackMemoryAllocatedChange(uint64_t delta) {
+ uint64_t old_size = size_;
size_ += delta;
+ channel_->gpu_channel_manager()
+ ->peak_memory_monitor()
+ ->OnMemoryAllocatedChange(command_buffer_id_, old_size, size_);
}
uint64_t SharedImageStub::GetSize() const {
@@ -468,19 +496,15 @@ void SharedImageStub::DestroySharedImage(const Mailbox& mailbox,
const SyncToken& sync_token) {
// If there is no sync token, we don't need to wait.
if (!sync_token.HasData()) {
- OnSyncTokenReleased(mailbox);
+ OnDestroySharedImage(mailbox);
return;
}
- auto done_cb = base::BindOnce(&SharedImageStub::OnSyncTokenReleased,
+ auto done_cb = base::BindOnce(&SharedImageStub::OnDestroySharedImage,
weak_factory_.GetWeakPtr(), mailbox);
channel_->scheduler()->ScheduleTask(
gpu::Scheduler::Task(sequence_, std::move(done_cb),
std::vector<gpu::SyncToken>({sync_token})));
}
-void SharedImageStub::OnSyncTokenReleased(const Mailbox& mailbox) {
- factory_->DestroySharedImage(mailbox);
-}
-
} // namespace gpu
diff --git a/chromium/gpu/ipc/service/shared_image_stub.h b/chromium/gpu/ipc/service/shared_image_stub.h
index 7799029a727..607f9cab7a9 100644
--- a/chromium/gpu/ipc/service/shared_image_stub.h
+++ b/chromium/gpu/ipc/service/shared_image_stub.h
@@ -12,6 +12,7 @@
#include "gpu/command_buffer/service/memory_tracking.h"
#include "gpu/command_buffer/service/sequence_id.h"
#include "gpu/command_buffer/service/sync_point_manager.h"
+#include "gpu/ipc/common/command_buffer_id.h"
#include "gpu/ipc/common/gpu_messages.h"
#include "gpu/ipc/service/gpu_ipc_service_export.h"
#include "ipc/ipc_listener.h"
@@ -56,6 +57,17 @@ class GPU_IPC_SERVICE_EXPORT SharedImageStub
SharedImageDestructionCallback GetSharedImageDestructionCallback(
const Mailbox& mailbox);
+ bool CreateSharedImage(const Mailbox& mailbox,
+ int client_id,
+ gfx::GpuMemoryBufferHandle handle,
+ gfx::BufferFormat format,
+ SurfaceHandle surface_handle,
+ const gfx::Size& size,
+ const gfx::ColorSpace& color_space,
+ uint32_t usage);
+ bool UpdateSharedImage(const Mailbox& mailbox,
+ const gfx::GpuFenceHandle& in_fence_handle);
+
private:
SharedImageStub(GpuChannel* channel, int32_t route_id);
@@ -82,12 +94,17 @@ class GPU_IPC_SERVICE_EXPORT SharedImageStub
bool MakeContextCurrent();
ContextResult MakeContextCurrentAndCreateFactory();
void OnError();
- void OnSyncTokenReleased(const Mailbox& mailbox);
// Wait on the sync token if any and destroy the shared image.
void DestroySharedImage(const Mailbox& mailbox, const SyncToken& sync_token);
GpuChannel* channel_;
+
+ // While this is not a CommandBuffer, this provides a unique identifier for
+ // a SharedImageStub, comprised of identifiers which it was already using.
+ // TODO(jonross): Look into a rename of CommandBufferId to reflect that it can
+ // be a unique identifier for numerous gpu constructs.
+ CommandBufferId command_buffer_id_;
SequenceId sequence_;
scoped_refptr<gpu::SyncPointClientState> sync_point_client_state_;
scoped_refptr<SharedContextState> context_state_;
diff --git a/chromium/gpu/ipc/service/stream_texture_android.cc b/chromium/gpu/ipc/service/stream_texture_android.cc
index 7a7a97e19d4..0a6237b8bd4 100644
--- a/chromium/gpu/ipc/service/stream_texture_android.cc
+++ b/chromium/gpu/ipc/service/stream_texture_android.cc
@@ -236,7 +236,20 @@ bool StreamTexture::CopyTexImage(unsigned target) {
void StreamTexture::OnFrameAvailable() {
has_pending_frame_ = true;
if (has_listener_ && channel_) {
- channel_->Send(new GpuStreamTextureMsg_FrameAvailable(route_id_));
+ // Send ycbcr_info if it has not been sent yet. This will always be sent
+ // before the first frame. This info needs to be sent only once to the
+ // renderer. Renderer will then cache it.
+ if (!ycbcr_info_sent_) {
+ ycbcr_info_sent_ = true;
+
+ // Since the frame is available, get the ycbcr info from the latest image.
+ base::Optional<VulkanYCbCrInfo> ycbcr_info =
+ SharedImageVideo::GetYcbcrInfo(this, context_state_);
+ channel_->Send(new GpuStreamTextureMsg_FrameWithYcbcrInfoAvailable(
+ route_id_, ycbcr_info));
+ } else {
+ channel_->Send(new GpuStreamTextureMsg_FrameAvailable(route_id_));
+ }
}
}
@@ -248,6 +261,10 @@ unsigned StreamTexture::GetInternalFormat() {
return GL_RGBA;
}
+unsigned StreamTexture::GetDataType() {
+ return GL_UNSIGNED_BYTE;
+}
+
bool StreamTexture::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(StreamTexture, message)
diff --git a/chromium/gpu/ipc/service/stream_texture_android.h b/chromium/gpu/ipc/service/stream_texture_android.h
index 8acc081557e..4f3f91f329c 100644
--- a/chromium/gpu/ipc/service/stream_texture_android.h
+++ b/chromium/gpu/ipc/service/stream_texture_android.h
@@ -16,7 +16,7 @@
#include "gpu/command_buffer/service/gl_stream_texture_image.h"
#include "gpu/command_buffer/service/shared_context_state.h"
#include "gpu/command_buffer/service/stream_texture_shared_image_interface.h"
-#include "gpu/ipc/common/android/texture_owner.h"
+#include "gpu/command_buffer/service/texture_owner.h"
#include "gpu/ipc/service/command_buffer_stub.h"
#include "ipc/ipc_listener.h"
#include "ui/gl/android/surface_texture.h"
@@ -56,6 +56,7 @@ class StreamTexture : public StreamTextureSharedImageInterface,
// gl::GLImage implementation:
gfx::Size GetSize() override;
unsigned GetInternalFormat() override;
+ unsigned GetDataType() override;
BindOrCopy ShouldBindOrCopy() override;
bool BindTexImage(unsigned target) override;
void ReleaseTexImage(unsigned target) override;
@@ -135,6 +136,10 @@ class StreamTexture : public StreamTextureSharedImageInterface,
SequenceId sequence_;
scoped_refptr<gpu::SyncPointClientState> sync_point_client_state_;
+ // This indicates whether ycbcr info is already sent from gpu process to the
+ // renderer.
+ bool ycbcr_info_sent_ = false;
+
base::WeakPtrFactory<StreamTexture> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(StreamTexture);
};
diff --git a/chromium/gpu/vulkan/BUILD.gn b/chromium/gpu/vulkan/BUILD.gn
index 4900d8cf980..7d1331f1ec1 100644
--- a/chromium/gpu/vulkan/BUILD.gn
+++ b/chromium/gpu/vulkan/BUILD.gn
@@ -43,7 +43,10 @@ if (enable_vulkan) {
"vulkan_function_pointers.h",
"vulkan_implementation.cc",
"vulkan_implementation.h",
+ "vulkan_info.cc",
+ "vulkan_info.h",
"vulkan_instance.cc",
+ "vulkan_instance.h",
"vulkan_surface.cc",
"vulkan_surface.h",
"vulkan_swap_chain.cc",
diff --git a/chromium/gpu/vulkan/demo/vulkan_demo.h b/chromium/gpu/vulkan/demo/vulkan_demo.h
index 577f8fc52b9..e1ca7307804 100644
--- a/chromium/gpu/vulkan/demo/vulkan_demo.h
+++ b/chromium/gpu/vulkan/demo/vulkan_demo.h
@@ -12,6 +12,7 @@
#include "gpu/vulkan/vulkan_swap_chain.h"
#include "third_party/skia/include/core/SkRefCnt.h"
#include "ui/gfx/geometry/size.h"
+#include "ui/platform_window/platform_window_base.h"
#include "ui/platform_window/platform_window_delegate.h"
class SkCanvas;
@@ -27,7 +28,6 @@ class VulkanContextProvider;
namespace ui {
class PlatformEventSource;
-class PlatformWindow;
} // namespace ui
namespace gpu {
@@ -56,6 +56,7 @@ class VulkanDemo : public ui::PlatformWindowDelegate {
void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) override;
void OnAcceleratedWidgetDestroyed() override {}
void OnActivationChanged(bool active) override {}
+ void OnMouseEnter() override {}
void CreateSkSurface();
void Draw(SkCanvas* canvas, float fraction);
@@ -65,7 +66,7 @@ class VulkanDemo : public ui::PlatformWindowDelegate {
scoped_refptr<viz::VulkanContextProvider> vulkan_context_provider_;
gfx::AcceleratedWidget accelerated_widget_ = gfx::kNullAcceleratedWidget;
std::unique_ptr<ui::PlatformEventSource> event_source_;
- std::unique_ptr<ui::PlatformWindow> window_;
+ std::unique_ptr<ui::PlatformWindowBase> window_;
std::unique_ptr<VulkanSurface> vulkan_surface_;
base::Optional<VulkanSwapChain::ScopedWrite> scoped_write_;
sk_sp<SkSurface> sk_surface_;
diff --git a/chromium/gpu/vulkan/generate_bindings.py b/chromium/gpu/vulkan/generate_bindings.py
index 679e6c939f2..c9681c0e6ae 100755
--- a/chromium/gpu/vulkan/generate_bindings.py
+++ b/chromium/gpu/vulkan/generate_bindings.py
@@ -34,6 +34,7 @@ VULKAN_INSTANCE_FUNCTIONS = [
'vkEnumeratePhysicalDevices',
'vkGetDeviceProcAddr',
'vkGetPhysicalDeviceFeatures',
+ 'vkGetPhysicalDeviceFormatProperties',
'vkGetPhysicalDeviceMemoryProperties',
'vkGetPhysicalDeviceProperties',
'vkGetPhysicalDeviceQueueFamilyProperties',
@@ -71,9 +72,15 @@ VULKAN_INSTANCE_FUNCTIONS = [
]
},
{
+ 'min_api_version': 'VK_API_VERSION_1_1',
+ 'functions': [
+ 'vkGetPhysicalDeviceImageFormatProperties2',
+ ]
+ },
+ {
# vkGetPhysicalDeviceFeatures2() is defined in Vulkan 1.1 or suffixed in the
# VK_KHR_get_physical_device_properties2 extension.
- 'min_api_version': 'VK_VERSION_1_1',
+ 'min_api_version': 'VK_API_VERSION_1_1',
'extension': 'VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME',
'extension_suffix': 'KHR',
'functions': [
@@ -142,6 +149,13 @@ VULKAN_DEVICE_FUNCTIONS = [
]
},
{
+ 'min_api_version': 'VK_API_VERSION_1_1',
+ 'functions': [
+ 'vkGetDeviceQueue2',
+ 'vkGetImageMemoryRequirements2',
+ ]
+ },
+ {
'ifdef': 'defined(OS_ANDROID)',
'extension':
'VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME',
@@ -161,7 +175,8 @@ VULKAN_DEVICE_FUNCTIONS = [
'ifdef': 'defined(OS_LINUX)',
'extension': 'VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME',
'functions': [
- 'vkGetMemoryFdKHR'
+ 'vkGetMemoryFdKHR',
+ 'vkGetMemoryFdPropertiesKHR',
]
},
{
@@ -212,12 +227,12 @@ LICENSE_AND_HEADER = """\
def WriteFunctions(file, functions, template, check_extension=False):
for group in functions:
- if group.has_key('ifdef'):
+ if 'ifdef' in group:
file.write('#if %s\n' % group['ifdef'])
- extension = group['extension'] if group.has_key('extension') else ''
+ extension = group['extension'] if 'extension' in group else ''
min_api_version = \
- group['min_api_version'] if group.has_key('min_api_version') else ''
+ group['min_api_version'] if 'min_api_version' in group else ''
if not check_extension:
for func in group['functions']:
@@ -242,7 +257,7 @@ def WriteFunctions(file, functions, template, check_extension=False):
extension)
extension_suffix = \
- group['extension_suffix'] if group.has_key('extension_suffix') \
+ group['extension_suffix'] if 'extension_suffix' in group \
else ''
for func in group['functions']:
file.write(template.substitute(
@@ -250,7 +265,7 @@ def WriteFunctions(file, functions, template, check_extension=False):
file.write('}\n')
- if group.has_key('ifdef'):
+ if 'ifdef' in group:
file.write('#endif // %s\n' % group['ifdef'])
file.write('\n')
@@ -352,7 +367,7 @@ struct VulkanFunctionPointers {
// Unassociated functions
""")
- WriteMacros(file, [{'functions':[ 'vkGetInstanceProcAddr' ]}])
+ WriteMacros(file, [{'functions': [ 'vkGetInstanceProcAddr' ]}])
WriteMacros(file, VULKAN_UNASSOCIATED_FUNCTIONS)
file.write("""\
diff --git a/chromium/gpu/vulkan/vulkan_command_buffer.cc b/chromium/gpu/vulkan/vulkan_command_buffer.cc
index 7dfcaaf3408..9fdb2ddd97b 100644
--- a/chromium/gpu/vulkan/vulkan_command_buffer.cc
+++ b/chromium/gpu/vulkan/vulkan_command_buffer.cc
@@ -114,6 +114,7 @@ bool VulkanCommandBuffer::Initialize() {
.commandBufferCount = 1,
};
+ DCHECK_EQ(static_cast<VkCommandBuffer>(VK_NULL_HANDLE), command_buffer_);
result =
vkAllocateCommandBuffers(device, &command_buffer_info, &command_buffer_);
if (VK_SUCCESS != result) {
diff --git a/chromium/gpu/vulkan/vulkan_device_queue.cc b/chromium/gpu/vulkan/vulkan_device_queue.cc
index 6e351fa6752..0406917672d 100644
--- a/chromium/gpu/vulkan/vulkan_device_queue.cc
+++ b/chromium/gpu/vulkan/vulkan_device_queue.cc
@@ -11,6 +11,7 @@
#include "gpu/vulkan/vulkan_command_pool.h"
#include "gpu/vulkan/vulkan_fence_helper.h"
#include "gpu/vulkan/vulkan_function_pointers.h"
+#include "gpu/vulkan/vulkan_info.h"
namespace gpu {
@@ -27,7 +28,7 @@ VulkanDeviceQueue::~VulkanDeviceQueue() {
bool VulkanDeviceQueue::Initialize(
uint32_t options,
- uint32_t max_api_version,
+ const VulkanInfo& info,
const std::vector<const char*>& required_extensions,
bool allow_protected_memory,
const GetPresentationSupportCallback& get_presentation_support) {
@@ -42,60 +43,41 @@ bool VulkanDeviceQueue::Initialize(
VkResult result = VK_SUCCESS;
- uint32_t device_count = 0;
- result = vkEnumeratePhysicalDevices(vk_instance_, &device_count, nullptr);
- if (VK_SUCCESS != result || device_count == 0)
- return false;
-
- std::vector<VkPhysicalDevice> devices(device_count);
- result =
- vkEnumeratePhysicalDevices(vk_instance_, &device_count, devices.data());
- if (VK_SUCCESS != result) {
- DLOG(ERROR) << "vkEnumeratePhysicalDevices() failed: " << result;
- return false;
- }
-
VkQueueFlags queue_flags = 0;
if (options & DeviceQueueOption::GRAPHICS_QUEUE_FLAG)
queue_flags |= VK_QUEUE_GRAPHICS_BIT;
int device_index = -1;
int queue_index = -1;
- for (size_t i = 0; i < devices.size(); ++i) {
- const VkPhysicalDevice& device = devices[i];
- uint32_t queue_count = 0;
- vkGetPhysicalDeviceQueueFamilyProperties(device, &queue_count, nullptr);
- if (queue_count) {
- std::vector<VkQueueFamilyProperties> queue_properties(queue_count);
- vkGetPhysicalDeviceQueueFamilyProperties(device, &queue_count,
- queue_properties.data());
- for (size_t n = 0; n < queue_properties.size(); ++n) {
- if ((queue_properties[n].queueFlags & queue_flags) != queue_flags)
- continue;
-
- if (options & DeviceQueueOption::PRESENTATION_SUPPORT_QUEUE_FLAG &&
- !get_presentation_support.Run(device, queue_properties, n)) {
- continue;
- }
-
- queue_index = static_cast<int>(n);
- break;
+ for (size_t i = 0; i < info.physical_devices.size(); ++i) {
+ const auto& device_info = info.physical_devices[i];
+ const VkPhysicalDevice& device = device_info.device;
+ for (size_t n = 0; n < device_info.queue_families.size(); ++n) {
+ if ((device_info.queue_families[n].queueFlags & queue_flags) !=
+ queue_flags)
+ continue;
+
+ if (options & DeviceQueueOption::PRESENTATION_SUPPORT_QUEUE_FLAG &&
+ !get_presentation_support.Run(device, device_info.queue_families,
+ n)) {
+ continue;
}
- if (-1 != queue_index) {
- device_index = static_cast<int>(i);
- break;
- }
+ queue_index = static_cast<int>(n);
+ break;
+ }
+ if (-1 != queue_index) {
+ device_index = static_cast<int>(i);
+ break;
}
}
if (queue_index == -1)
return false;
- vk_physical_device_ = devices[device_index];
- vkGetPhysicalDeviceProperties(vk_physical_device_,
- &vk_physical_device_properties_);
-
+ const auto& physical_device_info = info.physical_devices[device_index];
+ vk_physical_device_ = physical_device_info.device;
+ vk_physical_device_properties_ = physical_device_info.properties;
vk_queue_index_ = queue_index;
float queue_priority = 0.0f;
@@ -109,29 +91,13 @@ bool VulkanDeviceQueue::Initialize(
std::vector<const char*> enabled_layer_names;
#if DCHECK_IS_ON()
- uint32_t num_device_layers = 0;
- result = vkEnumerateDeviceLayerProperties(vk_physical_device_,
- &num_device_layers, nullptr);
- if (VK_SUCCESS != result) {
- DLOG(ERROR) << "vkEnumerateDeviceLayerProperties(NULL) failed: " << result;
- return false;
- }
-
- std::vector<VkLayerProperties> device_layers(num_device_layers);
- result = vkEnumerateDeviceLayerProperties(
- vk_physical_device_, &num_device_layers, device_layers.data());
- if (VK_SUCCESS != result) {
- DLOG(ERROR) << "vkEnumerateDeviceLayerProperties() failed: " << result;
- return false;
- }
-
std::unordered_set<std::string> desired_layers({
- "VK_LAYER_LUNARG_standard_validation",
+ "VK_LAYER_KHRONOS_validation",
});
- for (const VkLayerProperties& layer_property : device_layers) {
- if (desired_layers.find(layer_property.layerName) != desired_layers.end())
- enabled_layer_names.push_back(layer_property.layerName);
+ for (const auto& layer : physical_device_info.layers) {
+ if (desired_layers.find(layer.layerName) != desired_layers.end())
+ enabled_layer_names.push_back(layer.layerName);
}
#endif // DCHECK_IS_ON()
@@ -140,30 +106,21 @@ bool VulkanDeviceQueue::Initialize(
std::begin(required_extensions),
std::end(required_extensions));
- uint32_t device_api_version =
- std::min(max_api_version, vk_physical_device_properties_.apiVersion);
+ uint32_t device_api_version = std::min(
+ info.used_api_version, vk_physical_device_properties_.apiVersion);
+
+ // Disable all physical device features by default.
+ enabled_device_features_2_ = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2};
// Android and Fuchsia need YCbCr sampler support.
#if defined(OS_ANDROID) || defined(OS_FUCHSIA)
- if (!vkGetPhysicalDeviceFeatures2) {
- DLOG(ERROR) << "Vulkan 1.1 or VK_KHR_get_physical_device_properties2 "
- "extension is required.";
- return false;
- }
-
- // Query if VkPhysicalDeviceSamplerYcbcrConversionFeatures is supported by
- // the implementation. This extension must be supported for Android and
- // Fuchsia.
- sampler_ycbcr_conversion_features_.pNext = nullptr;
- VkPhysicalDeviceFeatures2 supported_device_features_2 = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
- &sampler_ycbcr_conversion_features_};
- vkGetPhysicalDeviceFeatures2(vk_physical_device_,
- &supported_device_features_2);
- if (!sampler_ycbcr_conversion_features_.samplerYcbcrConversion) {
+ if (!physical_device_info.feature_sampler_ycbcr_conversion) {
LOG(ERROR) << "samplerYcbcrConversion is not supported.";
return false;
}
+ sampler_ycbcr_conversion_features_ = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES};
+ sampler_ycbcr_conversion_features_.samplerYcbcrConversion = VK_TRUE;
// Add VkPhysicalDeviceSamplerYcbcrConversionFeatures struct to pNext chain
// of VkPhysicalDeviceFeatures2 to enable YCbCr sampler support.
@@ -171,36 +128,23 @@ bool VulkanDeviceQueue::Initialize(
enabled_device_features_2_.pNext = &sampler_ycbcr_conversion_features_;
#endif // defined(OS_ANDROID) || defined(OS_FUCHSIA)
-#if defined(OS_FUCHSIA)
if (allow_protected_memory) {
- if (device_api_version < VK_MAKE_VERSION(1, 1, 0)) {
- DLOG(ERROR) << "Vulkan 1.1 is required for protected memory";
- return false;
- }
-
- protected_memory_features_.pNext = nullptr;
- VkPhysicalDeviceFeatures2 supported_device_features_2 = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,
- &protected_memory_features_};
- vkGetPhysicalDeviceFeatures2(vk_physical_device_,
- &supported_device_features_2);
- if (!protected_memory_features_.protectedMemory) {
+ if (!physical_device_info.feature_protected_memory) {
DLOG(ERROR) << "Protected memory is not supported";
return false;
}
+ protected_memory_features_ = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES};
+ protected_memory_features_.protectedMemory = VK_TRUE;
// Add VkPhysicalDeviceProtectedMemoryFeatures struct to pNext chain
// of VkPhysicalDeviceFeatures2 to enable YCbCr sampler support.
protected_memory_features_.pNext = enabled_device_features_2_.pNext;
enabled_device_features_2_.pNext = &protected_memory_features_;
}
-#endif // defined(OS_FUCHSIA)
-
- // Disable all physical device features by default.
- enabled_device_features_2_.features = {};
- VkDeviceCreateInfo device_create_info = {};
- device_create_info.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
+ VkDeviceCreateInfo device_create_info = {
+ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO};
device_create_info.pNext = enabled_device_features_2_.pNext;
device_create_info.queueCreateInfoCount = 1;
device_create_info.pQueueCreateInfos = &queue_create_info;
@@ -227,7 +171,16 @@ bool VulkanDeviceQueue::Initialize(
vk_device_ = owned_vk_device_;
- vkGetDeviceQueue(vk_device_, queue_index, 0, &vk_queue_);
+ if (allow_protected_memory) {
+ VkDeviceQueueInfo2 queue_info2 = {};
+ queue_info2.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2;
+ queue_info2.flags = VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT;
+ queue_info2.queueFamilyIndex = queue_index;
+ queue_info2.queueIndex = 0;
+ vkGetDeviceQueue2(vk_device_, &queue_info2, &vk_queue_);
+ } else {
+ vkGetDeviceQueue(vk_device_, queue_index, 0, &vk_queue_);
+ }
cleanup_helper_ = std::make_unique<VulkanFenceHelper>(this);
diff --git a/chromium/gpu/vulkan/vulkan_device_queue.h b/chromium/gpu/vulkan/vulkan_device_queue.h
index db8800f6e20..3fbc53b2ec4 100644
--- a/chromium/gpu/vulkan/vulkan_device_queue.h
+++ b/chromium/gpu/vulkan/vulkan_device_queue.h
@@ -18,8 +18,9 @@
namespace gpu {
-class VulkanFenceHelper;
class VulkanCommandPool;
+class VulkanFenceHelper;
+class VulkanInfo;
class VULKAN_EXPORT VulkanDeviceQueue {
public:
@@ -38,7 +39,7 @@ class VULKAN_EXPORT VulkanDeviceQueue {
uint32_t queue_family_index)>;
bool Initialize(
uint32_t options,
- uint32_t max_api_version,
+ const VulkanInfo& info,
const std::vector<const char*>& required_extensions,
bool allow_protected_memory,
const GetPresentationSupportCallback& get_presentation_support);
@@ -103,22 +104,17 @@ class VULKAN_EXPORT VulkanDeviceQueue {
uint32_t vk_queue_index_ = 0;
const VkInstance vk_instance_;
std::unique_ptr<VulkanFenceHelper> cleanup_helper_;
- VkPhysicalDeviceFeatures2 enabled_device_features_2_ = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2};
+ VkPhysicalDeviceFeatures2 enabled_device_features_2_;
const bool enforce_protected_memory_;
bool allow_protected_memory_ = false;
#if defined(OS_ANDROID) || defined(OS_FUCHSIA)
VkPhysicalDeviceSamplerYcbcrConversionFeatures
- sampler_ycbcr_conversion_features_ = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES};
+ sampler_ycbcr_conversion_features_;
#endif // defined(OS_ANDROID) || defined(OS_FUCHSIA)
-#if defined(OS_FUCHSIA)
- VkPhysicalDeviceProtectedMemoryFeatures protected_memory_features_ = {
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES};
-#endif // defined(OS_FUCHSIA)
+ VkPhysicalDeviceProtectedMemoryFeatures protected_memory_features_;
DISALLOW_COPY_AND_ASSIGN(VulkanDeviceQueue);
};
diff --git a/chromium/gpu/vulkan/vulkan_function_pointers.cc b/chromium/gpu/vulkan/vulkan_function_pointers.cc
index f772a8f1aa0..9c3cea92b11 100644
--- a/chromium/gpu/vulkan/vulkan_function_pointers.cc
+++ b/chromium/gpu/vulkan/vulkan_function_pointers.cc
@@ -124,6 +124,16 @@ bool VulkanFunctionPointers::BindInstanceFunctionPointers(
return false;
}
+ vkGetPhysicalDeviceFormatPropertiesFn =
+ reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(
+ vkGetInstanceProcAddrFn(vk_instance,
+ "vkGetPhysicalDeviceFormatProperties"));
+ if (!vkGetPhysicalDeviceFormatPropertiesFn) {
+ DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
+ << "vkGetPhysicalDeviceFormatProperties";
+ return false;
+ }
+
vkGetPhysicalDeviceMemoryPropertiesFn =
reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(
vkGetInstanceProcAddrFn(vk_instance,
@@ -246,7 +256,19 @@ bool VulkanFunctionPointers::BindInstanceFunctionPointers(
}
#endif // defined(OS_FUCHSIA)
- if (api_version >= VK_VERSION_1_1) {
+ if (api_version >= VK_API_VERSION_1_1) {
+ vkGetPhysicalDeviceImageFormatProperties2Fn =
+ reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties2>(
+ vkGetInstanceProcAddrFn(
+ vk_instance, "vkGetPhysicalDeviceImageFormatProperties2"));
+ if (!vkGetPhysicalDeviceImageFormatProperties2Fn) {
+ DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
+ << "vkGetPhysicalDeviceImageFormatProperties2";
+ return false;
+ }
+ }
+
+ if (api_version >= VK_API_VERSION_1_1) {
vkGetPhysicalDeviceFeatures2Fn =
reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2>(
vkGetInstanceProcAddrFn(vk_instance,
@@ -715,6 +737,25 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointers(
return false;
}
+ if (api_version >= VK_API_VERSION_1_1) {
+ vkGetDeviceQueue2Fn = reinterpret_cast<PFN_vkGetDeviceQueue2>(
+ vkGetDeviceProcAddrFn(vk_device, "vkGetDeviceQueue2"));
+ if (!vkGetDeviceQueue2Fn) {
+ DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
+ << "vkGetDeviceQueue2";
+ return false;
+ }
+
+ vkGetImageMemoryRequirements2Fn =
+ reinterpret_cast<PFN_vkGetImageMemoryRequirements2>(
+ vkGetDeviceProcAddrFn(vk_device, "vkGetImageMemoryRequirements2"));
+ if (!vkGetImageMemoryRequirements2Fn) {
+ DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
+ << "vkGetImageMemoryRequirements2";
+ return false;
+ }
+ }
+
#if defined(OS_ANDROID)
if (gfx::HasExtension(
enabled_extensions,
@@ -762,6 +803,15 @@ bool VulkanFunctionPointers::BindDeviceFunctionPointers(
<< "vkGetMemoryFdKHR";
return false;
}
+
+ vkGetMemoryFdPropertiesKHRFn =
+ reinterpret_cast<PFN_vkGetMemoryFdPropertiesKHR>(
+ vkGetDeviceProcAddrFn(vk_device, "vkGetMemoryFdPropertiesKHR"));
+ if (!vkGetMemoryFdPropertiesKHRFn) {
+ DLOG(WARNING) << "Failed to bind vulkan entrypoint: "
+ << "vkGetMemoryFdPropertiesKHR";
+ return false;
+ }
}
#endif // defined(OS_LINUX)
diff --git a/chromium/gpu/vulkan/vulkan_function_pointers.h b/chromium/gpu/vulkan/vulkan_function_pointers.h
index f27e00d76ac..78295b6439c 100644
--- a/chromium/gpu/vulkan/vulkan_function_pointers.h
+++ b/chromium/gpu/vulkan/vulkan_function_pointers.h
@@ -78,6 +78,8 @@ struct VulkanFunctionPointers {
PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevicesFn = nullptr;
PFN_vkGetDeviceProcAddr vkGetDeviceProcAddrFn = nullptr;
PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeaturesFn = nullptr;
+ PFN_vkGetPhysicalDeviceFormatProperties
+ vkGetPhysicalDeviceFormatPropertiesFn = nullptr;
PFN_vkGetPhysicalDeviceMemoryProperties
vkGetPhysicalDeviceMemoryPropertiesFn = nullptr;
PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDevicePropertiesFn = nullptr;
@@ -107,6 +109,9 @@ struct VulkanFunctionPointers {
nullptr;
#endif // defined(OS_FUCHSIA)
+ PFN_vkGetPhysicalDeviceImageFormatProperties2
+ vkGetPhysicalDeviceImageFormatProperties2Fn = nullptr;
+
PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2Fn = nullptr;
// Device functions
@@ -165,6 +170,9 @@ struct VulkanFunctionPointers {
PFN_vkUpdateDescriptorSets vkUpdateDescriptorSetsFn = nullptr;
PFN_vkWaitForFences vkWaitForFencesFn = nullptr;
+ PFN_vkGetDeviceQueue2 vkGetDeviceQueue2Fn = nullptr;
+ PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2Fn = nullptr;
+
#if defined(OS_ANDROID)
PFN_vkGetAndroidHardwareBufferPropertiesANDROID
vkGetAndroidHardwareBufferPropertiesANDROIDFn = nullptr;
@@ -177,6 +185,7 @@ struct VulkanFunctionPointers {
#if defined(OS_LINUX)
PFN_vkGetMemoryFdKHR vkGetMemoryFdKHRFn = nullptr;
+ PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHRFn = nullptr;
#endif // defined(OS_LINUX)
#if defined(OS_FUCHSIA)
@@ -227,6 +236,8 @@ struct VulkanFunctionPointers {
gpu::GetVulkanFunctionPointers()->vkGetDeviceProcAddrFn
#define vkGetPhysicalDeviceFeatures \
gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceFeaturesFn
+#define vkGetPhysicalDeviceFormatProperties \
+ gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceFormatPropertiesFn
#define vkGetPhysicalDeviceMemoryProperties \
gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceMemoryPropertiesFn
#define vkGetPhysicalDeviceProperties \
@@ -261,6 +272,9 @@ struct VulkanFunctionPointers {
gpu::GetVulkanFunctionPointers()->vkCreateImagePipeSurfaceFUCHSIAFn
#endif // defined(OS_FUCHSIA)
+#define vkGetPhysicalDeviceImageFormatProperties2 \
+ gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceImageFormatProperties2Fn
+
#define vkGetPhysicalDeviceFeatures2 \
gpu::GetVulkanFunctionPointers()->vkGetPhysicalDeviceFeatures2Fn
@@ -350,6 +364,10 @@ struct VulkanFunctionPointers {
gpu::GetVulkanFunctionPointers()->vkUpdateDescriptorSetsFn
#define vkWaitForFences gpu::GetVulkanFunctionPointers()->vkWaitForFencesFn
+#define vkGetDeviceQueue2 gpu::GetVulkanFunctionPointers()->vkGetDeviceQueue2Fn
+#define vkGetImageMemoryRequirements2 \
+ gpu::GetVulkanFunctionPointers()->vkGetImageMemoryRequirements2Fn
+
#if defined(OS_ANDROID)
#define vkGetAndroidHardwareBufferPropertiesANDROID \
gpu::GetVulkanFunctionPointers() \
@@ -365,6 +383,8 @@ struct VulkanFunctionPointers {
#if defined(OS_LINUX)
#define vkGetMemoryFdKHR gpu::GetVulkanFunctionPointers()->vkGetMemoryFdKHRFn
+#define vkGetMemoryFdPropertiesKHR \
+ gpu::GetVulkanFunctionPointers()->vkGetMemoryFdPropertiesKHRFn
#endif // defined(OS_LINUX)
#if defined(OS_FUCHSIA)
diff --git a/chromium/gpu/vulkan/vulkan_implementation.cc b/chromium/gpu/vulkan/vulkan_implementation.cc
index 7da655d7c3e..2731519fca6 100644
--- a/chromium/gpu/vulkan/vulkan_implementation.cc
+++ b/chromium/gpu/vulkan/vulkan_implementation.cc
@@ -32,7 +32,7 @@ std::unique_ptr<VulkanDeviceQueue> CreateVulkanDeviceQueue(
std::vector<const char*> required_extensions =
vulkan_implementation->GetRequiredDeviceExtensions();
if (!device_queue->Initialize(
- option, vulkan_implementation->GetVulkanInstance()->api_version(),
+ option, vulkan_implementation->GetVulkanInstance()->vulkan_info(),
std::move(required_extensions),
vulkan_implementation->allow_protected_memory(), callback)) {
device_queue->Destroy();
diff --git a/chromium/gpu/vulkan/vulkan_info.cc b/chromium/gpu/vulkan/vulkan_info.cc
new file mode 100644
index 00000000000..548a1233806
--- /dev/null
+++ b/chromium/gpu/vulkan/vulkan_info.cc
@@ -0,0 +1,18 @@
+// Copyright 2019 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/vulkan/vulkan_info.h"
+
+namespace gpu {
+
+VulkanInfo::VulkanInfo() = default;
+VulkanInfo::~VulkanInfo() = default;
+VulkanInfo::PhysicalDeviceInfo::PhysicalDeviceInfo() = default;
+VulkanInfo::PhysicalDeviceInfo::PhysicalDeviceInfo(
+ const PhysicalDeviceInfo& other) = default;
+VulkanInfo::PhysicalDeviceInfo::~PhysicalDeviceInfo() = default;
+VulkanInfo::PhysicalDeviceInfo& VulkanInfo::PhysicalDeviceInfo::operator=(
+ const PhysicalDeviceInfo& info) = default;
+
+} // namespace gpu
diff --git a/chromium/gpu/vulkan/vulkan_info.h b/chromium/gpu/vulkan/vulkan_info.h
new file mode 100644
index 00000000000..babd2f93581
--- /dev/null
+++ b/chromium/gpu/vulkan/vulkan_info.h
@@ -0,0 +1,51 @@
+// Copyright 2019 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_VULKAN_VULKAN_INFO_H_
+#define GPU_VULKAN_VULKAN_INFO_H_
+
+#include <vulkan/vulkan.h>
+#include <vector>
+
+#include "base/macros.h"
+#include "gpu/vulkan/vulkan_export.h"
+#include "ui/gfx/extension_set.h"
+
+namespace gpu {
+
+class VULKAN_EXPORT VulkanInfo {
+ public:
+ VulkanInfo();
+ ~VulkanInfo();
+
+ class PhysicalDeviceInfo {
+ public:
+ PhysicalDeviceInfo();
+ PhysicalDeviceInfo(const PhysicalDeviceInfo& other);
+ ~PhysicalDeviceInfo();
+ PhysicalDeviceInfo& operator=(const PhysicalDeviceInfo& other);
+
+ VkPhysicalDevice device = VK_NULL_HANDLE;
+ VkPhysicalDeviceProperties properties = {};
+ std::vector<VkLayerProperties> layers;
+
+ VkPhysicalDeviceFeatures features = {};
+ // Extended physical device features:
+ bool feature_sampler_ycbcr_conversion = false;
+ bool feature_protected_memory = false;
+
+ std::vector<VkQueueFamilyProperties> queue_families;
+ };
+
+ uint32_t api_version = VK_MAKE_VERSION(1, 0, 0);
+ uint32_t used_api_version = VK_MAKE_VERSION(1, 0, 0);
+ std::vector<VkExtensionProperties> instance_extensions;
+ std::vector<const char*> enabled_instance_extensions;
+ std::vector<VkLayerProperties> instance_layers;
+ std::vector<PhysicalDeviceInfo> physical_devices;
+};
+
+} // namespace gpu
+
+#endif // GPU_VULKAN_VULKAN_INFO_H_
diff --git a/chromium/gpu/vulkan/vulkan_instance.cc b/chromium/gpu/vulkan/vulkan_instance.cc
index b7466e6b823..8bd39f54cb1 100644
--- a/chromium/gpu/vulkan/vulkan_instance.cc
+++ b/chromium/gpu/vulkan/vulkan_instance.cc
@@ -57,34 +57,33 @@ bool VulkanInstance::Initialize(
if (!vulkan_function_pointers->BindUnassociatedFunctionPointers())
return false;
- uint32_t supported_api_version = VK_MAKE_VERSION(1, 0, 0);
if (vulkan_function_pointers->vkEnumerateInstanceVersionFn) {
vulkan_function_pointers->vkEnumerateInstanceVersionFn(
- &supported_api_version);
+ &vulkan_info_.api_version);
}
#if defined(OS_ANDROID)
// Ensure that android works only with vulkan apiVersion >= 1.1. Vulkan will
// only be enabled for Android P+ and Android P+ requires vulkan
// apiVersion >= 1.1.
- if (supported_api_version < VK_MAKE_VERSION(1, 1, 0))
+ if (vulkan_info_.api_version < VK_MAKE_VERSION(1, 1, 0))
return false;
#endif
// Use Vulkan 1.1 if it's available.
- api_version_ = (supported_api_version >= VK_MAKE_VERSION(1, 1, 0))
- ? VK_MAKE_VERSION(1, 1, 0)
- : VK_MAKE_VERSION(1, 0, 0);
+ vulkan_info_.used_api_version =
+ (vulkan_info_.api_version >= VK_MAKE_VERSION(1, 1, 0))
+ ? VK_MAKE_VERSION(1, 1, 0)
+ : VK_MAKE_VERSION(1, 0, 0);
VkResult result = VK_SUCCESS;
VkApplicationInfo app_info = {};
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
app_info.pApplicationName = "Chromium";
- app_info.apiVersion = api_version_;
-
- std::vector<const char*> enabled_extensions = required_extensions;
+ app_info.apiVersion = vulkan_info_.used_api_version;
+ vulkan_info_.enabled_instance_extensions = required_extensions;
uint32_t num_instance_exts = 0;
result = vkEnumerateInstanceExtensionProperties(nullptr, &num_instance_exts,
nullptr);
@@ -94,27 +93,31 @@ bool VulkanInstance::Initialize(
return false;
}
- std::vector<VkExtensionProperties> instance_exts(num_instance_exts);
- result = vkEnumerateInstanceExtensionProperties(nullptr, &num_instance_exts,
- instance_exts.data());
+ vulkan_info_.instance_extensions.resize(num_instance_exts);
+ result = vkEnumerateInstanceExtensionProperties(
+ nullptr, &num_instance_exts, vulkan_info_.instance_extensions.data());
if (VK_SUCCESS != result) {
DLOG(ERROR) << "vkEnumerateInstanceExtensionProperties() failed: "
<< result;
return false;
}
- for (const VkExtensionProperties& ext_property : instance_exts) {
+ for (const VkExtensionProperties& ext_property :
+ vulkan_info_.instance_extensions) {
if (strcmp(ext_property.extensionName,
VK_EXT_DEBUG_REPORT_EXTENSION_NAME) == 0) {
debug_report_enabled_ = true;
- enabled_extensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
+ vulkan_info_.enabled_instance_extensions.push_back(
+ VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
}
}
#if DCHECK_IS_ON()
- for (const char* enabled_extension : enabled_extensions) {
+ for (const char* enabled_extension :
+ vulkan_info_.enabled_instance_extensions) {
bool found = false;
- for (const VkExtensionProperties& ext_property : instance_exts) {
+ for (const VkExtensionProperties& ext_property :
+ vulkan_info_.instance_extensions) {
if (strcmp(ext_property.extensionName, enabled_extension) == 0) {
found = true;
break;
@@ -129,7 +132,6 @@ bool VulkanInstance::Initialize(
#endif
std::vector<const char*> enabled_layer_names = required_layers;
-#if DCHECK_IS_ON()
uint32_t num_instance_layers = 0;
result = vkEnumerateInstanceLayerProperties(&num_instance_layers, nullptr);
if (VK_SUCCESS != result) {
@@ -138,29 +140,29 @@ bool VulkanInstance::Initialize(
return false;
}
- std::vector<VkLayerProperties> instance_layers(num_instance_layers);
- result = vkEnumerateInstanceLayerProperties(&num_instance_layers,
- instance_layers.data());
+ vulkan_info_.instance_layers.resize(num_instance_layers);
+ result = vkEnumerateInstanceLayerProperties(
+ &num_instance_layers, vulkan_info_.instance_layers.data());
if (VK_SUCCESS != result) {
DLOG(ERROR) << "vkEnumerateInstanceLayerProperties() failed: " << result;
return false;
}
+ gfx::ExtensionSet enabled_extensions(
+ std::begin(vulkan_info_.enabled_instance_extensions),
+ std::end(vulkan_info_.enabled_instance_extensions));
+
+#if DCHECK_IS_ON()
// TODO(crbug.com/843346): Make validation work in combination with
// VK_KHR_xlib_surface or switch to VK_KHR_xcb_surface.
- constexpr base::StringPiece xlib_surface_extension_name(
- "VK_KHR_xlib_surface");
bool require_xlib_surface_extension =
- std::find_if(enabled_extensions.begin(), enabled_extensions.end(),
- [xlib_surface_extension_name](const char* e) {
- return xlib_surface_extension_name == e;
- }) != enabled_extensions.end();
+ gfx::HasExtension(enabled_extensions, "VK_KHR_xlib_surface");
- // VK_LAYER_LUNARG_standard_validation 1.1.106 is required to support
+ // VK_LAYER_KHRONOS_validation 1.1.106 is required to support
// VK_KHR_xlib_surface.
constexpr base::StringPiece standard_validation(
- "VK_LAYER_LUNARG_standard_validation");
- for (const VkLayerProperties& layer_property : instance_layers) {
+ "VK_LAYER_KHRONOS_validation");
+ for (const VkLayerProperties& layer_property : vulkan_info_.instance_layers) {
if (standard_validation != layer_property.layerName)
continue;
if (!require_xlib_surface_extension ||
@@ -172,14 +174,15 @@ bool VulkanInstance::Initialize(
#endif // DCHECK_IS_ON()
VkInstanceCreateInfo instance_create_info = {
- VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType
- nullptr, // pNext
- 0, // flags
- &app_info, // pApplicationInfo
- enabled_layer_names.size(), // enableLayerCount
- enabled_layer_names.data(), // ppEnabledLayerNames
- enabled_extensions.size(), // enabledExtensionCount
- enabled_extensions.data(), // ppEnabledExtensionNames
+ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // sType
+ nullptr, // pNext
+ 0, // flags
+ &app_info, // pApplicationInfo
+ enabled_layer_names.size(), // enableLayerCount
+ enabled_layer_names.data(), // ppEnabledLayerNames
+ vulkan_info_.enabled_instance_extensions.size(), // enabledExtensionCount
+ vulkan_info_.enabled_instance_extensions
+ .data(), // ppEnabledExtensionNames
};
result = vkCreateInstance(&instance_create_info, nullptr, &vk_instance_);
@@ -188,9 +191,6 @@ bool VulkanInstance::Initialize(
return false;
}
- enabled_extensions_ = gfx::ExtensionSet(std::begin(enabled_extensions),
- std::end(enabled_extensions));
-
#if DCHECK_IS_ON()
// Register our error logging function.
if (debug_report_enabled_) {
@@ -226,8 +226,79 @@ bool VulkanInstance::Initialize(
}
#endif
- return vulkan_function_pointers->BindInstanceFunctionPointers(
- vk_instance_, api_version_, enabled_extensions_);
+ if (!vulkan_function_pointers->BindInstanceFunctionPointers(
+ vk_instance_, vulkan_info_.used_api_version, enabled_extensions)) {
+ return false;
+ }
+
+ CollectInfo();
+ return true;
+}
+
+void VulkanInstance::CollectInfo() {
+ uint32_t count = 0;
+ VkResult result = vkEnumeratePhysicalDevices(vk_instance_, &count, nullptr);
+ if (result != VK_SUCCESS) {
+ DLOG(ERROR) << "vkEnumeratePhysicalDevices failed: " << result;
+ }
+
+ std::vector<VkPhysicalDevice> physical_devices(count);
+ result =
+ vkEnumeratePhysicalDevices(vk_instance_, &count, physical_devices.data());
+ if (VK_SUCCESS != result) {
+ DLOG(ERROR) << "vkEnumeratePhysicalDevices() failed: " << result;
+ return;
+ }
+
+ vulkan_info_.physical_devices.reserve(count);
+ for (VkPhysicalDevice device : physical_devices) {
+ vulkan_info_.physical_devices.emplace_back();
+ auto& info = vulkan_info_.physical_devices.back();
+ info.device = device;
+
+ vkGetPhysicalDeviceProperties(device, &info.properties);
+
+ count = 0;
+ result = vkEnumerateDeviceLayerProperties(device, &count, nullptr);
+ DLOG_IF(ERROR, result != VK_SUCCESS)
+ << "vkEnumerateDeviceLayerProperties failed: " << result;
+
+ info.layers.resize(count);
+ result =
+ vkEnumerateDeviceLayerProperties(device, &count, info.layers.data());
+ DLOG_IF(ERROR, result != VK_SUCCESS)
+ << "vkEnumerateDeviceLayerProperties failed: " << result;
+
+ // The API version of the VkInstance might be different than the supported
+ // API version of the VkPhysicalDevice, so we need to check the GPU's
+ // API version instead of just testing to see if
+ // vkGetPhysicalDeviceFeatures2 is non-null.
+ if (info.properties.apiVersion >= VK_MAKE_VERSION(1, 1, 0)) {
+ VkPhysicalDeviceSamplerYcbcrConversionFeatures ycbcr_converson_features =
+ {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES};
+ VkPhysicalDeviceProtectedMemoryFeatures protected_memory_feature = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES};
+ VkPhysicalDeviceFeatures2 features_2 = {
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2};
+ features_2.pNext = &ycbcr_converson_features;
+ ycbcr_converson_features.pNext = &protected_memory_feature;
+
+ vkGetPhysicalDeviceFeatures2(device, &features_2);
+ info.feature_sampler_ycbcr_conversion =
+ ycbcr_converson_features.samplerYcbcrConversion;
+ info.feature_protected_memory = protected_memory_feature.protectedMemory;
+ } else {
+ vkGetPhysicalDeviceFeatures(device, &info.features);
+ }
+
+ count = 0;
+ vkGetPhysicalDeviceQueueFamilyProperties(device, &count, nullptr);
+ if (count) {
+ info.queue_families.resize(count);
+ vkGetPhysicalDeviceQueueFamilyProperties(device, &count,
+ info.queue_families.data());
+ }
+ }
}
void VulkanInstance::Destroy() {
diff --git a/chromium/gpu/vulkan/vulkan_instance.h b/chromium/gpu/vulkan/vulkan_instance.h
index 2762d97b59e..a4656d0b132 100644
--- a/chromium/gpu/vulkan/vulkan_instance.h
+++ b/chromium/gpu/vulkan/vulkan_instance.h
@@ -11,6 +11,7 @@
#include "base/logging.h"
#include "base/macros.h"
#include "gpu/vulkan/vulkan_export.h"
+#include "gpu/vulkan/vulkan_info.h"
#include "ui/gfx/extension_set.h"
namespace gpu {
@@ -29,22 +30,17 @@ class VULKAN_EXPORT VulkanInstance {
bool Initialize(const std::vector<const char*>& required_extensions,
const std::vector<const char*>& required_layers);
- // VkApplicationInfo.apiVersion value used to initialize the instance.
- uint32_t api_version() const { return api_version_; }
-
- const gfx::ExtensionSet& enabled_extensions() const {
- return enabled_extensions_;
- }
+ const VulkanInfo& vulkan_info() const { return vulkan_info_; }
VkInstance vk_instance() { return vk_instance_; }
private:
+ void CollectInfo();
void Destroy();
- uint32_t api_version_;
+ VulkanInfo vulkan_info_;
VkInstance vk_instance_ = VK_NULL_HANDLE;
- gfx::ExtensionSet enabled_extensions_;
bool debug_report_enabled_ = false;
#if DCHECK_IS_ON()
VkDebugReportCallbackEXT error_callback_ = VK_NULL_HANDLE;
diff --git a/chromium/gpu/vulkan/vulkan_swap_chain.cc b/chromium/gpu/vulkan/vulkan_swap_chain.cc
index df049018a9d..e49279963cd 100644
--- a/chromium/gpu/vulkan/vulkan_swap_chain.cc
+++ b/chromium/gpu/vulkan/vulkan_swap_chain.cc
@@ -46,7 +46,7 @@ bool VulkanSwapChain::Initialize(
bool use_protected_memory,
std::unique_ptr<VulkanSwapChain> old_swap_chain) {
DCHECK(device_queue);
- DCHECK(!use_protected_memory || device_queue_->allow_protected_memory());
+ DCHECK(!use_protected_memory || device_queue->allow_protected_memory());
use_protected_memory_ = use_protected_memory;
device_queue_ = device_queue;
device_queue_->GetFenceHelper()->ProcessCleanupTasks();
diff --git a/chromium/gpu/vulkan/win32/vulkan_implementation_win32.cc b/chromium/gpu/vulkan/win32/vulkan_implementation_win32.cc
index c59f36d9fd9..77b8f99cb3b 100644
--- a/chromium/gpu/vulkan/win32/vulkan_implementation_win32.cc
+++ b/chromium/gpu/vulkan/win32/vulkan_implementation_win32.cc
@@ -77,7 +77,8 @@ std::unique_ptr<VulkanSurface> VulkanImplementationWin32::CreateViewSurface(
}
return std::make_unique<VulkanSurface>(vulkan_instance_.vk_instance(),
- surface);
+ surface,
+ /* use_protected_memory */ false);
}
bool VulkanImplementationWin32::GetPhysicalDevicePresentationSupport(
diff --git a/chromium/gpu/vulkan/x/vulkan_implementation_x11.cc b/chromium/gpu/vulkan/x/vulkan_implementation_x11.cc
index 2c96e7869d6..4544bcaf5ef 100644
--- a/chromium/gpu/vulkan/x/vulkan_implementation_x11.cc
+++ b/chromium/gpu/vulkan/x/vulkan_implementation_x11.cc
@@ -33,6 +33,15 @@ class ScopedUnsetDisplay {
DISALLOW_COPY_AND_ASSIGN(ScopedUnsetDisplay);
};
+bool InitializeVulkanFunctionPointers(
+ const base::FilePath& path,
+ VulkanFunctionPointers* vulkan_function_pointers) {
+ base::NativeLibraryLoadError native_library_load_error;
+ vulkan_function_pointers->vulkan_loader_library_ =
+ base::LoadNativeLibrary(path, &native_library_load_error);
+ return vulkan_function_pointers->vulkan_loader_library_;
+}
+
} // namespace
VulkanImplementationX11::VulkanImplementationX11(bool use_swiftshader)
@@ -65,15 +74,13 @@ bool VulkanImplementationX11::InitializeVulkanInstance(bool using_surface) {
if (use_swiftshader()) {
if (!base::PathService::Get(base::DIR_MODULE, &path))
return false;
- path = path.Append("swiftshader/libvk_swiftshader.so");
+
+ path = path.Append("libvk_swiftshader.so");
} else {
path = base::FilePath("libvulkan.so.1");
}
- base::NativeLibraryLoadError native_library_load_error;
- vulkan_function_pointers->vulkan_loader_library_ =
- base::LoadNativeLibrary(path, &native_library_load_error);
- if (!vulkan_function_pointers->vulkan_loader_library_)
+ if (!InitializeVulkanFunctionPointers(path, vulkan_function_pointers))
return false;
if (!vulkan_instance_.Initialize(required_extensions, {}))