This document is for a version of USD that is under development. See this page for the current release.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
HdBufferSource Class Referenceabstract

A transient buffer of data that has not yet been committed. More...

#include <bufferSource.h>

+ Inheritance diagram for HdBufferSource:

Public Member Functions

virtual TfToken const & GetName () const =0
 Return the name of this buffer source.
 
virtual void GetBufferSpecs (HdBufferSpecVector *specs) const =0
 Add the buffer spec for this buffer source into given bufferspec vector.
 
virtual HD_API size_t ComputeHash () const
 Computes and returns a hash value for the underlying data.
 
virtual bool Resolve ()=0
 Prepare the access of GetData().
 
virtual void const * GetData () const =0
 Following interfaces will be called after Resolve.
 
virtual HdTupleType GetTupleType () const =0
 Returns the data type and count (array size) for this buffer source.
 
virtual size_t GetNumElements () const =0
 Returns the number of elements (e.g.
 
bool IsResolved () const
 Returns true it this computation has already been resolved.
 
bool HasResolveError () const
 Returns true if an error occurred during resolve.
 
HD_API bool IsValid () const
 Checks the validity of the source buffer.
 
Chained Buffers

Buffer sources may be daisy-chained together.

Pre-chained buffer sources typically represent sources that are inputs to computed buffer sources (e.g. coarse vertex privmar data needing to be quadrangulated or refined) and will be scheduled to be resolved along with their owning buffer sources.

Post-chained buffer sources typically represent additional results produced by a computation (e.g. primitive param data computed along with index buffer data) and will be scheduled to be committed along with their owning buffer sources.

virtual HD_API bool HasPreChainedBuffer () const
 Returns true if this buffer has a pre-chained buffer.
 
virtual HD_API HdBufferSourceSharedPtr GetPreChainedBuffer () const
 Returns the pre-chained buffer.
 
virtual HD_API bool HasChainedBuffer () const
 Returns true if this buffer has any chained buffer(s)
 
virtual HD_API HdBufferSourceSharedPtrVector GetChainedBuffers () const
 Returns the vector of chained buffers.
 

Protected Member Functions

void _SetResolved ()
 Marks this buffer source as resolved.
 
void _SetResolveError ()
 Called during Resolve() to indicate an unrecoverable failure occurred and the results of the computation can not be used.
 
bool _TryLock ()
 Non-blocking lock acquisition.
 
virtual bool _CheckValid () const =0
 Checks the validity of the source buffer.
 

Detailed Description

A transient buffer of data that has not yet been committed.

HdBufferSource is an abstract interface class, to be registered to the resource registry with the buffer array range that specifies the destination resource.

Definition at line 38 of file bufferSource.h.

Constructor & Destructor Documentation

◆ HdBufferSource()

HdBufferSource ( )
inline

Definition at line 41 of file bufferSource.h.

Member Function Documentation

◆ _CheckValid()

virtual bool _CheckValid ( ) const
protectedpure virtual

Checks the validity of the source buffer.

This function is called by IsValid() to do the real checking.

Should only be implemented in classes at leafs of the class hierarchy (Please place common validation code in a new non-virtual method)

This code should return false:

  • If the buffer would produce an invalid BufferSpec
  • If a required dependent buffer is invalid For example, return false when: The data type is invalid, causing an invalid BufferSpec.

The resolve step requires a 'source' buffer and that buffer is invalid.

If returning false, the buffer will not be registered with the resource registry. AddBufferSpec and Resolve will not be called

Implemented in HdVtBufferSource, HdStExtCompCpuComputation, HdStExtCompGpuPrimvarBufferSource, and HdStExtCompPrimvarBufferSource.

◆ _SetResolved()

void _SetResolved ( )
inlineprotected

Marks this buffer source as resolved.

It has to be called at the end of Resolve on concrete implementations.

Definition at line 132 of file bufferSource.h.

◆ _SetResolveError()

void _SetResolveError ( )
inlineprotected

Called during Resolve() to indicate an unrecoverable failure occurred and the results of the computation can not be used.

Further calls to Resolve() will not lead to success.

This is different from Resolve() returning false, which indicates that additional calls to Resolve() will eventually lead to success.

This is also later in the pipeline than IsValid, which checks that the buffer is setup such that Resolve() can be successful.

Definition at line 146 of file bufferSource.h.

◆ _TryLock()

bool _TryLock ( )
inlineprotected

Non-blocking lock acquisition.

If no one else is resolving this buffer source, returns true. In that case the caller needs to call _SetResolved at the end of computation. It returns false if anyone else has already acquired lock.

Definition at line 156 of file bufferSource.h.

◆ ComputeHash()

virtual HD_API size_t ComputeHash ( ) const
virtual

Computes and returns a hash value for the underlying data.

Reimplemented in HdComputedBufferSource, HdNullBufferSource, HdStExtCompGpuPrimvarBufferSource, and HdStExtCompPrimvarBufferSource.

◆ GetBufferSpecs()

virtual void GetBufferSpecs ( HdBufferSpecVector *  specs) const
pure virtual

Add the buffer spec for this buffer source into given bufferspec vector.

note: buffer specs has to be determined before the source resolution.

Implemented in HdNullBufferSource, HdVtBufferSource, HdStExtCompGpuPrimvarBufferSource, and HdStExtCompPrimvarBufferSource.

◆ GetChainedBuffers()

virtual HD_API HdBufferSourceSharedPtrVector GetChainedBuffers ( ) const
virtual

Returns the vector of chained buffers.

◆ GetData()

virtual void const * GetData ( ) const
pure virtual

Following interfaces will be called after Resolve.

Returns the raw pointer to the underlying data.

Implemented in HdComputedBufferSource, HdNullBufferSource, HdVtBufferSource, and HdStExtCompPrimvarBufferSource.

◆ GetName()

virtual TfToken const & GetName ( ) const
pure virtual

◆ GetNumElements()

virtual size_t GetNumElements ( ) const
pure virtual

Returns the number of elements (e.g.

VtVec3dArray().GetLength()) from the source array.

Implemented in HdComputedBufferSource, HdNullBufferSource, HdVtBufferSource, HdStExtCompCpuComputation, HdStExtCompGpuPrimvarBufferSource, and HdStExtCompPrimvarBufferSource.

◆ GetPreChainedBuffer()

virtual HD_API HdBufferSourceSharedPtr GetPreChainedBuffer ( ) const
virtual

Returns the pre-chained buffer.

◆ GetTupleType()

virtual HdTupleType GetTupleType ( ) const
pure virtual

Returns the data type and count (array size) for this buffer source.

Implemented in HdComputedBufferSource, HdNullBufferSource, HdVtBufferSource, HdStExtCompGpuPrimvarBufferSource, and HdStExtCompPrimvarBufferSource.

◆ HasChainedBuffer()

virtual HD_API bool HasChainedBuffer ( ) const
virtual

Returns true if this buffer has any chained buffer(s)

◆ HasPreChainedBuffer()

virtual HD_API bool HasPreChainedBuffer ( ) const
virtual

Returns true if this buffer has a pre-chained buffer.

◆ HasResolveError()

bool HasResolveError ( ) const
inline

Returns true if an error occurred during resolve.

Definition at line 85 of file bufferSource.h.

◆ IsResolved()

bool IsResolved ( ) const
inline

Returns true it this computation has already been resolved.

Definition at line 80 of file bufferSource.h.

◆ IsValid()

HD_API bool IsValid ( ) const

Checks the validity of the source buffer.

The function should be called to determine if AddBufferSpec() and Resolve() would return valid results.

◆ Resolve()

virtual bool Resolve ( )
pure virtual

Prepare the access of GetData().

This process may include some computations (e.g. cpu smooth normals). Note: Resolve may be called in parallel from multiple threads across buffer sources, so be careful if it uses static/shared states among objects. Returns true if it resolved. If the buffer source has to wait some results of other buffer sources, or the buffer source is being resolved by other threads, it returns false.

Implemented in HdVtBufferSource, HdStExtCompCpuComputation, HdStExtCompGpuPrimvarBufferSource, and HdStExtCompPrimvarBufferSource.


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