[Submitted] Direct3D 10 RenderSystem and beyond
Posted: Tue Mar 20, 2007 9:14 am
Here we go (abstract embedded in text):
[Title/Summary: Direct3D 10 RenderSystem and beyond]
[Student Name: Vladimir Sukhoy]
[email: vladimir.sukhoy (wassup?) gmail.com]
[IM: Google Talk vladimir.sukhoy (huh?) gmail.com]
[Time Dedication for the Project]
Between part-time (20h/week) and quarter-time (10h/week) in the period after project acceptance (if so) and till May 5 (semester commencement in the university). 35-40h (about full-time) after then till approximately Aug. 20th (semester start at the university). Weekends fairly offloaded.
Each prospective deliverable is assigned a priority which determines the time allocation, i.e. if there are pending tasks priority-first deliverable then they are done and any work on priority-second deliverable is halted (with reasonable exceptions and applying the two-minute rule, i.e. if something requires less than two minutes it is done right away regardless of the priority). For example if [dx10rs] - a priority one deliverable is at QA/Testing/Feedback stage, the work may be performed on something else, but if there is a major bug found in [dx10rs] it takes immediate priority over any other work.
DirectX 10 RenderSystem implementation will be developed. Emphasis will be on producing well-maintainable code (following the guidelines available at http://temas.obelisk.net/ogre/CR/docs/howto.html ) and on producing a set of tests which cover the functionality of the DirectX 10 RenderSystem so that it can be included into future OGRE distributions. Community involvement is an important resource to be used for the success of this project, so once the first draft and the test set of the RenderSystem is done, it will be made available for the community review and testing on different hardware/OS configurations available. Appropriate web-based bug tracker will be provided. On the other hand, design issues may be discussed in appropriate section of Ogre Forums.
Once core DirectX 10 RenderSystem code will be more or less stable, work may be started on other deliverables.
Such deliverables are: incorporating appropriate Direct3D 10 hardware into existing OpenGL RenderSystem and extending both RenderSystems with newer hardware features. While Direct3D 10 is a Vista-only technology, OpenGL is available elsewhere, so extending OpenGL render system code seems worthwhile as a part of this project.
There is a tool available for OGRE which purpose is to convert FX effect files of Direct3D to OGRE material format (rather, build OGRE material file from the effect description in FX file). Direct3D 10 provides new upgraded FX format which is currently not supported in
fxogretool. Obviously, OGRE users would be interested in using new Direct3D 10 FX files once Direct3D 10 RenderSystem is provided, so it seems feasible to both improve fxogretool's support of "old" FX files and introduce support for "new" Direct3D 10 FX files.
There are also some minor items from SoC 2006 which were either missing or not implemented fully related to RenderMonkey exporter (while some of them were actually implemented later, there are still a few missing bits), these are the time fillers just in case and should be treated as such (i.e. not essential for the project's success/failure).
1. Get Dx10 working with existing feature set
2. Add support for geometry shaders and other new Dx10 features
3. Deal with removal of fixed-function
4. Add corresponding new features to GL where possible
5. Ancilliary extras like fx support
6. Some tools issues from soc06 if time allows.
The list of deliverables and their priorities is as follows:
[dx10rs] [priority-one] Implementing, testing and community review of core Direct3D RenderSystem functionality resolving the issues with removal of fixed function pipeline from DirectX 10, working RenderSystem module and the system test set (ideally, covering all the functionality of the RenderSystem) runnable by users without much development background must be provided, feedback mechanics (bug tracker) deployed and integrated with the test set. Questionable design choices are to be discussed with mentor and community at the Forums. The working Direct3D 10 module which is reasonably compatible with the current OGRE codebase, is reasonably covered by the test set, tested on the community's resources is the main goal.
[featsup] [priority-two] Providing the support for new DirectX 10 features on non-DirectX 10 machines. In particular, per-polygon material identifiers are to be introduced in the Resource subsystem of OGRE and also the buffer framework. Support for geometry shaders in OpenGL RenderSystem may be another part of this deliverable. The list of features to implement may grow or shrink as I gain more insight into both Direct3D 10 and current state of OGRE. Testing these on non-DX10 configurations (perhaps the test framework developed as a part of [dx10rs] may be reused for providing system test for this new functionality even beyond [dx10rs] code, if so then the feedback infrastructure developed in [dx10rs] may be also reused).
[fxogretool] [priority-three] Extending fxogretool to support Direct3D 10 FX format. Improve the current level of FX support. Research the possibility of utilizing XNA framework in the context of fxogretool, see also http://msdn2.microsoft.com/en-us/library/bb197848.aspx (one can use XNA to load and work with effects, this can be used in fxogretool to handle effects as an option). Improving the quality of fxogretool's code base. Improving compatibility with other tools, like Lumonix ShaderFX (see also http://www.lumonix.net/).
[minor06] [priority-four] Some items from SoC 2006, (see also http://www.ogre3d.org/wiki/index.php/SoC2006_RmExporter ), most notably - [import], [persistence], [zipbackend], [doc], [meshimport], these should not take much time, as RenderMonkey Ogre Exporter is now python scripted. Improving overall quality of RmOgreExporter (v2) codebase. Streamlining install process.
Intro period (proposal acceptance - May 5) - familiarize with DirectX 10 and refresh OGRE skills. Introduce more items into [featsup] synchronous with DirectX 10 learning curve. Ideally - get a working prototype of [dx10rs] by May 5. Prepare and deploy feedback infrastructure (bug tracker, test framework and integration between the two). Discuss the arising issues on OGRE Forums and with mentor. Resolve all questions with development tools, both hardware and software.
Sprint 1 (May 5 - June 5) - active development period designated for [dx10rs]. Community-ready preview of [dx10rs] is a goal by June 5 (with tests). The code produced should be properly documented and up to the coding standards at http://temas.obelisk.net/ogre/CR/docs/howto.html .
Review 1 (June 5 - June 15) - review period for [dx10rs], identifying bugs and issues and resolving them. Meanwhile, preparing grounded proposals on [featsup] - at the level of methods to introduce into Resource/Buffer and other frameworks of OGRE as needed to support new features of DirectX 10 and to gracefully support absence of fixed function pipeline in DirectX 10 (if not clear by this time). Discussing design issues at OGRE forums.
Sprint 2 (June 15 - July 15) - active development period, implementing [featsup] and providing tests, collecting community feedback. Discussing issues as needed (main focus on coding though). The list of features for [featsup] should be implemented by the end of this periods (properly documented, with tests).
Review 2 (July 15 - July 25) - review period for features implemented in [featsup]. Collect feedback, fix bugs, extend documentation and work on [fxogretool] depending on time availability.
Sprint 3 (July 25 - August 15) - active development period, designated to [fxogretool] and resolving issues with [fx10rs] and [featsup] with respect to priorities. Ideally, fxogretool should support Direct3D 10 FX shaders by the end of this period. If time allows, work on [minor06] items.
Review 3 (August 15 - August 31) - review period for [fxogretool] and whatever new functionality was introduced in [dx10rs] and [featsup] if so. Release new version of RmOgreExporter if some of [minor06] items were completed.
Development will be primarily done on Windows Vista Ultimate with Microsoft Visual Studio 2005 SP1 (Standard Edition). Preferred scripting language of choice is Python. Student can handle multi-OS development if the need arises.
Comprehensive weekly reports. Live communication as needed (Skype ok, english fluent).
My resume is available at http://sukhoy.public.iastate.edu/soc2007/resume.htm
* I have background in C/C++ development for Windows and long-term experience using major tools involved (All Microsoft IDEs and make-like tools).
* I have some long-term experience with Python scripting language.
* I have some long-term experience with 3D Programming.
* I am familiar with CVS and newer source control systems, like Subversion.
* I have prior experience with Summer Of Code as a participant (in particular, with OGRE).
* I have experience writing FOSS since 1998.
* I am a graduate student for PhD in Applied Maths at Iowa State University, Ames, USA.
OGRE. See more details at http://www.ogre3d.org/wiki/index.php/SoC2006_RmExporter . Thanks again, Michael!