Show HN: Vulkan bindings for JavaScript
github.com
github.com
I would think you can achieve similar speed using WebGL in the browser and then have all the comfortable functionality of the browser for free.
For the web, you have no choice but to use WebGL.
If you're interested on why a Vulkan binding for the web is not a good idea, I found this doc (from two engineers working at Google) quite interesting : https://docs.google.com/document/d/1-lAvR9GXaNJiqUIpm3N2XuGU...
Definitely, having some form of GPGPU on the web is the next step. It is currently one of my few complaint with WebGL: The lack of compute shader.
There are existing GPGPU things running on WebGL, see eg https://github.com/tensorflow/tfjs-core and https://magenta.tensorflow.org/demos/#web-apps
I hope not. The proposed standard was not even remotely vendor-neutral.
I would love to have compute shaders in WebGL. All it would require is bumping the OpenGL version that WebGL is based on from ES 3.0 to ES 3.1 in the next revision.
As far as I can tell, that will not happen because it would reduce the need for the WebGPU proposal. Needless to say, I find the situation very annoying.
Why not? WebGPU work continues here, based on the work that Apple proposed. Google has a cross-platform prototype implementation. https://github.com/gpuweb/gpuweb
> I would love to have compute shaders in WebGL. All it would require is bumping the OpenGL version that WebGL is based on from ES 3.0 to ES 3.1 in the next revision.
WebGL2 has very little vendor support already, and OpenGL is a dead end, from an API perspective. Something low-ish like Metal without being as absurd as Vulkan would be a great fit for the web.
The call from JavaScript to native (the binding from v8 to C++), has itself a very low overhead
It's like saying "I don't see why WebGL exists because JavaScript is slow"
CPU bottlenecking is an issue in videogames where the main loop is usually handling a massive amount of computation, doing its own intersection checks, etc. Etc. Plus any other processes queuing sounds, running physics etc. There are just a few cores doing a huge amount of work.
Its still relatively easy to swamp the CPU in javascript (webworkers and async obviously help), but if youre just piping orders to the GPU then any CPU can easily max out the abilities even on high end cards. In most cases that's basically what webgl is used for, AFAIK. How many full on ai and physics heavy games are there? Webgl games tend to be lighter, and are very often accessible ways to play with interesting shaders. The use case tends towards GPU bound.
There is no purpose in having a low level API in Javascript, because such API's have to be guided like babies, and Javascript (and most of high level programming languages in fact) is too slow to keep up with their speed. Imagine helping a baby walk, but the baby move 3x as fast as you, but if you let his hand, he falls down.
JS's ability to juggle "Fortran-like" code and scripted app code is pretty unappreciated. Granted, we are slowly adding PyGDF support (google GoAi) to get to GB workloads in real-time, but were fine up to that. I'm not sure if we could have done it in Ruby, may be could have done it in Python. Vulkan adds even more async support, which is the type of thing we could certainly use.
So... Yeah, takes a team that gets how to write HPC code to get HPC code, and JS can be a good choice here when there is a lot of app code to use the HPC.
We'd love for WebGL to get close to GPU compute parity, but even webgl2 feels more like 1998 or 2008 than 2018. The problem there isn't the JS side.
JavaScript should tell the CPU what to do, not how to do it.
Edit: If there are CPU intensive tasks that also need to be customized for a particular app we should perhaps have some way to define those tasks in a way that gives you as developer more control of performance characteristics. I guess this is one of the intentions behind WebAssembly?