Donner SVG 0.8.0-pre
SVG editor and embeddable C⁠+⁠+⁠20 engine.
Loading...
Searching...
No Matches
Handles.h File Reference

Move-only RAII, generation-checked resource handles for donner::gpu. More...

#include <cstdint>
#include <memory>
#include <ostream>
Include dependency graph for Handles.h:
This graph shows which files directly or indirectly include this file:

Classes

struct  donner::gpu::ResourceIdentity
 Identity of a resource at a point in time: slot plus generation, so slot reuse cannot alias two different resources. More...
class  donner::gpu::Handle< Tag >
 Move-only RAII handle to a device resource. More...
class  donner::gpu::HandleRef< Tag >
 Copyable non-owning reference to a Handle, used inside descriptor structs. More...
struct  donner::gpu::BufferTag
 Tag for Buffer handles. More...
struct  donner::gpu::TextureTag
 Tag for Texture handles. More...
struct  donner::gpu::TextureViewTag
 Tag for TextureView handles. More...
struct  donner::gpu::SamplerTag
 Tag for Sampler handles. More...
struct  donner::gpu::BindGroupLayoutTag
 Tag for BindGroupLayout handles. More...
struct  donner::gpu::BindGroupTag
 Tag for BindGroup handles. More...
struct  donner::gpu::PipelineLayoutTag
 Tag for PipelineLayout handles. More...
struct  donner::gpu::ShaderModuleTag
 Tag for ShaderModule handles. More...
struct  donner::gpu::RenderPipelineTag
 Tag for RenderPipeline handles. More...
struct  donner::gpu::ComputePipelineTag
 Tag for ComputePipeline handles. More...
struct  donner::gpu::SurfaceTag
 Tag for Surface handles. More...
struct  donner::gpu::BufferMappingTag
 Tag for BufferMapping handles. More...
struct  donner::gpu::CommandBufferTag
 Tag for CommandBuffer handles. More...

Namespaces

namespace  donner
 Top-level Donner namespace, which is split into different sub-namespaces such as donner::svg and donner::css.

Typedefs

using donner::gpu::Buffer = Handle<BufferTag>
 Buffer handle.
using donner::gpu::Texture = Handle<TextureTag>
 Texture handle.
using donner::gpu::TextureView = Handle<TextureViewTag>
 Texture view handle.
using donner::gpu::Sampler = Handle<SamplerTag>
 Sampler handle.
using donner::gpu::BindGroupLayout = Handle<BindGroupLayoutTag>
 Bind group layout handle.
using donner::gpu::BindGroup = Handle<BindGroupTag>
 Bind group handle.
using donner::gpu::PipelineLayout = Handle<PipelineLayoutTag>
 Pipeline layout handle.
using donner::gpu::ShaderModule = Handle<ShaderModuleTag>
 Shader module handle.
using donner::gpu::Surface = Handle<SurfaceTag>
 Surface handle.
using donner::gpu::BufferMapping = Handle<BufferMappingTag>
 Buffer mapping handle.
using donner::gpu::RenderPipeline = Handle<RenderPipelineTag>
 Render pipeline handle.
using donner::gpu::ComputePipeline = Handle<ComputePipelineTag>
 Compute pipeline handle.
using donner::gpu::CommandBuffer = Handle<CommandBufferTag>
 Finished command buffer handle.
using donner::gpu::BufferRef = HandleRef<BufferTag>
 Buffer reference.
using donner::gpu::TextureRef = HandleRef<TextureTag>
 Texture reference.
using donner::gpu::TextureViewRef = HandleRef<TextureViewTag>
 Texture view reference.
using donner::gpu::SamplerRef = HandleRef<SamplerTag>
 Sampler reference.
using donner::gpu::BindGroupLayoutRef = HandleRef<BindGroupLayoutTag>
 Bind group layout reference.
using donner::gpu::BindGroupRef = HandleRef<BindGroupTag>
 Bind group reference.
using donner::gpu::PipelineLayoutRef = HandleRef<PipelineLayoutTag>
 Pipeline layout reference.
using donner::gpu::ShaderModuleRef = HandleRef<ShaderModuleTag>
 Shader module reference.
using donner::gpu::RenderPipelineRef = HandleRef<RenderPipelineTag>
 Render pipeline reference.
using donner::gpu::ComputePipelineRef = HandleRef<ComputePipelineTag>
 Compute pipeline reference.

Functions

template<typename Tag>
void donner::gpu::PrintTo (const Handle< Tag > &handle, std::ostream *os)
 gtest PrintTo support: prints <name>#<slot>@<generation> or <name>(null).
template<typename Tag>
void donner::gpu::PrintTo (const HandleRef< Tag > &ref, std::ostream *os)
 gtest PrintTo support: prints <name>#<slot>@<generation> or <name>(null).

Detailed Description

Move-only RAII, generation-checked resource handles for donner::gpu.

Destroying a live handle releases its resource through the owning device. Teardown ordering is safe in every direction: an explicit Device::destroy*(std::move(handle)) call makes the RAII release a no-op, and a handle destroyed after its device holds an expired device-alive token, so the release is skipped (device teardown already freed everything that remained). Backend objects referenced by in-flight submissions are additionally kept alive by the device's deferred-destruction queue, so an RAII release never destroys a backend object the GPU is still using.

Function Documentation

◆ PrintTo() [1/2]

template<typename Tag>
void donner::gpu::PrintTo ( const Handle< Tag > & handle,
std::ostream * os )

gtest PrintTo support: prints <name>#<slot>@<generation> or <name>(null).

Parameters
handleHandle to print.
osOutput stream.

◆ PrintTo() [2/2]

template<typename Tag>
void donner::gpu::PrintTo ( const HandleRef< Tag > & ref,
std::ostream * os )

gtest PrintTo support: prints <name>#<slot>@<generation> or <name>(null).

Parameters
refReference to print.
osOutput stream.