blob: 0e26369726b7e7103d1cf5e46e4f4dbf865bc520 [file] [log] [blame]
Stephen Whiteb7eaedc2019-08-21 09:48:05 -04001/*
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
13namespace {
14 const int kDefaultSize = 512 * 1024;
15}
16
17GrDawnRingBuffer::GrDawnRingBuffer(GrDawnGpu* gpu, dawn::BufferUsageBit usage)
18 : fGpu(gpu) , fUsage(usage) {
19}
20
21GrDawnRingBuffer::~GrDawnRingBuffer() {
22}
23
24GrDawnRingBuffer::Slice GrDawnRingBuffer::allocate(int size) {
25 if (!fBuffer || fOffset + size > kDefaultSize) {
26 dawn::BufferDescriptor desc;
27 desc.usage = fUsage | dawn::BufferUsageBit::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}