• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2021 The Dawn Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef DAWNNATIVE_SCRATCHBUFFER_H_
16 #define DAWNNATIVE_SCRATCHBUFFER_H_
17 
18 #include "common/RefCounted.h"
19 #include "dawn_native/Buffer.h"
20 
21 #include <cstdint>
22 
23 namespace dawn_native {
24 
25     class DeviceBase;
26 
27     // A ScratchBuffer is a lazily allocated and lazily grown GPU buffer for intermittent use by
28     // commands in the GPU queue. Note that scratch buffers are not zero-initialized, so users must
29     // be careful not to exposed uninitialized bytes to client shaders.
30     class ScratchBuffer {
31       public:
32         // Note that this object does not retain a reference to `device`, so `device` MUST outlive
33         // this object.
34         ScratchBuffer(DeviceBase* device, wgpu::BufferUsage usage);
35         ~ScratchBuffer();
36 
37         // Resets this ScratchBuffer, guaranteeing that the next EnsureCapacity call allocates a
38         // fresh buffer.
39         void Reset();
40 
41         // Ensures that this ScratchBuffer is backed by a buffer on `device` with at least
42         // `capacity` bytes of storage.
43         MaybeError EnsureCapacity(uint64_t capacity);
44 
45         BufferBase* GetBuffer() const;
46 
47       private:
48         DeviceBase* const mDevice;
49         const wgpu::BufferUsage mUsage;
50         Ref<BufferBase> mBuffer;
51     };
52 
53 }  // namespace dawn_native
54 
55 #endif  // DAWNNATIVE_SCRATCHBUFFER_H_
56