# 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 application look like?|http://code.google.com/support/bin/answer.py?answer=60306&topic=10727]]", 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 [[X.Org mailing list|http://lists.freedesktop.org/mailman/listinfo/xorg]] or the [[X.Org IRC channel|irc://irc.freenode.net/#xorg-devel]]. ## 2013 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.org * _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. ##### Glamor Xv support * _Difficulty:_ Easy * _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.org * _Description:_ * Glamor is a helper library that uses OpenGL to accelerate X rendering. The goal of this task would be to implement support for Xv (Xvideo) in glamor. Basic support would involve using OpenGL to implement colorspace conversion for various YUV formats. More advanced goals include: 1. Improved scaling algorithms 1. Support for brightness/contrast/saturation/hue adjustments 1. Support for gamma adjustment 1. Support for colorspace selection (ITU-R BT.601 vs. BT.709) ### Mesa #### GLSL Compiler ##### Find common patterns in real GLSL shaders * _Difficulty:_ Medium * _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.org * _Description:_ * Using Mesa's stand-along GLSL compiler as a basis, generate a database of IR from a large number of existing shaders (e.g., from shaderdb). Write a piece of software that will mine this database for "large" patterns that commonly occur in shaders. This information will be used by people working on the GLSL compiler to improve code generation for these sequences. ##### 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.org * _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 ##### Add support for OpenCL local and private memory spaces * _Difficulty:_ Medium * _Skills Required:_ C, C++ * _Helpful, but optional skills:_ OpenCL, compilers, GPU driver development, 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.org * _Description:_ * This project would involve modifying the r600g driver and LLVM compiler backend to support reading and writing from local and private memory spaces as defined by the OpenCL specification. ##### Improve VLIW5 scheduling in the LLVM backend * _Difficulty:_ Easy * _Skills Required:_ C, C++ * _Helpful, but optional skills:_ compilers, GPU driver development, LLVM * _Possible Mentor:_ [[VincentLejeune|VincentLejeune]] (vlj on IRC) * _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #radeon or #dri-devel on irc.freenode.org * _Description:_ * The idea is to improve hw utilization by improving instruction scheduling on VLIW5 hardware (r6xx-evergreen). This would require a way to represent trans slot compatibility for instructions and handle the additional constant read and literals limitations on this slot and updating the scheduler to take advantage of it. #### 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.org * _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: * Any bitcoin client (r600g = Medium / radeonsi = Hard) * GEGL filters in GIMP (r600g = Easy / radeonsi = Hard) * Luxmark (r600g = Hard / radeonsi = Very Hard) #### Intel ##### Implement GLSL 1.30 for older chipsets than SandyBridge * _Difficulty:_ Medium * _Skills Required:_ C, C++ * _Helpful, but optional skills:_ GLSL, compilers * _Possible Mentor:_ [[PaulBerry|PaulBerry]] (stereotype441 on IRC) * _Where to ask questions:_ [[mesa-dev@lists.freedesktop.org|mailto:mesa-dev@lists.freedesktop.org]], #dri-devel on irc.freenode.org * _Description:_ * Implement GLSL 1.30 support for pre-Sandybridge asics that support it. For additional details see: [[https://bugs.freedesktop.org/show_bug.cgi?id=59187|https://bugs.freedesktop.org/show_bug.cgi?id=59187]] ### Piglit #### GL/GLSL tests for GL 3.2, 3.3 * _Difficulty:_ Easy-Medium * _Skills Required:_ C * _Useful skills:_ OpenGL, GLSL programming * _Hardware/Software required:_ driver supporting >= OpenGL 3.2 * _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.freedesktop.org * _Description:_ * Write tests for OpenGL 3.2 / GLSL 1.50 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 #### Shatter support for the X Server (Xinerama replacement) * _Difficulty:_ Hard * _Skills Required:_ C * _Helpful, but optional skills:_ GPU driver development * _Possible Mentor:_ [[DaveAirlie|DaveAirlie]] (airlied on IRC) * _Where to ask questions:_ [[xorg-devel@lists.x.org|mailto:xorg-devel@lists.x.org]] or #xorg-devel on irc.freenode.org * _Description:_ * This project would involve adding an impedance layer to the X Server to divide rendering between multiple GPUs each covering different areas of a larger desktop. For more details: [[http://mirror.linux.org.au/linux.conf.au/2013/ogv/Teaching_the_X_server_new_tricks.ogv|http://mirror.linux.org.au/linux.conf.au/2013/ogv/Teaching_the_X_server_new_tricks.ogv]] (shatter discussion starts at ~24:00). ### Kernel #### Implement working rendernode support * _Difficulty:_ Medium * _Skills Required:_ C * _Helpful, but optional skills:_ GPU driver development * _Possible Mentors:_ [[DaveAirlie|DaveAirlie]] (airlied on IRC), [[DanielVetter|DanielVetter]] (danvet on IRC) * _Where to ask questions:_ [[dri-devel@lists.freedesktop.org|mailto:dri-devel@lists.freedesktop.org]] or #dri-devel on irc.freenode.org * _Description:_ * This project would involve adding a new interface to the drm to allow rendering on drm nodes without being master. This could also be expanded to cover display resource allocation for things like multiseat. Further information: 1. [[http://airlied.livejournal.com/72187.html|http://airlied.livejournal.com/72187.html]] 1. [[http://lists.freedesktop.org/archives/dri-devel/2012-April/021326.html|http://lists.freedesktop.org/archives/dri-devel/2012-April/021326.html]] 1. [[http://lists.freedesktop.org/archives/dri-devel/2012-September/028338.html|http://lists.freedesktop.org/archives/dri-devel/2012-September/028338.html]] ### Xpra See this page for ideas: [[https://www.xpra.org/trac/wiki/ProjectIdeas|https://www.xpra.org/trac/wiki/ProjectIdeas]] See also: [[ToDo|ToDo]]