Did you know: All GDI apps render slower under Win7?


Recommended Posts

That would imply that no single driver release for the past year, either from NVIDIA or AMD, have proper ION or Radeon 4250M support for Windows 7....

Not implying anything of the sort. What I am implying is that sometimes drivers are buggy. It happens. This system that I'm currently sitting at is using an old ATI HD 3850 AGP, and last month's drivers caused a couple issues, rolling back to the version from the month before took care of it. Hence.. "driver issues".

ahhh this is why windows just didnt feel fluid enough. tried going back to winxp and i can confirm this result. IPS screens additionally produce some input lag combined with this it feels we went behind in terms of fluidity of gui experience over last 7-8 years.. not to flare things up but damn that was a total waste of time th last decade trying out different windows versions, upgrading to IPS screens etc when everything works great with old tech.!!!

quoting from the OP "On the other hand, not using DWM will free up a lot of CPU resources. But still not enough to make GDI render operations as fast and responsive as Windows XP, as XP has more CPU free to do other tasks."

ok got my answer :)

Lol what? That is from a Windows 7 WinHEC presentation which simply says Direct2D will replace GDI for new apps which it has already. Doesn't mean all GDI apps will transform themselves into Direct2D apps without developers rewriting them. GDI is deprecated as of Windows 7 (2009) because WPF was a managed code platform meaning all native code apps written from the beginning of Windows to 2009 and the dozens being written today still use GDI.

Sorry, try again.

Since GDI is an API, the back-end is not important to developers using it. If it was migrated to be a thin layer above DirectX, all existing GDI apps would "just work", just like all GDI apps written for XP "just work" when ran on Vista/7 even though the GDI isn't hardware-accelerated any more. Look at the patent I mentioned, it's pretty explicit : redirecting calls from one API to another one, in the context of graphics rendering.

Also, WPF has nothing to do with this. The successor of GDI is DirectX and its new set of APIs introduced in Win7 and backported to Vista such as Direct2D and DirectWrite, WPF is just a managed framework to develop hardware-accelerated apps.

The idea of abandonning GDI is not new ; in your beloved XP, Windows Explorer's right pane (the one with collapsible regions showing possible actions) is done using DirectUI, an undocumented proprietary framework from Microsoft (which uses XML files, making it a WPF predecessor for native code) that is hardware-accelerated and doesn't use the GDI at all.

i dont care about whats going on underneath. But i always thought this white black mess when we resize was present in every windows to date :p

i didnt realise it was not in XP.

Now i think about it. Was the design team sleeping? First those OLD icons... they bug me to death. And also this.

I never actually see this unless i drag my explorer window and there u can see a black and a white box next to the search bar. I mentioned it before somewhere. And its really annoying. I dont understand why is this not fixed. As it was there in Vista. And i havent tried to see if its there in Win8. Can anybody test?

Since GDI is an API, the back-end is not important to developers using it. If it was migrated to be a thin layer above DirectX, all existing GDI apps would "just work", just like all GDI apps written for XP "just work" when ran on Vista/7 even though the GDI isn't hardware-accelerated any more. Look at the patent I mentioned, it's pretty explicit : redirecting calls from one API to another one, in the context of graphics rendering.

Also, WPF has nothing to do with this. The successor of GDI is DirectX and its new set of APIs introduced in Win7 and backported to Vista such as Direct2D and DirectWrite, WPF is just a managed framework to develop hardware-accelerated apps.

The idea of abandonning GDI is not new ; in your beloved XP, Windows Explorer's right pane (the one with collapsible regions showing possible actions) is done using DirectUI, an undocumented proprietary framework from Microsoft (which uses XML files, making it a WPF predecessor for native code) that is hardware-accelerated and doesn't use the GDI at all.

Yeah but what's the use of DirectUI if its not publicly documented? There's also Milcore (the undocumented native code rendered for WPF). I mentioned WPF because Microsoft's original vision was to replace GDI with the hardware accelerated Avalon stack and it pretty much does everything Direct2D does and more but being managed code, it didn't see and will never see as much uptake by developers. So MS basically introduced a version of Windows after XP without a proper GDI replacement. It was only in Windows 7 that Direct2D was born and it's only been 2 years after that. Developers aren't going to start Direct2D apps overnight abandoning all their customers on XP. There are like 99% GDI apps and 1% Direct2D apps. GDI is going to be around forever for backward compatibility and there are always going to be more GDI apps than Direct2D apps for a long time which is why Microsoft should take the effort to accelerate all of the GDI functions in WDDM drivers. It will be a very long time before we see apps that are all using Direct2D. And Explorer's left pane uses DirectUI (the Task Pane), not the right pane.

The most important operations are GPU accelerated, but if performance is more important, then they could use Direct2D/Direct3D on Vista/7, and Direct3D on old OSs like XP or 2K (e.g. Firefox renders all web page content on the CPU, and composites it on the GPU on 2K and XP)

GDI is a deprecated technology, so MS isn't going to spend time improving it for old applications.

Yeah but what's the use of DirectUI if its not publicly documented? There's also Milcore (the undocumented native code rendered for WPF). I mentioned WPF because Microsoft's original vision was to replace GDI with the hardware accelerated Avalon stack and it pretty much does everything Direct2D does and more but being managed code, it didn't see and will never see as much uptake by developers. So MS basically introduced a version of Windows after XP without a proper GDI replacement. It was only in Windows 7 that Direct2D was born and it's only been 2 years after that. Developers aren't going to start Direct2D apps overnight abandoning all their customers on XP. There are like 99% GDI apps and 1% Direct2D apps. GDI is going to be around forever for backward compatibility and there are always going to be more GDI apps than Direct2D apps for a long time which is why Microsoft should take the effort to accelerate all of the GDI functions in WDDM drivers. It will be a very long time before we see apps that are all using Direct2D. And Explorer's left pane uses DirectUI (the Task Pane), not the right pane.

For the last time: GDI can and will be rewritten as a layer above DirectX, thus hardware-accelerating all existing GDI apps without the need to create a new version of WDDM whose point would be backward-compatibility.

Why can't you understand that? You're asking Microsoft to do something they already plan to do, in a way that would be much worse (adding backwards compatibility to WDDM...).

Microsoft's plans for the future include moving to a fully managed OS (Midori), and using virtualization to run older apps. Which implies having the least possible amount of code to virtualize, which implies rewriting old stuff as thin, lightweight layers above the new stuff instead of keeping and maintaining old code.

(PS: Yes, I mean the left pane, not the right one, sorry)

For the last time: GDI can and will be rewritten as a layer above DirectX, thus hardware-accelerating all existing GDI apps without the need to create a new version of WDDM whose point would be backward-compatibility.

Why can't you understand that? You're asking Microsoft to do something they already plan to do, in a way that would be much worse (adding backwards compatibility to WDDM...).

Microsoft's plans for the future include moving to a fully managed OS (Midori), and using virtualization to run older apps. Which implies having the least possible amount of code to virtualize, which implies rewriting old stuff as thin, lightweight layers above the new stuff instead of keeping and maintaining old code.

(PS: Yes, I mean the left pane, not the right one, sorry)

please drop me a line when its done, right now going back to xp feels like a breath of fresh air. seriously drop me a pm when this gets done win7 is great too but ill be on xp for the while. cheers.

For the last time: GDI can and will be rewritten as a layer above DirectX, thus hardware-accelerating all existing GDI apps without the need to create a new version of WDDM whose point would be backward-compatibility.

Why can't you understand that? You're asking Microsoft to do something they already plan to do, in a way that would be much worse (adding backwards compatibility to WDDM...).

Microsoft's plans for the future include moving to a fully managed OS (Midori), and using virtualization to run older apps. Which implies having the least possible amount of code to virtualize, which implies rewriting old stuff as thin, lightweight layers above the new stuff instead of keeping and maintaining old code.

(PS: Yes, I mean the left pane, not the right one, sorry)

Question to ask is why hasn't this been done in 7?

Second question is will this be in Windows 8?

Assuming good design, testing, and optimization, this should speed up my netbook by a large constant factor.

For the last time: GDI can and will be rewritten as a layer above DirectX, thus hardware-accelerating all existing GDI apps without the need to create a new version of WDDM whose point would be backward-compatibility.

Why can't you understand that? You're asking Microsoft to do something they already plan to do, in a way that would be much worse (adding backwards compatibility to WDDM...).

Microsoft's plans for the future include moving to a fully managed OS (Midori), and using virtualization to run older apps. Which implies having the least possible amount of code to virtualize, which implies rewriting old stuff as thin, lightweight layers above the new stuff instead of keeping and maintaining old code.

(PS: Yes, I mean the left pane, not the right one, sorry)

There is nothing that says in the patent or PPT slide that clearly says it applies to versions of Windows later than Windows 7, in fact the patent and the PPT are from 2009. Neither has MS officially written anything on this, MSDN or elsewhere. Why can't you understand that unless you work on the graphics team in Windows and speak for Microsoft, saying "it will return" is only wishful thinking. I will believe it when I see it working in a future release. Information released at //Build/ about WDDM 1.2 doesn't mention it either though I would be glad to have been proven wrong if MS surprises by announcing full GDI acceleration is returning in Windows 8. Future/planned concepts does not always end up in shipping products.

I remember in the windows 7 beta, they talked a lot (internally) about GDI calls being redirected in DWM as an accelerated function of Direct2D... not everything was transitioned to this but a lot of it was, we had performance tests and everything to test out to make sure it was working at full speed

Making GDI run on top of Direct2D probably wouldn't work that well, it's an really old API and probably has a bunch of corner cases were the behavior differs from Direct2D, and implementing code to special case those issues would slow any re-implementation down.

But again, GDI is old, why would MS spend time fixing and enhancing it, when they've replaced with with Direct2D?

Making GDI run on top of Direct2D probably wouldn't work that well, it's an really old API and probably has a bunch of corner cases were the behavior differs from Direct2D, and implementing code to special case those issues would slow any re-implementation down.

But again, GDI is old, why would MS spend time fixing and enhancing it, when they've replaced with with Direct2D?

because even to this day people are still writing code in GDI and GDI+, until I can go into .NET and say make a new brush and a rectangle with a texture fill brush in Driect2D without having ti reference Direct2D people will use GDI+ you have to write wrappers that force all those calls through Direct2D almost every windows control is written in GDI or GDI+ very few are written in Direct2D even to this day

Question to ask is why hasn't this been done in 7?

Second question is will this be in Windows 8?

Assuming good design, testing, and optimization, this should speed up my netbook by a large constant factor.

That's a good question. I don't know the answer, of course, but I think we can assume that all of these "why don't they optimize feature X" questions have the same answer - they had more important stuff to do.

Seriously, when was the last time you noticed a big slowdown because of GDI being software-powered?

@neufuse: Are you talking about WPF or WinForms? WinForms is a layer above GDI, but you should be able to do this kind of stuff in WPF.

because even to this day people are still writing code in GDI and GDI+, until I can go into .NET and say make a new brush and a rectangle with a texture fill brush in Driect2D without having ti reference Direct2D people will use GDI+ you have to write wrappers that force all those calls through Direct2D almost every windows control is written in GDI or GDI+ very few are written in Direct2D even to this day

Or, you could just use WPF with NET, seeing as it's visual stack uses DirectX, and all DIrect2D does is map itself on to DirectX / Direct3D anyway :p Unfortunately, it shows that it's building on DirectX - the amount of code you need just to get a Direct2D Windows up and running is nearly the same as a DirectX / Direct3D Window - though Microsoft do seem to be pushing .NET more anyway, and that's the life of trying to code native Windows applications. Hassle.

Or, you could just use WPF with NET, seeing as it's visual stack uses DirectX, and all DIrect2D does is map itself on to DirectX / Direct3D anyway :p Unfortunately, it shows that it's building on DirectX - the amount of code you need just to get a Direct2D Windows up and running is nearly the same as a DirectX / Direct3D Window - though Microsoft do seem to be pushing .NET more anyway, and that's the life of trying to code native Windows applications. Hassle.

you COULD use WPF, but that still leaves all the MFC coders, the Win32 coders out in land of generally using GDI... and .NET coders generally use the forms based development approach not WPF, until MS says forms is dead and WPF is the standard this isn't going to change... we still use forms where I work, because its what we've done for ever, and when you work in the IDE the forms approach just seems easier, WPF has a lot of stuff that needs worked on still in the IDE to make it perfect for visual development

@neufuse: Are you talking about WPF or WinForms? WinForms is a layer above GDI, but you should be able to do this kind of stuff in WPF.

Forms, yes.. the most commonly used development method, WPF is slowly growing but its no where near forms, and doesn't have as many 3rd party controls premade for it either... although Devexpress is making some inroads on that though

you COULD use WPF, but that still leaves all the MFC coders, the Win32 coders out in land of generally using GDI... and .NET coders generally use the forms based development approach not WPF, until MS says forms is dead and WPF is the standard this isn't going to change... we still use forms where I work, because its what we've done for ever, and when you work in the IDE the forms approach just seems easier, WPF has a lot of stuff that needs worked on still in the IDE to make it perfect for visual development

Using Visual Studio to create WPF interfaces is a pain for sure... using Microsoft Expression Blend though and it's much closer to a joy :p Shame they don't appear to be doing much too update WPF though. With all these massive performance enchancements they do to browser engines these days, you'd think they'd go in and try to do something similar with the .NET framework. Aww well.

I dunno, I've had a pretty easy time with it in C++.

That's because it's written in C++ lol. Why do you think I said C, and not C/C++. Using any of the Direct* interfaces in C is horrible because they all use COM.

Very well documented on MSDN. Plus you can mix and match GDI with Direct2D, also well documented on MSDN. Of course there's a learning curve, always is with the new and improved API's.

I'm sorry but nothing will ever get me to use COM or the Direct* interfaces. At least the GDI and Win32 interfaces are C friendly, COM and Direct2D by relation most certainly aren't.

because even to this day people are still writing code in GDI and GDI+, until I can go into .NET and say make a new brush and a rectangle with a texture fill brush in Driect2D without having ti reference Direct2D people will use GDI+ you have to write wrappers that force all those calls through Direct2D almost every windows control is written in GDI or GDI+ very few are written in Direct2D even to this day

GDI+ isn't a layer on top of GDI or such, it's a different engine entirely (GDI+ runs entirely in software, which is why you can use it on 9x and such). But even then you still have to reference GDI+ to use it in .NET apps (Through System.Drawing)

And while the normal Windows controls use GDI, that doesn't mean programs have to (Look at Firefox, the entire UI is drawn through Direct3D), and eople who care about performance aren't going to be animating buttons and text boxes (and those who do care about performance and are still using GDI for some reason, would most likely be using Direct3D or such to composite it to save re-rendering)

That's because it's written in C++ lol. Why do you think I said C, and not C/C++. Using any of the Direct* interfaces in C is horrible because they all use COM. I'm sorry but nothing will ever get me to use COM or the Direct* interfaces. At least the GDI and Win32 interfaces are C friendly, COM and Direct2D by relation most certainly aren't.

So you're refusing to use the official API's provided to access these systems, never mind ignoring the tools that the platform was written in to begin with, then going to cry about how hard it is to use? Yea, that makes sense. :argh:

So you're refusing to use the official API's provided to access these systems, never mind ignoring the tools that the platform was written in to begin with, then going to cry about how hard it is to use? Yea, that makes sense. :argh:

What?? GDI and the Win32 API's are official. The Direct*D API's are not a requirement to build Windows GUI's. You do know that right?

This topic is now closed to further replies.
  • Posts

    • Yup, that's a doozy right there 😄
    • It's a bundle of tools created by a variety of people, so things can go wrong sometimes. It's a great addition to Windows, and I use a lot of the tools on a daily basis. Also, it's still a 0.**** release so quick updates are to be expected 😉
    • Oh, I did. And it's even worse than I was hoping! Besides a lot of techno-babble jargon (yes I understand 100% of it but it's still all just techno-babble) there's 2 key points that make me super-weary about even considering testing this out. -- By default, after installation, a relay is automatically set up, so you do not need to care about that. * Non-chatmail apps use email servers as a long-term message archive while chatmail clients use email servers for ephemeral instant message relay. * Supporting the full variety of classic email setups would require considerable development and maintenance efforts, and complicate making chatmail-based messaging more resilient, reliable and fast. -- Basically, the end-user device is the 'server' (relay) so there is NO ARCHIVING whatsoever because every message is necessarily ephemeral. Great for techno-paranoia (and for illicit activities preferring no tracks to cover) but terrible for everybody else. It's also ironically contradictory to engineering principles of redundancies besides the transport layers due to the explicit absence of any persistent storage. Instead of 'classic email address' retaining multi-GB messaging archives on its server, now every device must retain 100% of those storage demands. (Email messages were originally meant to be short correspondences, not the multi-MB attachments boondoggle that now exists with unlimited spam engines flooding every potential recipient.) Any device swap or reset (or loss) makes the entire message history go bye-bye forever... lest there's an off-device auto-archival "relay" mechanism that's really a separate server that holds onto all transported messages (an email server) that utilizes 'chatmail email address' identities (like an email server) and its own persistent storage archive (like an email server). But... this solution is hoping to exist alongside real-world email address identities (based on the email server relay pathway) but simply render messages in chat thread format in an ephemeral manner (with contents being encrypted, and messages auto-expiring) ... In the end, it's a chat app/experience for the Web3/P2P-at-all-costs zealots. (I have accts on all sorts of federated web3 services so I understand the technical and non-technical alike.) For any practical users, however, it's just another service to download/install, register, cross-share id cards/qr codes, but know that there's no history/archive whatsoever (by design) so no account/message recovery whatsoever... update the device, install a bummed update patch, or dare upgrade your device... all history, poof, gone. Ya gotta start everything over again like they're a brand new person.
    • You've tried DuckDuckGo and Brave Search, now get serious with SearXNG by Paul Hill Over the last decade, it has become quite trendy to dump Google Search in favor of privacy-preserving alternatives such as DuckDuckGo, Startpage, and Brave Search. These search engines have done a very good job at highlighting dodgy practices by Google, such as adjusting search results based on what it thinks you’ll like (filter bubble) and stalking you around the web to advertise to you. While these search engines are good starting points when compared to non-private services like Google, there are still quite a few issues with them. For example, both DuckDuckGo and Brave Search require running non-free JavaScript in your web browser, which is comparable to running proprietary software on your computer, meaning you can be sure about what it’s actually doing in the background. Another issue is that these search engines are hosted on the respective companies’ servers, and you are using a service that you don’t control. Finally, DuckDuckGo, while offering privacy features, relies heavily on Microsoft’s infrastructure for its results and, in the past, has permitted Microsoft tracking scripts. If you are looking for a more private search solution than DuckDuckGo, Brave Search, and Startpage, then I recommend taking a look at SearXNG. It is a privacy-respecting metasearch engine that can be used via different public instances, which is useful for mobile users, or you can install it on your computer or server and run it locally with maximum control. Unlike Google, Bing, or Brave Search, which crawl the web and have their own search indexes, SearXNG is a metasearch engine, meaning it taps other search engines, stripping your identifying data, such as IP address, user agent, and cookies, in the process. Your search query is sent to the other search engines you enable before aggregating the results. SearXNG has deployment flexibility. If you are a casual user or a mobile user and don’t want to run SearXNG locally, you can use a public instance that is hosted by someone else. The main problem with this is that you are putting trust in the maintainer of the instance regarding stuff like logs that they may keep; good hosts should have a privacy policy explaining their policies. If you are trying to use SearXNG, you can also install the software on your device and then head to 127.0.0.1:8080 in your browser and search from there. While you don’t have to worry about a third-party admin like the public instances, search engines could ultimately block your IP address if they frown on you pulling in their search results locally. If you want to run it locally, it’s a good idea to use proxies or VPNs to hide your actual IP. You don’t have to worry about this with a public instance, as search engines never see your IP address. The main privacy benefit of using SearXNG is that it isolates your identity from the underlying engines that it’s capable of searching, such as Google and Bing. These search engines will only see requests coming from a generic server, so they can’t profile you and create a bubble filter that influences what results you see. This also ensures that your search engine doesn’t turn into an echo chamber that prevents you from reading alternative points of view. As a free software project, you are allowed to inspect SearXNG to make sure there are no negative features bundled inside. This sets it apart from the privacy search engines mentioned earlier because you can’t check their source code. As a meta search engine, you are not restricted to getting results from one source. Due to the fact that it scrapes content from other websites, your SearXNG instance will periodically get blocked from different providers, so it’s good to select a range of sources as a backup. While enabling all of the services will give you great results, this can make searching slower. I am personally happy with slower searches for the best results, but you can always check which providers are slowing down your search from the search results page and disable them to speed things up. If you want decent results quickly, enable the main search providers such as Google, Brave, DuckDuckGo, Qwant, Bing, and Yahoo. This way, you get wide coverage without the latency. On the Engines tab in Preferences, do note that there are different tabs, such as General, Images, and Videos, with their own providers that can be toggled and are not covered by "Enable all" while on the General tab, so be sure to dig into each. Just a note, if you want to enable everything, press "Enable all" in one tab, then hit save at the bottom of the page, then do the next tab, and so on. If you press "Enable all", then do that in each tab, and then save, nothing will stick. When I had just some of the search engines enabled, I searched “define nefarious” and results came back with the definition of “define” - obviously that was a sucky result. However, when I had everything enabled, it found dictionary pages for the word “nefarious” and even had an inline definition on the sidebar, which is quite nice too - that was delivered by WolframAlpha for anyone wondering! Probably the worst thing about this meta search engine is that the engines you select are saved with a cookie, so you must enable them on every new device you use SearXNG on, including if you decide to go into incognito mode with your web browser. Honestly, I would say this is the most annoying aspect, and perhaps if your browser lets you choose a separate private browsing search engine, then it would be best to use DuckDuckGo for this portion of your browsing. Another weakness of SearXNG is the random blocking of it by search providers. When you are on the results page, expand the “Response time” box, and it will show things like “Suspended: too many requests” or “access denied”. This is why it is good to enable several providers so that there is always a fallback to get results from. I won’t pretend SearXNG will be for everyone, however, if you enable all of the providers and put up with the slower response time, the results can be really amazing. Even if you don’t want to use it as your daily driver, keeping a bookmark handy that links to it is a good idea if you ever feel like doing a deep dive into a niche topic where other search engines are just failing to bring up any good result, due to the amount of sources it looks on. If you’re interested in radical user control over the software you use, installing SearXNG locally can also be a good idea, but be prepared to be temporarily blocked from sites if you trigger bot sensors without a VPN. Personally, I’ve opted to use a public instance, rather than install it myself. If you want to use it via a public instance, head over to searx.space to find a provider. Let us know in the comments if you have used SearXNG or its predecessor, Searx. What do you think about the quality of the results?
    • Dear Neowin, If it is not too much trouble, can you start using the new-ish designations for Insider Preview? "Experimental" is different than "former Dev" as it can apply to different models, eg 26H1 or 26H2 etc, right? No need to seed confusion IMHO. And, please "finally" update your graphics. OK?
  • Recent Achievements

    • Week One Done
      flexorcist earned a badge
      Week One Done
    • One Month Later
      Woland13 earned a badge
      One Month Later
    • Week One Done
      Woland13 earned a badge
      Week One Done
    • One Year In
      bernmeister earned a badge
      One Year In
    • Week One Done
      Scoobystu earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      503
    2. 2
      +Edouard
      226
    3. 3
      PsYcHoKiLLa
      158
    4. 4
      Steven P.
      75
    5. 5
      FloatingFatMan
      71
  • Tell a friend

    Love Neowin? Tell a friend!