tess 0.4.0
Performance-first tile and path simulation substrate
Loading...
Searching...
No Matches
backend.h
1#pragma once
2
3#include <tess/gpu/descriptors.h>
4
5#include <concepts>
6#include <cstdint>
7
8// M13 GPU backend concept: compile-time polymorphic, supplied by the
9// game or a plugin, never required. tess defines what a backend must
10// answer (capabilities) and accept (uploads, dispatches, readbacks);
11// NoGpuBackend is the default that compiles everywhere and refuses
12// everything, so CPU-only builds carry zero GPU obligations.
13namespace tess::gpu {
14
21 bool compute = false;
22 bool async_dispatch = false;
23 bool async_readback = false;
24 std::uint64_t max_buffer_bytes = 0;
25 std::uint64_t max_dispatch_chunks = 0;
26 std::uint32_t buffer_alignment = 0;
27
28 friend constexpr auto operator==(const GpuCapabilities&,
29 const GpuCapabilities&) noexcept
30 -> bool = default;
31};
32
39template <typename B>
40concept GpuBackend =
41 requires(B& backend, const B& const_backend, const UploadDesc& upload,
42 const DispatchDesc& dispatch, const ReadbackDesc& readback) {
43 {
44 const_backend.capabilities()
45 } noexcept -> std::same_as<GpuCapabilities>;
46 { backend.upload(upload) } -> std::same_as<bool>;
47 { backend.dispatch(dispatch) } -> std::same_as<bool>;
48 { backend.readback(readback) } -> std::same_as<bool>;
49 };
50
53 [[nodiscard]] constexpr auto capabilities() const noexcept
55 return GpuCapabilities{};
56 }
57
58 [[nodiscard]] constexpr auto upload(const UploadDesc&) noexcept -> bool {
59 return false;
60 }
61
62 [[nodiscard]] constexpr auto dispatch(const DispatchDesc&) noexcept -> bool {
63 return false;
64 }
65
66 [[nodiscard]] constexpr auto readback(const ReadbackDesc&) noexcept -> bool {
67 return false;
68 }
69};
70
71static_assert(GpuBackend<NoGpuBackend>);
72
73} // namespace tess::gpu
Definition backend.h:40
Definition descriptors.h:161
Definition backend.h:20
Definition backend.h:52
Definition descriptors.h:179
Definition descriptors.h:133