- From: Corentin Wallez <cwallez@google.com>
- Date: Wed, 25 Oct 2017 13:49:48 -0400
- To: Kai Ninomiya <kainino@google.com>
- Cc: "public-gpu@w3.org" <public-gpu@w3.org>
- Message-ID: <CAGdfWNPM1WiYMDoz70fr9U9J8CovHo4-u221Q_qCasJ6w0m4uA@mail.gmail.com>
Thanks Kai for putting this together, a couple more trade-offs would be the following: - Interoperability. It might be more difficult to have to have multiple implementations be interoperable with a SL. - Browser engineering. How much do the compiler add to the browser attack surface and binary size. - Governance. How do we make changes to the SL / IR, who's involved. - Portability to MSL, HLSL and SPIR-V. This so important that we forgot it ^^. On Tue, Oct 24, 2017 at 2:21 AM, Kai Ninomiya <kainino@google.com> wrote: > Hey all, > > We said we would resume the shader language "levels" discussion via email, > so here we are. (Apologies that it's so late.) I'll try to start this off > with some concrete ideas before we dive into the rabbit hole. Please add > suggestions as necessary. We'll be talking about shading languages again > this Wednesday, so I'd ask everyone to spend some time to think about the > topic before then. > > The forms of language we've discussed: > > * "SL". High-level, human-authored, highly-structured, imperative, > whatever-you-want-to-call-it language, like WSL, HLSL, or GLSL. > * "IR". Machine-generated, typically-SSA, lower-level, canonically-binary > representation, like SPIR-V or DXIL. > > The alternatives we've discussed: > > * WebGPU ingests SL only. > * WebGPU ingests both SL and IR. We bless an offline SL->IR tool. > * WebGPU ingests IR only, but we have a Web API to compile unsecured SL to > unsecured IR. We bless an offline SL->IR tool. > * WebGPU ingests IR only. We bless both online and offline SL->IR tools - > an online compiler is required for some applications. > [1] A shader compiler may, for example, be a WebAssembly module on a CDN. > > In any alternative, we seem to agree to bless an SL. We bless/provide > tools for that SL, and documentation is written using that SL. The browser > compiles its ingested language to a secured shader in the native API's > ingested language. > > Some trade-offs we've discussed: > > * Compilation performance. SLs may be more expensive to compile. IRs may > be expensive to compile securely - we're working on this one. > * Runtime performance. Could a practical SL be more "performantly > securable" than an IR? > * View Source. Vocal web developers have complained about the View Source > story for WebAssembly. (And how well could we mitigate this if needed?) > * Compiler maintenance. SL compilers may be more prone to bugs. (Critical > for any compiler/translator that must enforce security boundaries.) > * Download/initialization time. Probably not a significant issue for > either format after compression, but we also have to consider the download > and compile time of, e.g., runtime shader compiler modules. > * Ecosystem bootstrapping. There a lot of HLSL and GLSL out there, in the > form of libraries, sample code, and existing engines (including WebGL). > * Development time for the ingested format. Probably not an issue if we > start out with HLSL or GLSL. > * Soundness/provability. We differ on whether this is important at all, > and whether it's easier for SL or IR. Probably not worth discussing right > now? > > Please add topics to this list. I have one more: > > * Code reuse. Some engines (like Three.js) manipulate shader strings to > generate shaders at runtime; if we only ingest IR, they would have to > either use a new method or add a shader compiler. On the other hand, some > engines may(?) prefer to use concepts like SPIRV's specialization and > linking. > > Relevant notes for review: > > 2017-09-22 (F2F): https://docs.google.com/document/d/1VridLAmC05h80_ > d-FGmwyI7On0_AY5y8pVGI-TT4ysQ/edit > 2017-10-11: https://docs.google.com/document/d/1- > ciiWbGletoOXOGrBBZpOhhWEWJcIqK0Bb-dtHJ8ffE/edit > > -Kai >
Received on Wednesday, 25 October 2017 17:51:23 UTC