- From: Corentin Wallez <cwallez@google.com>
- Date: Fri, 8 Sep 2017 13:34:15 -0400
- To: public-gpu <public-gpu@w3.org>
- Message-ID: <CAGdfWNOWU8hrRX7yZmnxN4P8Ps=ebo6f4C_3OU6Vtrks6Qok0Q@mail.gmail.com>
GPU Web 2017-09-06 Chair: Corentin Scribe: Ken Location: Google Hangout Minutes from last meeting <https://docs.google.com/document/d/1TVcnZE9ygVuqzGohG7Yux_kmVv6EXmz7UnO2vwtzr7A/edit#heading=h.hp3f2zbslxr9> TL;DR - Apple is prototyping a WebGPU Shading Language <https://trac.webkit.org/browser/webkit/trunk/Tools/WebGPUShadingLanguageRI> (WSL). Will contribute it to the group under the chosen license. - Clspv uses SPIRV variable pointers for the “getElementPtr” LLVM intrinsic. Adobe workload is OpenCL1.2 2D filtering with disciplined array accesses. - Shading languages /WebGPU target platforms: - Google wants to run on the majority of devices (including Android) shipping Vulkan now. Ready to cut some of the oldest chipsets. Means SPIRV we cannot rely on SPIRV variable pointers. - Apple want to support all phone and desktops running Metal, on all feature levels. - Microsoft wants to support anything running D3D12. Baseline HLSL feature level is 5.1. - Shading language workloads: - Developers complains about lack of generic for int8 vs. int16 etc. Would like it for a specified high level language. Bytecode wouldn’t expose it. - AI to make a comparison of available shading language feature (builtins, formats, etc). Would probably expose common subset. - Shading language security - Need to inforce Javascript “same origin” policy. WebGL is stronger than that as each context is its own silo. - Need to be careful with things like the CSS visited style that you could access from the GPU. - Impossible to add validation protecting against DDOS. Browsers should detect GPU resets (TDRs) and can balcklist GPU access on that origin. - Feedback that we need to better organize our documentation. Tentative agenda - Administrative stuff (if any) - Individual design and prototype status - Shading languages - Agenda for next meeting Attendance - Dean Jackson (Apple) - JF Bastien (Apple) - Myles C. Maxfield (Apple) - Theresa O'Connor (Apple) - Keith Miller (Apple) - Corentin Wallez (Google) - David Neto (Google) - Kai Ninomiya (Google) - Ken Russell (Google) - Ben Constable (Microsoft) - Chas Boyd (Microsoft) - Rafael Cintron (Microsoft) - Dzmitry Malyshau (Mozilla) - Jeff Gilbert (Mozilla) - Kirill Dmitrenko (Yandex) - Doug Twilleager (ZSpace) - Elviss Strazdiņš - Joshua Groves Administrative items - Today’s the (somewhat arbitrary) deadline to attend the face-to-face meeting in Chicago - With Dean, been in touch with Dominique from W3C to do a demo of what GPU tech might look like for the web for TPAC - Starting discussions, getting interest. More so than API / IDL Individual design and prototype status - Apple - Doing a lot of work on reference implementation for a potential new shading language - Not yet comfortable bringing this to the group - Can compile functions, resolution, generics, some amount of checking. Getting there - BC: any details you’re willing to share? LLVM/Clang based? C-like language? - MM: doing all this work in open source. Search for “WSL” - WebGPU Shading Language - Not Clang-LLVM based. CPU side interpreter in JavaScript - At some point it’ll emit MSL, but right now implementing an interpreter - Language itself is similar to C. Not like Python, not like bytecode. Doesn’t have pointers. Does have references. - CW: Pointer into source code? for minutes - https://trac.webkit.org/browser/webkit/trunk/Tools/WebGPUShadingLanguageRI (start with prepare()) - BC: licenses? - DJ: it’s in the WebKit tree, so WebKit license. Joint BSD/something else. Will contribute it to the group. Will then be W3C license (rather, the one MSFT/Apple/GOOG are working on). - BC/DJ: discussion about legal stuff. Other projects like LLVM doing similar things. Trying to do things in a unified way. - Google - CW: not much. Studied memory barriers more. Trying to find technical reasons to choose implicit/explicit. - MM: started trying to implement his ideas on Vulkan but found it was difficult. :D - BC: you’re not alone :D - Microsoft - RC: no updates - BC: trying to work through thoughts on barriers. Will try to contribute productively today - Mozilla - DM: making good progress on prototype in Servo - Have SwapChain, pipeline barriers, can render stuff with a few FPS right now Shading languages - CW: let’s center the discussion on what we know for sure what we want, and what’s possible vs. not. - Type of workload - What’s the low-level definition of security - What are the hard platform constraints - For example, since last meeting we found more info about D3D12 and Vulkan. Target platforms - CW: hard platform constraints - The set of devices that Google wants to be able to support which run Vulkan may not have the variable pointer extension - The shading language for WebGPU can’t practically have pointer arithmetic. - Want to support the Vulkan that’s out there today. - DN: variable pointers extension is ratified (the status line on the Web site is out of date). Vulkan has ratified it. NVIDIA is shipping production drivers containing it. dneto has a code base and compiler which uses it. Talked about at Khronos 3D BOF at SIGGRAPH. Worked with Adobe to define a subset, and variable pointers fell out of that work. - Workloads: 2D data accessing some algorithmic filtering. Some uses of images as expressed in OpenCL 1.2. Filtering via samplers. 32-bit data. Some disciplined use of 8-bit data and 16-bit float data. Very disciplined array access. - Fairly standard OpenCL 1.2. - Variable pointers: similar to getElementPtr in LLVM. Vulkan requires strong typing. Can’t do bitwise reinterpretation of pointee types. Instead do bitwise reinterpretation after loading the data. - DJ: does this mean that only NVIDIA devices can run this? - DN: Vulkan extension VK_KHR_variable_pointers allowing you to use it has only been out ~6 weeks or so. Expect that in the fullness of time it’ll be more widespread. - CW: if we want to support e.g. Galaxy S8 which may not pick up drivers that have this extension, then we can’t rely on the presence of this extension - MM: If a phone doesn’t get a driver update, will it get a browser update? - CW: yes. The driver’s not supplied via the play store. Yet. - MM / CW: Discussion about Android 8.0 (“Oreo”) and the updatable graphics driver model. Browser’s updated via the App Store though. - DJ: Chrome/Mozilla are continually updated. System browser is never these? - Not necessarily. Samsung may ship their own browser but not necessarily every phone vendor will do that. Samsung also updates their browser via Play Store. - CW: should be able to ship on current Vulkan on current devices. - MM: unreasonable to put a Vulkan driver in the browser? - CW/JG: not possible. - DJ: of existing phones: what level of Vulkan support do they have? - CW: the hope is that they pass conformance and the Android CTS requires this. It’s a good question. Hoping that the API we ship here will be a subset of Vulkan so that if it doesn’t use all the knobs, it gives us some leeway to not stress all the corner cases which might have driver bugs. - DJ: Android 7 is the previous version. Is that the level of device we’re targeting? - CW: Vulkan became available in Android M. Not required as part of the platform, only OpenGL ES 2 required. - DJ: so even an Android 8 device might not have Vulkan. Also hardware dependent. - MM: do we have a feel for how many planned devices are going to get Vulkan support? - CW: hard to tell for sure. Any of the newer IHVs’ chipsets are going to be able to run Vulkan. - MM: Dean trying to say: verify that the base conformance we’re targeting is an Android 8.0 device with Vulkan support? - JG/CW: not Android 8.0. Android N / 7.1.1. - CW: what’s Apple’s target? - MM: all phones and desktops running Metal. - Target feature levels? - Even low feature levels. Even baseline Macs from a few years ago. - JG: sounds like it’s in line with Mozilla’s desire to run anywhere a new-gen API is available (Vulkan/D3D12/Metal). - RC / BC: anything that can run D3D12 - CW: so: need to support anything that runs the current nextgen APIs. Can’t rely on the variable pointer extension. Not sure if D3D12 requires shader model 6.0, or 5.0? - MM: would like to know this because it changes the shape of the shading language. - RC: Believe that it is 5 / 5.1 - CB: there’s no difference between 5/ and the current compiler. Just switched to the LLVM based IR. But wanted to support D3D12 with the classic functionality (5.1). No difference between 5.1 and 6.0 in the feature set. - MM: voting functions? - CB: those intrinsics are optional - CW: this helps us understand what we’re going to go out on. - Pointer interactions seem hard. - JG: is the shader model in D3D12 more sophisticated in that regard? - CB: Not really. Pretty basic. Kinds of workloads we want to support - CW: want to be able to run any kind of graphics things (e.g. WebGL 2.0), maybe without transform feedback - People have expressed interest in machine learning and compute - Voting intrinsics? Shared memory? - MM: assume you’re talking about threadgroup memory? - Don’t think that’s supported in rendering operations across all the APIs - JG: yes. graphics / compute different. But the differences are similar across the APIs. - MM: have talked with some teams using Metal. Some teams will write duplicate code because of different data types. Shaders that work on floats vs. halves. Some sort of generics would be valuable. - JG: disagree. If it’s not reflected in the APIs we’re targeting then we shouldn’t support it. - DN: Generics seem like a frontend feature, depends on the level of abstraction we want to have. - CB: Historically the languages have been type safe but the data fairly polymorphic. - JG: continuation of the philosophy that you get exactly what you ask for. Adding generic types on top of shaders which don’t support them means you’re doing dynamic shader recompilation. - CW: none of the APIs support generics right now. Or MSL, which specializes at compilation time. - MM: should have stated this more clearly. Agree that if we were to standardize some bytecode, bytecode with generics doesn’t make sense. - KR: Instead of language feature, focus on what kind of compute operations we want to support. We should choose a minimal compute featureset for the MVP, then add things as incremental steps. Choose bite-sized things. David your experience with Adobe is the most concrete thing we have. - JG: there’s still a strawman proposal of just subsetting what the 3 APIs can do, make it secure, and go with that. Rather than hand-picking what operations we want to support. - KN: any language feature that we could add which isn’t part of one of the representations in the underlying APIs is something we shouldn’t talk about now. Any feature we can add that we’re going to convert down to the backing API isn’t something we have to figure out now. - CW: that sounds correct. Also: there’s a bunch of compute related features that go together. For example, SSBOs go hand-in-hand with read-write images. - MM: why’s that the case? - CW: As soon as you want to do compute workloads you want to output data. Either into buffers or images. But when you have compute shaders you want to write to both buffers and images: this is most basic functionality. But most compute features are basic functionality that you can’t do without. For example, if you don’t have threadgroup storage, or don’t have arrays-of-arrays, etc., not useful. - JG: I can take an AI to go through what Vulkan offers, and then go through and see what isn’t supported by the other APIs and strike what isn’t supported. - MM: When you talk about feature, do you mean per-builtin, or large groups of operations. - JG: talking about e.g. SPIR-V opcodes - MM: e.g. every function in the standard library? - JG: The standard library is rather small. - DN: what sort of resources can you access. Can you have samplers on images. Etc. - JG: figuring out what is the common compute functionality among the various APIs. - CW: then we’ll have the maximum and minimum subsets. Security - CW: been a lot of discussions. Difficult to define properly. - JG: the rules we have for WebGL: can’t access anything you’re not supposed to: data from another process, etc. Can only access your data, both read/write. There’s a little leeway about whether we should require repeatability / portability / testability. Those are contentious and not absolute concerns. It’s required that you can’t read/write data you don’t have access to. - Also: you can cause TDRs, but we recover from them. - CB: there was discussion about what you should be allowed to have access to. - TOC: same-origin policy of the web. Have to obey that. - JG: that’s a good way to think of it. In WebGL each context is its own castle. But in WebGPU we could say that different pages on the same origin can see each others’ content. - KN: basically, anything you can access from JavaScript you can access from the GPU. (see, CSS visited links). - CW: Basically have requirements. how do we move forward? - JG: have to detail what aspects of the shading language are considered unsafe. SL might not care as much to let you see previous data from the same process. In the Web we might be rendering multiple pages in the same process. Logical addressing mode is more constrained and helps make sure … Need to find all the things in SL that aren’t safe we need to make safe. - MM: one other case about security: on some devices and some OSs there is hardware protection (dereferencing null pointers in shaders, etc.) but the response is to do a total device reset. No web page should be able to do that. - CW: ideally yes. But on Windows for example we use the “reset the GPU” functionality (TDR) as a way to recover. For example, you can write infinite loops in shaders. Basically any system might lock up and require the GPU to be reset. - MM: as a preprocessing step for shaders you could insert counters that have back-references. - JG: that doesn’t solve it. For example, pessimistic texture cache thrashing. Possible to easily hit timeouts. - RC: Even simple shaders across huge amounts of triangles can cause TDRs. - KR: Experience from WebGL is that in cases it is necessary to base DDOS defense on GPU resets. Examples in the WebGL repo, bunch of alpha blended triangles, etc. Not possible to defend against these cooperatively in the shader. Have to admit that GPUs will be reset. We can guard against nullptr dereferences and clamp buffer access. That might be enough for WebGPU’s security. - JG: Shouldn’t target a more restrictive security model than WebGL. - CW: on some systems like Linux, DoS does take out your machine. (Maybe not. NVIDIA supports KHR_robustness. Think AMD does too.) - KR: Try to push vendors to implement GPU watchdogs but wasn’t specified fully in the first KHR robustness extension - MM: When you say Linux do you mean Android too? - CW: No data but would be surprised if it were better. - RC: one mitigation on Edge/IE on Windows: if we do see a TDR, we restart WebGL in software mode. So malicious code only affects the current page. Not the entire desktop. - KR: Chrome has a similar mechanism, on recurrent TDR Chrome will prevent that origin from using WebGL. - JG: Some extensions tell you if you are an “innocent” or “guilty” context. - KR: unfortunately that’s not reliably supported anywhere. Conclusion - CW: AIs from today: - Make a list of features supported in different compute and shading language APIs - Need more samples of workloads we want to run - KR: Not enough links in the wiki / gpuweb repo. Need to do an effort on the documentation. - MM: the thing I made is on the front page… - https://github.com/gpuweb/gpuweb/wiki/Roadmap - CW: started making tl;drs of minutes. - DJ: Will take an AI to address what Ken wants. - CW: for shading languages, let’s do writeups and gather samples. - Next week: roadmap document Myles made to have consensus on consensus. - Meeting in Chicago in two weeks. CW: AI: make proper agenda. Can CB attend remotely? Yes. - So: let’s discuss shading languages at the F2F. Agenda for next meeting See conclusions.
Received on Friday, 8 September 2017 17:35:02 UTC