This was crashing for example here: https://chromium-swarm.appspot.com/task?id=4b174a9710848410 https://chromium-swarm.appspot.com/task?id=4b214baec2ee7e10 With this stack: libglesv2!gl::TextureState::isBoundAsSamplerTexture libglesv2!gl::Texture::onUnbindAsSamplerTexture libglesv2!gl::State::unsetActiveTexture+0x9 libglesv2!gl::State::updateActiveTextureState+0x2d2 libglesv2!gl::State::updateActiveTexture+0x3aa libglesv2!gl::State::setSamplerTexture+0x4a1 libglesv2!gl::Context::bindTexture+0x1ab libglesv2!gl::BindTexture+0x99 chrome!GrGLFunction+0x1f chrome!GrGLGpu::bindTexture+0x1a0 chrome!GrGLProgram::bindTextures+0x1b9 chrome!GrGLOpsRenderPass::onBindTextures+0x50 chrome!GrOpsRenderPass::bindTextures+0x106 chrome!GrOpFlushState::bindTextures+0xf chrome!`anonymous namespace'::FillRectOp::onExecute+0xd3 It's unclear how we could end up with a Texture bound that doesn't go through the normal setter functions. I did see a potential hole where textures might not get an unbind call when a Context is torn down. This could lead to bugs in multi-context situations. This protects the set/unset functions in a helper class to ensure we always call onBind/onUnbind and forces the destructor to call unbind. Bug: angleproject:4490 Change-Id: Ied64e02bbe3a37efcab6cbdd4bf2d1b6dcb8b3ac Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2118254 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by:Cody Northrop <cnorthrop@google.com>
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| overlay | Loading commit data... | |
| renderer | Loading commit data... | |
| AttributeMap.cpp | Loading commit data... | |
| AttributeMap.h | Loading commit data... | |
| BinaryStream.h | Loading commit data... | |
| BinaryStream_unittest.cpp | Loading commit data... | |
| BlobCache.cpp | Loading commit data... | |
| BlobCache.h | Loading commit data... | |
| BlobCache_unittest.cpp | Loading commit data... | |
| Buffer.cpp | Loading commit data... | |
| Buffer.h | Loading commit data... | |
| Caps.cpp | Loading commit data... | |
| Caps.h | Loading commit data... | |
| Compiler.cpp | Loading commit data... | |
| Compiler.h | Loading commit data... | |
| Config.cpp | Loading commit data... | |
| Config.h | Loading commit data... | |
| Config_unittest.cpp | Loading commit data... | |
| Constants.h | Loading commit data... | |
| Context.cpp | Loading commit data... | |
| Context.h | Loading commit data... | |
| Context.inl.h | Loading commit data... | |
| Context_gl.cpp | Loading commit data... | |
| Context_gl_1_0_autogen.h | Loading commit data... | |
| Context_gl_1_1_autogen.h | Loading commit data... | |
| Context_gl_1_2_autogen.h | Loading commit data... | |
| Context_gl_1_3_autogen.h | Loading commit data... | |
| Context_gl_1_4_autogen.h | Loading commit data... | |
| Context_gl_1_5_autogen.h | Loading commit data... | |
| Context_gl_2_0_autogen.h | Loading commit data... | |
| Context_gl_2_1_autogen.h | Loading commit data... | |
| Context_gl_3_0_autogen.h | Loading commit data... | |
| Context_gl_3_1_autogen.h | Loading commit data... | |
| Context_gl_3_2_autogen.h | Loading commit data... | |
| Context_gl_3_3_autogen.h | Loading commit data... | |
| Context_gl_4_0_autogen.h | Loading commit data... | |
| Context_gl_4_1_autogen.h | Loading commit data... | |
| Context_gl_4_2_autogen.h | Loading commit data... | |
| Context_gl_4_3_autogen.h | Loading commit data... | |
| Context_gl_4_4_autogen.h | Loading commit data... | |
| Context_gl_4_5_autogen.h | Loading commit data... | |
| Context_gl_4_6_autogen.h | Loading commit data... | |
| Context_gles_1_0.cpp | Loading commit data... | |
| Context_gles_1_0_autogen.h | Loading commit data... | |
| Context_gles_2_0_autogen.h | Loading commit data... | |
| Context_gles_3_0_autogen.h | Loading commit data... | |
| Context_gles_3_1_autogen.h | Loading commit data... | |
| Context_gles_3_2_autogen.h | Loading commit data... | |
| Context_gles_ext_autogen.h | Loading commit data... | |
| Debug.cpp | Loading commit data... | |
| Debug.h | Loading commit data... | |
| Device.cpp | Loading commit data... | |
| Device.h | Loading commit data... | |
| Display.cpp | Loading commit data... | |
| Display.h | Loading commit data... | |
| EGLSync.cpp | Loading commit data... | |
| EGLSync.h | Loading commit data... | |
| Error.cpp | Loading commit data... | |
| Error.h | Loading commit data... | |
| Error.inc | Loading commit data... | |
| ErrorStrings.h | Loading commit data... | |
| Fence.cpp | Loading commit data... | |
| Fence.h | Loading commit data... | |
| Fence_unittest.cpp | Loading commit data... | |
| FrameCapture.cpp | Loading commit data... | |
| FrameCapture.h | Loading commit data... | |
| FrameCapture_mock.cpp | Loading commit data... | |
| Framebuffer.cpp | Loading commit data... | |
| Framebuffer.h | Loading commit data... | |
| FramebufferAttachment.cpp | Loading commit data... | |
| FramebufferAttachment.h | Loading commit data... | |
| GLES1Renderer.cpp | Loading commit data... | |
| GLES1Renderer.h | Loading commit data... | |
| GLES1Shaders.inc | Loading commit data... | |
| GLES1State.cpp | Loading commit data... | |
| GLES1State.h | Loading commit data... | |
| HandleAllocator.cpp | Loading commit data... | |
| HandleAllocator.h | Loading commit data... | |
| HandleAllocator_unittest.cpp | Loading commit data... | |
| Image.cpp | Loading commit data... | |
| Image.h | Loading commit data... | |
| ImageIndex.cpp | Loading commit data... | |
| ImageIndex.h | Loading commit data... | |
| ImageIndexIterator_unittest.cpp | Loading commit data... | |
| Image_unittest.cpp | Loading commit data... | |
| IndexRangeCache.cpp | Loading commit data... | |
| IndexRangeCache.h | Loading commit data... | |
| LoggingAnnotator.cpp | Loading commit data... | |
| LoggingAnnotator.h | Loading commit data... | |
| MemoryObject.cpp | Loading commit data... | |
| MemoryObject.h | Loading commit data... | |
| MemoryProgramCache.cpp | Loading commit data... | |
| MemoryProgramCache.h | Loading commit data... | |
| Observer.cpp | Loading commit data... | |
| Observer.h | Loading commit data... | |
| Observer_unittest.cpp | Loading commit data... | |
| Overlay.cpp | Loading commit data... | |
| Overlay.h | Loading commit data... | |
| OverlayWidgets.cpp | Loading commit data... | |
| OverlayWidgets.h | Loading commit data... | |
| Overlay_autogen.cpp | Loading commit data... | |
| Overlay_font_autogen.cpp | Loading commit data... | |
| Overlay_font_autogen.h | Loading commit data... | |
| Platform.cpp | Loading commit data... | |
| Program.cpp | Loading commit data... | |
| Program.h | Loading commit data... | |
| ProgramLinkedResources.cpp | Loading commit data... | |
| ProgramLinkedResources.h | Loading commit data... | |
| ProgramPipeline.cpp | Loading commit data... | |
| ProgramPipeline.h | Loading commit data... | |
| Program_unittest.cpp | Loading commit data... | |
| Query.cpp | Loading commit data... | |
| Query.h | Loading commit data... | |
| RefCountObject.h | Loading commit data... | |
| Renderbuffer.cpp | Loading commit data... | |
| Renderbuffer.h | Loading commit data... | |
| ResourceManager.cpp | Loading commit data... | |
| ResourceManager.h | Loading commit data... | |
| ResourceManager_unittest.cpp | Loading commit data... | |
| ResourceMap.h | Loading commit data... | |
| ResourceMap_unittest.cpp | Loading commit data... | |
| Sampler.cpp | Loading commit data... | |
| Sampler.h | Loading commit data... | |
| Semaphore.cpp | Loading commit data... | |
| Semaphore.h | Loading commit data... | |
| Shader.cpp | Loading commit data... | |
| Shader.h | Loading commit data... | |
| SizedMRUCache.h | Loading commit data... | |
| SizedMRUCache_unittest.cpp | Loading commit data... | |
| State.cpp | Loading commit data... | |
| State.h | Loading commit data... | |
| Stream.cpp | Loading commit data... | |
| Stream.h | Loading commit data... | |
| Surface.cpp | Loading commit data... | |
| Surface.h | Loading commit data... | |
| Surface_unittest.cpp | Loading commit data... | |
| Texture.cpp | Loading commit data... | |
| Texture.h | Loading commit data... | |
| Thread.cpp | Loading commit data... | |
| Thread.h | Loading commit data... | |
| TransformFeedback.cpp | Loading commit data... | |
| TransformFeedback.h | Loading commit data... | |
| TransformFeedback_unittest.cpp | Loading commit data... | |
| Uniform.cpp | Loading commit data... | |
| Uniform.h | Loading commit data... | |
| VaryingPacking.cpp | Loading commit data... | |
| VaryingPacking.h | Loading commit data... | |
| VaryingPacking_unittest.cpp | Loading commit data... | |
| Version.h | Loading commit data... | |
| Version.inc | Loading commit data... | |
| VertexArray.cpp | Loading commit data... | |
| VertexArray.h | Loading commit data... | |
| VertexArray_unittest.cpp | Loading commit data... | |
| VertexAttribute.cpp | Loading commit data... | |
| VertexAttribute.h | Loading commit data... | |
| VertexAttribute.inc | Loading commit data... | |
| WorkerThread.cpp | Loading commit data... | |
| WorkerThread.h | Loading commit data... | |
| WorkerThread_unittest.cpp | Loading commit data... | |
| angletypes.cpp | Loading commit data... | |
| angletypes.h | Loading commit data... | |
| angletypes.inc | Loading commit data... | |
| capture_gles_1_0_autogen.cpp | Loading commit data... | |
| capture_gles_1_0_autogen.h | Loading commit data... | |
| capture_gles_1_0_params.cpp | Loading commit data... | |
| capture_gles_2_0_autogen.cpp | Loading commit data... | |
| capture_gles_2_0_autogen.h | Loading commit data... | |
| capture_gles_2_0_params.cpp | Loading commit data... | |
| capture_gles_3_0_autogen.cpp | Loading commit data... | |
| capture_gles_3_0_autogen.h | Loading commit data... | |
| capture_gles_3_0_params.cpp | Loading commit data... | |
| capture_gles_3_1_autogen.cpp | Loading commit data... | |
| capture_gles_3_1_autogen.h | Loading commit data... | |
| capture_gles_3_1_params.cpp | Loading commit data... | |
| capture_gles_3_2_autogen.cpp | Loading commit data... | |
| capture_gles_3_2_autogen.h | Loading commit data... | |
| capture_gles_3_2_params.cpp | Loading commit data... | |
| capture_gles_ext_autogen.cpp | Loading commit data... | |
| capture_gles_ext_autogen.h | Loading commit data... | |
| capture_gles_ext_params.cpp | Loading commit data... | |
| entry_points_enum_autogen.cpp | Loading commit data... | |
| entry_points_enum_autogen.h | Loading commit data... | |
| entry_points_utils.h | Loading commit data... | |
| es3_copy_conversion_formats.json | Loading commit data... | |
| es3_copy_conversion_table_autogen.cpp | Loading commit data... | |
| es3_format_type_combinations.json | Loading commit data... | |
| features.h | Loading commit data... | |
| format_map_autogen.cpp | Loading commit data... | |
| format_map_data.json | Loading commit data... | |
| format_map_desktop.cpp | Loading commit data... | |
| formatutils.cpp | Loading commit data... | |
| formatutils.h | Loading commit data... | |
| frame_capture_replay_autogen.cpp | Loading commit data... | |
| frame_capture_utils_autogen.cpp | Loading commit data... | |
| frame_capture_utils_autogen.h | Loading commit data... | |
| gen_copy_conversion_table.py | Loading commit data... | |
| gen_format_map.py | Loading commit data... | |
| gen_overlay_fonts.py | Loading commit data... | |
| gen_overlay_widgets.py | Loading commit data... | |
| gl_enum_utils.cpp | Loading commit data... | |
| gl_enum_utils.h | Loading commit data... | |
| gl_enum_utils_autogen.cpp | Loading commit data... | |
| gl_enum_utils_autogen.h | Loading commit data... | |
| histogram_macros.h | Loading commit data... | |
| overlay_widgets.json | Loading commit data... | |
| queryconversions.cpp | Loading commit data... | |
| queryconversions.h | Loading commit data... | |
| queryutils.cpp | Loading commit data... | |
| queryutils.h | Loading commit data... | |
| trace.h | Loading commit data... | |
| validationEGL.cpp | Loading commit data... | |
| validationEGL.h | Loading commit data... | |
| validationES.cpp | Loading commit data... | |
| validationES.h | Loading commit data... | |
| validationES1.cpp | Loading commit data... | |
| validationES1.h | Loading commit data... | |
| validationES1_autogen.h | Loading commit data... | |
| validationES2.cpp | Loading commit data... | |
| validationES2.h | Loading commit data... | |
| validationES2_autogen.h | Loading commit data... | |
| validationES3.cpp | Loading commit data... | |
| validationES3.h | Loading commit data... | |
| validationES31.cpp | Loading commit data... | |
| validationES31.h | Loading commit data... | |
| validationES31_autogen.h | Loading commit data... | |
| validationES32.cpp | Loading commit data... | |
| validationES32.h | Loading commit data... | |
| validationES32_autogen.h | Loading commit data... | |
| validationES3_autogen.h | Loading commit data... | |
| validationESEXT.cpp | Loading commit data... | |
| validationESEXT.h | Loading commit data... | |
| validationESEXT_autogen.h | Loading commit data... | |
| validationGL1.cpp | Loading commit data... | |
| validationGL11.cpp | Loading commit data... | |
| validationGL11_autogen.h | Loading commit data... | |
| validationGL12.cpp | Loading commit data... | |
| validationGL12_autogen.h | Loading commit data... | |
| validationGL13.cpp | Loading commit data... | |
| validationGL13_autogen.h | Loading commit data... | |
| validationGL14.cpp | Loading commit data... | |
| validationGL14_autogen.h | Loading commit data... | |
| validationGL15.cpp | Loading commit data... | |
| validationGL15_autogen.h | Loading commit data... | |
| validationGL1_autogen.h | Loading commit data... | |
| validationGL2.cpp | Loading commit data... | |
| validationGL21.cpp | Loading commit data... | |
| validationGL21_autogen.h | Loading commit data... | |
| validationGL2_autogen.h | Loading commit data... | |
| validationGL3.cpp | Loading commit data... | |
| validationGL31.cpp | Loading commit data... | |
| validationGL31_autogen.h | Loading commit data... | |
| validationGL32.cpp | Loading commit data... | |
| validationGL32_autogen.h | Loading commit data... | |
| validationGL33.cpp | Loading commit data... | |
| validationGL33_autogen.h | Loading commit data... | |
| validationGL3_autogen.h | Loading commit data... | |
| validationGL4.cpp | Loading commit data... | |
| validationGL41.cpp | Loading commit data... | |
| validationGL41_autogen.h | Loading commit data... | |
| validationGL42.cpp | Loading commit data... | |
| validationGL42_autogen.h | Loading commit data... | |
| validationGL43.cpp | Loading commit data... | |
| validationGL43_autogen.h | Loading commit data... | |
| validationGL44.cpp | Loading commit data... | |
| validationGL44_autogen.h | Loading commit data... | |
| validationGL45.cpp | Loading commit data... | |
| validationGL45_autogen.h | Loading commit data... | |
| validationGL46.cpp | Loading commit data... | |
| validationGL46_autogen.h | Loading commit data... | |
| validationGL4_autogen.h | Loading commit data... |