7#ifndef PXR_IMAGING_HD_ST_RENDER_BUFFER_POOL_H
8#define PXR_IMAGING_HD_ST_RENDER_BUFFER_POOL_H
12#include "pxr/imaging/hdSt/api.h"
13#include "pxr/imaging/hdSt/renderBuffer.h"
14#include "pxr/imaging/hgi/hgi.h"
15#include "pxr/imaging/hgi/enums.h"
16#include "pxr/imaging/hgi/texture.h"
20#include <unordered_map>
22PXR_NAMESPACE_OPEN_SCOPE
37 std::shared_ptr<HdStRenderBuffer> buffer,
44 HdStRenderBuffer* GetBuffer()
const {
return _buffer.get(); }
46 std::shared_ptr<HdStRenderBuffer> _buffer;
56using HdStPooledRenderBufferUniquePtr = std::unique_ptr<HdStPooledRenderBuffer>;
69 HdStPooledRenderBufferUniquePtr Allocate(
90 struct _PooledRenderBufferDesc
93 bool multiSampled : 1;
96 bool operator==(
const _PooledRenderBufferDesc &other)
const
98 return fmt == other.fmt &&
100 multiSampled == other.multiSampled &&
101 depth == other.depth;
105 size_t operator()(_PooledRenderBufferDesc
const& desc)
const
107 return ((desc.multiSampled | (desc.depth << 2)
109 ^ (desc.dims[0] & 0xFFFF))
110 | ((size_t)(desc.dims[1] & 0xFFFF) << 32);
115 using _HdStRenderBufferVec =
116 std::vector<std::shared_ptr<HdStRenderBuffer>>;
118 class _AllocationTracker
122 void Free(uint16_t index);
125 std::deque<uint16_t> freeList;
128 struct _HdStRenderBufferPoolEntry
130 std::map<const SdfPath, _AllocationTracker> allocs;
131 _HdStRenderBufferVec buffers;
134 std::unordered_map<_PooledRenderBufferDesc,
135 _HdStRenderBufferPoolEntry,
136 _PooledRenderBufferDesc::HashFunctor> _pooledRenderBuffers;
139PXR_NAMESPACE_CLOSE_SCOPE
Basic type for a vector of 2 int components.
Represents a Render Buffer that may be re-used between render graphs Client code has exclusive access...
System for re-using HdStRenderBuffers between tasks in different graphs that regenerate data per-fram...
A central registry of all GPU resources.
A path value used to locate objects in layers or scenegraphs.