| /* | 
 |  * Copyright 2019 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #ifndef GrDawnRingBuffer_DEFINED | 
 | #define GrDawnRingBuffer_DEFINED | 
 |  | 
 | #include "src/gpu/GrBuffer.h" | 
 | #include "src/gpu/dawn/GrDawnBuffer.h" | 
 | #include "dawn/webgpu_cpp.h" | 
 |  | 
 | class GrDawnGpu; | 
 |  | 
 | class GrDawnRingBuffer : public SkRefCnt { | 
 | public: | 
 |     GrDawnRingBuffer(GrDawnGpu* gpu, wgpu::BufferUsage usage); | 
 |     ~GrDawnRingBuffer() override; | 
 |  | 
 |     struct Slice { | 
 |         Slice(wgpu::Buffer buffer, int offset, void* data) | 
 |           : fBuffer(buffer), fOffset(offset), fData(data) {} | 
 |         Slice() | 
 |           : fBuffer(nullptr), fOffset(0), fData(nullptr) {} | 
 |         Slice(const Slice& other) | 
 |           : fBuffer(other.fBuffer), fOffset(other.fOffset), fData(other.fData) {} | 
 |         Slice& operator=(const Slice& other) { | 
 |             fBuffer = other.fBuffer; | 
 |             fOffset = other.fOffset; | 
 |             fData = other.fData; | 
 |             return *this; | 
 |         } | 
 |         wgpu::Buffer fBuffer; | 
 |         int          fOffset; | 
 |         void*        fData; | 
 |     }; | 
 |     Slice allocate(int size); | 
 |  | 
 | private: | 
 |     GrDawnGpu*            fGpu; | 
 |     wgpu::BufferUsage     fUsage; | 
 |     wgpu::Buffer          fBuffer; | 
 |     int                   fOffset = 0; | 
 | }; | 
 |  | 
 | #endif |