xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/wgpu/BufferWgpu.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2024 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // BufferWgpu.h:
7 //    Defines the class interface for BufferWgpu, implementing BufferImpl.
8 //
9 
10 #ifndef LIBANGLE_RENDERER_WGPU_BUFFERWGPU_H_
11 #define LIBANGLE_RENDERER_WGPU_BUFFERWGPU_H_
12 
13 #include "libANGLE/renderer/BufferImpl.h"
14 
15 #include "libANGLE/renderer/wgpu/wgpu_helpers.h"
16 
17 #include <dawn/webgpu_cpp.h>
18 
19 namespace rx
20 {
21 
22 class BufferWgpu : public BufferImpl
23 {
24   public:
25     BufferWgpu(const gl::BufferState &state);
26     ~BufferWgpu() override;
27 
28     angle::Result setData(const gl::Context *context,
29                           gl::BufferBinding target,
30                           const void *data,
31                           size_t size,
32                           gl::BufferUsage usage) override;
33     angle::Result setSubData(const gl::Context *context,
34                              gl::BufferBinding target,
35                              const void *data,
36                              size_t size,
37                              size_t offset) override;
38     angle::Result copySubData(const gl::Context *context,
39                               BufferImpl *source,
40                               GLintptr sourceOffset,
41                               GLintptr destOffset,
42                               GLsizeiptr size) override;
43     angle::Result map(const gl::Context *context, GLenum access, void **mapPtr) override;
44     angle::Result mapRange(const gl::Context *context,
45                            size_t offset,
46                            size_t length,
47                            GLbitfield access,
48                            void **mapPtr) override;
49     angle::Result unmap(const gl::Context *context, GLboolean *result) override;
50 
51     angle::Result getIndexRange(const gl::Context *context,
52                                 gl::DrawElementsType type,
53                                 size_t offset,
54                                 size_t count,
55                                 bool primitiveRestartEnabled,
56                                 gl::IndexRange *outRange) override;
57 
getBuffer()58     webgpu::BufferHelper &getBuffer() { return mBuffer; }
59 
60   private:
61     webgpu::BufferHelper mBuffer;
62 };
63 
64 }  // namespace rx
65 
66 #endif  // LIBANGLE_RENDERER_WGPU_BUFFERWGPU_H_
67