Bug 213906

Summary: Fix transform feedback tests
Product: WebKit Reporter: James Darpinian <jdarpinian>
Component: WebGLAssignee: James Darpinian <jdarpinian>
Status: RESOLVED FIXED    
Severity: Normal CC: benjamin, calvaris, cdumez, changseok, darin, dino, esprehn+autocc, ews-watchlist, graouts, gyuyoung.kim, hi, justin_fan, kbr, kondapallykalyan, webkit-bug-importer, youennf
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on:    
Bug Blocks: 126404, 209513    
Attachments:
Description Flags
Patch
none
rebaseline layout tests and fix non-mac build
none
address review feedback and fix non-webgl2 builds
none
more review feedback none

James Darpinian
Reported 2020-07-02 15:55:41 PDT
Fix transform feedback tests
Attachments
Patch (24.70 KB, patch)
2020-07-02 16:04 PDT, James Darpinian
no flags
rebaseline layout tests and fix non-mac build (47.34 KB, patch)
2020-07-02 17:17 PDT, James Darpinian
no flags
address review feedback and fix non-webgl2 builds (49.02 KB, patch)
2020-07-06 12:21 PDT, James Darpinian
no flags
more review feedback (48.98 KB, patch)
2020-07-06 14:39 PDT, James Darpinian
no flags
James Darpinian
Comment 1 2020-07-02 16:04:18 PDT
James Darpinian
Comment 2 2020-07-02 17:17:50 PDT
Created attachment 403419 [details] rebaseline layout tests and fix non-mac build
Darin Adler
Comment 3 2020-07-02 17:34:20 PDT
Comment on attachment 403419 [details] rebaseline layout tests and fix non-mac build View in context: https://bugs.webkit.org/attachment.cgi?id=403419&action=review > Source/WebCore/html/canvas/WebGL2RenderingContext.cpp:1836 > + WebGLTransformFeedback* toBeBound = feedbackObject ? feedbackObject : m_defaultTransformFeedback.get(); auto > Source/WebCore/html/canvas/WebGL2RenderingContext.h:249 > + GCGLuint getMaxTransformFeedbackSeparateAttribs(); const? > Source/WebCore/html/canvas/WebGLProgram.h:77 > + int getRequiredTransformFeedbackBufferCount() const > Source/WebCore/html/canvas/WebGLTransformFeedback.cpp:93 > + for (auto boundBuffer : m_boundIndexedTransformFeedbackBuffers) { This will do unnecessary reference count churn. Should just use auto&. But also, Vector has a find function that I think we can use here. > Source/WebCore/html/canvas/WebGLTransformFeedback.cpp:105 > + for (unsigned i = 0; i < m_boundIndexedTransformFeedbackBuffers.size(); i++) { > + if (m_boundIndexedTransformFeedbackBuffers[i] == buffer) > + m_boundIndexedTransformFeedbackBuffers[i] = nullptr; > + } range-based for loop would be better: for (auto& boundBuffer : m_boundIndexedTransformFeedbackBuffers) { if (boundBuffer == &buffer) boundBuffer = nullptr; } > Source/WebCore/html/canvas/WebGLTransformFeedback.h:58 > + WebGLProgram* getProgram() const { return m_program.get(); } WebKit coding style says we don’t name these functions "get". > Source/WebCore/html/canvas/WebGLTransformFeedback.h:59 > + void setProgram(WebGLProgram*); Can this take a reference instead of a pointer? > Source/WebCore/html/canvas/WebGLTransformFeedback.h:62 > + bool usesBuffer(WebGLBuffer*); > + void unbindBuffer(WebGLBuffer*); Can these take a reference instead of a pointer?
Justin Fan
Comment 4 2020-07-06 09:45:32 PDT
Comment on attachment 403419 [details] rebaseline layout tests and fix non-mac build View in context: https://bugs.webkit.org/attachment.cgi?id=403419&action=review >> Source/WebCore/html/canvas/WebGLProgram.h:77 >> + int getRequiredTransformFeedbackBufferCount() > > const This function isn't const, since cacheInfoIfNeeded() is not, but Darin's comment about not calling getters "get" applies here > Source/WebCore/html/canvas/WebGLTransformFeedback.h:70 > + bool m_active = false; Style nit: class member initializer defaults should use { } notation.
Kenneth Russell
Comment 5 2020-07-06 10:55:24 PDT
Comment on attachment 403419 [details] rebaseline layout tests and fix non-mac build View in context: https://bugs.webkit.org/attachment.cgi?id=403419&action=review Great work James figuring out all of the dependent fixes needed! LGTM modulo Darin's and Justin's other feedback. To fix the build failure on gtk, it might be necessary to change WebGLTransformFeedback.idl to use: Conditional=WEBGL2, EnabledAtRuntime=WebGL2, but not 100% sure. Some of the other WebGL 2.0-specific types (WebGLSampler, for example) only use "#if ENABLE(WEBGL)" guards in their headers, which seems wrong. > Source/WebCore/html/canvas/WebGL2RenderingContext.cpp:1788 > + if (isContextLostOrPending() || !feedbackObject || feedbackObject->isDeleted() || !validateWebGLObject("deleteTransformFeedback", feedbackObject)) The isDeleted() check differs slightly from Chromium's validation - this version looks more correct. Is there a way to test the difference, and if so could you upstream a WebGL conformance test covering it?
James Darpinian
Comment 6 2020-07-06 12:21:49 PDT
Created attachment 403605 [details] address review feedback and fix non-webgl2 builds
Dean Jackson
Comment 7 2020-07-06 12:43:48 PDT
Comment on attachment 403419 [details] rebaseline layout tests and fix non-mac build View in context: https://bugs.webkit.org/attachment.cgi?id=403419&action=review >> Source/WebCore/html/canvas/WebGL2RenderingContext.h:249 >> + GCGLuint getMaxTransformFeedbackSeparateAttribs(); > > const? And name should be maxTransformFeedbackSeparateAttribs() >> Source/WebCore/html/canvas/WebGLTransformFeedback.cpp:93 >> + for (auto boundBuffer : m_boundIndexedTransformFeedbackBuffers) { > > This will do unnecessary reference count churn. Should just use auto&. > > But also, Vector has a find function that I think we can use here. I think you can just call m_boundIndexedTransformFeedbackBuffers.contains(buffer)
Dean Jackson
Comment 8 2020-07-06 12:49:53 PDT
Comment on attachment 403605 [details] address review feedback and fix non-webgl2 builds View in context: https://bugs.webkit.org/attachment.cgi?id=403605&action=review > Source/WebCore/html/canvas/WebGLTransformFeedback.cpp:64 > +bool WebGLTransformFeedback::setBoundIndexedTransformFeedbackBuffer(GCGLuint index, WebGLBuffer* buffer) You don't check the return value of this. Should it return void? > Source/WebCore/html/canvas/WebGLTransformFeedback.cpp:78 > +bool WebGLTransformFeedback::getBoundIndexedTransformFeedbackBuffer(GCGLuint index, WebGLBuffer** outBuffer) > +{ > + if (index > m_boundIndexedTransformFeedbackBuffers.size()) > + return false; > + *outBuffer = m_boundIndexedTransformFeedbackBuffers[index].get(); > + return true; > +} Not necessary right now, but this could return an Optional instead. > Source/WebCore/html/canvas/WebGLTransformFeedback.h:51 > + bool getBoundIndexedTransformFeedbackBuffer(GCGLuint index, WebGLBuffer** outBuffer); Nit: Don't use "get"
James Darpinian
Comment 9 2020-07-06 14:39:41 PDT
Created attachment 403622 [details] more review feedback
James Darpinian
Comment 10 2020-07-06 14:42:41 PDT
Comment on attachment 403419 [details] rebaseline layout tests and fix non-mac build Thanks for all the feedback! It should all be addressed now. View in context: https://bugs.webkit.org/attachment.cgi?id=403419&action=review >> Source/WebCore/html/canvas/WebGL2RenderingContext.cpp:1788 >> + if (isContextLostOrPending() || !feedbackObject || feedbackObject->isDeleted() || !validateWebGLObject("deleteTransformFeedback", feedbackObject)) > > The isDeleted() check differs slightly from Chromium's validation - this version looks more correct. Is there a way to test the difference, and if so could you upstream a WebGL conformance test covering it? These checks happen in the DeleteObject function in Chromium's implementation, but I don't think the behavior is different. >> Source/WebCore/html/canvas/WebGL2RenderingContext.cpp:1836 >> + WebGLTransformFeedback* toBeBound = feedbackObject ? feedbackObject : m_defaultTransformFeedback.get(); > > auto Done. >>> Source/WebCore/html/canvas/WebGL2RenderingContext.h:249 >>> + GCGLuint getMaxTransformFeedbackSeparateAttribs(); >> >> const? > > And name should be maxTransformFeedbackSeparateAttribs() Done. >>> Source/WebCore/html/canvas/WebGLProgram.h:77 >>> + int getRequiredTransformFeedbackBufferCount() >> >> const > > This function isn't const, since cacheInfoIfNeeded() is not, but Darin's comment about not calling getters "get" applies here Removed "get". >>> Source/WebCore/html/canvas/WebGLTransformFeedback.cpp:93 >>> + for (auto boundBuffer : m_boundIndexedTransformFeedbackBuffers) { >> >> This will do unnecessary reference count churn. Should just use auto&. >> >> But also, Vector has a find function that I think we can use here. > > I think you can just call m_boundIndexedTransformFeedbackBuffers.contains(buffer) This function was actually not used, so I deleted it. >> Source/WebCore/html/canvas/WebGLTransformFeedback.cpp:105 >> + } > > range-based for loop would be better: > > for (auto& boundBuffer : m_boundIndexedTransformFeedbackBuffers) { > if (boundBuffer == &buffer) > boundBuffer = nullptr; > } Done. >> Source/WebCore/html/canvas/WebGLTransformFeedback.h:58 >> + WebGLProgram* getProgram() const { return m_program.get(); } > > WebKit coding style says we don’t name these functions "get". Done. >> Source/WebCore/html/canvas/WebGLTransformFeedback.h:59 >> + void setProgram(WebGLProgram*); > > Can this take a reference instead of a pointer? Done. >> Source/WebCore/html/canvas/WebGLTransformFeedback.h:62 >> + void unbindBuffer(WebGLBuffer*); > > Can these take a reference instead of a pointer? Done. >> Source/WebCore/html/canvas/WebGLTransformFeedback.h:70 >> + bool m_active = false; > > Style nit: class member initializer defaults should use { } notation. Done.
James Darpinian
Comment 11 2020-07-06 14:46:09 PDT
Comment on attachment 403605 [details] address review feedback and fix non-webgl2 builds View in context: https://bugs.webkit.org/attachment.cgi?id=403605&action=review >> Source/WebCore/html/canvas/WebGLTransformFeedback.cpp:64 >> +bool WebGLTransformFeedback::setBoundIndexedTransformFeedbackBuffer(GCGLuint index, WebGLBuffer* buffer) > > You don't check the return value of this. Should it return void? Done. >> Source/WebCore/html/canvas/WebGLTransformFeedback.h:51 >> + bool getBoundIndexedTransformFeedbackBuffer(GCGLuint index, WebGLBuffer** outBuffer); > > Nit: Don't use "get" The style guide says to use get for getters that use out parameters.
EWS
Comment 12 2020-07-06 17:01:56 PDT
Committed r263999: <https://trac.webkit.org/changeset/263999> All reviewed patches have been landed. Closing bug and clearing flags on attachment 403622 [details].
Radar WebKit Bug Importer
Comment 13 2020-07-06 17:02:20 PDT
Note You need to log in before you can comment on or make changes to this bug.