Dawn: implement a ring buffer for uniform uploads.

GrDawnGpu vends ring buffer slices out of a persistent (larger) buffer.

GrDawnProgramDataManager::setData() now returns a BindGroup containing
the (possibly new) UBO bindings, as well as the texture and sampler
bindings.
Change-Id: Id6694d6f44a815cfbffe4293779bf9bf558a2365
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/235866
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/gpu/dawn/GrDawnProgramDataManager.h b/src/gpu/dawn/GrDawnProgramDataManager.h
index 0b2f35e..d74f1ee 100644
--- a/src/gpu/dawn/GrDawnProgramDataManager.h
+++ b/src/gpu/dawn/GrDawnProgramDataManager.h
@@ -8,6 +8,7 @@
 #ifndef GrDawnProgramDataManager_DEFINED
 #define GrDawnProgramDataManager_DEFINED
 
+#include "src/gpu/dawn/GrDawnRingBuffer.h"
 #include "src/gpu/dawn/GrDawnUniformHandler.h"
 #include "src/gpu/glsl/GrGLSLProgramDataManager.h"
 #include "dawn/dawncpp.h"
@@ -57,8 +58,11 @@
         SK_ABORT("Only supported in NVPR, which is not in Dawn");
     }
 
-    void uploadUniformBuffers(dawn::Buffer geometryBuffer, dawn::Buffer fragmentBuffer) const;
+    void uploadUniformBuffers(GrDawnRingBuffer::Slice geometryBuffer,
+                              GrDawnRingBuffer::Slice fragmentBuffer) const;
 
+    uint32_t geometryUniformSize() const { return fGeometryUniformSize; }
+    uint32_t fragmentUniformSize() const { return fFragmentUniformSize; }
 private:
     struct Uniform {
         uint32_t fBinding;