diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-23 17:21:03 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-23 16:25:15 +0000 |
commit | c551f43206405019121bd2b2c93714319a0a3300 (patch) | |
tree | 1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/gpu | |
parent | 7961cea6d1041e3e454dae6a1da660b453efd238 (diff) | |
download | qtwebengine-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')
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, {})) |