Community:SummerOfCode18: Difference between revisions

Updated gfx-rs proposal with a timeline
m (→‎2018 Project List: Fix syntax)
(Updated gfx-rs proposal with a timeline)
Line 41: Line 41:
|-
|-
| D3D11 backend for gfx-rs HAL
| D3D11 backend for gfx-rs HAL
| [https://github.com/gfx-rs/gfx gfx-rs] is a graphics abstraction library written in Rust and currently used for prototyping and investigation of [https://www.khronos.org/blog/khronos-announces-the-vulkan-portability-initiative Vulkan Portability] and [https://www.w3.org/community/gpu/ WebGPU] by Mozilla. The Hardware Abstraction Layer (HAL) of gfx-rs currently supports Vulkan, D3D12, Metal, and OpenGL. We want it to be powering [https://github.com/servo/webrender/ WebRender] for Firefox Quantum and Servo, and since WebRender currently runs on D3D11 (through [https://chromium.googlesource.com/angle/angle/+/master/README.md Angle]), we need to provide a native D3D11 backend. The implementation can be based off the existing D3D11 backend of [https://github.com/gfx-rs/gfx/tree/pre-ll/src/backend/dx11 gfx-rs pre-HAL], and the main challenge is porting the code, optimizing, and testing it.
| [https://github.com/gfx-rs/gfx gfx-rs] is a graphics abstraction library written in Rust and currently used for prototyping and investigation of [https://www.khronos.org/blog/khronos-announces-the-vulkan-portability-initiative Vulkan Portability] and [https://www.w3.org/community/gpu/ WebGPU] by Mozilla. The Hardware Abstraction Layer (HAL) of gfx-rs currently supports Vulkan, D3D12, Metal, and OpenGL. We want it to be powering [https://github.com/servo/webrender/ WebRender] for Firefox Quantum and Servo, and since WebRender currently runs on D3D11 (through [https://chromium.googlesource.com/angle/angle/+/master/README.md Angle]), we need to provide a native D3D11 backend. The implementation can be based off the existing D3D11 code in [https://github.com/gfx-rs/gfx/tree/pre-ll/src/backend/dx11 gfx-rs pre-HAL], and the main challenge is porting the code, optimizing, and ensuring it can successfully run the reference test suite.
| Candidates should be familiar with Rust as well as low-level graphics development. Not having D3D11-specific experience is acceptable, given the willingness to learn it and a properly setup Windows development environment.
| Candidates should be familiar with Rust as well as low-level graphics development. Not having D3D11-specific experience is acceptable, given the willingness to learn it and a properly setup Windows development environment.
| Dzmitry Malyshau (Mozilla)
| Dzmitry Malyshau (Mozilla)
| Dzmitry Malyshau (Mozilla)
| Dzmitry Malyshau (Mozilla)
| gfx-rs is one of the foundational projects in Rust gamedev/graphics, with rich history and wide range of users. We have an active community that encourages learning and curiosity in how graphics works down to the hardware. This is not a Mozilla project, but it may become a key component in Firefox Quantum for the ability to run natively on different platforms, while utilizing the fine-grained control of the graphics/compute workloads exposed by the low-level APIs.
| Proposal Timeline:
* Before April 20: setup the Windows environment for DirectX development; run the examples and reference tests with existing Vulkan/DX12/GL backends; get in contact with developers on [https://gitter.im/gfx-rs/gfx Gitter].
* April 20 – May 23: get familiar with gfx-rs HAL architecture, attempt to fix small entry-level issues and/or write an application/library on top of it.
* May 23 – May 30: setup the backend skeleton with bits of actual logic, such as device initialization, and have it building on CI.
* June 1 – July 5: implement the DX11 logic necessary to run the `quad` example and pass the basic graphics reference tests.
* July 6 - July 31: implement support for compute and tessellation; benchmark the new backend against DX12; pass the full reference test suite.
* Aug 1 - Aug 16: determine the list of capabilities that need to be exposed, merge it with GL backend legacy capabilities, expose to the reference tests.
|-
|-
| Servo: Prototype ways of splitting up the script crate
| Servo: Prototype ways of splitting up the script crate
13

edits