• Show log

    Commit

  • Hash : 050b124d
    Author : Shahbaz Youssefi
    Date : 2019-06-30T03:26:18

    Reland "Vulkan: Debug overlay"
    
    This is a reland of e54d0f90d1a165404236fd7abd1b05ddd041a686
    
    This was reverted due to a build failure as a result of a missing
    virtual destructor in the widget base class.
    
    Original change's description:
    > Vulkan: Debug overlay
    >
    > A debug overlay system for the Vulkan backend designed with efficiency
    > and runtime configurability in mind.  Overlay widgets are of two
    > fundamental types:
    >
    > - Text widgets: A single line of text with small, medium or large font.
    > - Graph widgets: A bar graph of data.
    >
    > Built on these, various overlay widget types are defined that gather
    > statistics.  Five such types are defined with one widget per type as
    > example:
    >
    > - Count: A widget that counts something.  VulkanValidationMessageCount
    >   is an overlay widget of this type that shows the number of validation
    >   messages received from the validation layers.
    > - Text: A generic text.  VulkanLastValidationMessage is an overlay
    >   widget of this type that shows the last validation message.
    > - PerSecond: A value that gets reset every second automatically.  FPS is
    >   an overlay widget of this type that simply gets incremented on every
    >   swap().
    > - RunningGraph: A graph of last N values.  VulkanCommandGraphSize is an
    >   overlay of this type.  On every vkQueueSubmit, the number of nodes in
    >   the command graph is accumulated.  On every present(), the value is
    >   taken as the number of nodes for the whole duration of the frame.
    > - RunningHistogram: A histogram of last N values.  Input values are in
    >   the [0, 1] range and they are ranked to N buckets for histogram
    >   calculation.  VulkanSecondaryCommandBufferPoolWaste is an overlay
    >   widget of this type.  On vkQueueSubmit, the memory waste from command
    >   buffer pool allocations is recorded in the histogram.
    >
    > Overlay font is placed in libANGLE/overlay/ which gen_overlay_fonts.py
    > processes to create an array of bits, which is processed at runtime to
    > create the actual font image (an image with 3 layers).
    >
    > The overlay widget layout is defined in overlay_widgets.json which
    > gen_overlay_widgets.py processes to generate an array of widgetss, each
    > of its respective type, and sets their properties, such as color and
    > bounding box.  The json file allows widgets to align against other
    > widgets as well as against the framebuffer edges.
    >
    > Two compute shaders are implemented to efficiently render the UI:
    >
    > - OverlayCull: This shader creates a bitset of Text and Graph widgets
    >   whose bounding boxes intersect a corresponding subgroup processed by
    >   OverlayDraw.  This is done only when the enabled overlay widgets are
    >   changed (a feature that is not yet implemented) or the surface is
    >   resized.
    > - OverlayDraw: Using the bitsets generated by OverlayCull, values that
    >   are uniform for each workgroup (set to be equal to hardware subgroup
    >   size), this shader loops over enabled widgets that can possibly
    >   intersect the pixel being processed and renders and blends in texts
    >   and graphs.  This is done once per frame on present().
    >
    > Currently, to enable overlay widgets an environment variable is used.
    > For example:
    >
    >     $ export ANGLE_OVERLAY=FPS:VulkanSecondaryCommandBufferPoolWaste
    >     $ ./hello_triangle --use-angle=vulkan
    >
    > Possible future work:
    >
    > - On Android, add settings in developer options and enable widgets based
    >   on those.
    > - Spawn a small server in ANGLE and write an application that sends
    >   enable/disable commands remotely.
    > - Implement overlay for other backends.
    >
    > Bug: angleproject:3757
    > Change-Id: If9c6974d1935c18f460ec569e79b41188bd7afcc
    > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1729440
    > Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
    > Reviewed-by: Jamie Madill <jmadill@chromium.org>
    
    Bug: angleproject:3757
    Change-Id: I47915d88b37b6f882c686c2de13fca309a10b572
    Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1780897
    Reviewed-by: Jamie Madill <jmadill@chromium.org>
    Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
    

  • Properties

  • Git HTTP https://git.kmx.io/kc3-lang/angle.git
    Git SSH git@git.kmx.io:kc3-lang/angle.git
    Public access ? public
    Description

    A conformant OpenGL ES implementation for Windows, Mac, Linux, iOS and Android.

    Homepage

    Github

    Users
    thodg_m kc3_lang_org thodg_w www_kmx_io thodg thodg_l
    Tags