<?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>Freedesktop on Christian Gmeiner</title>
    <link>https://playground.christian-gmeiner.info/tags/freedesktop/</link>
    <description>Recent content in Freedesktop 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>Fri, 20 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://playground.christian-gmeiner.info/tags/freedesktop/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>GLES3 on etnaviv: Fixing the Hard Parts</title>
      <link>https://playground.christian-gmeiner.info/2026-02-20-gles3-on-etnaviv-fixing-the-hard-parts/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2026-02-20-gles3-on-etnaviv-fixing-the-hard-parts/</guid>
      <description>&lt;p&gt;This is the start of a series about getting OpenGL ES 3.0 conformance on Vivante GC7000 hardware using the open-source etnaviv driver in Mesa. Thanks to &lt;a href=&#34;https://www.igalia.com/&#34;&gt;Igalia&lt;/a&gt; for giving me the opportunity to spend some time on these topics.&lt;/p&gt;
&lt;h2 id=&#34;where-we-are&#34;&gt;Where We Are&lt;/h2&gt;
&lt;p&gt;etnaviv has supported GLES2 on Vivante GPUs for a long time. GLES3 support has been progressing steadily, but the remaining dEQP failures are the stubborn ones - the cases where the hardware doesn&amp;rsquo;t quite do what the spec says, and the driver has to get creative.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My first Vulkan extension</title>
      <link>https://playground.christian-gmeiner.info/2026-02-13-my-first-vulkan-extension/</link>
      <pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://playground.christian-gmeiner.info/2026-02-13-my-first-vulkan-extension/</guid>
      <description>&lt;p&gt;After years of working on etnaviv - a Gallium/OpenGL driver for Vivante GPUs - I&amp;rsquo;ve been wanting to get into Vulkan. As part of my work at &lt;a href=&#34;https://www.igalia.com/&#34;&gt;Igalia&lt;/a&gt;, the goal was to bring &lt;a href=&#34;https://docs.vulkan.org/refpages/latest/refpages/source/VK_EXT_blend_operation_advanced.html&#34;&gt;&lt;code&gt;VK_EXT_blend_operation_advanced&lt;/code&gt;&lt;/a&gt; to lavapipe. But rather than going straight there, I started with Honeykrisp - the Vulkan driver for Apple Silicon - as a first target: a real hardware driver to validate the implementation against before wiring it up in a software renderer. My first Vulkan extension, and my first real contribution to Honeykrisp.&lt;/p&gt;</description>
    </item>
    <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>
  </channel>
</rss>
