diff options
Diffstat (limited to 'gpu/command_buffer/service')
9 files changed, 173 insertions, 57 deletions
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc index 9fec2e1..a15c791 100644 --- a/gpu/command_buffer/service/feature_info.cc +++ b/gpu/command_buffer/service/feature_info.cc @@ -139,7 +139,6 @@ FeatureInfo::FeatureFlags::FeatureFlags() map_buffer_range(false), ext_discard_framebuffer(false), angle_depth_texture(false), - is_angle(false), is_swiftshader(false), angle_texture_usage(false), ext_texture_storage(false), @@ -271,17 +270,10 @@ void FeatureInfo::InitializeFeatures() { const char* renderer_str = reinterpret_cast<const char*>(glGetString(GL_RENDERER)); - if (renderer_str) { - feature_flags_.is_angle = StartsWithASCII(renderer_str, "ANGLE", true); - } - - bool is_es3 = false; const char* version_str = reinterpret_cast<const char*>(glGetString(GL_VERSION)); - if (version_str) { - std::string lstr(base::StringToLowerASCII(std::string(version_str))); - is_es3 = (lstr.substr(0, 12) == "opengl es 3."); - } + + gl_version_info_.reset(new gfx::GLVersionInfo(version_str, renderer_str)); AddExtensionString("GL_ANGLE_translated_shader_source"); AddExtensionString("GL_CHROMIUM_async_pixel_transfers"); @@ -386,7 +378,8 @@ void FeatureInfo::InitializeFeatures() { if (!workarounds_.disable_depth_texture && (extensions.Contains("GL_ARB_depth_texture") || extensions.Contains("GL_OES_depth_texture") || - extensions.Contains("GL_ANGLE_depth_texture") || is_es3)) { + extensions.Contains("GL_ANGLE_depth_texture") || + gl_version_info_->is_es3)) { enable_depth_texture = true; feature_flags_.angle_depth_texture = extensions.Contains("GL_ANGLE_depth_texture"); @@ -404,7 +397,8 @@ void FeatureInfo::InitializeFeatures() { } if (extensions.Contains("GL_EXT_packed_depth_stencil") || - extensions.Contains("GL_OES_packed_depth_stencil") || is_es3) { + extensions.Contains("GL_OES_packed_depth_stencil") || + gl_version_info_->is_es3) { AddExtensionString("GL_OES_packed_depth_stencil"); feature_flags_.packed_depth24_stencil8 = true; if (enable_depth_texture) { @@ -417,7 +411,8 @@ void FeatureInfo::InitializeFeatures() { validators_.render_buffer_format.AddValue(GL_DEPTH24_STENCIL8); } - if (is_es3 || extensions.Contains("GL_OES_vertex_array_object") || + if (gl_version_info_->is_es3 || + extensions.Contains("GL_OES_vertex_array_object") || extensions.Contains("GL_ARB_vertex_array_object") || extensions.Contains("GL_APPLE_vertex_array_object")) { feature_flags_.native_vertex_array_object = true; @@ -430,7 +425,8 @@ void FeatureInfo::InitializeFeatures() { feature_flags_.native_vertex_array_object = false; } - if (is_es3 || extensions.Contains("GL_OES_element_index_uint") || + if (gl_version_info_->is_es3 || + extensions.Contains("GL_OES_element_index_uint") || gfx::HasDesktopGLFeatures()) { AddExtensionString("GL_OES_element_index_uint"); validators_.index_type.AddValue(GL_UNSIGNED_INT); @@ -442,7 +438,8 @@ void FeatureInfo::InitializeFeatures() { // sized formats GL_SRGB8 and GL_SRGB8_ALPHA8. Also, SRGB_EXT isn't a valid // <format> in this case. So, even with GLES3 explicitly check for // GL_EXT_sRGB. - if (((is_es3 || extensions.Contains("GL_OES_rgb8_rgba8")) && + if (((gl_version_info_->is_es3 || + extensions.Contains("GL_OES_rgb8_rgba8")) && extensions.Contains("GL_EXT_sRGB")) || gfx::HasDesktopGLFeatures()) { AddExtensionString("GL_EXT_sRGB"); texture_format_validators_[GL_SRGB_EXT].AddValue(GL_UNSIGNED_BYTE); @@ -503,7 +500,8 @@ void FeatureInfo::InitializeFeatures() { } // Check if we should allow GL_OES_texture_npot - if (is_es3 || extensions.Contains("GL_ARB_texture_non_power_of_two") || + if (gl_version_info_->is_es3 || + extensions.Contains("GL_ARB_texture_non_power_of_two") || extensions.Contains("GL_OES_texture_npot")) { AddExtensionString("GL_OES_texture_npot"); feature_flags_.npot_ok = true; @@ -535,8 +533,9 @@ void FeatureInfo::InitializeFeatures() { // This extension allows a variety of floating point formats to be // rendered to via framebuffer objects. Enable it's usage only if // support for Floating textures is enabled. - if ((is_es3 && extensions.Contains("GL_EXT_color_buffer_float")) || - feature_flags_.is_angle) { + if ((gl_version_info_->is_es3 && + extensions.Contains("GL_EXT_color_buffer_float")) || + gl_version_info_->is_angle) { may_enable_chromium_color_buffer_float = true; } } @@ -638,12 +637,13 @@ void FeatureInfo::InitializeFeatures() { // Check for multisample support if (!workarounds_.disable_multisampling) { bool ext_has_multisample = - extensions.Contains("GL_EXT_framebuffer_multisample") || is_es3; - if (feature_flags_.is_angle) { + extensions.Contains("GL_EXT_framebuffer_multisample") || + gl_version_info_->is_es3; + if (gl_version_info_->is_angle) { ext_has_multisample |= extensions.Contains("GL_ANGLE_framebuffer_multisample"); } - feature_flags_.use_core_framebuffer_multisample = is_es3; + feature_flags_.use_core_framebuffer_multisample = gl_version_info_->is_es3; if (ext_has_multisample) { feature_flags_.chromium_framebuffer_multisample = true; validators_.frame_buffer_target.AddValue(GL_READ_FRAMEBUFFER_EXT); @@ -670,14 +670,15 @@ void FeatureInfo::InitializeFeatures() { } if (extensions.Contains("GL_OES_depth24") || gfx::HasDesktopGLFeatures() || - is_es3) { + gl_version_info_->is_es3) { AddExtensionString("GL_OES_depth24"); feature_flags_.oes_depth24 = true; validators_.render_buffer_format.AddValue(GL_DEPTH_COMPONENT24); } if (!workarounds_.disable_oes_standard_derivatives && - (is_es3 || extensions.Contains("GL_OES_standard_derivatives") || + (gl_version_info_->is_es3 || + extensions.Contains("GL_OES_standard_derivatives") || gfx::HasDesktopGLFeatures())) { AddExtensionString("GL_OES_standard_derivatives"); feature_flags_.oes_standard_derivatives = true; @@ -771,8 +772,10 @@ void FeatureInfo::InitializeFeatures() { // However we expose GL_EXT_texture_storage when just ES3 because we don't // claim to handle GL_BGRA8. bool support_texture_storage_on_es3 = - (is_es3 && enable_immutable_texture_format_bgra_on_es3) || - (is_es3 && !enable_texture_format_bgra8888); + (gl_version_info_->is_es3 && + enable_immutable_texture_format_bgra_on_es3) || + (gl_version_info_->is_es3 && + !enable_texture_format_bgra8888); if (extensions.Contains("GL_EXT_texture_storage") || extensions.Contains("GL_ARB_texture_storage") || support_texture_storage_on_es3) { @@ -825,7 +828,7 @@ void FeatureInfo::InitializeFeatures() { (extensions.Contains("GL_ANGLE_instanced_arrays") || (extensions.Contains("GL_ARB_instanced_arrays") && extensions.Contains("GL_ARB_draw_instanced")) || - is_es3)) { + gl_version_info_->is_es3)) { AddExtensionString("GL_ANGLE_instanced_arrays"); feature_flags_.angle_instanced_arrays = true; validators_.vertex_attribute.AddValue(GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE); @@ -836,7 +839,8 @@ void FeatureInfo::InitializeFeatures() { extensions.Contains("GL_EXT_draw_buffers"); if (!workarounds_.disable_ext_draw_buffers && (vendor_agnostic_draw_buffers || - (extensions.Contains("GL_NV_draw_buffers") && is_es3))) { + (extensions.Contains("GL_NV_draw_buffers") && + gl_version_info_->is_es3))) { AddExtensionString("GL_EXT_draw_buffers"); feature_flags_.ext_draw_buffers = true; @@ -871,7 +875,8 @@ void FeatureInfo::InitializeFeatures() { } } - if (is_es3 || extensions.Contains("GL_EXT_blend_minmax") || + if (gl_version_info_->is_es3 || + extensions.Contains("GL_EXT_blend_minmax") || gfx::HasDesktopGLFeatures()) { AddExtensionString("GL_EXT_blend_minmax"); validators_.equation.AddValue(GL_MIN_EXT); @@ -906,13 +911,15 @@ void FeatureInfo::InitializeFeatures() { UMA_HISTOGRAM_BOOLEAN("GPU.FenceSupport", ui_gl_fence_works); feature_flags_.map_buffer_range = - is_es3 || extensions.Contains("GL_ARB_map_buffer_range") || + gl_version_info_->is_es3 || + extensions.Contains("GL_ARB_map_buffer_range") || extensions.Contains("GL_EXT_map_buffer_range"); // Really it's part of core OpenGL 2.1 and up, but let's assume the // extension is still advertised. bool has_pixel_buffers = - is_es3 || extensions.Contains("GL_ARB_pixel_buffer_object") || + gl_version_info_->is_es3 || + extensions.Contains("GL_ARB_pixel_buffer_object") || extensions.Contains("GL_NV_pixel_buffer_object"); // We will use either glMapBuffer() or glMapBufferRange() for async readbacks. @@ -921,13 +928,15 @@ void FeatureInfo::InitializeFeatures() { feature_flags_.use_async_readpixels = true; } - if (is_es3 || extensions.Contains("GL_ARB_sampler_objects")) { + if (gl_version_info_->is_es3 || + extensions.Contains("GL_ARB_sampler_objects")) { feature_flags_.enable_samplers = true; // TODO(dsinclair): Add AddExtensionString("GL_CHROMIUM_sampler_objects") // when available. } - if ((is_es3 || extensions.Contains("GL_EXT_discard_framebuffer")) && + if ((gl_version_info_->is_es3 || + extensions.Contains("GL_EXT_discard_framebuffer")) && !workarounds_.disable_ext_discard_framebuffer) { // DiscardFramebufferEXT is automatically bound to InvalidateFramebuffer. AddExtensionString("GL_EXT_discard_framebuffer"); @@ -974,7 +983,8 @@ void FeatureInfo::InitializeFeatures() { } if (extensions.Contains("GL_NV_path_rendering")) { - if (extensions.Contains("GL_EXT_direct_state_access") || is_es3) { + if (extensions.Contains("GL_EXT_direct_state_access") || + gl_version_info_->is_es3) { AddExtensionString("GL_CHROMIUM_path_rendering"); feature_flags_.chromium_path_rendering = true; validators_.g_l_state.AddValue(GL_PATH_MODELVIEW_MATRIX_CHROMIUM); @@ -982,7 +992,7 @@ void FeatureInfo::InitializeFeatures() { } } - if ((is_es3 || extensions.Contains("GL_EXT_texture_rg") || + if ((gl_version_info_->is_es3 || extensions.Contains("GL_EXT_texture_rg") || extensions.Contains("GL_ARB_texture_rg")) && IsGL_REDSupportedOnFBOs()) { feature_flags_.ext_texture_rg = true; diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h index 816ab49..c4bf479 100644 --- a/gpu/command_buffer/service/feature_info.h +++ b/gpu/command_buffer/service/feature_info.h @@ -14,6 +14,7 @@ #include "gpu/command_buffer/service/gles2_cmd_validation.h" #include "gpu/config/gpu_driver_bug_workaround_type.h" #include "gpu/gpu_export.h" +#include "ui/gl/gl_version_info.h" namespace base { class CommandLine; @@ -66,7 +67,6 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> { bool map_buffer_range; bool ext_discard_framebuffer; bool angle_depth_texture; - bool is_angle; bool is_swiftshader; bool angle_texture_usage; bool ext_texture_storage; @@ -122,6 +122,11 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> { return workarounds_; } + const gfx::GLVersionInfo& gl_version_info() const { + CHECK(gl_version_info_.get()); + return *(gl_version_info_.get()); + } + private: friend class base::RefCounted<FeatureInfo>; friend class BufferManagerClientSideArraysTest; @@ -148,6 +153,8 @@ class GPU_EXPORT FeatureInfo : public base::RefCounted<FeatureInfo> { // Flags for Workarounds. Workarounds workarounds_; + scoped_ptr<gfx::GLVersionInfo> gl_version_info_; + DISALLOW_COPY_AND_ASSIGN(FeatureInfo); }; diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc index b314262..06f3d11 100644 --- a/gpu/command_buffer/service/feature_info_unittest.cc +++ b/gpu/command_buffer/service/feature_info_unittest.cc @@ -127,7 +127,6 @@ TEST_F(FeatureInfoTest, Basic) { EXPECT_FALSE(info_->feature_flags().nv_draw_buffers); EXPECT_FALSE(info_->feature_flags().ext_discard_framebuffer); EXPECT_FALSE(info_->feature_flags().angle_depth_texture); - EXPECT_FALSE(info_->feature_flags().is_angle); #define GPU_OP(type, name) EXPECT_FALSE(info_->workarounds().name); GPU_DRIVER_BUG_WORKAROUNDS(GPU_OP) @@ -345,7 +344,7 @@ TEST_F(FeatureInfoTest, InitializeNoExtensions) { TEST_F(FeatureInfoTest, InitializeWithANGLE) { SetupInitExpectationsWithGLVersion("", kGLRendererStringANGLE, ""); - EXPECT_TRUE(info_->feature_flags().is_angle); + EXPECT_TRUE(info_->gl_version_info().is_angle); } TEST_F(FeatureInfoTest, InitializeNPOTExtensionGLES) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 422168c..919d8d8 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -4494,7 +4494,13 @@ void GLES2DecoderImpl::DoDiscardFramebufferEXT(GLenum target, } ScopedRenderTo do_render(framebuffer); - glDiscardFramebufferEXT(target, numAttachments, translated_attachments.get()); + if (feature_info_->gl_version_info().is_es3) { + glInvalidateFramebuffer( + target, numAttachments, translated_attachments.get()); + } else { + glDiscardFramebufferEXT( + target, numAttachments, translated_attachments.get()); + } } void GLES2DecoderImpl::DoEnableVertexAttribArray(GLuint index) { @@ -5495,7 +5501,7 @@ void GLES2DecoderImpl::RenderbufferStorageMultisampleHelper( GLsizei height) { // TODO(sievers): This could be resolved at the GL binding level, but the // binding process is currently a bit too 'brute force'. - if (feature_info->feature_flags().is_angle) { + if (feature_info->gl_version_info().is_angle) { glRenderbufferStorageMultisampleANGLE( target, samples, internal_format, width, height); } else if (feature_info->feature_flags().use_core_framebuffer_multisample) { @@ -5519,7 +5525,7 @@ void GLES2DecoderImpl::BlitFramebufferHelper(GLint srcX0, GLenum filter) { // TODO(sievers): This could be resolved at the GL binding level, but the // binding process is currently a bit too 'brute force'. - if (feature_info_->feature_flags().is_angle) { + if (feature_info_->gl_version_info().is_angle) { glBlitFramebufferANGLE( srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); } else if (feature_info_->feature_flags().use_core_framebuffer_multisample) { @@ -7865,8 +7871,8 @@ error::Error GLES2DecoderImpl::HandleReadPixels(uint32 immediate_data_size, glGenBuffersARB(1, &buffer); glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, buffer); // For ANGLE client version 2, GL_STREAM_READ is not available. - const GLenum usage_hint = - features().is_angle ? GL_STATIC_DRAW : GL_STREAM_READ; + const GLenum usage_hint = feature_info_->gl_version_info().is_angle ? + GL_STATIC_DRAW : GL_STREAM_READ; glBufferData(GL_PIXEL_PACK_BUFFER_ARB, pixels_size, NULL, usage_hint); GLenum error = glGetError(); if (error == GL_NO_ERROR) { @@ -9703,7 +9709,7 @@ void GLES2DecoderImpl::DoSwapBuffers() { // Ensure the side effects of the copy are visible to the parent // context. There is no need to do this for ANGLE because it uses a // single D3D device for all contexts. - if (!feature_info_->feature_flags().is_angle) + if (!feature_info_->gl_version_info().is_angle) glFlush(); } } else { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index ebdb625..b84fc2a 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h @@ -1493,6 +1493,74 @@ error::Error GLES2DecoderImpl::HandleHint(uint32_t immediate_data_size, return error::kNoError; } +error::Error GLES2DecoderImpl::HandleInvalidateFramebufferImmediate( + uint32_t immediate_data_size, + const void* cmd_data) { + if (!unsafe_es3_apis_enabled()) + return error::kUnknownCommand; + const gles2::cmds::InvalidateFramebufferImmediate& c = + *static_cast<const gles2::cmds::InvalidateFramebufferImmediate*>( + cmd_data); + (void)c; + GLenum target = static_cast<GLenum>(c.target); + GLsizei count = static_cast<GLsizei>(c.count); + uint32_t data_size; + if (!ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { + return error::kOutOfBounds; + } + if (data_size > immediate_data_size) { + return error::kOutOfBounds; + } + const GLenum* attachments = + GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); + if (attachments == NULL) { + return error::kOutOfBounds; + } + glInvalidateFramebuffer(target, count, attachments); + return error::kNoError; +} + +error::Error GLES2DecoderImpl::HandleInvalidateSubFramebufferImmediate( + uint32_t immediate_data_size, + const void* cmd_data) { + if (!unsafe_es3_apis_enabled()) + return error::kUnknownCommand; + const gles2::cmds::InvalidateSubFramebufferImmediate& c = + *static_cast<const gles2::cmds::InvalidateSubFramebufferImmediate*>( + cmd_data); + (void)c; + GLenum target = static_cast<GLenum>(c.target); + GLsizei count = static_cast<GLsizei>(c.count); + uint32_t data_size; + if (!ComputeDataSize(count, sizeof(GLenum), 1, &data_size)) { + return error::kOutOfBounds; + } + if (data_size > immediate_data_size) { + return error::kOutOfBounds; + } + const GLenum* attachments = + GetImmediateDataAs<const GLenum*>(c, data_size, immediate_data_size); + GLint x = static_cast<GLint>(c.x); + GLint y = static_cast<GLint>(c.y); + GLsizei width = static_cast<GLsizei>(c.width); + GLsizei height = static_cast<GLsizei>(c.height); + if (attachments == NULL) { + return error::kOutOfBounds; + } + if (width < 0) { + LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateSubFramebuffer", + "width < 0"); + return error::kNoError; + } + if (height < 0) { + LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "glInvalidateSubFramebuffer", + "height < 0"); + return error::kNoError; + } + glInvalidateSubFramebuffer(target, count, attachments, x, y, width, height); + return error::kNoError; +} + error::Error GLES2DecoderImpl::HandleIsBuffer(uint32_t immediate_data_size, const void* cmd_data) { const gles2::cmds::IsBuffer& c = @@ -1653,6 +1721,18 @@ error::Error GLES2DecoderImpl::HandlePolygonOffset(uint32_t immediate_data_size, return error::kNoError; } +error::Error GLES2DecoderImpl::HandleReadBuffer(uint32_t immediate_data_size, + const void* cmd_data) { + if (!unsafe_es3_apis_enabled()) + return error::kUnknownCommand; + const gles2::cmds::ReadBuffer& c = + *static_cast<const gles2::cmds::ReadBuffer*>(cmd_data); + (void)c; + GLenum src = static_cast<GLenum>(c.src); + glReadBuffer(src); + return error::kNoError; +} + error::Error GLES2DecoderImpl::HandleReleaseShaderCompiler( uint32_t immediate_data_size, const void* cmd_data) { diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h index f9b450e..014007a 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_1_autogen.h @@ -1698,6 +1698,8 @@ TEST_P(GLES2DecoderTest1, HintInvalidArgs0_0) { EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); EXPECT_EQ(GL_INVALID_ENUM, GetGLError()); } +// TODO(gman): InvalidateFramebufferImmediate +// TODO(gman): InvalidateSubFramebufferImmediate TEST_P(GLES2DecoderTest1, IsBufferValidArgs) { SpecializedSetup<cmds::IsBuffer, 0>(true); @@ -1875,14 +1877,4 @@ TEST_P(GLES2DecoderTest1, LinkProgramValidArgs) { } // TODO(gman): PixelStorei -TEST_P(GLES2DecoderTest1, PolygonOffsetValidArgs) { - EXPECT_CALL(*gl_, PolygonOffset(1, 2)); - SpecializedSetup<cmds::PolygonOffset, 0>(true); - cmds::PolygonOffset cmd; - cmd.Init(1, 2); - EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); - EXPECT_EQ(GL_NO_ERROR, GetGLError()); -} -// TODO(gman): ReadPixels - #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_1_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h index b69197f..602be42 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_2_autogen.h @@ -12,6 +12,28 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ +TEST_P(GLES2DecoderTest2, PolygonOffsetValidArgs) { + EXPECT_CALL(*gl_, PolygonOffset(1, 2)); + SpecializedSetup<cmds::PolygonOffset, 0>(true); + cmds::PolygonOffset cmd; + cmd.Init(1, 2); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); +} + +TEST_P(GLES2DecoderTest2, ReadBufferValidArgs) { + EXPECT_CALL(*gl_, ReadBuffer(1)); + SpecializedSetup<cmds::ReadBuffer, 0>(true); + cmds::ReadBuffer cmd; + cmd.Init(1); + decoder_->set_unsafe_es3_apis_enabled(true); + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd)); + EXPECT_EQ(GL_NO_ERROR, GetGLError()); + decoder_->set_unsafe_es3_apis_enabled(false); + EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd)); +} +// TODO(gman): ReadPixels + // TODO(gman): ReleaseShaderCompiler TEST_P(GLES2DecoderTest2, RenderbufferStorageValidArgs) { @@ -1015,7 +1037,4 @@ TEST_P(GLES2DecoderTest2, PopGroupMarkerEXTValidArgs) { // TODO(gman): GetTranslatedShaderSourceANGLE // TODO(gman): PostSubBufferCHROMIUM // TODO(gman): TexImageIOSurface2DCHROMIUM -// TODO(gman): CopyTextureCHROMIUM -// TODO(gman): DrawArraysInstancedANGLE -// TODO(gman): DrawElementsInstancedANGLE #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_2_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h index 0ee2ba5..4509676 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_3_autogen.h @@ -12,6 +12,9 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_DECODER_UNITTEST_3_AUTOGEN_H_ +// TODO(gman): CopyTextureCHROMIUM +// TODO(gman): DrawArraysInstancedANGLE +// TODO(gman): DrawElementsInstancedANGLE // TODO(gman): VertexAttribDivisorANGLE // TODO(gman): GenMailboxCHROMIUM diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc index 78fa020..d230be78f 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc @@ -2120,7 +2120,7 @@ TEST_P(GLES2DecoderManualInitTest, InvalidateFramebufferBinding) { // EXPECT_EQ can't be used to compare function pointers EXPECT_TRUE( - gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") == + gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") != gfx::g_driver_gl.fn.glDiscardFramebufferEXTFn); EXPECT_TRUE( gfx::MockGLInterface::GetGLProcAddress("glInvalidateFramebuffer") != |