summaryrefslogtreecommitdiff
path: root/SummerOfCodeIdeas.mdwn
blob: 58d5f0a4529571b7fd2a2dfb20ab2468723dabe7 (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
# 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?|https://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2015/help_page#5._What_should_a_student_proposal_look]]", 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.freenode.net/#dri-devel]].

## 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|mailto: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)
   1. Find the best solution to display graphs in Qt5 (Qt Charts and other modules may be handy for this work)
   1. Study the design proposed by last year's student, possibly propose some changes
   1. 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|mailto:mesa-dev@lists.freedesktop.org]], #dri-devel on irc.freenode.net
* _Description:_
Currently the OpenMAX state tracker in Mesa/Gallium uses [[Bellagio|http://omxil.sourceforge.net/]]. The project would be to use [[Tizonia|https://github.com/tizonia/tizonia-openmax-il/]] 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. 
    1. 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|mailto: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|mailto: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|mailto: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|mailto: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](https://trello.com/b/ZudRDiTL/nouveau).

#### 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|mailto: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|mailto: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|mailto: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](http://www.x.org/wiki/DRMJanitors/) page.