RSSAmplifier

Blog

Christian Gmeiner

Recent content on Christian Gmeiner

christian-gmeiner.infoRSS feed ↗115 posts

Latest posts

The Diagonal Seam

Two more dEQP tests down: dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag -- Pass dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min -- Pass This one was a fun geometry puzzle. The problem Mesa’s u_blitter is the utility that drivers use for framebuffer blits – copying pixel data between surfaces, optionally scaling and filtering. It works by drawing a textured…

Fixing the R/B swap the right way

If you’ve ever looked at a GPU render and seen blue where red should be, you’ve met the R/B swap problem. For etnaviv this has been a long-standing source of complexity. We were solving it in the shader, but the proprietary blob driver had a simpler approach all along. As part of my work at Igalia , I finally sat down and did it properly. The problem Vivante GPUs have a quirk: the…

PanVK Extension Sprint: Mesa 26.1

Last week marks the Mesa 26.1 branch point, and I wanted to take a moment to look back at what happened on the PanVK front. Spoiler: it was a busy one. The landscape PanVK - the Vulkan driver for Arm Mali GPUs (Valhall and newer) - is a collaborative effort. Collabora has been doing incredible work on the compiler backend and the foundational infrastructure. Arm themselves are actively…

GLES3 on etnaviv: Fixing the Hard Parts

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 Igalia for giving me the opportunity to spend some time on these topics. Where We Are 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 -…

My first Vulkan extension

After years of working on etnaviv - a Gallium/OpenGL driver for Vivante GPUs - I’ve been wanting to get into Vulkan. As part of my work at Igalia , the goal was to bring VK_EXT_blend_operation_advanced 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…

Multiple Render Targets for etnaviv

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. With the latest release of Mesa 24.03 and the commitment from Igalia , the etnaviv GPU driver now includes support for MRTs. If you’ve…

CI-Tron: A Long Road to a Better Board Farm

I’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 deqp or piglit on a merge request or even on a private git branch before any code is merged, which significantly helps catch…

It All Started With a Nop - Part I

Note

hwdb - The only truth

Trusting hardware, particularly the registers that describe its functionality, is fundamentally risky. tl;dr 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. If you are interested in the implementation details, I recommend checking out this Mesa MR . Are you…

The Year 2023 in Retrospect

Holidays are here and I have time to look back at 2023. For six months I have been working for Igalia and what should I say? I ❤️ it! 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. Driver maintenance Before adding any new feature I thought it would be…

Mainline kernel boot with STM32MP157C-DK2 Discovery Board

I recently bought a new device for my etnaviv board farm - STM32MP157C-DK2 Discovery Board . The big problem is that the stock boot-chain can not boot a mainline kernel - it simply hangs. TF-A Trusted Firmware-A (TF-A) is a reference implementation of secure-world software used on this platform. It implements a secure monitor with various interface standards: The power state coordination interface…

Cloudflare DDNS and Unifi USG

This is a quick post for those of you looking for a completely free dynamic DNS solution for your home network running on Unifi. For years, I was a happy DynDns user and even paid once for a premium plan. But now it is time for a change as I recently switched to Unfi network equipment including a USG . Currently, I am using Cloudflare for CDN, DDOS protection, free SSL certificates and DNS with a…

mesamatrix

You might be familiar with mesamatrix - a nice site to track the state of all GPU drivers provided by Mesa. Ohh.. did I say all? Let’s have a closer look: This page is a graphical representation of the text file docs/features.txt from the Mesa repository. So wouldn’t it be sick to get etnaviv mentioned in docs/features.txt and onto the matrix? First mesamatrix needs to know/support…

About

Hugo, the world's fastest framework for building websites

device-tree introspection

From time to time I need to inspect a used device-tree of a running device. For instance, the used bootloader (u-boot, barebox, …) patches the the initial specified dtb and I want to see the modified one. All that is needed is an installed device-tree-compiler on the target. $ dtc -I fs -O dts /sys/firmware/devicetree/base

etnaviv officially landed

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’s git repository and will be released with mesa 17.0 - yeah! 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…

Let’s Encrypt

As HTTPS is a must nowadays I decided a year a go to give it a try and got a certificate from startssl . The process at startssl took quite some time and was not that easy. With lets encrypt everything should be much easier and faster to setup – lets give it a try @ ueberspace (my hoster). There is a very good (German) tutorial directly from ueberspace for the whole process. Two minutes later…

etnaviv: kmscube

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. You may ask why did it so long to get it working? Let me explain it to you. The Vivnate GPU is a so called render-only GPU which does not have…

QMetaEnum: Serializing C++ Enums

I think that almost every C++ programmer looked into a nice and easy way to do C++ Enum serialization. You may want to store the Enum value in a human readable format (json, ini, ..) and later you may also want to read back the value into the object. You have here two way how to archive your goal. Use simple int values to represent the Enum value or use Strings. The big advantage with strings it…

Configure git send-email for gmail

Today I did a fresh installation of Fedora on my Chromebook and need to setup git send-email. Usually I need to do this step once every 1-2 years I thought it might be a good idea to write it down. Edit ~/.gitconfig [sendemail] from = Firstname Lastname email@gmail.com smtpserver = smtp.gmail.com smtpuser = email@gmail.com smtpencryption = tls smtppass = PASSWORD chainreplyto = false…

Fast forward to 2015

It has been a long time since I did the last post and I want to bring you up to date regarding my personal blog. As you might have seen I have changed the used theme to better support mobile devices. If your browser supports NSI you should access my blog via https now. It took me some time to setup everything but my new hoster ueberspace made it a breeze to setup everything – thanks.

Vivante meets devicetree

It took me some time to rework the device tree bindings but it looks like it starts to work! View the code on [Gist](https://gist.github.com/austriancoder/6196fa33011a120a01dd54dbd077a60d). Gets loaded into : [ 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]…

OpenOCD and the iMX6

Sometimes is is quite handy to have access to a JTAG interface to look more deeply into problems. The weapon of choice is an Olimex ARM-USB-OCD-H JTAG in combination with OpenOCD 0.8.0. First we will need to install OpenOCD. apt-get install libftdi-dev Download and extract OpenOCD 0.8.0 run ./configure run make && make install This should give you an OpenOCD installation with the following…

Vivante MMU v1

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. 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…

QtCreator: ptrace operation not permitted

Today I wanted to debug a Qt based application within QtCreator but failed. After a quick google I found the solution: View the code on [Gist](https://gist.github.com/austriancoder/c2733a5ca5cfa9c23fe99c27811813d3).

The next steps for etnaviv

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. Update mesa fork Start working on an improved compiler Start working on an kernel interface I…

GitHub: How to download a change as patch

Sometimes I can be useful to download a changes contained in a Github pull request as a unified diff. It turns out to be very easy. To view a commit as a diff/patch file, just add .diff or .patch to the end of the URL For instance

Mesa meets GC2000

Here is the first result of running mesatest_gles on mesa&etna : Following tests are showing good visual results compared to swrast: Hello_Triangle/CH02_HelloTriangle Simple_VertexShader/CH08_SimpleVertexShader CubeVBO/cube_vbo ParticleSystem/CH13_ParticleSystem Viewports/viewports All other are visual corrupted or segfault. So there is still some work done to get all demos up and running.

GC2000 support for etnaviv

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…

Rebase Github fork

Today I needed to rebase my etnaviv fork to the current master of upstream. I need to say that I never did this before but with git this is a breeze. View the code on [Gist](https://gist.github.com/austriancoder/724a0a8d1db4f229e197d501f8b49fa5). If you get a merge conflict during rebase, you only need to follow the instructions git gives you.

CMake: Post install scripts for debian

I am using cmake during my job to create Debian installation packages for different kind of software projects. Today I run into an issue. I needed to run some post installation steps. I know that this is quite easy possible within a deb file, but how to archive the same with cmake? It turned out to be quite easy: View the code on…

Decrypt shell commands

You may know this situation: You have seen a shell command, looked in the man page but you are no really sure what it does? It solution to this problem is quite easy: http://explainshell.com/ The best thing is that the source code is released under GPL and can be found at GitHub

Recreate ssh host keys in Debian

Sometimes it is needed to recreate the used ssh host keys and this can be done quite easy on a Debian based system. View the code on [Gist](https://gist.github.com/austriancoder/65c4f0141bdea7f565c1aed21404fd19).

Update KDE in Ubuntu

On my work linux machine I am using Ubuntu with KDE. As the new 4.11 was released I thought it would be a good idea to update my current KDE installation. As a long-term Gentoo user it needed some more steps. sudo add-apt-repository ppa:kubuntu-ppa/backports sudo apt-get update sudo apt-get dist-upgrade I think it is really time to replace my Ubuntu installation with something different/better.

i.MX6 - DDR3 setup

The company I work for has designed a custom i.MX6 based board and I am the guy who does the board bring-up. For me the i.MX6 platform is a very good choice as support for the hardware in u-boot and the linux kernel is quite good. So it should not be too hard to get linux running on our custom board. But wait… as I learned from my coreboot activities – memory setup is the hardest and most…

Rebuild a Debian package from source

In some rare cases I need to debug some networking protocols and my target of interest is NTP. I am debugging an issue where (maybe) NTP sets the current time backwards about two hours. My first candidate to look deeper is ntpd. But what do I see… debugging option is disabled in the Debian squeeze package of ntp. WTF?! – the only nice way to do useful debugging without wireshark. The good thing is…

Building etna_viv on the sabre lite

At the moment I am playing around with a cute nice little imx6q board – the sabre lite . I am running a freescale based RFS with the binary libGAL.so blob in the user space. So why not look into etna_viv and get it compiled. It turns out to be as simple as this. git clone git://github.com/laanwj/etna_viv.git cd etna_viv/native export GCABI=imx6 export CFLAGS="-D_POSIX_C_SOURCE=200809 -D_GNU_SOURCE…

JQuery: autoscroll to last line of a div

Image you are working on a small web application where you use a JQuery UI dialog to inform the user about the current process. Triggered via SSE I am appending some messages via JavaScript. $(&rsquo;#progress&rsquo;).append("<span class=&lsquo;ui-icon ui-icon-alert&rsquo; style=&lsquo;float: left; margin-right: .3em&rsquo;;> " + stderr + &ldquo; &rdquo;); In order to automaticly scroll to the…

git: RPC failed; result=22, HTTP code = 504

git clone http://review.coreboot.org/p/coreboot.git coreboot Cloning into &lsquo;coreboot&rsquo;&hellip; error: RPC failed; result=22, HTTP code = 504 fatal: The remote end hung up unexpectedly The error occurs in ‘libcurl’, which is the underlying protocol for http. To get more details about the error, set GIT_CURL_VERBOSE=1

SMBus Compatibility With an I²C Device

Some naive guys – like me – think that SMBus and I²C are equal expect the bus level. But in the last days I run into a problem where an at24 based EEPROM connected via SMBus triggers a bus collision after a warm reboot. After some hours of debugging – even staring minutes at a oscilloscope showing SDD and SDC lines – I started to add some dump_stack() calls into i2c_core.c file form a recent linux…

Sending patches from a local git repository

At the moment I am reworking some old seabios patches as I want them in upstream. At the moment my git log shows this: commit fd7e6128d5fb9b8297a4a20f3288c130a554147b Author: Christian Gmeiner christian.gmeiner@gmail.com Date: Thu Feb 14 10:24:59 2013 +0100 geodevga: fix wrong define name Signed-off-by: Christian Gmeiner christian.gmeiner@gmail.com commit b1268e8100f0bcf0655b65326856e6f33e3625c1…

I ♥ Free Software

Today is February 14. Some think of it as flower grocer appreciation day, but most (and for better reasons) celebrate it as the international I ♥ Free Software day . Free and open source software makes it possible to fix problems and/or implement new features in software I use. I could write a lot of text why I think it is a good idea to support the open source community but I want you to form an…

Which colors can work together?

In some rare cases I need to find the correct colors that can ‘work’ together. As I do not call me the graphical/designer guy I always use little helpers. http://colorschemedesigner.com

The choice of jQuery selector&#39;s

Sometimes if you are doing some fancy HTML5 development you wonder what jQuery selector would do the job. In such a case I can recommend the following little helper 🙂 http://codylindley.com/jqueryselectors/

Add vendor specific information&#39;s to a coreboot rom

Sometimes it is needed to add some vendor specific information’s like a version string to a generated coreboot rom. For this example we assume we want the area from 0x00 to 0x30 for such kind of data. The first idea is to use cbfstool. Thanks to some guys in the IRC channel it looks like the current build system does something like: cbfstool -o $$(( $(CONFIG_ROM_SIZE) - $(CONFIG_CBFS_SIZE) ))…

Detect initramfs under Debian squeeze

I am looking for a way to detect If a initramfs was used during boot. And after some reboots and reading of init script of initramfs-tools I found this solution. #!/bin/bash if [ -e /dev/.initramfs ]; then echo YES else echo NO fi This may not work under wheezy or any other working distribution. But that’s okay for now 🙂

systemd on a Gentoo based system

I always wanted to try out systemd as I like the ideas and concept behind it. So lets get started: add systemd USE-flag emerge –ask –changed-use –deep @world emerge –ask systemd change grub config to use init=/usr/bin/systemd reboot localhost christian # systemd-analyze Traceback (most recent call last): File &ldquo;/usr/bin/systemd-analyze&rdquo;, line 23, in from gi.repository import Gio…

Couldn&#39;t register serial port 0000:02:0a.2: -28

I run into a problem where I have a device which has two normal serial ports and some on a PCI device. After booting the kernel I got this error line: Couldn&rsquo;t register serial port 0000:02:0a.2: -28 In order to get more than 2 serial ports working, I “fixed” my currently used kernel config: CONFIG_SERIAL_8250_NR_UARTS=32 CONFIG_SERIAL_8250_RUNTIME_UARTS=6

Petition to stop software patents in Europe

Git via Git

If you already have Git installed, you can get the latest development version via Git itself: git clone https://github.com/git/git.git