<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Etnaviv on Christian Gmeiner</title>
    <link>https://playground.christian-gmeiner.info/tags/etnaviv/</link>
    <description>Recent content in Etnaviv on Christian Gmeiner</description>
    <image>
      <title>Christian Gmeiner</title>
      <url>https://playground.christian-gmeiner.info/papermod-cover.png</url>
      <link>https://playground.christian-gmeiner.info/papermod-cover.png</link>
    </image>
    <generator>Hugo -- 0.152.2</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 16 Jan 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://playground.christian-gmeiner.info/tags/etnaviv/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Multiple Render Targets for etnaviv</title>
      <link>https://playground.christian-gmeiner.info/2025-01-16-mrt/</link>
      <pubDate>Thu, 16 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2025-01-16-mrt/</guid>
      <description>&lt;p&gt;Modern graphics programming revolves around achieving high-performance rendering and visually stunning effects. Among OpenGL’s capabilities, Multiple Render Targets (MRTs) are particularly valuable for enabling advanced rendering techniques with greater efficiency.&lt;/p&gt;
&lt;p&gt;With the latest release of &lt;a href=&#34;https://docs.mesa3d.org/relnotes/24.3.0.html&#34;&gt;Mesa 24.03&lt;/a&gt; and the commitment from &lt;a href=&#34;https://www.igalia.com/&#34;&gt;Igalia&lt;/a&gt;, the etnaviv GPU driver now includes support for MRTs. If you’ve ever wondered how MRTs can transform your graphics pipeline or are curious about the challenges of implementing this feature, this blog post is for you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CI-Tron: A Long Road to a Better Board Farm</title>
      <link>https://playground.christian-gmeiner.info/2024-10-30-ci-tron-a-long-road-to-a-better-board-farm/</link>
      <pubDate>Wed, 30 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2024-10-30-ci-tron-a-long-road-to-a-better-board-farm/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m a big supporter of finding problems before they get into the code base. The earlier you catch issues, the easier they are to fix. One of the main tools that helps with this is a Continuous Integration (CI) farm. A CI farm allows you to run extensive tests like &lt;a href=&#34;https://github.com/KhronosGroup/VK-GL-CTS&#34;&gt;deqp&lt;/a&gt; or &lt;a href=&#34;https://piglit.freedesktop.org&#34;&gt;piglit&lt;/a&gt; on a merge request or even on a private git branch before any code is merged, which significantly helps catch problems early.&lt;/p&gt;</description>
    </item>
    <item>
      <title>It All Started With a Nop - Part I</title>
      <link>https://playground.christian-gmeiner.info/2024-07-11-it-all-started-with-a-nop-part1/</link>
      <pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2024-07-11-it-all-started-with-a-nop-part1/</guid>
      <description>&lt;style type=&#34;text/css&#34;&gt;
     
    .notice {
        --title-color: #fff;
        --title-background-color: #6be;
        --content-color: #444;
        --content-background-color: #e7f2fa;
    }

    .notice.info {
        --title-background-color: #fb7;
        --content-background-color: #fec;
    }

    .notice.tip {
        --title-background-color: #5a5;
        --content-background-color: #efe;
    }

    .notice.warning {
        --title-background-color: #c33;
        --content-background-color: #fee;
    }

     
    @media (prefers-color-scheme:dark) {
        .notice {
            --title-color: #fff;
            --title-background-color: #069;
            --content-color: #ddd;
            --content-background-color: #023;
        }

        .notice.info {
            --title-background-color: #a50;
            --content-background-color: #420;
        }

        .notice.tip {
            --title-background-color: #363;
            --content-background-color: #121;
        }

        .notice.warning {
            --title-background-color: #800;
            --content-background-color: #400;
        }
    }

    body.dark .notice {
        --title-color: #fff;
        --title-background-color: #069;
        --content-color: #ddd;
        --content-background-color: #023;
    }

    body.dark .notice.info {
        --title-background-color: #a50;
        --content-background-color: #420;
    }

    body.dark .notice.tip {
        --title-background-color: #363;
        --content-background-color: #121;
    }

    body.dark .notice.warning {
        --title-background-color: #800;
        --content-background-color: #400;
    }

     
    .notice {
        padding: 18px;
        line-height: 24px;
        margin-bottom: 24px;
        border-radius: 4px;
        color: var(--content-color);
        background: var(--content-background-color);
    }

    .notice p:last-child {
        margin-bottom: 0
    }

     
    .notice-title {
        margin: -18px -18px 12px;
        padding: 4px 18px;
        border-radius: 4px 4px 0 0;
        font-weight: 700;
        color: var(--title-color);
        background: var(--title-background-color);
    }

     
    .icon-notice {
        display: inline-flex;
        align-self: center;
        margin-right: 8px;
    }

    .icon-notice img,
    .icon-notice svg {
        height: 1em;
        width: 1em;
        fill: currentColor;
    }

    .icon-notice img,
    .icon-notice.baseline svg {
        top: .125em;
        position: relative;
    }
&lt;/style&gt;&lt;div class=&#34;notice note&#34; &gt;
    &lt;p class=&#34;notice-title&#34;&gt;
        &lt;span class=&#34;icon-notice baseline&#34;&gt;
            &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 128 300 300&#34;&gt;
  &lt;path d=&#34;M150 128c82.813 0 150 67.188 150 150 0 82.813-67.188 150-150 150C67.187 428 0 360.812 0 278c0-82.813 67.188-150 150-150Zm25 243.555v-37.11c0-3.515-2.734-6.445-6.055-6.445h-37.5c-3.515 0-6.445 2.93-6.445 6.445v37.11c0 3.515 2.93 6.445 6.445 6.445h37.5c3.32 0 6.055-2.93 6.055-6.445Zm-.39-67.188 3.515-121.289c0-1.367-.586-2.734-1.953-3.516-1.172-.976-2.93-1.562-4.688-1.562h-42.968c-1.758 0-3.516.586-4.688 1.563-1.367.78-1.953 2.148-1.953 3.515l3.32 121.29c0 2.734 2.93 4.882 6.64 4.882h36.134c3.515 0 6.445-2.148 6.64-4.883Z&#34;/&gt;
&lt;/svg&gt;

        &lt;/span&gt;Note&lt;/p&gt;</description>
    </item>
    <item>
      <title>hwdb - The only truth</title>
      <link>https://playground.christian-gmeiner.info/2024-04-12-hwdb/</link>
      <pubDate>Fri, 12 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2024-04-12-hwdb/</guid>
      <description>&lt;p&gt;Trusting hardware, particularly the registers that describe its functionality, is fundamentally risky.&lt;/p&gt;
&lt;h1 id=&#34;tldr&#34;&gt;tl;dr&lt;/h1&gt;
&lt;p&gt;The etnaviv GPU stack is continuously improving and becoming more robust. This time, a hardware database was incorporated into Mesa, utilizing header files provided by the SoC vendors.&lt;/p&gt;
&lt;p&gt;If you are interested in the implementation details, I recommend checking out this &lt;a href=&#34;https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28574&#34;&gt;Mesa MR&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Are you employed at &lt;a href=&#34;https://www.verisilicon.com/&#34;&gt;Versilicon&lt;/a&gt; and want to help? You could greatly simplify our work by supplying the community with a comprehensive header that includes all the models you offer.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Year 2023 in Retrospect</title>
      <link>https://playground.christian-gmeiner.info/2022-12-26-end-of-year/</link>
      <pubDate>Tue, 26 Dec 2023 09:03:20 -0800</pubDate>
      <guid>https://playground.christian-gmeiner.info/2022-12-26-end-of-year/</guid>
      <description>&lt;p&gt;Holidays are here and I have time to look back at 2023. For six months I have been working for &lt;a href=&#34;https://www.igalia.com/&#34;&gt;Igalia&lt;/a&gt; and what should I say?&lt;/p&gt;
&lt;p&gt;I &amp;#x2764;&amp;#xfe0f; it!&lt;/p&gt;
&lt;p&gt;This was the best decision to leave my comfort zone of a normal 9-5 job. I am so proud to work on open source GPU drivers and I am able to spend much of my work time on etnaviv.&lt;/p&gt;
&lt;h2 id=&#34;driver-maintenance&#34;&gt;Driver maintenance&lt;/h2&gt;
&lt;p&gt;Before adding any new feature I thought it would be great idea to improve the current state of etnaviv&amp;rsquo;s gallium driver. Therefor I reworked some general driver &lt;a href=&#34;https://cgit.freedesktop.org/mesa/mesa/commit/?id=ae828a33a74c5b3fc6abee481eac7cb57bf815d0&#34;&gt;code&lt;/a&gt; to be more consistent and to have a more modern feeling, and made it possible to drop some &lt;a href=&#34;https://cgit.freedesktop.org/mesa/mesa/commit/?id=e13bdbbd5bfc1cef00cf504b0567238ae8f45524&#34;&gt;hand-rolled&lt;/a&gt; conversion helpers by switching to already existing solutions (&lt;code&gt;U_FIXED(..)&lt;/code&gt;, &lt;code&gt;S_FIXED(..)&lt;/code&gt;, &lt;code&gt;float_to_ubyte(..)&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>mesamatrix</title>
      <link>https://playground.christian-gmeiner.info/2019-06-16-mesamatrix/</link>
      <pubDate>Sun, 16 Jun 2019 15:40:01 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2019-06-16-mesamatrix/</guid>
      <description>&lt;p&gt;You might be familiar with &lt;a href=&#34;https://mesamatrix.net/&#34;&gt;mesamatrix&lt;/a&gt; - a nice site to track the state of all GPU drivers provided by Mesa. Ohh.. did I say all? Let&amp;rsquo;s have a closer look:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This page is a graphical representation of the text file docs/features.txt from the Mesa repository.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So wouldn&amp;rsquo;t it be sick to get etnaviv mentioned in docs/features.txt and onto the matrix?&lt;/p&gt;
&lt;p&gt;First mesamatrix needs to know/support etnaviv. This seems to be quite simple as there is already a pull request to add a bunch of embedded GPU drivers: &lt;a href=&#34;https://github.com/MightyCreak/mesamatrix/pull/136&#34;&gt;Add VC4,VC5 and Vivante GPUs&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>etnaviv officially landed</title>
      <link>https://playground.christian-gmeiner.info/2017-01-12-etnaviv-officially-landed-in-mesa/</link>
      <pubDate>Thu, 12 Jan 2017 19:48:36 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2017-01-12-etnaviv-officially-landed-in-mesa/</guid>
      <description>&lt;p&gt;After years of hard work the etnaviv team reached an other very important milestone. The gallium driver and the renderonly library got pushed into mesa&amp;rsquo;s git repository and will be released with mesa 17.0 - yeah!&lt;/p&gt;
&lt;p&gt;This does not mean we are done with development at all. There are many interesting topics to work on and some of them like better support for newer IP cores or a reworked GLSL compiler should see the light of day during the next months.&lt;/p&gt;</description>
    </item>
    <item>
      <title>etnaviv: kmscube</title>
      <link>https://playground.christian-gmeiner.info/2015-09-25-etnaviv-kmscube/</link>
      <pubDate>Fri, 25 Sep 2015 21:39:10 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2015-09-25-etnaviv-kmscube/</guid>
      <description>&lt;p&gt;Last Friday I got kmscube successfully running with mesa and the new etnaviv DRM kernel driver. At this time I got it not really pixel perfect and I spend some nights to get it fixed. It turns out that I need a small mesa hack to get the rendering correct.&lt;/p&gt;
&lt;iframe allowfullscreen=&#34;&#34; frameborder=&#34;0&#34; height=&#34;473&#34; src=&#34;https://www.youtube.com/embed/vjIBow3M-C4?feature=oembed&#34; width=&#34;840&#34;&gt;&lt;/iframe&gt;
&lt;p&gt;You may ask why did it so long to get it working? Let me explain it to you.&lt;/p&gt;
&lt;p&gt;The Vivnate GPU is a so called render-only GPU which does not have any kind of scanout logic in it. It can only render to physical memory and this only in a tiled memory layout. So we need to use the resolve engine found on the GPU to de-tile the rendered image and blit it to the dumb buffer. Currently mesa has  no software support for this kind of hardware, but I think that could change soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vivante meets devicetree</title>
      <link>https://playground.christian-gmeiner.info/2014-05-24-vivante-meets-devicetree/</link>
      <pubDate>Sat, 24 May 2014 23:41:14 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2014-05-24-vivante-meets-devicetree/</guid>
      <description>&lt;p&gt;It took me some time to rework the device tree bindings but it looks like it starts to work!&lt;/p&gt;
&lt;div class=&#34;oembed-gist&#34;&gt;&lt;script src=&#34;https://gist.github.com/austriancoder/6196fa33011a120a01dd54dbd077a60d.js&#34;&gt;&lt;/script&gt;&lt;noscript&gt;View the code on [Gist](https://gist.github.com/austriancoder/6196fa33011a120a01dd54dbd077a60d).&lt;/noscript&gt;&lt;/div&gt;Gets loaded into :
&lt;p&gt;[ 3.358155] vivante: module is from the staging directory, the quality is unknown, you have been warned.
[ 3.373087] imx-sgtl5000 sound.15: sgtl5000 2028000.ssi mapping ok
[ 3.379150] [drm] add child gpu2d
[ 3.379154] [drm] add child gpu3d
[ 3.380395] vivante-gpu 134000.gpu2d: pre gpu[idx]: 0x00000000
[ 3.380401] vivante-gpu 134000.gpu2d: adding core @idx 1
[ 3.380408] vivante-gpu 134000.gpu2d: post gpu[idx]: 0xecb56c10
[ 3.380460] vivante gpu-subsystem.11: bound 134000.gpu2d (ops gpu_ops [vivante])
[ 3.380467] vivante-gpu 130000.gpu3d: pre gpu[idx]: 0x00000000
[ 3.380473] vivante-gpu 130000.gpu3d: adding core @idx 0
[ 3.380479] vivante-gpu 130000.gpu3d: post gpu[idx]: 0xecb57210
[ 3.380502] vivante gpu-subsystem.11: bound 130000.gpu3d (ops gpu_ops [vivante])
[ 3.380533] IO:R f0200018 14010000
[ 3.380537] IO:R f0200020 00002000
[ 3.380540] IO:R f0200024 00005108
[ 3.380546] vivante gpu-subsystem.11: model: 2000
[ 3.380551] vivante gpu-subsystem.11: revision: 5108
[ 3.380554] IO:R f020001c e0296cad
[ 3.380558] IO:R f0200034 c9799eff
[ 3.380561] IO:R f0200074 2efbf2d9
[ 3.380564] IO:R f0200084 00000000
[ 3.380567] IO:R f0200088 00000000
[ 3.380572] vivante gpu-subsystem.11: minor_features: c9799eff
[ 3.380578] vivante gpu-subsystem.11: minor_features1: 2efbf2d9
[ 3.380583] vivante gpu-subsystem.11: minor_features2: 0
[ 3.380588] vivante gpu-subsystem.11: minor_features3: 0
[ 3.380592] IO:R f0200000 00070100
[ 3.408629] IO:R f0200004 7fffffff
[ 3.408632] IO:R f0200000 00070100
[ 3.412940] vivante gpu-subsystem.11: 130000.gpu3d: using IOMMU
[ 3.413080] IO:R f01f8018 14010000
[ 3.413083] IO:R f01f8020 00000320
[ 3.413087] IO:R f01f8024 00005007
[ 3.413093] vivante gpu-subsystem.11: model: 320
[ 3.413098] vivante gpu-subsystem.11: revision: 5007
[ 3.413101] IO:R f01f801c e02c7eca
[ 3.413105] IO:R f01f8034 c1399eff
[ 3.413108] IO:R f01f8074 020fb2db
[ 3.413111] IO:R f01f8084 00000000
[ 3.413114] IO:R f01f8088 00000000
[ 3.413120] vivante gpu-subsystem.11: minor_features: c1399eff
[ 3.413126] vivante gpu-subsystem.11: minor_features1: 20fb2db
[ 3.413131] vivante gpu-subsystem.11: minor_features2: 0
[ 3.413136] vivante gpu-subsystem.11: minor_features3: 0
[ 3.413139] IO:R f01f8000 00070100
[ 3.438615] IO:R f01f8004 7fffffff
[ 3.438619] IO:R f01f8000 00070100
[ 3.442583] vivante gpu-subsystem.11: 134000.gpu2d: using IOMMU
[ 3.442681] [drm] Initialized vivante 1.0.0 20130625 on minor 1&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vivante MMU v1</title>
      <link>https://playground.christian-gmeiner.info/2014-05-03-vivante-mmu-v1/</link>
      <pubDate>Sat, 03 May 2014 20:25:35 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2014-05-03-vivante-mmu-v1/</guid>
      <description>&lt;p&gt;I did spend quite some time the last days to figure out how the MMU v1 could work and what all the code in the v4 Kernel sources does. It took quite some time and a little hint from Russel to finally understand it. So lets start with the technical details.&lt;/p&gt;
&lt;p&gt;The MMU uses a page table with a maximum size of 256KB. Where each Page Table Entry (PTE) is 4 byte long. The used page size is 4K and can not be changed via some registers etc.
Lets have a look at the bit layout of a PTE.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The next steps for etnaviv</title>
      <link>https://playground.christian-gmeiner.info/2014-02-22-the-next-steps-for-etnaviv/</link>
      <pubDate>Sat, 22 Feb 2014 17:54:17 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2014-02-22-the-next-steps-for-etnaviv/</guid>
      <description>&lt;p&gt;I did spend some time to find the cause for the rendering issues during running some egls2 demos. The fix is a simple one-liner and I would say that GC8xx and GC2000 are ‘equal’ now. That means general work on etnaviv can start now. Currently I am looking in different problem zones and where to start.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Update mesa fork&lt;/li&gt;
&lt;li&gt;Start working on an improved compiler&lt;/li&gt;
&lt;li&gt;Start working on an kernel interface&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I think that Rob will start soon on the kernel interface and the mesa update should be doable during some hours. So I think the next big and important step is to improve the compiler. What should I say… I have basic compiler understanding, did wrote a compiler and VM during my study… thats it. I have never written a single line of glsl and I do not completely understand the Vivante GPU. So a perfect starting point for doing some hacking 🙂 The success rate will be quite low and I hope to not lose my motivation too soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mesa meets GC2000</title>
      <link>https://playground.christian-gmeiner.info/2014-02-15-mesa-meets-gc2000/</link>
      <pubDate>Sat, 15 Feb 2014 20:18:25 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2014-02-15-mesa-meets-gc2000/</guid>
      <description>&lt;p&gt;Here is the first result of running &lt;a href=&#34;https://github.com/laanwj/mesatest_gles&#34;&gt;mesatest_gles &lt;/a&gt;on &lt;a href=&#34;https://github.com/austriancoder/mesa&#34;&gt;mesa&amp;amp;etna&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Following tests are showing good visual results compared to swrast:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hello_Triangle/CH02_HelloTriangle&lt;/li&gt;
&lt;li&gt;Simple_VertexShader/CH08_SimpleVertexShader&lt;/li&gt;
&lt;li&gt;CubeVBO/cube_vbo&lt;/li&gt;
&lt;li&gt;ParticleSystem/CH13_ParticleSystem&lt;/li&gt;
&lt;li&gt;Viewports/viewports&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All other are visual corrupted or segfault. So there is still some work done to get all demos
up and running.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GC2000 support for etnaviv</title>
      <link>https://playground.christian-gmeiner.info/2014-02-09-gc2000-support-for-etnaviv/</link>
      <pubDate>Sun, 09 Feb 2014 17:22:56 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2014-02-09-gc2000-support-for-etnaviv/</guid>
      <description>&lt;p&gt;Today I hit an important milestone for etnaviv – an open source user-space driver for the Vivante GCxxx series of embedded GPUs.
I finally got GC2000 support to a level that it seems to work. It took me some months to get there.
At the beginning it sounds easy to rebuild a ‘driver’ if you get readable command buffer dumps. I did start with working on a simple replay program to render a cube in the same was as the binary blob does it.
But what should I say… it is quite boring to do everything by hand and not taking advantage of libetnaviv
and the ‘driver’ at all. So I decided to go the hard way and try to fix/add all missing bits until it renders something.
The good thing is that I have now some knowledge about the structure of libetnaviv, the
dirver and mesa in general. It helps a lot if you know why stuff is done that way.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
