# 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, 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]]. ## 2015 Ideas ### Linux kernel #### DRM Kernel Janitor You may find multiple ideas from the the [DRM Janitor](http://www.x.org/wiki/DRMJanitors/) page. ### Apitrace #### Add support for performances counters in the profiling view * _Difficulty:_ Easy * _Skills Required:_ C++, OpenGL * _Helpful, but optional skills:_ Qt5, CPU & GPU profiling * _Where to ask questions:_ [[apitrace@lists.freedesktop.org|mailto:apitrace@lists.freedesktop.org]], #dri-devel 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. The goal of this task is to improve the profiling capabilities on the OpenGL side by leveraging the AMD_performance_monitor and INTEL_performance_query extensions, when available. Some necessary items: 1. Design the graphical interface (visualisation + signals selection) 1. Create an interface suitable to abstract any metric-collection system (CPU or GPU) 1. Write backends to collect metrics (focus on Linux) Possible mentor: Martin Peres (mupuf on IRC/freenode) ### OpenGL #### GL/GLSL tests for GL 4.0 and newer * _Difficulty:_ Easy-Medium * _Skills Required:_ C * _Useful skills:_ OpenGL, GLSL programming * _Hardware/Software required:_ driver supporting >= OpenGL 4.0 * _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #dri-devel on irc.freenode.net * _Description:_ * Write tests for OpenGL 4.0 / GLSL 4.00 and newer. Proposal should identify: * GL/GLSL version/features you plan to focus on * Number of tests you estimate completing * Hardware/driver you have access to ### GLSL Compiler #### Port optimization passes from GLSL IR to NIR * _Difficulty:_ Medium-Difficult * _Skills Required:_ C,C++ * _Useful skills:_ Compilers * _Hardware/Software required:_ Intel graphics (must be supported by i965) * _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #dri-devel on irc.freenode.net * _Description:_ There are a number of optimizaiton passes in the old GLSL IR that we would like to see ported to NIR. This includes loop unrolling, function inlining, any algebraic optimizations not yet in NIR, and pretty much anything else that GLSL IR has but NIR does not. A good proposal should identify 1-3 passes that the student wishes to port. ### 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. #### Buffer/Image support * _Difficulty:_ Medium * _Skills Required:_ C/C++ * _Useful skills:_ OpenGL, Compilers, Reverse Engineering * _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:_ Add features to gallium and nouveau that enable enough functionality to expose GL_ARB_shader_atomic_counters, GL_ARB_shader_image_load_store, GL_ARB_shader_storage_buffer_objects, etc. Proposal should include: * Which NVIDIA hardware family to target (Fermi and Kepler+ are very different) * Plan of attack that demonstrates sufficient familiarity with the subject matter #### OpenCL support * _Difficulty:_ Difficult * _Skills Required:_ C++ * _Useful skills:_ Compilers, Reverse Engineering * _Hardware/Software required:_ NVIDIA Tesla or later * _Where to ask questions:_ [[nouveau@lists.freedesktop.org|mailto:nouveau@lists.freedesktop.org]], #nouveau on irc.freenode.net * _Description:_ Add a converter from an LLVM-like IR (e.g. SPIR) to nouveau/codegen IR (hw-independent). Add additional features required to expose compute support (hw-dependent). Add a way to make clover feed SPIR into the drivers. #### 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. ### Freedreno #### Android support * _Difficulty:_ Medium * _Skills Required:_ C * _Useful skills:_ Android * _Hardware/Software required:_ device with adreno a3xx or later; dev board (like ifc6410 or ifc6540) would probably be easier to work with, and therefore is recommended. * _Where to ask questions:_ [[freedreno@lists.freedesktop.org|mailto:freedreno@lists.freedesktop.org]], #freedreno on irc.freenode.net * _Description:_ Some groundwork has been done to ensure mesa at least builds for android, although gralloc/hwcomp parts need some update for more recent android versions. The preference would be to get things working with the upstream drm/kms driver, as that would benefit the other mesa drivers as well. (The drawback being, we don't *yet* have support for DSI in the upstream driver, which rules out most phones/tablets... however we expect to have DSI support in the coming months.) The other option is a custom gralloc/hwcomp that uses the downstream msm android kernel drivers, which would more easily support existing phones/tablets where the kernel cannot easily be replaced. #### Adreno a4xx dx11 r/e * _Difficulty:_ Difficult * _Skills Required:_ C * _Useful skills:_ OpenGL, Reverse Engineering * _Hardware/Software required:_ device with adreno a4xx and gles 3.1 blob driver (and possibly android extension pack extensions) * _Where to ask questions:_ [[freedreno@lists.freedesktop.org|mailto:freedreno@lists.freedesktop.org]], #freedreno on irc.freenode.net * _Description:_ Adreno 4xx adds support for full dx11 pipeline, with additional shader stages. We need to r/e and document how to use the additional pipeline stages (compute/geom/tess/etc). Additionally fp64 support and image/buffer support. NOTE blob gles 3.1 drivers do not seem to be widely available, and there is the additional restriction of EULA that is required in order to download newer drivers from qualcomm. There are some things that could possibly be figured out with blob opencl drivers (like fp64.. if current blob opencl drivers already support this) #### Shader Compiler * _Difficulty:_ Difficult * _Skills Required:_ C, Compilers * _Useful skills:_ OpenGL, Reverse Engineering * _Hardware/Software required:_ device with adreno a3xx or later; dev board (like ifc6410 or ifc6540) would probably be easier to work with, and therefore is recommended. * _Where to ask questions:_ [[freedreno@lists.freedesktop.org|mailto:freedreno@lists.freedesktop.org]], #freedreno on irc.freenode.net * _Description:_ In case you happen to be a compiler expert, there is a lot of work needed on the shader compiler.. loop support and NIR conversion in particular ## 2014 Ideas ### Glamor ##### Glamor Performance Tuning * _Difficulty:_ Medium * _Skills Required:_C, OpenGL * _Helpful, but optional skills:_ GLSL, GPU driver development * _Where to ask questions:_ [[glamor@lists.freedesktop.org|mailto:glamor@lists.freedesktop.org]], #dri-devel on irc.freenode.net * _Description:_ * Glamor is a helper library that uses OpenGL to accelerate X rendering. The goal of this task would be to improve the the performance of Glamor by profiling problematic areas and improving the. Some possible ideas: 1. Implement a delayed flushing mechanism to avoid tiny drawing operation for each [[DrawElements/DrawArrays|DrawElements/DrawArrays]] call. 1. Implement an atlas for small pixmap. 1. Optimize trapezoid shader to reduce the overhead for those non-edge pixels. 1. Optimize trapezoid/gradient shader to merge the mask/source creation and compositing into one shader. ### Mesa #### GLSL Compiler ##### Improved application of GLSL complier optimizations * _Difficulty:_ Easy * _Skills Required:_ C, C++ * _Helpful, but optional skills:_ GLSL, compilers * _Possible Mentor:_ [[IanRomanick|IanRomanick]] (idr on IRC) * _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #dri-devel on irc.freenode.net * _Description:_ * Mesa's GLSL compiler contains a large number of optimization passes. Each pass may change the code of a shader, and this may result in opportunities for other passes to make more changes. As a result, we run all of our optimization passes in a loop until the shader code stabilizes. This is expensive, and, though we have never observed this in the wild, it is possible that a shader may never stabilize. * Find a static ordering, with possible repeats, of optimization passes that does not compromise the quality of the generated code. Measure the before and after speed of compiling a large set of real-world shaders. #### r600g/radeonsi ##### OpenCL Image Support * _Difficulty:_ Medium * _Skills Required_ C, C++, OpenCL * _Helpful, but optional skills:_ Compilers, LLVM * _Possible Mentor:_ [[TomStellard|TomStellard]] (tstellar on IRC) * _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #radeon or #dri-devel on irc.freenode.net * _Description:_ * Add OpenCL image support to either r600g or radeonsi. #### clover ##### Pick a popular OpenCL application and get it running with clover and at least one of the compute capable drivers (r600g or radeonsi) * _Difficulty:_ Depends on the application * _Skills Required_ C, C++, OpenCL * _Helpful, but optional skills:_ Compilers, LLVM * _Possible Mentor:_ [[TomStellard|TomStellard]] (tstellar on IRC) * _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #radeon or #dri-devel on irc.freenode.net * _Description:_ * This project is pretty straightforward: Pick an application and fix bugs or implement missing features in clover and/or the gallium drivers until it works. In order to come up with a good proposal for this project a student will need to first investigate their chosen application to determine what needs to be done to get it working. Some possible applications: * GEGL filters in GIMP (r600g = Medium / radeonsi = Medium) * Imagemagick (r600g = Medium / radeonsi = Medium) * Luxmark (r600g = Hard / radeonsi = Very Hard) ### Piglit #### GL/GLSL tests for GL 4.0 and newer * _Difficulty:_ Easy-Medium * _Skills Required:_ C * _Useful skills:_ OpenGL, GLSL programming * _Hardware/Software required:_ driver supporting >= OpenGL 4.0 * _Possible Mentor:_ [[JordanJusten|JordanJusten]] (jljusten on IRC) * _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #dri-devel on irc.freenode.net * _Description:_ * Write tests for OpenGL 4.0 / GLSL 4.00 and newer. Proposal should identify: * GL/GLSL version/features you plan to focus on * Number of tests you estimate completing * Hardware/driver you have access to ### X Server ### Kernel ### Xpra See this page for ideas: [[https://www.xpra.org/trac/wiki/ProjectIdeas|https://www.xpra.org/trac/wiki/ProjectIdeas]] See also: [[ToDo|ToDo]]