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