5 ms·
SPIR-V by itself does not have the needed safety or interoperability properties for the web, or the advantages of text formats that the web has benefitted from.
by om2 6y ago
SPIR-V by itself does not have the needed safety or interoperability properties for the web, or the advantages of text formats that the web has benefitted from. These are the more important factors, not IPR considerations.
Fortunately, we landed on a good compromise with a textual language that maps closely onto SPIR-V semantics. A lot of the hard work remaining is to achieve the level of safety and interoperability required for the web. Even in an approach of using SPIR-V as the syntax, a similar level of effort would have been required on safety and interop aspects.
- Jasper_ 6y ago> SPIR-V by itself does not have the needed safety or interoperability properties for the web Safety, maybe not 100%, but this could be fixed with extensions, and transformations. The same transformations that WGSL compilers will apply. I'm unsure of what you mean by "interoperability". > or the advantages of text formats that the web has benefitted from. ??? Nobody has ever enumerated these to me. Or told me why if these advantages are so great, why Apple has not advocated for a text-based formats for <audio> and <video>. Binary formats are widely becoming more standard on the web for all sorts of reasons (images, fonts, video, audio, even code in the form of WebAssembly, and Bloomberg/Facebook's JS AST proposal improved performance by removing parsing cost. MapBox ships its vectors in binary format. glTF is a binary format.), and even in the graphics space, the release of the new SPIR-V format over having to ingest GLSL is seen as one of the greatest advantages of Vulkan over OpenGL. If you want a text format, take the text serialization of SPIR-V. It's there, it's standard, it exists. But you won't bother answering me, because every time you bring this up, we ask the same questions, repeat the same evidence, and you ignore us, preferring just to reply "text is more webby". Not to mention that you're currently pressuring the WG to add new APIs to avoid the heavy front-end cost of Apple's own MSL shader compiler. https://github.com/gpuweb/gpuweb/issues/1064 https://github.com/gpuweb/gpuweb/issues/1064
- auggierose 6y agoLooking at that issue, seems perfectly fine to raise it to me. That's exactly the kind of input I would expect from a member of the working group, and it just increases the quality of the end product. Let's face it, Metal is nicer than Vulkan. And I bet there are more Metal programmers out there by now than there are Vulkan programmers.
- flohofwoe 6y ago> "text is more webby". TBF, having to include a binary shader blob in a small WebGL-style demo (e.g. some interactive math visualization embedded in a blog post) would suck compared to just adding a few lines of text. It would be possible to load a WASM module with a text-to-SPIRV compiler, but that would most likely be a few megabytes. IMHO one shouldn't discard those small shadertoy-style demos, this is what made WebGL popular, not the "AAA games on the web" pipe dream.
- atq2119 6y agoIt would be possible to load a WASM module with a text-to-SPIRV compiler, but that would most likely be a few megabytes. My understanding is that this was discussed, and the answer is: glslang is much smaller than this. (Glslang now has a bunch of #ifndef WEB to facilitate precisely this.)
- om2 6y agoI don’t think anyone exhibited a version that got to acceptable binary size and startup/execution time. Might be that it would have been possible with way more effort.
- Jasper_ 6y agoGoing from "a few megabytes I'd rather not include, for a simple use case" to "let's design our own shading language, derail the project for three years, and discover from first principles all the reasons that this is actually a hard problem, while telling everyone else it's actually easy!" is quite the leap. I sympathize with people who believe that page sizes are getting larger and we should do something to prevent it, but the latter is not a worthwhile solution that meets the tradeoffs IMO.
- om2 6y agoGoogle folks who have been primary designers of the new shader language have been deeply involved in SPIR-V; and Apple has made its own shading language, Metal. Apple also produces GPUs that ship in very high volume via A-series SoCs. I’m not sure why you think the people involved in this effort are clueless about shader languages. That does not seem supported by the evidence.
- om2 6y ago> Safety, maybe not 100%, but this could be fixed with extensions, and transformations. The same transformations that WGSL compilers will apply. What I’m telling you is that defining these checks and transformations is the hard part, not the syntax. If your claim is that WebGPU is taking longer because of WGSL, I don’t think that holds up. > I'm unsure of what you mean by "interoperability". Consistent behavior across browsers and platforms. Some thing in SPIR-V are not specified with as much precision as modern web standards like HTML or ECMAScript. >> or the advantages of text formats that the web has benefitted from. > ??? Nobody has ever enumerated these to me. These have been discussed to death in the WebGPU WG. I’m not sure why you think someone owes you personally a direct explanation. But here are some. Ease of debugging. Learning via “view source” ability to develop and publish with no compile step if desired. > why Apple has not advocated for a text-based formats for <audio> and <video> There is no textual source format for a media file. Media files also need bespoke compression to transmit efficiently. Gripping a text format would not work. Gzip transfer-encoded WGSL is more compact than gzip transfer-encoded SPIR-V, so the transfer size advantage cuts the other way (but not clear this really matters for shader programs) > Binary formats are widely becoming more standard on the web ... even code in the form of WebAssembly WebAssembly is intended for a very specific use case, porting native apps to the web. Even so, many in the WebAssembly WG think it was a mistake to make it a binary format instead of text, in retrospect. > Bloomberg/Facebook's JS AST proposal improved performance by removing parsing cost We (WebKit team) think they got their results only be starting with a JS engine that had a slow parser. JavaScriptCore parses much faster than SpiderMonkey and is faster than SpiderMonkey + AST prototype. And the proposal is not really getting buy-in at ECMA. > If you want a text format, take the text serialization of SPIR-V. It's there, it's standard, it exists. There is no standard text serialization format of SPIR-V. There’s an unofficial format supported by spirv-cross, but it’s not a standard. WGSL was created by starting with that serialization format, and progressively adding concessions to human-authorability while preserving a mapping to SPIR-V semantics. We (WebGPU CG) hope to make it a standard and perhaps even make that standard usable beyond the domain of WebGPU. > But you won't bother answering me, because every time you bring this up, we ask the same questions, repeat the same evidence, and you ignore us, preferring just to reply "text is more webby". I just answered you comprehensively. I feel like 0% of what I said is new information beyond what has been stated many times before in many venues. So I think the problem here may be on the reader side, not the writer side. > Not to mention that you're currently pressuring the WG to add new APIs to avoid the heavy front-end cost of Apple's own MSL shader compiler. This has nothing to do with share language choice per se. That said, the WebGPU CG charter includes the goal of working naturally and efficiently on top of Metal, along with Vulkan and DirectX. This proposal, based on perf measurements, is a way of removing overhead for Metal that won’t affect the other two WebGPU target underlying APIs. Do you feel that WebGPU should not work efficiently on top of Metal? You may not care about this personally, but the CG charter disagrees. Is it bad faith “pressuring” to share perf info about how WebGPU maps to Metal, or just the normal way the standards process is supposed to work? To me it looks like the latter.