12/17/2023 0 Comments Google sheet duplicate finder![]() However, as shown in "Display 2", two thirds of the frames (the green and blue ones) were simply not presented. The frame time is roughly 16ms (measured by the distance between blit operations), so it would look smooth *if* all frames were displayed. MacOS 10.14.4 switched `NSOpenGLView` to a Metal-based implementation, so Instruments now can be used to diagnose OpenGL presentation issues. It might be based on GPU queue pressure because we've seen that the `-debug-value 23` option, which introduces full CPU/GPU synchronization via `glFinish`, seems to alleviate the issue. Unfortunately, the exact mechanism is unknown. I observed that this behavior happens when the amount of workload is enough to saturate the GPU (i.e., below 60fps), meaning once it hits below 60fps, the performance deteriorates faster than it should. It appears that the window compositor skips some of the application's rendered frames when there's a high demand on GPU resources. As shown in the following chart, display updates are now completely synchronized with the rendering of Blender's window: It's unknown why this option gives a better result. ![]() This is similar to what NSOpenGLView does under the hood (as of macOS 10.14.4) except for using a public API. CAMetalLayer - The issue was non-existent.I tried another option and found it effective: exprimental-patch-metal-presentation.diff CAOpenGLLayer - Uses a pull-style API, thus inapplicable.Not sure how this is different from this option since NSOpenGLView is backed by CALayer by default anyway. NSOpenGLView with CALayer backing - No improvements were seen.NSOpenGLView - This is what Blender currently does.There are numerous ways to present OpenGL contents, some of which are described in a Google Chrome design document: The frame time is roughly 16ms (measured by the distance between blit operations), so it would look smooth if all frames were displayed. The chart turns into something like this as the frame time rises: Thus in this example, all rendered frames are presented as expected. The color of rectangles indicates relationship between command buffer execution and presented frames. Finally, the image is displayed to the screen ("Display 2"). The rendered image is blitted into a swapchain image ("GPU 1 (Blit)"). ![]() "GPU 1 (Unknown)" shows the OpenGL commands generated by Blender. This is how it looks like on an ideal condition: MacOS 10.14.4 switched NSOpenGLView to a Metal-based implementation, so Instruments now can be used to diagnose OpenGL presentation issues. It might be based on GPU queue pressure because we've seen that the -debug-value 23 option, which introduces full CPU/GPU synchronization via glFinish, seems to alleviate the issue. Since I seem to have some of the faulty hardware, I did some research on this issue.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |