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 #include "src/gpu/dawn/GrDawnRingBuffer.h"
9 
10 #include "src/gpu/dawn/GrDawnGpu.h"
11 #include "src/gpu/dawn/GrDawnUtil.h"
12 
13 namespace {
14     const int kDefaultSize = 512 * 1024;
15 }
16 
GrDawnRingBuffer(GrDawnGpu * gpu,dawn::BufferUsage usage)17 GrDawnRingBuffer::GrDawnRingBuffer(GrDawnGpu* gpu, dawn::BufferUsage usage)
18     : fGpu(gpu) , fUsage(usage) {
19 }
20 
~GrDawnRingBuffer()21 GrDawnRingBuffer::~GrDawnRingBuffer() {
22 }
23 
allocate(int size)24 GrDawnRingBuffer::Slice GrDawnRingBuffer::allocate(int size) {
25     if (!fBuffer || fOffset + size > kDefaultSize) {
26         dawn::BufferDescriptor desc;
27         desc.usage = fUsage | dawn::BufferUsage::CopyDst;
28         desc.size = kDefaultSize;
29         fBuffer = fGpu->device().CreateBuffer(&desc);
30         fOffset = 0;
31     }
32     int offset = fOffset;
33     fOffset += size;
34     fOffset = GrDawnRoundRowBytes(fOffset);
35     return Slice(fBuffer, offset);
36 }
37