GSoC: Student Tackles Wine Direct3D 10 Support
July 18, 2007
This article was contributed by Nathan Sanders
This is the fourth in LWN's series of Google Summer of Code (GSoC) 2007 articles. The first three articles covered the program launch, Ubuntu's projects, and the OpenMRS organization.
András Kovács is spending his summer bringing the Direct3D 10 graphics framework (D3D 10) to the Windows compatibility layer Wine. Already done with his mid-term evaluation on July 16th, he's well underway with his project, but don't expect to be playing the latest Valve games on Ubuntu this September. Building on top of years of Wine D3D development, Kovács will only lay the foundation for version 10 support. Read on to learn about the past, present, and future of Wine D3D development.
Henri Verbeet, a Wine D3D developer active since September 2005, explains
the importance of the framework:
Quite a number of Wine's users use Wine to play games, and a significant
part of the applications listed in Wine's
App DB are games. Although Direct3D
support is only a part of what's needed to support those games, it's a
rather important part. Initial support of DirectX for Wine was written by
Marcus Meissner in 1997, initial support for Direct3D was added in
1998. However, the early versions of Direct3D were quite different from the
later versions like D3D 8 and D3D 9.
The tale gets a bit contentious here. According to Verbeet, Transgaming forked Wine in 2000 to
create what is now known as Cedega with a
promise to return their improvements to the Wine project. Verbeet
continues:
That caused Wine's Direct3D development to be essentially idle for
a long time because people were waiting for TransGaming's
patches. Somewhere in 2002 people came to the conclusion
TransGaming wasn't going to give back their changes, and
'resurrected' Wine's Direct3D implementation.
Regarding challenges involved with development, Verbeet lists non-descript application crash dialogs, debugging logs running into the gigabytes, ambiguous rendering bugs attributable to nearly any aspect of Direct3D or OpenGL, and finicky applications that refuse trivial implementation differences between Wine and the native platform.
When Wine began implementing the D3D 8 protocol in 2002, they were about two years behind Microsoft. Before 2002 was out, Microsoft had released D3D 9. In 2003, Wine began catching up with D3D 9 and performing a substantial reorganization of their codebase that persists today. The wined3d library was introduced, consolidating all the code for supporting D3D 8, D3D 9, and the 2D graphics framework DirectDraw.
Of the current state of Wine, Verbeet says:
D3D 8 and 9 are almost feature complete at this point, but there will still
be plenty of bugs to fix and performance improvements to make. For D3D 10
on the other hand this is 'just' the beginning, and there will be a lot of
work to be done before any D3D 10 games will be playable.
Kovács began working with the Wine team long before this summer. He explains, "I
got interested when I wanted some games fixed and I was encouraged to learn about the code and fix them myself." He entered the #winehackers channel on Freenode and settled himself in amongst the development team. Kovács recalls, "[Stefan Dösinger] was the person, when I first came to IRC, that transited me into the Wine developer community." He has since submitted small patches for Wine's D3D implementation and Dösinger is now his GSoC project mentor.
Dösinger shares a typical background among Wine developers, "I've been working on Wine's Direct3D support for approximately 2 years now. I started hacking on Wine to get Empire Earth running. While many, many things improved since then, Empire Earth still doesn't run." Dösinger emphasizes the position of frustrated gamers, "We've had a few developers like that, and we could use many more, since we (the main developers) can't look at every single game out there. Unfortunately it is not a weekend's job to understand how our 3D code is working, isolate a bug in a game and fix it."
In early March, four days before Wine had even been accepted into the GSoC, Dösinger proposed what would become the Direct3D 10 project to the Wine development mailing list. He writes, "The idea was that starting D3D 10 is exciting work, partly due to to the hype Microsoft built up, and it allows the student to grow into Wine's Direct3D implementation without being overwhelmed by the whole code at once."
Dösinger's proposal was met with some criticism. Ivan Gyurdiev wrote on the development mailing list, "I think the SoC project needs to push the participant to be creative and solve a significant obstacle in wine development, which others find challenging. Yes, I am sure wine will benefit greatly from a d3d10 stub, mapping 1-to-1 to wined3d where possible, but is it really a project that requires a lot of creativity and the whole summer to do?" Gyurdiev is himself a Wine D3D developer since 2006, whom Verbeet notes was very valuable in the development of shader support.
Others indicated that they felt effort would be better expended to improve the Direct3D 9 implementation, as very little software currently requires version 10. Dösinger reiterated on the development mailing list, "One problem is nowadays that wined3d is pretty advanced already, and the learning curve is rather hard already. D3D10 is in my eyes an opportunity of an exciting project which allows a new developer to grow into wined3d."
Kovács recalls the proposal, "It seemed interesting to me and Stefan encouraged me to write an application." Although Kovács had Dösinger's support and some Wine experience, he was not automatically given the reins of the project. Dösinger explains, "We had three applications for this project. One was cancelled because the student also applied for a different Wine-Based project (DIB engine), and Andras was elected because he has already worked on D3D 9 a bit and knows the culture, and he has shown that he is talented in learning new things."
Like all GSoC students, Kovács was accepted on April 11th and given until May 28th to become familiar with his mentoring organization. He admits, "Unfortunately, I was only able to start my work one or two weeks ago [mid-June] because I had very serious exams." Kovács is pursuing a Informatics of Economics degree at Széchenyi István University in Győr, Hungary. This absence was likely not detrimental in light of his previous experience and familiarity with the Wine organization.
Kovács describes his project, "First, I define all D3D 10 interfaces. The second step is to stub them out (make an empty function for each interface method). At the same time I write some tests to verify things like reference counting. Then things already supported in wined3d can be forwarded, and other features added to wined3d where needed." Asked what the average user would get out of a version of Wine compiled directly after he finished his project, Kovács replies wryly, "Instead of complaining that D3D 10 can't be found, or automatically using D3D 9, a game may find D3D 10 and attempt to use it, causing a lot of "stub!" complaints from Wine."
Another task outlined in Dösinger's original mailing list proposal, which Kovács has already completed, is to add Windows Vista as a supported Wine "winver." This addition will appease applications which are exclusive to Vista. Kovács identifies his current goals, "I am defining the D3D 10 interface in Wine's headers and getting involved with the development of bigger additions in Wine."
Dösinger elaborates, "The project is mainly about writing the infrastructure, so the main aspects are the headers and basic tests about non-rendering issues, like reference counting. Microsoft often violates their own rules, which has made us a lot of headache in the past. But my main hope is that András keeps working on D3D 10 after this project." Verbeet concurs, "I certainly hope András will continue working on Direct3D after SoC is
finished." When asked if he would continue working with the Wine organization after the GSoC, Kovács responded, "Yes, because I like to do that."
The student and mentor seem to have a good working relationship. Kovács writes, "Stefan is the most helpful person that I have seen so far. If I need help, he is available and ready for help all the time... We are in contact all the time on IRC." Dösinger comments, "While András isn't the most experienced developer, he has shown often that he is talented in learning new things, and this is in my eyes one of the main aims of SoC - to give new developers an incentive to get into an open source project, and then continue working on it."
This good relationship bodes well for Kovács' mid-term evaluation. Dösinger explains, "The mentoring organizations mainly have to report how the student worked with the mentoring group (in our case the Wine Project) and whether the student should be invited back in the next GSoC." Kovács defined goals for the July 16th deadline, "I'm trying to get in the first set of patches, that will include full declaration of interfaces and methods, and start implementation of D3D10."
Many GSoC students cannot expect their code to see the light of day for several releases of their mentoring organization's project, perhaps months in the future. Dösinger says of Kovács, "András is working directly on the wine tree, so his work will be integrated immediately. Currently, though, he is struggling with getting his patches accepted by our maintainer, which is the main hurdle for new developers."
As for the prospect of Kovács' code sifting into the releases of Wine competitors, Verbeet writes, "I doubt we'll see much from this project in Cedega, since that would require TransGaming to either open up their own implementation or to use Wine's implementation instead of their own, both of which seem rather unlikely. For CrossOver it's pretty much guaranteed it'll end up in there, since their tree is based on WineHQ's."
Comparing his project to Cedega, which he admits to not having personally used, Verbeet writes, "While our Direct3D support isn't quite perfect yet, I like to think we've come a long way in the past couple of years, and quite a number of games are pretty playable these days. The general opinion seems to be that Wine's Direct3D is quickly catching up to Cedega and at some points already surpassing it. For example, Wine had support for shader model 2 & 3 about half a year before Cedega did. A lot of people seem to have the idea that 'Wine doesn't focus on Direct3D, while Cedega does', but while that might have been true a number of years ago, these days that's simply not true anymore."
Comments (2 posted)
System Applications
Audio Projects
Rivendell 0.9.81 announced
Version 0.9.81 of Rivendell, a radio station automation system, is out
with numerous new capabilities and some bug fixes.
"
Rivendell is a full-featured radio
automation system targeted for use in professional broadcast environments."
Full Story (comments: none)
Clusters and Grids
openMosix project shutting down
The openMosix single-system image clustering system claims tens of thousands of installations. Even so, the project has
announced that it will be shutting down as of March 1, 2008. "
The increasing power and availability of low cost multi-core processors is rapidly making single-system image (SSI) Clustering less of a factor in computing. The direction of computing is clear and key developers are moving into newer virtualization approaches and other projects."
Comments (10 posted)
Database Software
MySQL Community Server 5.0.45 released
Version 5.0.45 of MySQL Community Server is available with bug and
security fixes.
Full Story (comments: none)
PostgreSQL Weekly News
The July 15, 2007 edition of the PostgreSQL Weekly News
is online with the latest PostgreSQL DBMS articles and resources.
Full Story (comments: none)
phpPgAdmin 4.1.3 released
Version 4.1.3 of phpPgAdmin
has been announced.
"
This version further tightens up security and fixes some issues introduced in
the 4.1.2 release. All users are strongly encouraged to upgrade."
Comments (none posted)
Filesystem Utilities
Linbox Directory Server 2.0.0 available
Version 2.0.0 of
Linbox Directory Server,
"an enterprise directory platform based on LDAP designed to manage identities, access control informations, policies, application settings and user profiles", is out. This version adds new DNS/DHCP management
capabilities and a Norwegian translation.
Full Story (comments: 1)
Printing
New CUPS releases
Three new releases have been made by the Common Unix Printing System
project (CUPS). These include
CUPS 1.2.12:
"
CUPS 1.2.12 fixes several file typing issues, a bad error message in the scheduler, a web interface setting problem, and a bug in the PHP language binding. It also includes an updated Italian translation.",
CUPS 1.3b1:
"
CUPS 1.3 adds Kerberos and mDNS (Bonjour) support along with over 30 new features." and
CUPS Driver Development Kit 1.2.0:
"
The new release fixes several localization issues and adds support for many more languages."
Comments (none posted)
PosteRazor 1.4 released
Version 1.4 of PosteRazor
has been announced.
"
After having enthused Windows users and OSX users all around the world, this popular poster printing tool is now coming to your Linux desktop. It speaks three additional languages: Italian, Dutch and Spanish.
The prebuilt Linux x86 binary is statically linked against Fltk and FreeImage."
Comments (none posted)
Security
Sussen 0.90 released
Version 0.90 of Sussen, a security and vulnerability scanner, is out.
"
We are getting closer to v1.0. The remaining items to do are to fix the
remaining bugs in bugzilla, clean up the look/feel of the web console.
The editor has been disabled for now, it won't be ready in time for 1.0,
but we'll keep working on it for the 1.1/1.2 branch.
We are also working on setting up an OVAL repository so we can provide
updated definitions in a more timely manner."
Full Story (comments: none)
Web Site Development
curl-loader launched
The
curl-loader
project has been launched.
"
curl-loader (also known as "omes-nik" and "davilka") is an open-source tool written in C-language, simulating application load and application behavior of thousands and tens of thousand HTTP/HTTPS and FTP/FTPS clients, each with its own source IP-address. In contrast to other tools curl-loader is using real C-written client protocol stacks, namely, HTTP and FTP stacks of libcurl and TLS/SSL of openssl, and simulates user behavior with support for login and authentication flavors.
The goal of the project is to deliver a powerful and flexible open-source testing solution as a real alternative to Spirent Avalanche and IXIA IxLoad."
(Thanks to Robert Iakobashvili).
Comments (none posted)
DataparkSearch 4.47 released
Stable version 4.47 of DataparkSearch
has been announced.
"
DataparkSearch is an Internet and Intranet search engine tool."
Comments (none posted)
Announcing Plone 3.0-rc1
Version 3.0-rc1 of the Plone web development platform has been released.
"
This is
the first and hopefully last release candidate release beta before
we release Plone 3.0-final.
Since the beta3 release we have been improving migrations from previous
Plone versions and we feel confident that migration is now working
properly. As always third party products can affect upgrades, so make
sure all your products support Plone 3 and follow their upgrade
instructions when upgrading your site to Plone 3.
The user interface has also been cleaned up further, making Plone even
easier to use."
Full Story (comments: none)
Desktop Applications
Audio Applications
New AlsaPlayer releases
New versions of AlsaPlayer - a PCM audio player,
FftScope - a visualization plugin for AlsaPlayer and
python-alsaplayer - the Python bindings for the AlsaPlayer library
have been released.
Full Story (comments: none)
QjackCtl 0.3.0 (unstable-qt4) has been released
Version 0.3.0 of QjackCtl, a GUI control panel for the JACK Audio
Connection Kit, is out.
"
Although the ChageLog doesn't go into many details, there were many
subtle bugs fixed but plenty as more were blindly introduced, as always."
Full Story (comments: none)
Wavebreaker 0.8.1 released
Stable version 0.8.1 of Wavebreaker
is available.
"
This application's purpose in life is to take a wave file and break it up into multiple wave files. It makes a clean break at the correct position to burn the files to an audio cd without any dead air between the tracks. It will only read wave files, so use an appropriate tool to convert ogg, mp3, etc. files and then break them up."
Comments (none posted)
Desktop Environments
GNOME Software Announcements
The following new GNOME software has been announced this week:
You can find more new GNOME software releases at
gnomefiles.org.
Comments (none posted)
KDE Commit-Digest (KDE.News)
The July 15, 2007 edition of the
KDE Commit-Digest has been
announced.
The content summary says:
"
Much work in Amarok, with the implementation of a CoverFlow-esque OpenGL album art visualisation, codenamed "CoverBling", and Service Framework and Plasmification efforts. Sample OpenGL-based applets added to Plasma,, with Plasmoids to watch for changes to files, for browsing files, and to monitor network interfaces. General progress in the 2d projection and KML in Marble, OpenPrinting, and KOrganizer Theming Summer of Code projects..."
Comments (none posted)
KDE Software Announcements
The following new KDE software has been announced this week:
You can find more new KDE software releases at
kde-apps.org.
Comments (none posted)
Xorg Software Announcements
The following new Xorg software has been announced this week:
More information can be found on the
X.Org Foundation wiki.
Comments (none posted)
Electronics
gEDA/gaf development snapshot 1.1.0-20070705 released
Development snapshot 1.1.1-20070708 released of gEDA/gaf, a collection of electronic
CAD tools,
has been announced.
"
The primary focus of this snapshot was to pick
up some important bug fixes."
Comments (none posted)
Financial Applications
GnuCash 2.2.0 released (GnomeDesktop)
The GnuCash development team has
announced GnuCash 2.2.0, the
new stable release of the GnuCash Open Source Accounting Software. This
version runs on Microsoft Windows for the first time, and it also runs on
GNU/Linux, *BSD, Solaris and Mac OSX. Download source code or Windows
binary from
this
SourceForge page or get the source code
from
GnuCash.org.
Comments (3 posted)
Games
Cyphesis 0.5.13 released
Version 0.5.13 of Cyphesis, a server for WorldForge games,
has been announced.
"
Major changes in this version:
The way rules data is handled is now much simpler to make it easier for game designers to create what they want.
Lots of hard coded functionality has been removed from the compiled core program.
Core functionality is now associated with properties and so can be applied to any entity.
Most of Mason has been reimplemented as task scripts which are cleaner and more flexible.
Add more helpful messages when inconsistencies are detected in rule data.
Cyphesis now works more reliably as an autopackage."
Comments (none posted)
Interoperability
Wine 0.9.41 released
Version 0.9.41 of Wine has been
announced.
Changes include:
A number of gdiplus functions, More complete pdh.dll implementation,
Support for MSI remote calls, Messaging support in crypt32.dll and
Lots of bug fixes.
Comments (none posted)
Mail Clients
Mozilla Thunderbird 2.0.0.4 Released (MozillaZine)
MozillaZine
notes the release of Mozilla Thunderbird 2.0.0.4.
"
This update
to the Mozilla Corporation's mail client includes bug fixes but no new
features. For the first time, this release of Thunderbird is available in
Korean.
The Thunderbird 2.0.0.4 section of the Mozilla Foundation Security Advisories
page includes details about the security flaws fixed in this release while
The Rumbling Edge has a complete Thunderbird 2.0.0.4 changelog."
Comments (none posted)
Music Applications
LoopCenter project announced
A new audio application called
LoopCenter has been launched.
"
It
is a live-looping tool with a functionality very similar to the Boss
LoopStation pedal. I use it mainly as a improvisation practice tool, but it
could certainly be used for more compositionally-oriented stuff.
Basically, you can set a tempo, and easily record and overdub small,
measurized segments of audio, and then loop them."
Full Story (comments: none)
Qsynth 0.3.1 (unstable-qt4) released
Version 0.3.1 of Qsynth has been announced.
"
So after the great Qt4 migration, which was almost couple of weeks ago
already, here comes the so-called shallowed bug-fix release of this
"cutie" FluidSynth GUI".
Full Story (comments: none)
Speech Software
eSpeak 1.28 released
Version 1.28 of the
eSpeak
text to speech synthesizer is out with bug fixes and improvements to
Hungarian and Romanian language support.
Comments (none posted)
Web Browsers
Firefox 2.0.0.5 released
Firefox 2.0.0.5 has been
released. The changes are primarily fixes for a new set of
security problems, especially a code execution vulnerability resulting from the interaction of Firefox and Internet Explorer on Windows systems.
Comments (none posted)
Miscellaneous
GraphMonkey 1.7 released
Stable version 1.7 of
GraphMonkey is available.
"
GraphMonkey is a GTK#-based graphing calculator. It uses a simple interface to draw curves.
This software is written in C# with GTK#. The goal is to obtain a very simple and fast graphing calculator for mono. It's cross-platform: it works on GNU/Linux and Windows."
Comments (none posted)
Languages and Tools
Caml
Caml Weekly News
The July 17, 2007 edition of the Caml Weekly News
is out with new Caml language articles.
Full Story (comments: none)
Java
IcedTea 1.1 released
Version 1.1 of IcedTea is out with the stabilization of
Crypto and SSL support.
"
The IcedTea project provides a harness to build the source code from
OpenJDK using Free Software build tools and
provides replacements libraries for the binary plugs with code from the
GNU Classpath project."
Full Story (comments: none)
JSP
Writing Advanced JavaScript (O'ReillyNet)
Howard Feldman
works with JavaScript on O'Reilly.
"
With JavaScript toolkits like YUI and Dojo becoming the de facto method of
adding interactivity to web pages, it's still worth knowing how to implement
this kind of functionality yourself, if for no other reason than to have a
better understanding of what the toolkits do. Howard Feldman shows how to do
a few commonly requested features using nothing but bare JavaScript."
Comments (none posted)
PHP
PHP 4 end of life announcement
The
PHP site has announced the
end of life for PHP 4.
"
Today it is exactly three years ago since PHP 5 has been released. In those three years it has seen many improvements over PHP 4. PHP 5 is fast, stable & production-ready and as PHP 6 is on the way, PHP 4 will be discontinued.
The PHP development team hereby announces that support for PHP 4 will continue until the end of this year only. After 2007-12-31 there will be no more releases of PHP 4.4. We will continue to make critical security fixes available on a case-by-case basis until 2008-08-08. Please use the rest of this year to make your application suitable to run on PHP 5."
Comments (none posted)
Python
Python-URL! - weekly Python news and links
The July 16, 2007 edition of the Python-URL! is online with
a new collection of Python article links.
Full Story (comments: none)
Tcl/Tk
Tcl-URL! - weekly Tcl news and links
The July 17, 2007 edition of the Tcl-URL! is online with new
Tcl/Tk articles and resources.
Full Story (comments: none)
Editors
Multi Stream Editor 2.02 released
Stable version 2.02 of Multi Stream Editor
has been announced.
"
The multi stream editor (mse) can perform basic text transformations on an input stream. It in some ways is similar to another stream editors (sed, awk) but it can process binary data as well as text. Its creation was inspired by SIL (Summer Institute of Linguistics) CC (Consistent Changes) program."
Comments (none posted)
Profilers
OProfile 0.9.3 released
Alpha version 0.9.3 of
OProfile is out.
"
This release has support for a number of new processor implementations, as well as several new features and bug fixes."
See the
release notes for more information.
Comments (none posted)
Page editor: Forrest Cook
Next page: Linux in the news>>