Minutes for the 2017-05-17 meeting

Hey all,

Please find below the minutes for yesterday's kickoff meeting.

Cheers,

Corentin

Attendance

   -

   Jason Aftosmis (Apple)
   -

   Julien Chaintron (Apple)
   -

   Warren Moore (Apple)
   -

   Gareth Morgan (Axum Graphics)
   -

   Ken Russell (Google)
   -

   Kai Ninomiya (Google)
   -

   Zhenyao Mo (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)
   -

   Daosheng Mu (Mozilla)
   -

   Doug Twilleager (ZSpace)
   -

   Joshua Groves
   -

   Tyler Larson



Administrative stuff, if any

Nothing, yay!



Quick contribution roundtable

   -

   Apple's WebGPU
   <https://github.com/gpuweb/proposals/tree/master/WebGPU-Apple>
   -

      Recently added compute shaders and more examples
      -

      Shipped in the Safari technical preview



   -

   Mozilla's Obsidian
   <https://github.com/KhronosGroup/WebGLNext-Proposals/tree/master/Obsidian-Mozilla>
   -

      Starting from Vulkan moving towards other APIs as needed
      -

      Rationale is that it can take advantage of the existing spec etc.
      -

      Didn’t get to push an update yet.



   -

   Google's NXT <https://github.com/google/nxt-standalone>
   -

      Starting at barycenter of all APIs, trying to reach equilibrium faster
      -

      Have a document that covers most features
      -

      Working on bigger features recently. Have error notifications; Kai
      working on render passes.



Discussion of goals and constraints

   -

   Portability
   -

      For this to be a successful web API it needs to work everywhere with
      little effort
      -

         Metal, D3D12, Vulkan – maybe with feature levels / extensions
         -

      How reproducible should things be between different hardware, etc.?
      -

      This has been a point of contention
      -

      As more customers used WebGL, we tied up undefined behaviors in the
      spec and this made it so more and more content was portable with no
      additional effort. We should piggy-back on this.
      -

      Should minimize UB on everything but the perf critical paths.
      -

      Obsidian’s approach to UB is a bit more defined because it says you
      get value you wrote before.
      -

      Ken: this is just one aspect of the UB
      -

         There are many aspects of the API that will have to be analyzed
         -

      Undefined behavior inside shaders is probably infeasible to eliminate
      -

         Think: lock-free algorithms with shader atomics
         -

      OpenGL: dithering not defined for example
      -

      One concern about the Vulkan API’s design: get a buffer, then get
      memory requirements for a buffer, then place it in memory
      -

         Application has to conform to the behavior of the driver to avoid
         undefined behavior
         -

         Jeff: this is an application bug.
         -

         Ken: impossible for all developers to test on a large enough range
         of devices
         -

         For at least some of these situations, if the app developer isn’t
         up to it, Jeff’s recommendation is to use WebGL 2.0
         -

      Jeff thinks it’s not as necessary to make this API foolproof as it
      was to make WebGL 1.0 and 2.0 reproducible
      -

      Previous comment from Christophe from Unity: making a Vulkan backend
      is easy, but making it work across all devices is hard
      -

         If we subsume some of the difficulty of porting, it’ll make it
         easier for developers
         -

      D3D9 allowed you to have a texture bound for sampling and rendering;
      sampled as black. Tightening up the undefined behavior made code more
      portable.
      -

      Ben C.: there’s a difference between undefined behavior and
      non-portability
      -

      Dzmitry: ok to remove UB cases in Obsidian point by point basis
      -

   Security
   -

      Web page should not be able to crash the OS or browser
      -

         Crashing a tab is “okay-ish”
         -

      Should not be able to access data it’s not allowed to
      -

      In particular, uninitialized VRAM and cross-domain data
      -

      Different levels:
      -

         DoS, like device reset.
         -

         Information disclosure, including outside of process
         -

      WebGL 1.0 and 2.0: can TDR and/or hang the machine
      -

         Have to be careful about setting goals beyond what we’re achieving
         now with other platforms
         -

      Mozilla: getting information across boundaries is a high severity
      vulnerability; but crashing the browser is only security level “DoS”
      -

      It would for example be possible to cause the whole browser to fall
      back to software rasterization, causing a perf penalty to other pages.
      -

      The Vulkan WG has talked about robustness with a watchdog in the
      driver like on Windows
      -

      Not sure how robustness works on Apple.
      -

         Some work was done on both macOS and iOS to make the drivers
         handle GPU resets more gracefully
         -

      Microsoft has been working with vendors to make preemption more
      granular.
      -

      Some UB/Repro behavior has led to security issues in the past.
      -

   Undefined behavior / Reproducibility
   -

      Obsidian is a little more free-wheeling about undefined behavior and
      values
      -

         Require they are safe
         -

         If they are undefined, but sources of your previous renderings,
         treated as OK
         -

         Better for the API if we reduce the number of such undefined
         behaviors
         -

         Clarification: not saying all UB is fine, but ok to give driver
         choice in implementation and UB is ok if it comes from
previous resources
         the page owned.
         -

      Could we have a principle that any reproducibility / undefined
      behavior that’s found to be a security issue on one platform, be
treated as
      a security issue from then on?
      -

         Don’t think we have to automatically say that if there’s one
         driver that handles undefined values badly, it should be a
security issue
         forever
         -

         Treat it on a case-by-case basis
         -

   Performance
   -

      Fast is good
      -

      80% of native at least
      -

   WebAssembly first class
   -

      Agreement that it is
      -

      Some multithreaded API usage support is essential, that’s one of the
      main selling points of D3D12 and Vulkan
      -

   Web workers?
   -

      NXT’s objects are mutable only until constructed, which makes things
      easier
      -

         May be possible to construct command buffers on web workers and
         transfer and enqueue them on another thread
         -

      Resource deallocation becomes tricky
      -

      Command buffer writing is fairly straightforward to validate
      -

         BeginCommandBuffer – requires synchronization
         -

         Then all other threads are locked out
         -

      Metal has ParallelRenderEncoder
      -

         Dzmitry: It sounds like ParallelRenderEncoders all encode to the
         same encoder but what we want is parallel encoding to
different encoders
         -

         Will need to investigate
         -

   Ease of porting
   -

      One of the big challenges is how to port content
      -

      Should provide an easy path for applications to target the new API
      without too much work (like a full new backend)
      -

      Jeff: talked to partners that want to minimize number of backend. A
      translation layer from one of the explicit APIs to the Web API would make
      them happy.
      -

      It is ok if the translation is not perfect perf-wise and
      compatibility-wise
      -

      Offering a wrapper to an existing native API is strongly desired
      -

         Microsoft agrees. Nice to have, not a requirement
         -

   Network-transparency / Serializability
   -

      API is basically serializable. Important for Chrome at least since
      app lives in separate process from GPU.
      -

      Firefox and Edge are looking at offloading some graphics work to
      other threads/processes.
      -

      There are types of API designs that would be really inefficient in
      Chrome
      -

      Vulkan’s quite a chatty API, for example
      -

         Every call returns a boolean status “did it succeed” – would be
         quite expensive
         -

      OpenGL’s design is that errors are async, they can defer the checking
      and that’s what make WebGL reasonably efficient.
      -

      Jeff agrees that there are some things in the API that shouldn’t
      require a round trip
      -

         But going fully asynchronous and telling people to always expect 1
         ms or more of latency for every synchronous call is not workable
         -

   Content/shape-wise discussion
   -

      Would be good to separately discuss:
      -

         Features of the API
         -

         Syntax of the API



Setup regular meetings

   -

   Weekly sounds good to Mozilla and Microsoft
   -

   Would like to include Dean. 11 AM Pacific is 5 AM Australian time
   -

   Afternoons Pacific time?

Received on Thursday, 18 May 2017 12:10:40 UTC