summaryrefslogtreecommitdiff
path: root/glworker.h
AgeCommit message (Collapse)Author
2017-09-28drm_hwcomposer: Remove threadingSean Paul
Since HWC2 doesn't require the use of threads to implement correct synchronization, remove some of these threads. Signed-off-by: Sean Paul <seanpaul@chromium.org> Signed-off-by: Robert Foss <robert.foss@collabora.com>
2017-04-13drm_hwcomposer: Move eglCreateImageKHR into ImporterRob Clark
Since NV has a "special" nonstandard way to get an EGLImage from a handle, move this into Importer where the other NV specialness is abstracted. For the platformdrmgeneric case, use the dmabuf EGL Extension. Change-Id: I5353f4c95f55174df55ba92931cdc9a9eab80dca Signed-off-by: Robert Foss <robert.foss@collabora.com>
2015-10-23drm_hwcomposer: lazily generate shaders for GLWorkerCompositorZach Reizner
This still generates the first shader at GLWorkerCompositor::Init() to check for shader generation errors. It's the only time that shader compilation errors will be shown on the log. This change shortens GL initialization time from 2.8 seconds to about 450 milliseconds. Besides improving boot time by 2.3 seconds, less fence timeouts should happen at boot time due to HWC blocking. TEST=run and see no display glitches or glworker related errors in logs BUG=chrome-os-partner:46739 Change-Id: Ia264e3f73a0ebe8558165ae3c215777ef6339ecc
2015-10-15drm_hwcomposer: ground work for squashingZach Reizner
This patch rearranges things to make squashing possible. The high-level changes: - A new Plan phase that happens in QueueComposition. This is where the overlay allocation is moved to. It's also the only safe time that the composition can try to plan squashing. This is because squashing depends on the exact ordering of compositions. - GLWorker now renders regions rather than layers. A region in this case is a clipping rectange and set of layers that are to be rendered in that rectangle. This is always what GLWorker did in the end, but now the work to seperate layers into regions is done externally. This was changed because the output of SquashState is a list of stable regions that need to be put through GLWorker The Plan methods of the Compositions are responsible for updating per-display SquashState and for allocation regions/layers to squashing, pre-composition, or hardware overlay. Because of the drastic changes to how composition planning works, it was necessary to bundle it with the GLWorker change. This change also includes plenty of other refactorings that were deemed to be too painful to try and seperate into another change. Change-Id: Ie7bfe077067e936a0862a07cbe87b525eab8d4f8
2015-09-25drm_hwcomposer: implement the safe handling of layersZach Reizner
This is a sweeping change to discard our usage of struct hwc_layer_t outside hwcomposer.cpp. That was a dangerous struct that was a source of many of our errors. Replacing it with safer RAII-style classes reduces the amount and complexity of our code. Change-Id: I580cafdf89bd1e7e6583f3073858b8e78e6018ba
2015-08-20drm_hwcomposer: cache the framebuffers given to the GLWorkerZach Reizner
This saves some work in EGL/GL that would normally get repeated every frame. Because the same framebuffers are generally used every frame, this CL adds a cache containing all the EGL/GL objects that correspond to the given GraphicBuffer. The cache initially holds a strong reference while rendering, but once glFinish is called, only a weak reference is held until rendering to that same GraphicBuffer starts again. The weak reference is used to check if that GraphicBuffer has been destroyed, which means the corresponding EGL/GL resources should be destroyed. The cache can be disabled with the following command: $ adb shell setprop hwc.drm.use_framebuffer_cache 0 Change-Id: Iddee1efc5bad67f6c4479e7f402354e229c3b0a2
2015-08-13drm_hwcomposer: enhance stability using various wrapper classesZach Reizner
This commit contains a lot of churn because it changes code to use automatic resource lifetimes as much as possible. As more things get changed, this is essential to maintaining stability. In addition, this change changes how layers are passed through the compositor API. Before each layer was passed down one at a time. Now they are passed in all at once. This is simpler for the implementation because it makes errors more atomic and makes decisions easier for the compositors. Change-Id: Ic3e6b5d0089fb1631ea256adcce9910ed8f38366
2015-08-07Revert "Revert "drm_hwcomposer: remove GLCompositor and the GLWorker thread""Zach Reizner
This reverts commit d078e4cab78f81057cd25355199caba5a147342e.
2015-08-07Revert "Revert "drm_hwcomposer: have DrmDisplayCompositor do its own OpenGL ↵Zach Reizner
composition"" This reverts commit cbe9c01336e23a63259db65d22d63d6a697b8813.
2015-07-30Revert "drm_hwcomposer: have DrmDisplayCompositor do its own OpenGL composition"Puneet Kumar
This reverts commit 2317bb19d8663efc31e6fcd8cf7fd2a73577253d. For now until we figure out a more stable SF/hwc Change-Id: Ia5ca089610a487bf036a1ddd5fb62e504e02ad98
2015-07-30Revert "drm_hwcomposer: remove GLCompositor and the GLWorker thread"Puneet Kumar
This reverts commit abebc7a78fe8a4df6495c8e5064719dc92b04004. For now until we figure out a more stable solution for SF/hwc Change-Id: I7a505fc67873f943704e8b48db4167b9beca7691
2015-07-22drm_hwcomposer: remove GLCompositor and the GLWorker threadZach Reizner
They are dead code now that DrmDisplayCompositor uses GL directly. Change-Id: Ie4beeab60440a51bd87486847b5453e20288d1d8
2015-07-20drm_hwcomposer: have DrmDisplayCompositor do its own OpenGL compositionZach Reizner
To accomplish this a few things changed: - DrmComposition::GetRemainingLayers always returns the number of planes needed - DrmComposition::AddLayer succeeds even if no DrmPlane was found for it - DrmDisplayComposition::AddLayer has overload that imports the given buffer - GLWorkerCompositor has a function to finish its composite before returning Put together this change makes DrmComposition always accepts all layers given to it even if it means some of those layers are assigned a NULL DrmPlane. The DrmDisplayCompositor will scan its given layers for any that are missing planes. In such a case, a DrmPlane is stolen from the last layer to receive a plane. Then all layers in the DrmDisplayComposition that have no planes (including the one stolen from) are composited synchronously using a GLWorkerCompositor and a new layer is generated from the results. That layer is added to the DrmDisplayComposition using the new import AddLayer function and the stolen DrmPlane. DrmDisplayCompostior then continues as usual. Change-Id: Ia6477c210c8f1307a4e537bec46889110d79ca18
2015-07-15drm_hwcomposer: make the gl worker compositor not nestedZach Reizner
Change-Id: I06b75644408a570044499a9f603a478f3199661f
2015-07-08drm_hwcomposer: Add glworkerZach Reizner
The glworker allows signalling the fence synchronously once the GL work is done. It also helps performance by putting all GL in a separate thread, which avoids (costly on some GPUs) makecurrent. Change-Id: Ia4ee137df5c9a4b1afcf6180407371d6ba7f699a