- From: Corentin Wallez <cwallez@google.com>
- Date: Wed, 31 May 2017 18:23:53 -0400
- To: public-gpu@w3.org
- Message-ID: <CAGdfWNOTK5kHw_6mAx4_VmpCqk1SyXGtK-u3_zkUUyBAAp7uZw@mail.gmail.com>
GPU Web 2017-05-31 Chair: Corentin Scribe: Dean (with help) Location: Google Hangout Minutes from last meeting <http://www.w3.org/mid/CAGdfWNPW4uVGdBM6EPKAVTWY47dZdbz9EueLGNeAE=3HYVBtag@mail.gmail.com>Tentative agenda - Administrative stuff (if any) - Using the WebGPU Name - Topics we didn’t get to last meeting - Binding model (i.e. how textures, uniforms are passed to shaders) - Base explicit API concepts (pipelines, command buffers, queues) - Render-targets / render passes - Stuff that doesn’t go in (XFB?) - How to reach consensus on WebVulkan vs the alternative - Agenda for next meeting Attendance - Chris Marrin (Apple) - Dean Jackson (Apple) - Jason Aftosmis (Apple) - Julien Chaintron (Apple) - Myles C. Maxfield (Apple) - Warren Moore (Apple) - Theresa O'Connor (Apple) - Austin Eng (Google) - David Neto (Google) - Ken Russell (Google) - Kai Ninomiya (Google) - Zhenyao Mo (Google) - Ricardo Cabello (Google) - Corentin Wallez (Google) - Aleksandar Stojilijkovic (Intel) - Daniel Johnston (Intel) - Rafael Cintron (Microsoft) - Ben Constable (Microsoft) - Chas Boyd (Microsoft) - Jeff Gilbert (Mozilla) - Dzmitry Malyshau (Mozilla) - Kirill Dmitrenko (Yandex) - Doug Twilleager (ZSpace) - Elviss Strazdiņš - Joshua Groves Admin items - Nothing Using the WebGPU Name - CW: We’ve been using different names. I asked Dean if we’re ok with using “WebGPU”. He’s ok with that. - RC: I think it’s fine, but it is already in use in a few places. We might have to come up with something different eventually. - CW: Name of Github org is gpuweb because webgpu was already taken. - MrDoob: It doesn’t matter if the project already is taken on github, because users can have projects with the same name. - Kirill: Is it is really a concern that we can’t use the “WebGPU” organisation on Github? Does - Dean: problem would be if WebGPU is trademark, asked marketing at Apple to figure out. Would certainly be open to giving it to the CG/WG. - CW: There is already a software library with the name WebGPU. That might be confusing. - Dmitri: Using WebGPU might be confusing because it’s Apple’s proposal. Can we start calling that WebMetal? - DJ: Yes, sure. RESOLVED: Use “WebGPU” for now. Refer to Apple’s proposal as WebMetal. Binding model (i.e. how textures, uniforms are passed to shaders) - CW: We looked in to this. The Vulkan model is the most constrained, so maybe is the one we start with as a lowest common denominator. - Dmitri: There is another constraint in D3D12, which is that you can’t mix samplers and non-samplers in the same descriptor heap - ACTION: cwallez/kainino: add this to the Binding Models Investigation doc - RESOLVED: it is linked below. - CW: I’m not sure it is a limitation. Is there a performance concern? - RC: I don’t know the answer. I’ll check. I think we should go for a LCD approach in general. - CW: Metal has a bunch of arrays for textures and samplers and uniforms. You set them all inside that. D3D you have a set of descriptors, and you pass ranges into those sets. Vulkan is slightly similar to D3D12. That’s why our conclusion is that Vulkan is the most performant and flexible towards other APIs. - RC: OK. Let’s go with that for now. I’ll get back to the group if we think there are issues. (Digression into Compute Shaders) - KR: I think we skipped over this too fast. Could someone give a presentation on this, so we’re not give giving a cursory overview? - JG: I think a concrete proposal might be more useful. Establish the proposal and talk about it. A tutorial here might not be the best use of time. - KR: We don’t have a common proposal. - KR: It’s not clear to me how designing or deciding on a binding model in isolation will mesh with some vendor’s goal to simply follow a particular API. e.g. Mozilla with Vulkan - JG: I’m not sure we’ll be choosing between proposals. Rather, we’ll iterate on a single suggestion. - Kirill: There is 3D portability work going on at Khronos trying to do the same thing: find an API that works on all platforms. - CW: The focus there will likely be on making a subset of Vulkan. By default the design will be like Vulkan. I don’t think we can take much from that work. - MM: My claim is that since we’ll be rewriting shaders and new APIs, we can assume that any of the APIs is implementable on each other. Is this true? - CW: Yes, but not always in a performant manner. For example, Vulkan needs to describe the layout of the bindings, where Metal doesn’t. So to go from Metal’s model, you’ll need to rewrite things at runtime. - JG: I think we need to move from this proposal in concept to something in words we can discuss. You need to understand all three APIs. - CW: Take it to a github issue? - RC: I agree with Jeff. Describe what the API would mean in all three platform APIs. Maybe even a prototype. Definitely needs to be more than simply a 1 hour conversation. - CM: Or a strawman with some description of how it maps to the platform APIs. - JG: Agreed. Strawman + iteration. - KR: There is a document and strawman linked here <https://docs.google.com/document/d/1_xeTnk6DlN7YmePQQAlnHndA043rgwBzUYtatk5y7kQ/edit#heading=h.240dgd2ksmw6> - CW: This was made as part of Google’s NXT prototype (only Metal and OpenGL backends). Vulkan backend will be easy. D3D12 won’t be too bad. - Ben: Why would D3D12 be more difficult than Vulkan? - CW: Because we used the Vulkan model as the API. D3D12 would have to emulate Vulkan descriptor layout and pools with root signatures and descriptor heaps respectively - Ben: why not use the D3D12 model? How did you pick Vulkan? - CW: D3D12 descriptor heaps are too flexible w.r.t Vulkans descriptor sets. - Slides for Vulkan <https://docs.google.com/presentation/d/12YSEcLjyYStNDK9EwhPgRq05oIxpTIqC1GdKgJd_Jt4/edit#slide=id.g17c6be9a5e_1_122> - Slide for D3D12 <https://docs.google.com/presentation/d/12YSEcLjyYStNDK9EwhPgRq05oIxpTIqC1GdKgJd_Jt4/edit#slide=id.g17c6be9a5e_1_218> - CW: (Shows the slides on Vulkan and D3D12 binding model) - MM: If we are going with a model with the descriptor set up front, it doesn’t seem like the proof of concept is complete, so we need to have at least one new backend. - CW: Our intern Austin will work on a D3D12 backend. Our analysis was that it will be pretty fast translation. - JG: We don’t require P.o.C that things are possible. A lot of it will be API investigation. - MM: Since Apple’s implementation will be on Metal, it shouldn’t matter too much to us. - CM: I would like to see some P.o.Cs - JG: We’re writing code and deep into specifications. - Ben: I think these runtimes are complicated and it is informative to write the code. Especially with things like Vulkan and D3D12, the specification is not enough to understand all the interactions. I think an implementation like NXT will allow us to find the hidden issues. - JG: Agreed in general. The Vulkan spec is pretty good. D3D12 and Metal are less detailed specifications. - Ben: In our case it was more about trying it on all hardware, rather than the specification itself. E.g. the debug layer that removes performance, but gives you lots of feedback about what you did wrong. Doing that with NXT would be helpful. - JG: Vulkan has a validation layer, but those are all detailed in the specification. - CW: I think the point is that we don’t have detailed specifications on Metal and D3D12, we just have programming guides. Vulkan does have a specification. - Ben: I can take an action to see if we can open up a specification on D3D12, the way we do with IHVs. - Ben: I’ll also help with any work in a D3D12 backend to NXT. - CM: We had a similar issue with WebGL. Different implementations had different constraints. That’s why we were reliant on implementations. I’m not sure better documentation would help completely. - JG: The documentation helps the design process. - CW: Suggestion that the Vulkan specification helps because it is more detailed. Anything we have in that area is useful. - CW: Do we need a prototype to decide on API directions? - JG: I don’t think we do. - KR: I strongly suggest we require prototypes that give us understanding on all the backends. - Ben: I completely agree with what Ken said. We need to go wide before deep. - CM: I third that. We are breaking new ground. We have to try things out. - JG: The problem is that we trust the prototype without understanding the implementation requirements. We only built the prototype to superficial requirements. - Ben: It’s just a prototype to inform discussion. I will never trust what we are building if we don’t have a prototype. Are you worried that people will get attached to the code? - JG: It’s more about misunderstanding the API. e.g. write a test, a prototype, everything looks good but you have a misunderstanding about the general case. Your specific cases work. - CW: We should evaluate the prototype design, and investigate all the specifications. - Ben: If we get it wrong, we iterate. The prototype is informative. - JG: Worried that we will short-cut understanding. - Ben: (describes that a prototype from MS would have deep understanding of D3D12 - which is better than a specification) - Chas: We’ve learnt through D3D12 that reference source code is better than specifications. Use Github to have multiple implementers contribute code. - CM: WebGL benefitted from having multiple implementations, to inform the specification. - CW: That’s the idea of an MVP. - CW: We’re working hard on NXT. Coming up with a D3D12 backend soon. Compute Shaders - Elviss: What about calculation APIs like OpenCL? Could this be used? - CW: There is a goal for compute shaders. It’s not quite the same. - Elviss: Is it textures? - JG: Do we want compute in V0? - CW: I think so. - JG: I’m not sure. It’s useful, but should be on the cutting block if necessary. - CW: Lots of engines use compute shaders. - MM: Compute shaders are conceptually more simple than graphics pipeline, so I don’t think we should rule it out now. - RC: It depends on how long it takes (beyond drawing a triangle). Let’s get feedback on graphics first and build compute as we’re iterating. - CW: The biggest difficulty will be getting the shader translator working, due to the fact they have random access to memory inside the shader. It will be difficult to secure. - Dmitri: Tempting to only support one graphics queue if you don’t do compute. RESOLVED: Compute Shaders to be in the MVP, but not a top priority. Agenda for next meeting - Topics for next meeting. Proposal: - Base explicit API concepts (pipelines, command buffers, queues) - Render-targets / render passes - Stuff that doesn’t go in (XFB?) - RC: Eventually we’ll have to have the day of reckoning about shaders :)
Received on Wednesday, 31 May 2017 22:24:49 UTC