- 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