1 /* 2 * Copyright 2019 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrDawnRingBuffer_DEFINED 9 #define GrDawnRingBuffer_DEFINED 10 11 #include "src/gpu/GrBuffer.h" 12 #include "src/gpu/dawn/GrDawnBuffer.h" 13 #include "dawn/webgpu_cpp.h" 14 15 class GrDawnGpu; 16 17 class GrDawnRingBuffer : public SkRefCnt { 18 public: 19 GrDawnRingBuffer(GrDawnGpu* gpu, wgpu::BufferUsage usage); 20 ~GrDawnRingBuffer() override; 21 22 struct Slice { SliceSlice23 Slice(wgpu::Buffer buffer, int offset, void* data) 24 : fBuffer(buffer), fOffset(offset), fData(data) {} SliceSlice25 Slice() 26 : fBuffer(nullptr), fOffset(0), fData(nullptr) {} SliceSlice27 Slice(const Slice& other) 28 : fBuffer(other.fBuffer), fOffset(other.fOffset), fData(other.fData) {} 29 Slice& operator=(const Slice& other) { 30 fBuffer = other.fBuffer; 31 fOffset = other.fOffset; 32 fData = other.fData; 33 return *this; 34 } 35 wgpu::Buffer fBuffer; 36 int fOffset; 37 void* fData; 38 }; 39 Slice allocate(int size); 40 void flush(); 41 42 private: 43 GrDawnGpu* fGpu; 44 wgpu::BufferUsage fUsage; 45 wgpu::Buffer fBuffer; 46 wgpu::Buffer fStagingBuffer; 47 void* fData; 48 int fOffset = 0; 49 }; 50 51 #endif 52