Open 3D Engine Atom Gem API Reference 23.10.0
O3DE is an open-source, fully-featured, high-fidelity, modular 3D engine for building games and simulations, available to every industry.
AZ::RHI::QueryPool Class Reference

#include <QueryPool.h>

Inherits AZ::RHI::ResourcePool.

Inherited by AZ::DX12::QueryPool, AZ::Metal::QueryPool, AZ::Null::QueryPool, and AZ::Vulkan::QueryPool.

Public Member Functions

ResultCode Init (Device &device, const QueryPoolDescriptor &descriptor)
 Initialize the QueryPool.
 
ResultCode InitQuery (Query *query)
 
ResultCode InitQuery (Query **queries, uint32_t queryCount)
 
ResultCode GetResults (uint64_t *results, uint32_t resultsCount, QueryResultFlagBits flags)
 
ResultCode GetResults (Query *query, uint64_t *result, uint32_t resultsCount, QueryResultFlagBits flags)
 Same as GetResults(uint64_t, uint32_t, QueryResultFlagBits) but for one specific Query.
 
ResultCode GetResults (Query **queries, uint32_t queryCount, uint64_t *results, uint32_t resultsCount, QueryResultFlagBits flags)
 
const QueryPoolDescriptorGetDescriptor () const override final
 
const QueryGetQuery (QueryHandle handle) const
 Returns the query by their handle.
 
- Public Member Functions inherited from AZ::RHI::ResourcePool
 AZ_RTTI (ResourcePool, "{757EB674-25DC-4D00-9808-D3DAF33A4EFE}", DeviceObject)
 
void Shutdown () override final
 Shuts down the pool. This method will shutdown all resources associated with the pool.
 
template<typename ResourceType >
void ForEach (AZStd::function< void(ResourceType &)> callback)
 
template<typename ResourceType >
void ForEach (AZStd::function< void(const ResourceType &)> callback) const
 
uint32_t GetResourceCount () const
 Returns the number of resources in the pool.
 
ResourcePoolResolverGetResolver ()
 Returns the resolver for this pool.
 
const ResourcePoolResolverGetResolver () const
 
virtual const ResourcePoolDescriptorGetDescriptor () const =0
 Returns the resource pool descriptor.
 
const HeapMemoryUsageGetHeapMemoryUsage (HeapMemoryLevel heapMemoryLevel) const
 Returns the memory used by this pool for a specific heap type.
 
const PoolMemoryUsageGetMemoryUsage () const
 Returns the memory used by this pool.
 
- Public Member Functions inherited from AZ::RHI::DeviceObject
 AZ_RTTI (DeviceObject, "{17D34F71-944C-4AF5-9823-627474C4C0A6}", Object)
 
bool IsInitialized () const
 Returns whether the device object is initialized.
 
DeviceGetDevice () const
 
- Public Member Functions inherited from AZ::RHI::Object
 AZ_RTTI (Object, "{E43378F1-2331-4173-94B8-990ED20E6003}")
 
void SetName (const Name &name)
 Sets the name of the object.
 
const Name & GetName () const
 Returns the name set on the object by SetName.
 
uint32_t use_count ()
 Returns the current use count of the object.
 

Protected Member Functions

QueryGetQuery (QueryHandle handle)
 
template<class T >
AZStd::vector< IntervalGetQueryIntervals (const AZStd::vector< T * > &queries)
 
template<class T >
AZStd::vector< IntervalGetQueryIntervalsSorted (const AZStd::vector< T * > &queries)
 
template<class T >
void SortQueries (AZStd::vector< T * > &queries)
 
void ComputeFragmentation () const override
 
- Protected Member Functions inherited from AZ::RHI::ResourcePool
void OnFrameBegin () override
 
void OnFrameCompile () override
 
void OnFrameEnd () override
 
void SetResolver (AZStd::unique_ptr< ResourcePoolResolver > &&resolvePolicy)
 
virtual void ComputeFragmentation () const =0
 
ResultCode Init (Device &device, const ResourcePoolDescriptor &descriptor, const PlatformMethod &initMethod)
 
ResultCode InitResource (Resource *resource, const PlatformMethod &initResourceMethod)
 
bool ValidateIsRegistered (const Resource *resource) const
 
bool ValidateIsUnregistered (const Resource *resource) const
 
bool ValidateIsInitialized () const
 Validates that the resource pool is initialized and ready to service requests.
 
bool ValidateNotProcessingFrame () const
 Validates that we are not in the frame processing phase.
 
- Protected Member Functions inherited from AZ::RHI::DeviceObject
void Init (Device &device)
 The derived class should call this method to assign the device.
 
void Shutdown () override
 Clears the current bound device to null.
 
- Protected Member Functions inherited from AZ::RHI::Object
void add_ref () const
 
void release () const
 

Additional Inherited Members

- Protected Types inherited from AZ::RHI::ResourcePool
using PlatformMethod = AZStd::function< RHI::ResultCode()>
 A simple functor that returns a result code.
 
- Protected Attributes inherited from AZ::RHI::ResourcePool
PoolMemoryUsage m_memoryUsage
 
- Protected Attributes inherited from AZ::RHI::Object
AZStd::atomic_int m_useCount = 0
 

Detailed Description

Query pool provides backing storage and context for query instances. The QueryPoolDescriptor contains properties defining memory characteristics of query pools. All queries created on a pool share the same backing and type.

Member Function Documentation

◆ ComputeFragmentation()

void AZ::RHI::QueryPool::ComputeFragmentation ( ) const
inlineoverrideprotectedvirtual

Compute the memory fragmentation for each constituent heap and store the results in m_memoryUsage. This method is invoked when memory statistics gathering is active.

Implements AZ::RHI::ResourcePool.

◆ GetDescriptor()

const QueryPoolDescriptor & AZ::RHI::QueryPool::GetDescriptor ( ) const
finaloverridevirtual

Returns the buffer descriptor used to initialize the query pool. Descriptor contents are undefined for uninitialized pools.

Implements AZ::RHI::ResourcePool.

◆ GetQueryIntervals()

template<class T >
AZStd::vector< Interval > AZ::RHI::QueryPool::GetQueryIntervals ( const AZStd::vector< T * > &  queries)
protected

Find groups of consecutive QueryHandle values from a list of unsorted queries.

Parameters
queriesThe list of queries to search.

◆ GetQueryIntervalsSorted()

template<class T >
AZStd::vector< Interval > AZ::RHI::QueryPool::GetQueryIntervalsSorted ( const AZStd::vector< T * > &  queries)
protected

Find groups of consecutive QueryHandle values from a list of sorted queries.

Parameters
queriesThe list of sorted queries to search.

◆ GetResults() [1/2]

ResultCode AZ::RHI::QueryPool::GetResults ( Query **  queries,
uint32_t  queryCount,
uint64_t *  results,
uint32_t  resultsCount,
QueryResultFlagBits  flags 
)

Same as GetResults(uint64_t, uint32_t, QueryResultFlagBits) but for a list of queries. It's more efficient if the list of queries is sorted by handle in ascending order because there's no need to sort the results before returning.

◆ GetResults() [2/2]

ResultCode AZ::RHI::QueryPool::GetResults ( uint64_t *  results,
uint32_t  resultsCount,
QueryResultFlagBits  flags 
)

Get the results from all queries in the pool. Results are always returned as uint64_t data. The "results" parameter must contain enough space to save the results from all queries in the pool. For the PipelineStatistics query type, each statistic will be copied to a uint64_t. Because of this the "results" array must contain enough space for numQueries * numPipelineStatistics. This function doesn't return partial results. In case of failure no results are returned.

Parameters
resultsPointer to an array where the results will be copied.
resultsCountNumber of elements of the "results" array.
QueryResultFlagBitsControl how the results will be requested. If QueryResultFlagBits::Wait is used the call will block until the results are done. If QueryResultFlagBits::Wait is not used and the results are not ready, ResultCode::NotReady will be returned

◆ InitQuery() [1/2]

ResultCode AZ::RHI::QueryPool::InitQuery ( Query **  queries,
uint32_t  queryCount 
)

Initialize a group of queries from the pool. The initialization will try to allocate the queries in a consecutive space. The reason for this is that is more efficient when requesting results or copying multiple query results.

Parameters
queriesPointer to an array of queries to initialize.
queryCountNumber of queries.

◆ InitQuery() [2/2]

ResultCode AZ::RHI::QueryPool::InitQuery ( Query query)

Initialize a query from the pool. When initializing multiple queries use the other version of InitQuery because the pool will try to group the queries together.

Parameters
queryQuery to initialize.

The documentation for this class was generated from the following file: