Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
A
angle
  • Project
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Chen Yisong
  • angle
  • Repository

Switch branch/tag
  • angle
  • src
  • libANGLE
  • Overlay_font_autogen.cpp
Find file
BlameHistoryPermalink
  • Shahbaz Youssefi's avatar
    Reland "Vulkan: Debug overlay" · 050b124d
    Shahbaz Youssefi authored Jun 30, 2019
    This is a reland of e54d0f90
    
    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/+/1780897Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
    Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
    050b124d
Overlay_font_autogen.cpp 141 KB
EditWeb IDE
×

Replace Overlay_font_autogen.cpp

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.