Project Ideas for Google Summer of Code / X.Org Endless Vacation of Code programs

Goal

The X.org board treats GSoC as an opportunity to teach new developers rather than a chance to get a pile of free code. With this perspective, if, in two months, the student actually has learned how to contribute to X Window System and its related projects, that's a huge step forward. Creating a project which guides this process with a maximal chance of success is the only tricky part.

When writing a proposal, please remember to make it detailed. Include at least the information called for in "What should a student proposal look like?", but including milestones and a project schedule is even better. See GSoCApplication for guidelines.

X.Org is a large and comprehensive project with a huge number of possible opportunities for interesting Google / X.Org Summer of Code projects. This list contains a few of those opportunities that are particularly interesting to X.Org developers and potential mentors. Please note that these are just suggestions; if you have an idea for something else please ask.

If you have questions, feel free to contact us on the dri-devel mailing list or the dri-devel IRC channel.

2016 Ideas

Here are a list of projects proposed by X.Org developers. If you have ideas of your own, please post them on the relevant mailing lists.

Apitrace

Plug the core-apitrace support for performance counters to qapitrace

  • Difficulty: Medium
  • Skills Required: C++, Qt5
  • Helpful, but optional skills: CPU & GPU profiling
  • Where to ask questions: apitrace@lists.freedesktop.org, #apitrace on irc.freenode.net
  • Description: Apitrace is an open source program that allows tracing, replaying, inspecting and profiling OpenGL/Direct3D calls made by any application. During the last GSoC, gl_retrace received support for listing and monitoring performance counters. During this GSoC, the goal would be to rework the profile view to let users select performance counters and then read back their results. With this work done, this will allow game and driver developers to find bottlenecks and inefficiencies in their code and then tune their code to get more performance. Some necessary items:
    1. Write unit tests for testing for regressions in performance counters (good way to introduce yourself to the interface)
    2. Find the best solution to display graphs in Qt5 (Qt Charts and other modules may be handy for this work)
    3. Study the design proposed by last year's student, possibly propose some changes
    4. Implement the GUI and land it upstream before the end of the project

Possible mentor: Martin Peres (mupuf on IRC/freenode)

Mesa

Switch OpenMAX state tracker in Mesa/Gallium to use Tizonia

  • Difficulty: Easy-Medium
  • Skills Required: C
  • Useful skills: Mesa, OpenMAX, gstreamer programming
  • Hardware/Software required: driver supported by the OpenMax state tracker (radeon, nouveau)
  • Where to ask questions: mesa-dev@lists.freedesktop.org, #dri-devel on irc.freenode.net
  • Description: Currently the OpenMAX state tracker in Mesa/Gallium uses Bellagio. The project would be to use Tizonia instead. Bellagio has not been updated for a few years and only supports the OpenMAX IL 1.1 specification. Tizonia is actively maintained and also up to date with latest OpenMAX IL 1.2 specification. Also Tizonia supports OMX_UseEGLImage which would allow for zero-copy decoding/rendering. This work would benefit AMD and Nvidia hardware on Linux desktop. It would also help embedded developers by allowing them to develop feature on desktop first before to go to target. Testing can be done through gst-omx, the set of GStreamer plugins that wrap OpenMAX.
    1. Add support for Tizonia in Gallium/st-omx.
    2. Add zero copy support using OMX_UseEGLImage

Possible mentor: Julien Isorce

Implement remaining presentation features in the VDPAU state tracker

  • Difficulty: Easy-Medium
  • Skills Required: C
  • Useful skills: Mesa, image processing
  • Hardware/Software required: driver supported by the VDPAU state tracker (radeon, nouveau)
  • Where to ask questions: mesa-dev@lists.freedesktop.org, #dri-devel on irc.freenode.net
  • Description: The VDPAU state tracker in Mesa still lacks some nice to have features, like lanczos scaling, inverse telecine, luma keying and a temporal spatial deinterlacer. A possible task would be to implement some or all of those and get them into a state where we can add them to the main Mesa project.

Possible mentor: Christian K├Ânig

"Soft" double precision floating point support

  • Difficulty: Medium
  • Skills Required: C
  • Useful skills:
  • Hardware/Software required: Any GPU with OpenGL 3.0 or later
  • Where to ask questions: mesa-dev@lists.freedesktop.org, #dri-devel on irc.freenode.net
  • Description: For decades CPUs did not have hardware floating point support. Floating point was implemented using using bit twiddling operations and integer math. This applied to both single and double precision. Starting with GLSL 1.30, GPUs have all of the necessary bit twiddling operator and integer math to do the same thing. GPUs natively support single precision, but only OpenGL 4.0 class GPUs have hardware support for double precision. The goal of this project is to implement a library of double precision operations in pure GLSL 1.30. Each double precision value would be stored in a uvec2. C source code for CPU implementations exist in a wide variety of open-source projects (GCC, libsoftfloat in PCC, Linux kernel, etc.). The majority of the work should be translating C code to GLSL. A stretch goal would be to use this library of functions to implement GL_ARB_gpu_shader_fp64 on all GPUs for which Mesa supports GLSL 1.30.

Freedreno (Open Source Adreno driver)

MSAA

  • Difficulty: Medium
  • Skills Required: C
  • Useful skills:
  • Hardware/Software required: Adreno A3xx or A4xx GPU
  • Where to ask questions: freedreno@lists.freedesktop.org, #freedreno on irc.freenode.net
  • Description: Add support for hardware MSAA. This will bring full MSAA support as required by GL 3.0 and GLES 3.0. If A4xx hardware is available, per-sample shading could also be implemented.

Texture Tiling

  • Difficulty: Medium
  • Skills Required: C
  • Useful skills:
  • Hardware/Software required: Adreno A3xx or A4xx GPU
  • Where to ask questions: freedreno@lists.freedesktop.org, #freedreno on irc.freenode.net
  • Description: Add support for tiled textures. This will involve adding transfer handlers to perform the tiling, figuring out the various tiling options and when to use them, and to update all uses.

Nouveau (Open Source NVIDIA driver)

A list of project is available on our Trello board.

Instruction Scheduler

  • Difficulty: Difficult
  • Skills Required: C++
  • Useful skills: Compilers
  • Hardware/Software required: NVIDIA Fermi or later
  • Where to ask questions: nouveau@lists.freedesktop.org, #nouveau on irc.freenode.net
  • Description: Write an instruction scheduling pass for basic blocks in the nouveau codegen compiler. Create scheduling policies that improve performance.

Maxwell Accelerated Video Decoding

  • Difficulty: Medium
  • Skills Required: C
  • Useful skills: Reverse Engineering, Video formats
  • Hardware/Software required: NVIDIA Maxwell GM107 / GM108 chip
  • Where to ask questions: nouveau@lists.freedesktop.org, #nouveau on irc.freenode.net
  • Description: RE the mechanism for video decoding in VP6 (the video engine iteration used in GM10x chips). Implement support for driving the engine.

Kepler Accelerated Video Encoding

  • Difficulty: Medium-Difficult
  • Skills Required: C
  • Useful skills: Reverse Engineering, Video formats
  • Hardware/Software required: NVIDIA Kepler GKxxx chip
  • Where to ask questions: nouveau@lists.freedesktop.org, #nouveau on irc.freenode.net
  • Description: RE the video encoding component of Kepler chips and produce sufficient documentation for an open source implementation (while reusing blob firmware). A stretch goal would be to integrate something into nouveau to be able to drive the engine, and a toy user-space application to encode a video.

Kernel

DRM Kernel Janitor

You may find multiple ideas from the the DRM Janitor page.