RESOLVED FIXED Bug 175223
Web Inspector: tint all pixels drawn by shader program when hovering ShaderProgramTreeElement
https://bugs.webkit.org/show_bug.cgi?id=175223
Summary Web Inspector: tint all pixels drawn by shader program when hovering ShaderPr...
Devin Rousso
Reported 2017-08-04 15:52:29 PDT
This would help visually distinguish multiple shader programs for a single canvas.
Attachments
Patch (31.68 KB, patch)
2017-08-10 00:43 PDT, Devin Rousso
no flags
[Image] After Patch is applied (1.59 MB, image/png)
2017-08-10 00:44 PDT, Devin Rousso
no flags
Patch (36.89 KB, patch)
2017-08-21 20:36 PDT, Devin Rousso
no flags
Archive of layout-test-results from ews103 for mac-elcapitan (1.17 MB, application/zip)
2017-08-21 21:42 PDT, Build Bot
no flags
Archive of layout-test-results from ews104 for mac-elcapitan-wk2 (1.28 MB, application/zip)
2017-08-21 21:47 PDT, Build Bot
no flags
Archive of layout-test-results from ews113 for mac-elcapitan (1.98 MB, application/zip)
2017-08-21 21:53 PDT, Build Bot
no flags
Patch (36.95 KB, patch)
2017-08-21 21:55 PDT, Devin Rousso
no flags
Patch (36.90 KB, patch)
2017-08-22 12:25 PDT, Devin Rousso
no flags
Patch (36.56 KB, patch)
2017-08-22 14:02 PDT, Devin Rousso
no flags
Patch (36.49 KB, patch)
2017-08-22 14:08 PDT, Devin Rousso
no flags
Archive of layout-test-results from ews117 for mac-elcapitan (2.08 MB, application/zip)
2017-08-22 18:06 PDT, Build Bot
no flags
[Image] Alternative blue highlight (1.56 MB, image/png)
2017-08-28 11:05 PDT, Devin Rousso
no flags
Still need to make a test for if a depth/stencil buffer is attached (36.56 KB, patch)
2017-08-29 16:48 PDT, Devin Rousso
no flags
Archive of layout-test-results from ews102 for mac-elcapitan (1.55 MB, application/zip)
2017-08-29 18:41 PDT, Build Bot
no flags
Archive of layout-test-results from ews112 for mac-elcapitan (2.28 MB, application/zip)
2017-08-29 18:41 PDT, Build Bot
no flags
Archive of layout-test-results from ews104 for mac-elcapitan-wk2 (1.69 MB, application/zip)
2017-08-29 18:42 PDT, Build Bot
no flags
Still need to make a test for if a depth/stencil buffer is attached (36.87 KB, patch)
2017-08-29 18:46 PDT, Devin Rousso
no flags
Patch (36.14 KB, patch)
2017-09-06 23:34 PDT, Devin Rousso
no flags
Patch (36.30 KB, patch)
2018-02-20 18:37 PST, Devin Rousso
no flags
Archive of layout-test-results from ews102 for mac-sierra (2.38 MB, application/zip)
2018-02-20 19:24 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews106 for mac-sierra-wk2 (2.88 MB, application/zip)
2018-02-20 19:28 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews117 for mac-sierra (3.13 MB, application/zip)
2018-02-20 19:54 PST, EWS Watchlist
no flags
Patch (36.64 KB, patch)
2018-02-21 00:35 PST, Devin Rousso
ews-watchlist: commit-queue-
Archive of layout-test-results from ews102 for mac-sierra (2.21 MB, application/zip)
2018-02-21 01:38 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews106 for mac-sierra-wk2 (2.57 MB, application/zip)
2018-02-21 01:44 PST, EWS Watchlist
no flags
Archive of layout-test-results from ews117 for mac-sierra (2.97 MB, application/zip)
2018-02-21 02:02 PST, EWS Watchlist
no flags
Patch (36.64 KB, patch)
2018-02-21 03:06 PST, Devin Rousso
no flags
Patch (36.69 KB, patch)
2018-03-30 20:38 PDT, Devin Rousso
no flags
Devin Rousso
Comment 1 2017-08-10 00:43:43 PDT
Devin Rousso
Comment 2 2017-08-10 00:44:01 PDT
Created attachment 317792 [details] [Image] After Patch is applied
Matt Baker
Comment 3 2017-08-11 19:39:59 PDT
Comment on attachment 317791 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=317791&action=review > Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:2006 > + highlightForInspector(); This could be replaced by an RAII object which saves the blend state and performs the highlight on construction. On destruction it would restore the previous blend mode. This would be safer, and remove Inspector code from WebGLRenderingContextBase: namespace Inspector { class ScopedShaderProgramHighlight { public: ScopedShaderProgramHighlight(WebGLRenderingContextBase& context, WebGLProgram* currentProgram) : m_context(context) , m_currentProgram(currentProgram) { highlightProgram(); } ~ScopedShaderProgramHighlight() { restoreContextState(); } private: void highlight() { if (!m_currentProgram) return; if (LIKELY(!m_currentProgram->highlightForInspector()) return; // Other frame buffer binding checks... saveContextState(); m_context.enable(GraphicsContext3D::BLEND); m_context.blendColor(1, 0, 0.25, 1); m_context.blendEquation(GraphicsContext3D::FUNC_ADD); m_context.blendFunc(GraphicsContext3D::CONSTANT_COLOR, GraphicsContext3D::ONE_MINUS_SRC_ALPHA); } void saveContextState() { m_blendBeforeHighlightForInspector.color = m_context.getWebGLFloatArrayParameter(GraphicsContext3D::BLEND_COLOR); // ... } void restoreContextState() { // Restore context if highlighting happened. } struct { RefPtr<Float32Array> color; unsigned equationRGB { 0 }; unsigned equationAlpha { 0 }; unsigned srcRGB { 0 }; unsigned srcAlpha { 0 }; unsigned dstRGB { 0 }; unsigned dstAlpha { 0 }; bool enabled { false }; } m_blendBeforeHighlightForInspector; WebGLRenderingContextBase& m_context; WebGLProgram* m_program { nullptr }; }; // namespace Inspector This would need to go in a nested scope, so that the blend mode is restored before `markContextChangedAndNotifyCanvasObserver()` is called: void WebGLRenderingContextBase::drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei count) { if (!validateDrawArrays("drawArrays", mode, first, count, 0)) return; { Inspector::ScopedShaderProgramHighlight scopedHighlight(*this, m_currentProgram); clearIfComposited(); bool vertexAttrib0Simulated = false; if (!isGLES2Compliant()) vertexAttrib0Simulated = simulateVertexAttrib0(first + count - 1); bool usesFallbackTexture = false; if (!isGLES2NPOTStrict()) usesFallbackTexture = checkTextureCompleteness("drawArrays", true); m_context->drawArrays(mode, first, count); if (!isGLES2Compliant() && vertexAttrib0Simulated) restoreStatesAfterVertexAttrib0Simulation(); if (usesFallbackTexture) checkTextureCompleteness("drawArrays", false); } markContextChangedAndNotifyCanvasObserver(); } The only thing that would make this inconvenient would be if it wasn't possible to make the other render buffer checks (stencil, etc) without accessing the context's private data. The RAII object could always be a friend of WebGLRenderingContextBase, but that's pretty gross.
Devin Rousso
Comment 4 2017-08-21 20:36:03 PDT
Build Bot
Comment 5 2017-08-21 21:42:58 PDT
Comment on attachment 318727 [details] Patch Attachment 318727 [details] did not pass mac-ews (mac): Output: http://webkit-queues.webkit.org/results/4357992 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
Build Bot
Comment 6 2017-08-21 21:42:59 PDT
Created attachment 318731 [details] Archive of layout-test-results from ews103 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews103 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Build Bot
Comment 7 2017-08-21 21:47:55 PDT
Comment on attachment 318727 [details] Patch Attachment 318727 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/4358003 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
Build Bot
Comment 8 2017-08-21 21:47:56 PDT
Created attachment 318732 [details] Archive of layout-test-results from ews104 for mac-elcapitan-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews104 Port: mac-elcapitan-wk2 Platform: Mac OS X 10.11.6
Build Bot
Comment 9 2017-08-21 21:53:01 PDT
Comment on attachment 318727 [details] Patch Attachment 318727 [details] did not pass mac-debug-ews (mac): Output: http://webkit-queues.webkit.org/results/4358002 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
Build Bot
Comment 10 2017-08-21 21:53:03 PDT
Created attachment 318734 [details] Archive of layout-test-results from ews113 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews113 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Devin Rousso
Comment 11 2017-08-21 21:55:49 PDT
Devin Rousso
Comment 12 2017-08-22 12:25:25 PDT
Joseph Pecoraro
Comment 13 2017-08-22 13:20:29 PDT
Comment on attachment 318782 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=318782&action=review r- because the build thing. I scanned the rest of the patch and it looked good to me. I think Matt / Dean would be the best reviewers. > Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:512 > + void clearHighlight() > + { > + if (!m_program || LIKELY(!InspectorInstrumentation::isShaderProgramHighlighted(m_context, *m_program))) > + return; Instead of doing this, which may be another hash lookup in InspectorCanvasAgent for a canvas we already highlighted, I think it would be best to just have a member `m_didApply` and you can bail here if `!m_didApply`. > Source/WebCore/inspector/InspectorInstrumentation.cpp:1057 > +<<<<<<< HEAD > bool InspectorInstrumentation::isShaderProgramDisabledImpl(InstrumentingAgents& instrumentingAgents, WebGLProgram& program) > { > if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) > return canvasAgent->isShaderProgramDisabled(program); > +======= Oops.
Devin Rousso
Comment 14 2017-08-22 14:02:16 PDT
Devin Rousso
Comment 15 2017-08-22 14:08:57 PDT
Build Bot
Comment 16 2017-08-22 18:06:13 PDT
Comment on attachment 318797 [details] Patch Attachment 318797 [details] did not pass mac-debug-ews (mac): Output: http://webkit-queues.webkit.org/results/4365060 New failing tests: media/track/track-element-load-event.html
Build Bot
Comment 17 2017-08-22 18:06:14 PDT
Created attachment 318839 [details] Archive of layout-test-results from ews117 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews117 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Matt Baker
Comment 18 2017-08-23 09:57:32 PDT
Comment on attachment 318797 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=318797&action=review This looks great, however r- for now. We need tests that prove this won't highlight shaders that draw to depth/stencil buffers. > Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:467 > + Extra space. > Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:497 > + if (!WTF::holds_alternative<unsigned>(stencilAttachment) || WTF::get<unsigned>(depthAttachment) != static_cast<unsigned>(GraphicsContext3D::RENDERBUFFER)) Shouldn't this be WTF::get<unsigned>(stencilAttachment) != static_cast<unsigned>(GraphicsContext3D::RENDERBUFFER)? > Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:499 > + } WebGL2 has an additional attachment type, DEPTH_STENCIL_ATTACHMENT. We should probably check that as well. > Source/WebInspectorUI/UserInterface/Models/ShaderProgram.js:82 > + highlight() For consistency with `hideHighlight`, this should be `showHighlight`. Actually, I'd just drop the underscore from `_setShaderProgramHighlighted` and make it public. These two methods add a level of indirection that isn't needed.
Joseph Pecoraro
Comment 19 2017-08-23 10:50:33 PDT
Comment on attachment 318797 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=318797&action=review >> Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:497 >> + if (!WTF::holds_alternative<unsigned>(stencilAttachment) || WTF::get<unsigned>(depthAttachment) != static_cast<unsigned>(GraphicsContext3D::RENDERBUFFER)) > > Shouldn't this be WTF::get<unsigned>(stencilAttachment) != static_cast<unsigned>(GraphicsContext3D::RENDERBUFFER)? Matt Baker is awarded 1 `Hawk Eye` award.
Radar WebKit Bug Importer
Comment 20 2017-08-23 12:09:09 PDT
Devin Rousso
Comment 21 2017-08-23 12:16:02 PDT
Comment on attachment 318797 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=318797&action=review > This looks great, however r- for now. We need tests that prove this won't > highlight shaders that draw to depth/stencil buffers. I'm not sure I know how to do this. Do you know of any examples I could use? I'll try searching later, but I figured it can't hurt to ask :P >>> Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:497 >>> + if (!WTF::holds_alternative<unsigned>(stencilAttachment) || WTF::get<unsigned>(depthAttachment) != static_cast<unsigned>(GraphicsContext3D::RENDERBUFFER)) >> >> Shouldn't this be WTF::get<unsigned>(stencilAttachment) != static_cast<unsigned>(GraphicsContext3D::RENDERBUFFER)? > > Matt Baker is awarded 1 `Hawk Eye` award. Hot damn! >> Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:499 >> + } > > WebGL2 has an additional attachment type, DEPTH_STENCIL_ATTACHMENT. We should probably check that as well. I didn't know that! Good catch!
Matt Baker
Comment 22 2017-08-23 12:57:51 PDT
Comment on attachment 318797 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=318797&action=review >>>> Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:497 >>>> + if (!WTF::holds_alternative<unsigned>(stencilAttachment) || WTF::get<unsigned>(depthAttachment) != static_cast<unsigned>(GraphicsContext3D::RENDERBUFFER)) >>> >>> Shouldn't this be WTF::get<unsigned>(stencilAttachment) != static_cast<unsigned>(GraphicsContext3D::RENDERBUFFER)? >> >> Matt Baker is awarded 1 `Hawk Eye` award. > > Hot damn! Achievement unlocked!
Devin Rousso
Comment 23 2017-08-28 11:05:06 PDT
Created attachment 319183 [details] [Image] Alternative blue highlight
Devin Rousso
Comment 24 2017-08-29 16:48:14 PDT
Created attachment 319307 [details] Still need to make a test for if a depth/stencil buffer is attached
Build Bot
Comment 25 2017-08-29 18:41:23 PDT
Comment on attachment 319307 [details] Still need to make a test for if a depth/stencil buffer is attached Attachment 319307 [details] did not pass mac-ews (mac): Output: http://webkit-queues.webkit.org/results/4406925 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
Build Bot
Comment 26 2017-08-29 18:41:25 PDT
Created attachment 319318 [details] Archive of layout-test-results from ews102 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews102 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Build Bot
Comment 27 2017-08-29 18:41:41 PDT
Comment on attachment 319307 [details] Still need to make a test for if a depth/stencil buffer is attached Attachment 319307 [details] did not pass mac-debug-ews (mac): Output: http://webkit-queues.webkit.org/results/4406882 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
Build Bot
Comment 28 2017-08-29 18:41:42 PDT
Created attachment 319319 [details] Archive of layout-test-results from ews112 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews112 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Build Bot
Comment 29 2017-08-29 18:42:52 PDT
Comment on attachment 319307 [details] Still need to make a test for if a depth/stencil buffer is attached Attachment 319307 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/4406923 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
Build Bot
Comment 30 2017-08-29 18:42:54 PDT
Created attachment 319320 [details] Archive of layout-test-results from ews104 for mac-elcapitan-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews104 Port: mac-elcapitan-wk2 Platform: Mac OS X 10.11.6
Devin Rousso
Comment 31 2017-08-29 18:46:04 PDT
Created attachment 319322 [details] Still need to make a test for if a depth/stencil buffer is attached
Devin Rousso
Comment 32 2017-09-06 23:34:52 PDT
Created attachment 320097 [details] Patch Changed some repeated code to use a macro
Blaze Burg
Comment 33 2017-10-25 10:51:07 PDT
Comment on attachment 320097 [details] Patch I cannot review this as-is because shader programs are apparently not shown anywhere. Please reset r? flag when this is resolved.
Devin Rousso
Comment 34 2018-02-20 18:37:13 PST
Created attachment 334331 [details] Patch Rebase now that shaders are visible again
EWS Watchlist
Comment 35 2018-02-20 19:24:23 PST
Comment on attachment 334331 [details] Patch Attachment 334331 [details] did not pass mac-ews (mac): Output: http://webkit-queues.webkit.org/results/6598274 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
EWS Watchlist
Comment 36 2018-02-20 19:24:25 PST
Created attachment 334333 [details] Archive of layout-test-results from ews102 for mac-sierra The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews102 Port: mac-sierra Platform: Mac OS X 10.12.6
EWS Watchlist
Comment 37 2018-02-20 19:28:02 PST
Comment on attachment 334331 [details] Patch Attachment 334331 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/6598278 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
EWS Watchlist
Comment 38 2018-02-20 19:28:04 PST
Created attachment 334334 [details] Archive of layout-test-results from ews106 for mac-sierra-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-sierra-wk2 Platform: Mac OS X 10.12.6
EWS Watchlist
Comment 39 2018-02-20 19:54:26 PST
Comment on attachment 334331 [details] Patch Attachment 334331 [details] did not pass mac-debug-ews (mac): Output: http://webkit-queues.webkit.org/results/6598293 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
EWS Watchlist
Comment 40 2018-02-20 19:54:28 PST
Created attachment 334336 [details] Archive of layout-test-results from ews117 for mac-sierra The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews117 Port: mac-sierra Platform: Mac OS X 10.12.6
Devin Rousso
Comment 41 2018-02-21 00:35:42 PST
EWS Watchlist
Comment 42 2018-02-21 01:38:32 PST
Comment on attachment 334344 [details] Patch Attachment 334344 [details] did not pass mac-ews (mac): Output: http://webkit-queues.webkit.org/results/6601193 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
EWS Watchlist
Comment 43 2018-02-21 01:38:34 PST
Created attachment 334347 [details] Archive of layout-test-results from ews102 for mac-sierra The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews102 Port: mac-sierra Platform: Mac OS X 10.12.6
EWS Watchlist
Comment 44 2018-02-21 01:44:23 PST
Comment on attachment 334344 [details] Patch Attachment 334344 [details] did not pass mac-wk2-ews (mac-wk2): Output: http://webkit-queues.webkit.org/results/6601292 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
EWS Watchlist
Comment 45 2018-02-21 01:44:25 PST
Created attachment 334348 [details] Archive of layout-test-results from ews106 for mac-sierra-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-sierra-wk2 Platform: Mac OS X 10.12.6
EWS Watchlist
Comment 46 2018-02-21 02:01:51 PST
Comment on attachment 334344 [details] Patch Attachment 334344 [details] did not pass mac-debug-ews (mac): Output: http://webkit-queues.webkit.org/results/6601317 New failing tests: inspector/canvas/setShaderProgramHighlighted.html
EWS Watchlist
Comment 47 2018-02-21 02:02:03 PST
Created attachment 334350 [details] Archive of layout-test-results from ews117 for mac-sierra The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews117 Port: mac-sierra Platform: Mac OS X 10.12.6
Devin Rousso
Comment 48 2018-02-21 03:06:10 PST
Matt Baker
Comment 49 2018-03-30 18:29:44 PDT
Comment on attachment 334356 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=334356&action=review r=me, with one style comment. Really nice! > Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:463 > +#define SAVE_BLEND_VALUE(name, attachment, type) WebGLAny name = m_context.getParameter(GraphicsContext3D::attachment); \ Macros should be avoided unless you really need to do text preprocessing. A private member function template has none of the pitfalls/dangers and is about as concise: template <typename T> void saveBlendValue(GC3Denum attachment, T& destination) { WebGLAny param = m_context.getParameter(attachment); if (WTF::holds_alternative<T>(param)) destination = WTF::get<T>(param); } void saveBlend() { saveBlendValue(GraphicsContext3D::BLEND_COLOR, m_savedBlend.color); ... } Or you could just drop the struct, I don't think you really need it: saveBlendValue(GraphicsContext3D::BLEND_COLOR, m_blendColor); saveBlendValue(GraphicsContext3D::BLEND_EQUATION_RGB, m_blendEquationAlpha); etc.
Devin Rousso
Comment 50 2018-03-30 20:38:29 PDT
WebKit Commit Bot
Comment 51 2018-03-30 22:14:54 PDT
Comment on attachment 336905 [details] Patch Clearing flags on attachment: 336905 Committed r230127: <https://trac.webkit.org/changeset/230127>
WebKit Commit Bot
Comment 52 2018-03-30 22:14:56 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.