1. 01 May, 2019 1 commit
  2. 07 Apr, 2019 1 commit
  3. 31 Mar, 2019 2 commits
  4. 19 Mar, 2019 2 commits
  5. 12 Mar, 2019 1 commit
    • Alyssa Rosenzweig's avatar
      panfrost: Identify fragment_extra flags · 587ad37e
      Alyssa Rosenzweig authored
      The fragment_extra structure contains additional fields extending the
      MRT framebuffer descriptor, snuck in between the main framebuffer
      descriptor and the render targets. Its fields include those related to
      transaction elimination and depth/stencil buffers. This patch identifies
      the flags field (previously just "unk" with some magic values) as well
      as identifying some (but not all) flags set by the driver.
      The process of identifying flags brought a bug to light where
      transaction elimination (checksumming) could not be enabled unless AFBC
      was in-use. This issue is now resolved.
      Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa@rosenzweig.io>
      Reviewed-by: default avatarTomeu Vizoso <tomeu.vizoso@collabora.com>
  6. 25 Feb, 2019 1 commit
    • Alyssa Rosenzweig's avatar
      panfrost: Decode render target swizzle/channels · f943047e
      Alyssa Rosenzweig authored
      On MRT-capable systems, the framebuffer format is encoded as a 64-bit
      word in the render target descriptor. Previously, the two 32-bit
      words were exposed as opaque hex values. This commit identifies a 12-bit
      Mali swizzle and a 2-bit channel counter, removing some of the magic. It
      also adds decoding support for the AFBC and MSAA enable bits, which were
      already known but otherwise ignored in pandecode.
      Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa@rosenzweig.io>
  7. 21 Feb, 2019 1 commit
    • Alyssa Rosenzweig's avatar
      panfrost: Add pandecode (command stream debugger) · f6117820
      Alyssa Rosenzweig authored
      The `panwrap` utility can be LD_PRELOAD'd into a GLES app, intercepting
      communication between the driver and the kernel. Modern panwrap versions
      do no processing of their own; instead, they create a trace directory.
      This directory contains the following files:
       - control.log: a line-by-line plain text file, denoting important
         syscalls (mmaps and job submits) along with their arguments
       - memory_*.bin, shader_*.bin: binary dumps of mapped memory
      Together, these files contain enough information to reconstruct the
      command stream and shaders of (at minimum) a single frame.
      The `pandecode` utility takes this directory structure as input,
      reconstructing the mapped memory and using the job submit command as an
      entrypoint. It then walks the descriptors as the hardware would, parsing
      and pretty-printing. Its final output is the pretty-printed command
      stream interleaved with the disassembled shaders, suitable for driver
      debugging. For instance, the behaviour of two driver versions (one
      working, one broken) can be compared by diff'ing their decoded logs.
      pandecode/decode.c was originally a part of `panwrap`; it is the oldest
      living code in the project. Its history is generally not worth
      panwrap itself will continue to live downstream for the foreseeable
      future, as it is specifically written for the vendor kernel. It is
      possible, however, to produce equivalent traces directly from Panfrost,
      bypassing the intermediate wrapping layer for well-behaved drivers.
      Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <alyssa@rosenzweig.io>