summaryrefslogtreecommitdiff
path: root/SummerOfCodeIdeas.mdwn
blob: ba3f12f5e5f17a26f9631894d71704ca2f5b5415 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
# Project Ideas for Google Summer of Code / X.Org Endless Vacation of Code programs

NOTE: documentation-only tasks don't fall within the scope of GSoC, but if you're looking for documentation-related tasks, please see [[here|SeasonOfDocsIdeas]].

## 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 "[[Writing a proposal|https://google.github.io/gsocguides/student/writing-a-proposal]]", but including milestones and a project schedule is even better.  See [[GSoCApplication|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|http://lists.freedesktop.org/mailman/listinfo/dri-devel]] or the [[dri-devel IRC channel|irc://irc.oftc.net/#dri-devel]].

## Potential Mentors

Some projects have one or more specific potential mentor(s) who are listed as part of the project idea itself. Otherwise a potential mentor might be found in the following list:

* [Martin Roukala](mailto:martin.roukala@mupuf.org) - CI-related projects
* [Daniel Stone](mailto:daniel@fooishbar.org) - Wayland/Weston, EGL, KMS
* [Karol Herbst](mailto:kherbst@redhat.com) - Nouveau
* [Julien Isorce](mailto:julien.isorce@gmail.com) - OpenMAX
* [Christian König](mailto:christian.koenig@gmail.com) - AMDGPU
* [Simon Ser](mailto:contact@emersion.fr) - Wayland
* [Daniel Vetter](mailto:daniel.vetter@ffwll.ch) - DRM

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

### Increase code coverage of the DRM code

* _Difficulty:_ Medium
* _Expected Size:_ 350 hr
* _Skils Required:_ C, Linux on the command-line
* _Useful skills:_ able to communicate on a public mailing list
* _Hardware/Software required:_ any Linux distribution

_NOTE:_ the mentors for this project have a separate set of instructions regarding prerequisites and proposal guidelines which supersede all others. Please see [[this page|DRMcoverage2023]] for details.

Mentors: Maíra Canal, André Almeida, Tales Aparecida, Paulo Meirelles


### Mesa

#### Vulkan GPU preference tool

* _Difficulty:_ Medium
* _Expected Size:_ 350 hr
* _Skills Required:_ Writing advanced GUI
* _Useful skills:_ C/C++
* _Hardware/Software required:_ A dual-GPU setup where both GPUs support Vulkan
* _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #dri-devel on irc.oftc.net
* _Description:_ One of the problems facing users with multi-GPU setups on
  Linux is the fact that applications choose a GPU either through their own
  algorithm, by just selecting the first thing that comes up (which may not
  be stable across reboots), or provide an in-app GPU selection option in
  the game's menu.  On Windows, most GPU vendors ship some sort of GPU
  selection tool to solve this problem by providing standardized lists of
  games which should run on the discrete GPU and letting the user provide
  custom rules for applications of their choice.  Other applications such
  as web browsers and word processors default to the low-power integrated
  GPU.  Linux has no such solution and it would be good to have something
  that is standard across all of Linux rather than individual vendors
  coming in and solving the problem with closed-source tools.  At its core,
  it would likely be a file stored in $HOME/.config with a GUI tool to edit
  the file and add rules.  Ideally, the GUI configuration tool would be
  available as a stand-alone and also seamlessly integrate with GNOME and
  KDE system settings.  It would also be good if the GUI was the same as
  the DriConf tool mentioned above.

Possible mentors: Dave Airlie (airlied on IRC/OFTC) Jason Ekstrand
(jekstrand on IRC/OFTC)


### Freedreno (Open Source Adreno driver)

See also our [Trello board](https://trello.com/b/VC0IXzrq/freedreno).

#### Compiler: Spilling Registers
* _Difficulty:_ Difficult
* _Expected Size:_ 350 hr
* _Skills Required:_ C, Compilers
* _Hardware/Software required:_ Adreno 3xx, 4xx, or 5xx GPU
* _Where to ask questions:_ [[freedreno@lists.freedesktop.org|mailto:freedreno@lists.freedesktop.org]], #freedreno on irc.oftc.net
* _Description:_ Shaders with high register usage (see shadertoy) may fail register allocation stage, in which case load/store instructions need to be added to "spill" register values to memory.  This project would involve adding support to freedreno/ir3 compiler to determine which registers to spill, add necessary load/store instructions to save to local memory and restore from local memory (and then re-run scheduling and register allocation passes).

### Nouveau (Open Source NVIDIA driver)

A list of project is available on our [Trello board](https://trello.com/b/ZudRDiTL/nouveau).

#### Instruction Scheduler

* _Difficulty:_ Difficult
* _Expected Size:_ 350 hr
* _Skills Required:_ C++
* _Useful skills:_ Compilers
* _Hardware/Software required:_ NVIDIA Fermi or later
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.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
* _Expected Size:_ 350 hr
* _Skills Required:_ C
* _Useful skills:_ Reverse Engineering, Video formats
* _Hardware/Software required:_ NVIDIA Maxwell GM107, GM200, GM204 or GM208 chip (a GM108 desktop card might works as well, the mobile one won't)
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.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
* _Expected Size:_ 350 hr
* _Skills Required:_ C
* _Useful skills:_ Reverse Engineering, Video formats
* _Hardware/Software required:_ NVIDIA Kepler GKxxx chip
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.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.

#### Dynamic Reclocking
 
* _Difficulty:_ Medium-Difficult
* _Expected Size:_ 350 hr
* _Skills Required:_ C
* _Useful skills:_ Modeling, control systems, and statistics
* _Hardware/Software required:_ A Kepler NVIDIA GPU with a super-reliable reclocking support and a power sensor
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.net
* _Description:_ Create a performance test rig that will test different use-cases we want to support for our dynamic reclocking.
This setup will need to be replicable and will serve as a benchmark for both power consumption and performance. The next step will be to experiment with different heuristics in the userspace that will poll the performance counters, and dynamically change the clocks to achieve the highest possible performance, at the lowest power consumption possible and with the simplest possible heuristic.

#### Enabling performance analysis on frameretracer

* _Difficulty:_ Medium
* _Expected Size:_ 350 hr
* _Skills Required:_ C, C++
* _Useful skills:_ Qt, OpenGL, Apitrace
* _Hardware/Software required:_ Any NVIDIA Tesla or newer
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.net
* _Description:_ Frameretracer is a wonderful tool to find and debug performance bottlenecks. However, it has been designed for Intel GPUs and requires changes in both Frameretracer and Nouveau in order to get the maximum out of the tool. The project would be to make the necessary changes in both Nouveau and Frameretracer to enable performance analysis on Nouveau.

#### Initial Nouveau Vulkan driver

* _Difficulty:_ Very Difficult
* _Expected Size:_ 350 hr
* _Skills Required:_ C, C++, Python
* _Useful skills:_ Vulkan
* _Hardware/Software required:_ Any NVIDIA Kepler or newer
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.net
* _Description:_ Write an initial vulkan driver, which should pass the most basic tests from the khronos CTS.

#### Helping out with Nouveau OpenCL driver

* _Difficulty:_ Very Difficult
* _Expected Size:_ 350 hr
* _Skills Required:_ C++
* _Useful skills:_ OpenCL, Compiler
* _Hardware/Software required:_ Any NVIDIA Tesla or newer
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.net
* _Description:_ Helping Pierre Moreau to get his current OpenCL Nouveau code to a usable state. This will include working a lot on the Nouveau compiler and improving the OpenCL Gallium state tracker Clover.

#### Adding new compiler optimization Passes to Codegen

* _Difficulty:_ Easy to Difficult
* _Expected Size:_ 350 hr
* _Skills Required:_ C++
* _Useful skills:_ Compiler Optimizations
* _Hardware/Software required:_ Any NVIDIA Tesla or newer
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.net
* _Description:_ Add new passes to Nouveaus codegen to improve the current generated code. This can mean adding a lot of trivial passes or a few complex one. A list of passes are in the "OpenGL Compiler Opts" list on the Nouveau Trello board: https://trello.com/b/ZudRDiTL/nouveau

#### Fixing outstanding reclocking issues on already reclockable GPUs

* _Difficulty:_ Medium-Difficult
* _Expected Size:_ 350 hr
* _Skills Required:_ C
* _Useful skills:_ Reverse Engineering
* _Hardware/Software required:_ Any NVIDIA Tesla, Kepler or Maxwell GPU
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.net
* _Description:_ We already support a handful of chipsets quite well. Fixing last outstanding issues on those would take us a step forward to actually having dynamic reclocking enabled by default (which we don't implement yet though)

### Fixing eGPU hotplugging in Nouveau

* _Difficulty:_ Easy to Hard (depending on which scenario to fix)
* _Expected Size:_ 350 hr
* _Skills Required:_ C
* _Useful skills:_ linux kernel programming
* _Hardware/Software required:_ Any Nvidia GPU and an eGPU case
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.net
* _Description:_ Using Nvidia GPUs through an eGPU case already works flawless. The only issue is, that unplugging the device causes the kernel to crash. The Nouveau driver needs to be taught to handle this situation. The easiest to fix is to unplug the GPU while no application is using it. The hardest scenario to fix is when X is doing reverse PRIME and an application is using the GPU for rendering.

### Fix outstanding tearing issues

* _Difficulty:_ Medium-Hard
* _Expected Size:_ 350 hr
* _Skills Required:_ C
* _Useful skills:_ linux kernel programming, understanding of Xorg
* _Hardware/Software required:_ Any Nvidia GPU and two displays
* _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.oftc.net
* _Description:_ In a couple of cases with the nvidia driver tearing still happens. One of such situations is when the user has two displays plugged in, but some also see it happen with PRIME. In order to fix specific cases of tearing, the cause needs to be figured out and fixed accordingly, be it in the kernel and/or the Nouveau DDX or Mesa driver.

### Kernel

#### DRM Kernel Janitor

You may find multiple ideas from the the [DRM todo list](https://dri.freedesktop.org/docs/drm/gpu/todo.html) page.

### libinput

#### Support for pressure-only bluetooth styli

* _Difficulty:_ Medium
* _Expected Size:_ 350 hr
* _Skills Required:_ C
* _Useful skills:_ Reverse Engineering, knowledge about Bluetooth/bluez
* _Hardware/Software  required:_ Touchscreen-capable laptop, bluetooth pen
* _Where to ask questions:_ [[wayland-devel@lists.freedesktop.org|mailto:wayland-devel@lists.freedesktop.org]], #wayland on irc.oftc.net
* _Description:_ Pressure-senstive style are commonly used with iPads and tablets. These styli usually only provide pressure, relying on the touchscreen for coordinates. To present such a stylus to an application, the touchscreen data and the stylus data have to be combined to a single event from the stylus device. libinput is perfectly suited to do exactly that. This project requires work in bluez to implement the stylus-specific protocol as a bluez plugin so the device shows up as kernel device (and, depending on the device, reverse engineering the protocol). This project requires work in libinput to extract and combine the data from both devices into a single virtual device.

### Wayland

#### Improved Weston timeline debugging

* _Difficulty:_ Medium
* _Expected Size:_ 350 hr
* _Skills Required:_ C
* _Useful skills:_ Performance profiling (including timeline and sample-based profilers), Wayland, toolkits, EGL / Vulkan WSI
* _Hardware/Software Required:_ Supports Wayland and KMS with open drivers
* _Where to ask questions:_ [[wayland-devel@lists.freedesktop.org|wayland-devel@lists.freedesktop.org]], #wayland-devel
* _Description:_ Weston currently has built-in support for timeline debugging, dumping JSON files with a visual representation of the timeline for showing client content on screen. This has a small client named Wesgr to render these to SVG. This project is somewhat open-ended, but there are many possibilities to improve it, including: implementing this protocol through more clients, a better renderer / timeline viewer with programmatic filtering (e.g. 'show me all frames which were late'), and integration with kprobes to instrument timings within the kernel stack (hardware/fence completion).

#### wlroots presentation scheduling

* _Difficulty_: Hard
* _Expected Size:_ 350 hr
* _Skills Required_: C
* _Useful skills:_ Wayland, KMS, OpenGL
* _Hardware/Software Required_: Supports Wayland and KMS with open drivers
* _Where to ask questions_: #wlroots on Libera Chat
* _Description_: At the moment wlroots-based compositors render right after the GPU displays a new frame on screen (vblank). This isn't great from a latency point of view, because all client surface updates will be 1 frame worth of time late. There are multiple ways to improve this (Weston and Sway have a configurable fixed delay, Mutter has an adaptive delay). Research and implement a good mechanism to reduce latency without missing frames.


### CI-tron / Bare-metal CI

The CI-tron project aims to make operating and sharing your local test machines with fellow developers directly or through forges a breeze! For less than $250, and half a day of setup, expose your test machines in GitLab in under an hour! The project is already in use to test AMD and NVIDIA GPUs in Mesa/DXVK and growing to support ARM single board computers.

Relevant links:

 * https://gfx-ci.pages.freedesktop.org/ci-tron/
 * https://mupuf.org/blog/categories/ci-setup-series/

Projects: To be defined