Apple display hardware support: Supported or not?



  • Yes, this is a WTF.

    I've got an iBook G4. Been upgraded to 10.5. System profiler tells me that "Core Image" has hardware acceleration, and that Quartz Extreme is supported. All is well. Graphics card is a 9550 -- Mobility Radeon 9550, specifically. Everything I've read says that 9500 and up is good for games.

    One day I try to play a game that uses 3d graphics with Java OpenGL. Apple does their own Java releases, to make sure that the libraries play nice with their display system. All good, right?

    But it runs pathetically slowly. Eventually, trying to track this down, I find out about "Quartz Debug", the developer tool for testing the display stuff.

    Which tells me that Quartz GL is not supported.

    So what's the WTF?

    1. How are you supposed to know what does and does not work on a system?

    2. Apple controls the hardware, and the software, and still can't get it to play together?



  • 1. The game [i]does[/i] work

    2. The game works

    So I guess you're saying the WTF is that your low-end, 5 year old laptop is slow?


  • Discourse touched me in a no-no place

     9550 is actually below the 9500 in the performance stakes if I remember that point in graphics history correctly.



  • @savar said:

    So I guess you're saying the WTF is that your low-end, 5 year old laptop is slow?
     

    No, more like: A game that was designed to take a low-end, basic graphics card, not using any high-end technology, that is itself about 2 or three years old, didn't work fast enough on the machine. That my 5 year old laptop is only a G4 at 1.42 is a known factor. It's not a G5. It's not a dual-core at 2.0. But it is supposed to have a video card with hardware graphics acceleration, right?

    The WTF is that one company, whose motto is that a single vendor controlling the hardware and software will make it work better than a random set of hardware vendors, controls the display hardware and software, has no way to change the card, and aside from a developer's tool provides no indication to the end user that a seemingly basic feature isn't supported.

    Maybe it's like a company that insists that a certain motherboard graphics chipset is good enough to run an upcoming program, only to find out later that it only runs the slower, less graphical version of that program.

    As the next poster pointed out, the higher numbered card -- 9550 -- is less than the 9500 -- so again, how is a user supposed to tell what a machine can or cannot do?



  • No it's not a WTF, you just have no idea what you're looking at. Quartz GL is 2D acceleration of the Quartz Compositor. It is a developer-only feature that used to be known as Quartz Extreme. It has nothing to do with 3D.



  • @teqman said:

    No it's not a WTF, you just have no idea what you're looking at. Quartz GL is 2D acceleration of the Quartz Compositor. It is a developer-only feature that used to be known as Quartz Extreme. It has nothing to do with 3D.
     

    Fair enough. So a feature now known as "Quartz Extreme" is supported, but a feature previously known as "Quartz Extreme" is not. And something that sounds like Quartz support of Open GL isn't.

    That about right?



  • There was never a supported feature known as Quartz Extreme. Quartz Extreme was the old name for Quartz GL, a technology which has never been supported outside of testing with the Quartz Debug app.

    Open GL exists at a level below Quartz; in fact, Quartz uses Open GL sometimes. This is exactly what Quartz GL is, accelerating Quartz composition through Open GL.

    Anyway, Open GL has always been supported on OS X -- the library is called AGL. Quartz GL is a completely, totally unrelated technology.



  • But you want serious performance with Java OpenGL?



  • @mrprogguy said:

    But you want serious performance with Java OpenGL?

    But you want serious performance with Java?



  • @Daid said:

    But you want serious performance with Java?
     

    Yes

     Furthermore, the OpenGL is probably implemented as native code (I don't think it's possible in any other way) so the performance loss from the link to java shoudl be marginal.



  • @Keybounce said:

    Graphics card is a 9550 -- Mobility Radeon 9550, specifically. Everything I've read says that 9500 and up is good for games.

    Exact names are critical here: a "Mobility Radeon 9550" is not a "Radeon 9550": it's clocked about 20% slower, and it may have a 64-bit memory bus where a 9550 always has a 128-bit bus. Compared to a 9500, your GPU is clocked about 30% slower, and only has two vertex shaders where a 9500 has four.



  • The other thing to realize is that Apple probably did minimal testing for OS X 10.5 on your 5 year old hardware. They do much more extensive testing on newer hardware (mainly because they can call up production and say "Send me 58 MacBooks for testing purposes and be quick about it.") That's a little harder to do for a G4 laptop, these days. Unless they hang out on eBay or Craigslist with the corporate Amex card...

    I think the extent of the testing they did (if any) on your hardware was:

    • Does the OS boot?
    • Can you run (albeit slowly) the iLife apps?
    • Good enough, ship it.


  • @dtech said:

    @Daid said:

    But you want serious performance with Java?
     

    Yes

     

     Running those benchmarks myself, I find that they tell quite a different story if you turn on -O3 instead of -O2.  The java VM has the advantage of runtime bytecode analysis to speed up execution.  C++ doesn't have that advantage at runtime, but -O3 enables optimizations that speed up some of those benchmarks by more than 50% (in my informal testing), making them much faster than the Java benchmarks.

    For example,  the fibonacci test:

    $ time java -server -cp java fibo 45
    1836311903

    real    0m15.372s
    user   0m15.266s
    sys    0m0.048s
    $ time java -cp java fibo 45
    1836311903

    real    0m15.242s
    user   0m15.170s
    sys    0m0.055s
    $ time cpp/fibo-o2 45
    1836311903

    real    0m21.329s
    user   0m21.248s
    sys    0m0.036s
    $ time cpp/fibo-o3 45
    1836311903

    real    0m8.758s
    user   0m8.745s
    sys   0m0.009s

    In other words, going from -O2 to -O3 makes the benchmark go from "solidly in Java's favor" to "solidly in C++'s favor".  Java isn't always slow, but it's not necessarily faster than C or C++.



  • @Heron said:

     Running those benchmarks myself, I find that they tell quite a different story if you turn on -O3 instead of -O2.
    I don't, and it's an example of why O3 is not usually recommended:

    $ g++ cpp/fibo.cpp -O2 -o cpp/fibo-o2

    $ g++ cpp/fibo.cpp -O3 -o cpp/fibo-o3

    $ javac java/fibo.java

    $ time cpp/fibo-o2 45
    1836311903

    real    0m36.287s
    user    0m37.499s
    sys     0m0.000s

    $ time cpp/fibo-o3 45
    1836311903

    real    0m36.414s
    user    0m36.733s
    sys     0m0.015s

    $ time java -cp java fibo 45
    1836311903

    real    0m19.402s
    user    0m0.015s
    sys     0m0.031s


    @Heron said:

    Java isn't always slow, but it's not necessarily faster than C or C++.
    Agreed, but the converse is also true.



  • I normally add -fomit-frame-pointer when compiling a release build of something.



    compiling my own (g++ 3.4.5)

    g++ -O2: 45 seconds

    g++ -O2 -fomit-frame-pointer: 34 seconds

    Java 1.6.0.7: 24 seconds



    -O3 made no difference.



    However, I've never seen a non-trivial Java program that performed anywhere near as well as its C/C++ competition. Look at Azureus/Vuze vs utorrent for example. Maybe part of it's the coding style that Java encourages. But I've also never gotten good GUI responsiveness out of a Java program, no matter how simple.



  •  I compiled it with -O2 or -O3, -fomit-frame-pointer and -march=nocona.  I'm on a 64-bit system.  Some variance is to be expected ;)



  • So what is with apple's technology and naming???

    @teqman said:

    There was never a supported feature known as Quartz Extreme. Quartz Extreme was the old name for Quartz GL, a technology which has never been supported outside of testing with the Quartz Debug app.

    Open GL exists at a level below Quartz; in fact, Quartz uses Open GL sometimes. This is exactly what Quartz GL is, accelerating Quartz composition through Open GL.

    Anyway, Open GL has always been supported on OS X -- the library is called AGL. Quartz GL is a completely, totally unrelated technology.

     

    Alright, can you explain the following then?

    1. System Profiler reports that Quartz Extreme is supported.

    2. The Mac os X server tech page ( http://www.apple.com/server/macosx/specs.html ) lists quartz extreme as one of the supported technologies.

    3. Wikipedia reports this about quartz extreme:

    Mac OS X v10.2
    introduced Quartz Extreme: graphics processor (GPU) acceleration for
    the Quartz Compositor. With Quartz Extreme, no central processor (CPU)
    cycles are utilized for scene composition. Quartz Compositor runs using
    the graphics processor (GPU) by encapsulating each rendered backing
    store in an OpenGL texture map or surface. The GPU then composes the
    surfaces and maps to provide the final image, which is delivered to its
    frame buffer.

    4. Ars Technica has a detailed look at the video system from 10.0 to 10.4, and they discuss in detail what Quartz 2d Extreme is doing. Effectively, the entire video drawing system is turned into graphic card commands, and the video ram, not the computer ram, is the backing store. They add

    There's one final barrier to hardware-accelerated bliss. Quartz 2D
    Extreme is disabled by default in Mac OS X 10.4.0. That's right, the
    whiz-bang new technology you just read all about is not actually used
    in Tiger unless it's explicitly enabled using the Quartz Debug
    application. Even then, it only applies to applications that are
    launched after it was turned on. It also appears that Q2DE is
    re-disabled when you quit the Quartz Debug application.

    Why develop something as impressive as Quartz 2D Extreme and then leave it turned off by default? My inquiries to Apple have gone unanswered, so I can only speculate about the reasoning behind this decision. My best guess is that all of the bugs could not be excised from Q2DE in time for Tiger's launch date, and that it will be enabled by default in a subsequent update—perhaps as early as version 10.4.1.

    5. Finally, wikipedia says

    As of Mac OS X v10.5 Quartz 2D Extreme has been renamed to QuartzGL - however it still remains disabled by default.

    Now, clearly I was wrong to thing that QuartzGL had anything to do with open GL -- it is a 2d acceleration, not a 3d acceleration. And apparently that 9550 that I have is a slower 9550 than other 9550's. 

    So as I asked in the first post,

    1. How are you supposed to know what does and does not work on a system?

    2. Apple controls the hardware, and the software, and still can't get it to play together?

     



  • @dtech said:

    @Daid said:

    But you want serious performance with Java?
     

    Yes

    Given how Java is designed and implemented, any time Java outperforms C or C++, one can be certain there's either something wrong with the C or C++ version of the program or something wrong with the C or C++ compiler.  Likewise, any time Perl, Python, or Ruby outperforms C or C++, one can be certain of something being wrong with either the C/C++ version or compiler.

    That having been said, it is impressive how much Java has improved since its version 1.0 days.  I'd still prefer to work with Perl, Python, or Ruby.



  • @teqman said:

    There was never a supported feature known as Quartz Extreme. Quartz Extreme was the old name for Quartz GL, a technology which has never been supported outside of testing with the Quartz Debug app.

    That's not right.

    Quartz is the name for pretty much the whole 2D graphics subsystem

    Quartz Extreme is hardware acceleration for window compositing.

    Quartz GL is hardware acceleration for 2D shape drawing. This used to be called Quartz 2D Extreme, but that name was too similar to Quartz Extreme so it was changed.

    None of them are related to 3D graphics performance.

    So where the misunderstanding came from was someone assumed that [b]Quartz Extreme[/b] and [b]Quartz 2D Extreme[/b] were the same thing. They're completely not. That's why the latter was renamed, because of this confusion. You appear to have support for Quartz Extreme, but not Quartz GL (née Quartz 2D Extreme).


Log in to reply
 

Looks like your connection to What the Daily WTF? was lost, please wait while we try to reconnect.