Cogs.Core
BuffersWebGPU.h
1#pragma once
2
3#include "CommonWebGPU.h"
4
5#include "../Common.h"
6#include "../Flags.h"
7#include "../Base/BuffersCommon.h"
8#include "../VertexFormat.h"
9
10#include "../Base/ResourceMap.h"
11
12namespace Cogs {
13 class BuffersWebGPU;
14 class GraphicsDeviceWebGPU;
15
16 struct BufferWebGPU {
17 WGPUBuffer buffer;
18 size_t size;
19 void *map;
20 bool is_read_buffer;
21
22 uint32_t accessMode;
23 uint32_t bindFlags;
24
25 uint32_t alias_idx = 0;
26 std::vector<WGPUBuffer> alias;
27
28 std::string label;
29
30 void CreateInstance(GraphicsDeviceWebGPU *graphicsDevice, BuffersWebGPU &buffers);
31 void NextInstance(GraphicsDeviceWebGPU *graphicsDevice, BuffersWebGPU &buffers);
32 void ResetInstance();
33 };
35 std::vector<WGPUVertexAttribute> vertex_attributes;
36 std::vector<WGPUVertexBufferLayout> vertex_buffer_layout;
37
38 size_t hash(size_t base)
39 {
40 base = Cogs::hash(vertex_attributes.data(), vertex_attributes.size()*sizeof(vertex_attributes[0]), base);
41 base = Cogs::hash(vertex_buffer_layout.data(), vertex_buffer_layout.size()*sizeof(vertex_buffer_layout[0]), base);
42 return base;
43 }
44 };
45
47 public:
48 void initialize(GraphicsDeviceWebGPU *device);
49 void resetInstances();
50
51 virtual void annotate(BufferHandle handle, const StringView& name) override;
52 virtual void annotate(VertexBufferHandle handle, const StringView& name) override;
53
54 virtual VertexBufferHandle loadVertexBuffer(const void* /*vertexData*/, const size_t /*count*/, const VertexFormat& vertexFormat) override;
55
56 virtual VertexBufferHandle loadVertexBuffer(const void* /*vertexData*/, const size_t /*count*/, VertexFormatHandle /*vertexFormatHandle*/) override;
57
58 virtual void releaseVertexBuffer(VertexBufferHandle vertexBufferHandle) override;
59
60 virtual IndexBufferHandle loadIndexBuffer(const void* /*indexData*/, const size_t /*count*/, const size_t /*indexSize*/) override;
61
62 virtual void releaseIndexBuffer(IndexBufferHandle indexBufferHandle) override;
63
64 virtual InputLayoutHandle loadInputLayout(const VertexFormatHandle* vertexFormats, const size_t count, EffectHandle effectHandle) override;
65 virtual void releaseInputLayout(InputLayoutHandle inputLayoutHandle) override;
66
67 virtual BufferHandle loadBuffer(const void* /*data*/, const size_t /*size*/, Usage::EUsage /*usage*/, uint32_t /*accessMode*/, uint32_t /*bindFlags*/, uint32_t /*stride*/ = 0) override;
68
69 virtual void releaseBuffer(BufferHandle bufferHandle) override;
70
71 virtual void* getNativeHandle(BufferHandle bufferHandle) override;
72
73 virtual void releaseResources() override {
74 }
75
76 virtual void retrieveSubBuffer(void* /*data*/, BufferHandle /*source*/, const size_t /*offset*/, const size_t /*size*/) override {
77 }
78
79 GraphicsDeviceWebGPU *graphicsDevice = nullptr;
80
81 size_t bufferMemoryConsumption = 0;
82
84
86 };
87}
virtual IndexBufferHandle loadIndexBuffer(const void *, const size_t, const size_t) override
Loads a new index buffer and populates it with the given indexData.
virtual void annotate(BufferHandle handle, const StringView &name) override
Associate a name with an object for use in graphics debugging.
virtual VertexBufferHandle loadVertexBuffer(const void *, const size_t, const VertexFormat &vertexFormat) override
Loads a new vertex buffer and populates it with the given data.
virtual void releaseVertexBuffer(VertexBufferHandle vertexBufferHandle) override
Release the vertex buffer with the given handle.
virtual InputLayoutHandle loadInputLayout(const VertexFormatHandle *vertexFormats, const size_t count, EffectHandle effectHandle) override
Loads a new input layout to map vertex flow between vertex buffers with the given vertexFormats to ef...
virtual void retrieveSubBuffer(void *, BufferHandle, const size_t, const size_t) override
Retrieves the contents of a buffer.
Definition: BuffersWebGPU.h:76
virtual BufferHandle loadBuffer(const void *, const size_t, Usage::EUsage, uint32_t, uint32_t, uint32_t=0) override
Loads a new buffer using the given data to populate the buffer.
virtual void * getNativeHandle(BufferHandle bufferHandle) override
Get the device-specific handle (D3D buffer pointer, OpenGL buffer ID etc) associated with the given b...
virtual void releaseBuffer(BufferHandle bufferHandle) override
Releases the buffer with the given bufferHandle.
virtual void releaseInputLayout(InputLayoutHandle inputLayoutHandle) override
Releases the input layout with the given inputLayoutHandle.
virtual void releaseResources() override
Releases all allocated buffer resources.
Definition: BuffersWebGPU.h:73
virtual void releaseIndexBuffer(IndexBufferHandle indexBufferHandle) override
Releases the index buffer with the given handle.
Provides a weakly referenced view over the contents of a string.
Definition: StringView.h:50
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
constexpr size_t hash() noexcept
Simple getter function that returns the initial value for fnv1a hashing.
Definition: HashFunctions.h:62
EUsage
Usage enumeration.
Definition: Flags.h:24
Vertex format structure used to describe a single vertex for the input assembler.
Definition: VertexFormat.h:60