> The PS2 was certainly not very similar to OpenGL (very low-level stuff),
Exactly. You'd fill this big "command buffer" and DMA it to the GS. You would never (directly) set GPU registers in OpenGL -- the driver would be doing that for you.
> but I remember the PS3's libgcm being somewhat similar to earlier OpenGL versions, although the SPUs made it much more challenging, and the focus on the command buffer was a bit different
That's true, that libgcm definitely was much more "aligned" with OpenGL; Sony always had NIH syndrome.
> The Gamecube was much more similar to OpenGL than Sony's libraries from what I recall, and much easier to use.
Yup! Same with the Wii -- which was literally a Gamecube overclocked 2x. The Wii's GPU (Hollywood) had the _exact_ same hardware bugs as the Gamecube's GPU (Flipper) for crying out loud !:-)
The Wii's GX library was a joy to use compared to the low level PS2 register bit twiddling.
> Nintendo has historically used a customized version of OpenGL for their APIs, as has Sony
Please stop spreading that mis-information.
I shipped a couple Wii games and wrote an OpenGL wrapper. Nintendo's GX rendering library definitely was heavily OpenGL _inspired_ but it was not OpenGL.
I've also shipped PSX and PS2 games. At that same Wii job we also had an OpenGL wrapper for the PS2. Sony's sce*() calls for the Sony's PSX and PS2 was never OpenGL inspired.
I linked to second trivial case, which in practice tends to show up time and time again in typical game code, using member bools where C++ compilers fall completely over.
Compilers have a very narrow range where they are very good. Outside that domain, they suck at generating optimal code.
As I say there are 3 levels of optimizations:
1. Micro-optimization aka bit twiddling 2. Algorithm optimization 3. Data-flow optimization. Data Orientation Design focusing on the common (multiple) case, not the uncommon (single) case, and optimizing for throughput, not latency.
1. Naive use of algorithms and OOP without understanding the data flow will always be slower then understanding and optimizing for the (data) cache usage.
Mike demonstrates a simple example where a bool member flag is used as a test. MSVC does a horrible job at O2; Clang does a much better job, but still crappy. (Note: Using a different compiler backend on MSVC wasn't even an option until recently.)
Even a more slightly more complicated example blows up:
struct Foo {
bool m_NeedParentUpdate;
int Bar( int count );
int Baz( int count ); };
int Foo::Bar( int count ) {
int value = 0;
for( int i=0; i < count; i++ )
{
if( m_NeedParentUpdate )
{
value++;
}
}
return value; }
int Foo::Baz( int count ) {
int value = 0;
for( int i=0; i < count; i++ )
{
if( Bar( count ) > 0 )
{
value++;
}
}
return value; }
*Ugh.*
Why am I forced to remove ghost reads and writes and manually hoist common static evaluation out of loops?? Why can't the compiler deduce this information?
As Mike says, the compiler is not a magic wand. It is really good at only a _few_ transformations; it is really stupid about most other ones.
Mike Acton gave an excellent talk Code Clinic 2015: How to Write Code the Compiler Can Actually Optimize where he picked an integer sequence to optimize the run-time to calculate the sequence. Techniques include: memoization, and common sub-term recognition. For 20 values pre-optimization time was: 31 seconds, post-optimization time was: 0.01 seconds.
I also don't buy that argument -- otherwise how the hell did Tesla jump start into an already saturated market? If Apple was smart they would just buy Tesla to save them years of experience.:-)
Just because a company is_currently_ not in an existing market doesn't imply that they won't be hiring people who can lay the foundation.
I agree. I would also clarify one of his nonsense statements which I've fixed:
"Mars is a dead, cold, barren planet on which we assume no living thing is known to have evolved,
We _don't_ know if there was life on Mars -- we have (pardon the pun) _barely_ scratched the surface looking for evidence. Yes, SO FAR, given the current evidence (or I should say lack of it) it looks like is no evidence of life BUT without examining most of the data, aka the planet, we just don't know -- we're making guesses on %0.0001 of the data. i.e. What is the _statistical confidence level_ that there was no life on Mars? Until we have hard data the orginal statement is just a SWAG and should be treated as such, not as a fact.
1. Retards -- let's piss off the consumers...who _used_ to buy your stuff; Keep it up and Nintendo will find they won't have any consumers left to sell to.
2. Can someone smack Nintendo's Marketing dept with a sudden-outbreak-of-common-sense please?
Speed runs are FREE publicity.
This is the best advertising money can buy -- when consumers _willingly_ advertise your product for you without it costing you a cent!/sarcasm Nah, can't have that -- let's waste money on bullshit DMCA and drive a wedge between consumers.
3. Part of creating something for the culture to enjoy is that it BECOMES part of the culture -- ergo, the limited terms of copyright.
4. Why am I _not_ allowed to use an emulator if I legally have a physical cartridge? The medium is irrelevant -- I already purchased a license by physically buying the cartridge.
I don't think so: Americans were the original modern terrorists
An inconvenient truth is never popular.
/sarcasm: Amerika! Fuck Yeah! We're #1 !!... (yeah at being world bullies)
-- Instead of telling other countries how to run their nation and spending billions on killing another person, how about we address the homeless and all the vet's with PTSD first?
That's because Notch is insecure. He is afraid of:
* success: Making something that will be judged by others * failure: Making something that others will laugh at
If Notch wants to get out of his "slump" he could easily setup the "Notch Indie Fund" and donate 25K / every month to a different indie group. it would help him reconnect with the "roots" and help others to empower them to pursue their dreams.
All programming languages suck. Some more then others.
Then you have complete clusterfucks like Javascript and PHP.
Javascript's lack of a standard "include" is a prime example of how retarded it is. Oh look "import" is supposedly being worked on, yet no browsers support it (yet.)
Microsoft didn't even support WebGL until recently (IE11)
The fact that we had to rely on "popularity" to get cross platform basic native type support when it should have supported it from the beginning just points out how short sighted JS is and was.
> enough goodness, smartness, built into the language that if you can just avoid the bad parts,
That's incorrect. There a million and one ways JS can bite you in the ass.
When one is forced to use fucking hacks like
"use strict";
just so that one can get warnings about using mis-spelt variable names it tells me the designer learnt nothing from BASIC and all the shite that went along with it for the past 20 years.
I can't believe you're actually defending the retarded automatic semi-colon insertion. This is almost as stupid as Python. A language should NOT impose presentation (whitespace layout), only representation (semantics.) Mathematics doesn't. Spoken languages don't. So WTF should Javascript?? At the very least it should give you a WARNING about doing something "dangerous" or "unintended" like any good ol' C/C++ compiler will do with -Wall -Wextra. In JS? Nope, no errors / warnings / or diagnostic messages. This is one of the reasons Javascript sucks ass.
Javascript's automatic type coercion is likewise crap. When one is forced to do crap like
return "" + foo
in order to force the language to _actually_ return a string, it means you need to _manually_ inspect the _rest_ of the codebase for these undefined time bombs in your code. All this dumb shit could be easily be caught at "compile time" instead of blowing up, or worse, being silent at run-time.
More dumb shit like browsers treating leading zeros as octal (which NO one uses) in parseInt( "0#" ) is typical of how fucked up JS was. Mozilla and Chrome made excuses for years for why they didn't fix their broken crap:
There is a reason we moved to statically type languages -- because they catch stupid mistakes. We moved away from retarded languages like BASIC for professional programming because we have better things to do then to hand-hold a broken interpreter written by a moron.
Javascript uses `double` internally. This means it is impossible to get a native 64-bit int. Oh look, I can bit-wise OR a number with ZERO to get a "native" int32. More stupid hacks to work around the lack of a proper type system:
return foo | 0;// cast to int
Javascript's equality operator is so broken it is fucking useless and complete joke. Gee, why doesn't == even work for array and objects ?? WTF is the point of having == when any sane programmer will just use === and !== ?? http://dorey.github.io/JavaScr...
Javascript's 'scoping' is likewise dumb. Or I should say "complete lack of it." What the fuck is the point of braces if the language is just going to ignore block scope??
Every time you turn around the fucked up language adds yet another stupid "gotcha" that you have to be extra defensive about, and/or use a different work-around per-browser because the rational behavior is no where to be found. I means seriously:
typeof( [] + {} )
returns "string" ???
> But programmers can get used to anything, and it doesn't take any more or less discipline to work around these
The problem is that you don't _know_ about the quality of code written by the rest of the people on your team. There is no guarantee to catch broken JS code and that's even WITH running some sort of 'lint' and minifier program.
For the record, I _do_ use Javascript for my day job, which is WebGL.
Javascript is a the biggest piece of shit right before PHP; both languages are full of idiotic design kludges made by the typical beginner Co
"What comes after version 5? Version 6, right? Not in Pretty pHucked uP land -- they had to have a *vote* to skip version 6 after version 5 and go right to version 7 !"
Microsoft's marketing dept. must have been taking lesson from them when they skipped Windows 9 and went to Windows 10!
> The PS2 was certainly not very similar to OpenGL (very low-level stuff),
Exactly. You'd fill this big "command buffer" and DMA it to the GS. You would never (directly) set GPU registers in OpenGL -- the driver would be doing that for you.
> but I remember the PS3's libgcm being somewhat similar to earlier OpenGL versions, although the SPUs made it much more challenging, and the focus on the command buffer was a bit different
That's true, that libgcm definitely was much more "aligned" with OpenGL; Sony always had NIH syndrome.
> The Gamecube was much more similar to OpenGL than Sony's libraries from what I recall, and much easier to use.
Yup! Same with the Wii -- which was literally a Gamecube overclocked 2x. The Wii's GPU (Hollywood) had the _exact_ same hardware bugs as the Gamecube's GPU (Flipper) for crying out loud ! :-)
The Wii's GX library was a joy to use compared to the low level PS2 register bit twiddling.
> Nintendo has historically used a customized version of OpenGL for their APIs, as has Sony
Please stop spreading that mis-information.
I shipped a couple Wii games and wrote an OpenGL wrapper. Nintendo's GX rendering library definitely was heavily OpenGL _inspired_ but it was not OpenGL.
I've also shipped PSX and PS2 games. At that same Wii job we also had an OpenGL wrapper for the PS2. Sony's sce*() calls for the Sony's PSX and PS2 was never OpenGL inspired.
At the micro level, yes, agreed.
At the macro level. Not even close.
You may also be interested in my followup
I linked to second trivial case, which in practice tends to show up time and time again in typical game code, using member bools where C++ compilers fall completely over.
Compilers have a very narrow range where they are very good. Outside that domain, they suck at generating optimal code.
As I say there are 3 levels of optimizations:
1. Micro-optimization aka bit twiddling
2. Algorithm optimization
3. Data-flow optimization. Data Orientation Design focusing on the common (multiple) case, not the uncommon (single) case, and optimizing for throughput, not latency.
The points are two fold:
1. Naive use of algorithms and OOP without understanding the data flow will always be slower then understanding and optimizing for the (data) cache usage.
Pitfalls of Object Oriented Programming
2. C/C++ compilers do a really shitty job of optimizing even trivial code.
CppCon 2014: Mike Acton "Data-Oriented Design and C++"
Mike demonstrates a simple example where a bool member flag is used as a test. MSVC does a horrible job at O2; Clang does a much better job, but still crappy. (Note: Using a different compiler backend on MSVC wasn't even an option until recently.)
Even a more slightly more complicated example blows up:
*Ugh.*
Why am I forced to remove ghost reads and writes and manually hoist common static evaluation out of loops?? Why can't the compiler deduce this information?
As Mike says, the compiler is not a magic wand. It is really good at only a _few_ transformations; it is really stupid about most other ones.
> Among the more significant differences are that C++ compilers are extremely good at optimizing,
LOL. No they aren't
Mike Acton gave an excellent talk Code Clinic 2015: How to Write Code the Compiler Can Actually Optimize where he picked an integer sequence to optimize the run-time to calculate the sequence. Techniques include: memoization, and common sub-term recognition. For 20 values pre-optimization time was: 31 seconds, post-optimization time was: 0.01 seconds.
Linked above.
Agreed!
I also don't buy that argument -- otherwise how the hell did Tesla jump start into an already saturated market? If Apple was smart they would just buy Tesla to save them years of experience. :-)
Just because a company is_currently_ not in an existing market doesn't imply that they won't be hiring people who can lay the foundation.
Impossible? No. Hard? Yes.
Not all of us use it for gaming. Some use the the GPU for heterogeneous computing R&D.
I use my desktop i7 + a discrete GTX 980Ti for (game) dev.
I _also_ use a MacBook Pro with a "decent" mobile 750M for WebGL (shader) testing.
Since I can't lug around my desktop, having a portable laptop that doesn't have a complete crap GPU is extremely convenient.
Different strokes for different folks.
Why do you think some people copyright and trademark their name?
We really should force companies to sign NDA's when we license our personal (bio) data to them.
/Oblg. Hard to tell if you are being sarcastic or serious.
You DO realize that Hope is not just limited to one specific age group, right?
The Wright Brothers had faith and hope.
Astronauts and all of NASA driving the Apollo program had faith and hope.
There have been many men & women, young and old, that have had faith, and have overcome their goals.
Who really cares if it is the Millennials or not?
I agree. I would also clarify one of his nonsense statements which I've fixed:
We _don't_ know if there was life on Mars -- we have (pardon the pun) _barely_ scratched the surface looking for evidence. Yes, SO FAR, given the current evidence (or I should say lack of it) it looks like is no evidence of life BUT without examining most of the data, aka the planet, we just don't know -- we're making guesses on %0.0001 of the data. i.e. What is the _statistical confidence level_ that there was no life on Mars? Until we have hard data the orginal statement is just a SWAG and should be treated as such, not as a fact.
1. Retards -- let's piss off the consumers ...who _used_ to buy your stuff; Keep it up and Nintendo will find they won't have any consumers left to sell to.
2. Can someone smack Nintendo's Marketing dept with a sudden-outbreak-of-common-sense please?
Speed runs are FREE publicity.
This is the best advertising money can buy -- when consumers _willingly_ advertise your product for you without it costing you a cent! /sarcasm Nah, can't have that -- let's waste money on bullshit DMCA and drive a wedge between consumers.
3. Part of creating something for the culture to enjoy is that it BECOMES part of the culture -- ergo, the limited terms of copyright.
4. Why am I _not_ allowed to use an emulator if I legally have a physical cartridge? The medium is irrelevant -- I already purchased a license by physically buying the cartridge.
> Am I missing something?
I don't think so: Americans were the original modern terrorists
An inconvenient truth is never popular.
--
Instead of telling other countries how to run their nation and spending billions on killing another person, how about we address the homeless and all the vet's with PTSD first?
JWZ would tend to agree with you:
* http://regex.info/blog/2006-09...
> Now only if it had a decent text editor for ...
You could always use Vim ...
Or if you are really evil ... Vim mode for Emacs
If you really want to go straight to hell ... Emacs mode for Vim
Pick you religion / devil :-)
Almost every article has tons of assumptions, lots of hand waving, refuses to correct mistakes even when pointed out, etc.
What CISS printers would you recommend?
Nice review! Complements Cinema Sins very nicely
Nah, that's the last status message sent:
or the more traditional:
"CPU#0: Possible thermal failure (CPU on fire?)
I can't wait till they put one in a printer. Then this error message will become a reality:
Or I should say
lp0 on fire
/sarcasm But come on, I mean "Super Mario Bros." the movie (1993) now was such a paragon of quality movie making .. NOT !
"Everything Wrong With Super Mario Bros. In 21 Minutes Or Less"
* https://www.youtube.com/watch?...
"Game Theory: Why Video Game Movies SUCK!"
* https://www.youtube.com/watch?...
That's because Notch is insecure. He is afraid of:
* success: Making something that will be judged by others
* failure: Making something that others will laugh at
If Notch wants to get out of his "slump" he could easily setup the "Notch Indie Fund" and donate 25K / every month to a different indie group. it would help him reconnect with the "roots" and help others to empower them to pursue their dreams.
http://www.businessinsider.co....
All programming languages suck. Some more then others.
Then you have complete clusterfucks like Javascript and PHP.
Javascript's lack of a standard "include" is a prime example of how retarded it is. Oh look "import" is supposedly being worked on, yet no browsers support it (yet.)
* https://developer.mozilla.org/...
At least with EcmaScript 6 "strict" mode is _finally_ enabled by default in classes, modules, etc.
* http://people.mozilla.org/~jor...
You can't fix retarded design(s) unless we first overcome ignorance with knowledge.
Microsoft didn't even support WebGL until recently (IE11)
The fact that we had to rely on "popularity" to get cross platform basic native type support when it should have supported it from the beginning just points out how short sighted JS is and was.
> enough goodness, smartness, built into the language that if you can just avoid the bad parts,
That's incorrect. There a million and one ways JS can bite you in the ass.
When one is forced to use fucking hacks like
just so that one can get warnings about using mis-spelt variable names it tells me the designer learnt nothing from BASIC and all the shite that went along with it for the past 20 years.
I can't believe you're actually defending the retarded automatic semi-colon insertion. This is almost as stupid as Python. A language should NOT impose presentation (whitespace layout), only representation (semantics.) Mathematics doesn't. Spoken languages don't. So WTF should Javascript?? At the very least it should give you a WARNING about doing something "dangerous" or "unintended" like any good ol' C/C++ compiler will do with -Wall -Wextra. In JS? Nope, no errors / warnings / or diagnostic messages. This is one of the reasons Javascript sucks ass.
Javascript's automatic type coercion is likewise crap. When one is forced to do crap like
in order to force the language to _actually_ return a string, it means you need to _manually_ inspect the _rest_ of the codebase for these undefined time bombs in your code. All this dumb shit could be easily be caught at "compile time" instead of blowing up, or worse, being silent at run-time.
More dumb shit like browsers treating leading zeros as octal (which NO one uses) in parseInt( "0#" ) is typical of how fucked up JS was. Mozilla and Chrome made excuses for years for why they didn't fix their broken crap:
* http://code.google.com/p/v8/is...
* https://bugzilla.mozilla.org/s...
There is a reason we moved to statically type languages -- because they catch stupid mistakes. We moved away from retarded languages like BASIC for professional programming because we have better things to do then to hand-hold a broken interpreter written by a moron.
Javascript uses `double` internally. This means it is impossible to get a native 64-bit int. Oh look, I can bit-wise OR a number with ZERO to get a "native" int32. More stupid hacks to work around the lack of a proper type system:
Javascript's equality operator is so broken it is fucking useless and complete joke. Gee, why doesn't == even work for array and objects ?? WTF is the point of having == when any sane programmer will just use === and !== ?? http://dorey.github.io/JavaScr...
Javascript's 'scoping' is likewise dumb. Or I should say "complete lack of it." What the fuck is the point of braces if the language is just going to ignore block scope??
Every time you turn around the fucked up language adds yet another stupid "gotcha" that you have to be extra defensive about, and/or use a different work-around per-browser because the rational behavior is no where to be found. I means seriously:
returns "string" ???
> But programmers can get used to anything, and it doesn't take any more or less discipline to work around these
The problem is that you don't _know_ about the quality of code written by the rest of the people on your team. There is no guarantee to catch broken JS code and that's even WITH running some sort of 'lint' and minifier program.
For the record, I _do_ use Javascript for my day job, which is WebGL.
Javascript is a the biggest piece of shit right before PHP; both languages are full of idiotic design kludges made by the typical beginner Co
Ha-ha, that's priceless !
"What comes after version 5? Version 6, right? Not in Pretty pHucked uP land -- they had to have a *vote* to skip version 6 after version 5 and go right to version 7 !"
Microsoft's marketing dept. must have been taking lesson from them when they skipped Windows 9 and went to Windows 10!