HDK
|
#include <hgi.h>
Static Public Member Functions | |
static HGI_API Hgi * | GetPlatformDefaultHgi () |
*** DEPRECATED *** Please use: CreatePlatformDefaultHgi More... | |
static HGI_API HgiUniquePtr | CreatePlatformDefaultHgi () |
static HGI_API bool | IsSupported () |
Protected Member Functions | |
HGI_API uint64_t | GetUniqueId () |
virtual HGI_API bool | _SubmitCmds (HgiCmds *cmds, HgiSubmitWaitType wait) |
Hydra Graphics Interface. Hgi is used to communicate with one or more physical gpu devices.
Hgi provides API to create/destroy resources that a gpu device owns. The lifetime of resources is not managed by Hgi, so it is up to the caller to destroy resources and ensure those resources are no longer used.
Commands are recorded in 'HgiCmds' objects and submitted via Hgi.
Thread-safety:
Modern graphics APIs like Metal and Vulkan are designed with multi-threading in mind. We want to try and take advantage of this where possible. However we also wish to continue to support OpenGL for the time being.
In an application where OpenGL is involved, when we say "main thread" we mean the thread on which the gl-context is bound.
Each Hgi backend should at minimum support the following:
Each Hgi backend is additionally encouraged to support:
We currently do not rely on these additional multi-threading features in Hydra / Storm where we still wish to run OpenGL. In Hydra we make sure to use the main-thread for resource creation and command submission. One day we may wish to switch this to be multi-threaded so new Hgi backends are encouraged to support it.
Pseudo code what should minimally be supported:
vector<HgiGraphicsCmds> cmds for num_threads cmds.push_back( Hgi->CreateGraphicsCmds() ) parallel_for i to num_threads cmds[i]->SetViewport() cmds[i]->Draw() for i to num_threads hgi->SubmitCmds( cmds[i] )
HGI_API Hgi::Hgi | ( | ) |
|
virtual |
|
protectedvirtual |
Reimplemented in HgiGL.
|
pure virtual |
Returns a BlitCmds object (for temporary use) that is ready to execute resource copy commands. BlitCmds is a lightweight object that should be re-acquired each frame (don't hold onto it after EndEncoding). Thread safety: Each Hgi backend must ensure that a Cmds object can be created on the main thread, recorded into (exclusively) by one secondary thread and be submitted on the main thread. See notes above.
Implemented in HgiGL.
|
pure virtual |
|
pure virtual |
Returns a ComputeCmds object (for temporary use) that is ready to record dispatch commands. ComputeCmds is a lightweight object that should be re-acquired each frame (don't hold onto it after EndEncoding). Thread safety: Each Hgi backend must ensure that a Cmds object can be created on the main thread, recorded into (exclusively) by one secondary thread and be submitted on the main thread. See notes above.
Implemented in HgiGL.
|
pure virtual |
|
pure virtual |
Returns a GraphicsCmds object (for temporary use) that is ready to record draw commands. GraphicsCmds is a lightweight object that should be re-acquired each frame (don't hold onto it after EndEncoding). Thread safety: Each Hgi backend must ensure that a Cmds object can be created on the main thread, recorded into (exclusively) by one secondary thread and be submitted on the main thread. See notes above.
Implemented in HgiGL.
|
pure virtual |
|
static |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
Create a texture view in rendering backend. A texture view aliases another texture's data. It is the responsibility of the client to ensure that the sourceTexture is not destroyed while the texture view is in use. Thread safety: Creation must happen on main thread. See notes above.
Implemented in HgiGL.
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
|
pure virtual |
*** DEPRECATED *** Please use: CreatePlatformDefaultHgi
|
protected |
|
pure virtual |
|
static |
Constructs a temporary Hgi object for the current platform and calls the object's IsBackendSupported() function. Thread safety: Not thread safe.
Optionally called by client app at the start of a new rendering frame. We can't rely on StartFrame for anything important, because it is up to the external client to (optionally) call this and they may never do. Hydra doesn't have a clearly defined start or end frame. This can be helpful to insert GPU frame debug markers. Thread safety: Not thread safe. Should be called on the main thread.
Implemented in HgiGL.
HGI_API void Hgi::SubmitCmds | ( | HgiCmds * | cmds, |
HgiSubmitWaitType | wait = HgiSubmitWaitTypeNoWait |
||
) |
Submit one HgiCmds objects. Once the cmds object is submitted it cannot be re-used to record cmds. A call to SubmitCmds would usually result in the hgi backend submitting the cmd buffers of the cmds object(s) to the device queue. Derived classes can override _SubmitCmds to customize submission. Thread safety: This call is not thread-safe. Submission must happen on the main thread so we can continue to support the OpenGL platform. See notes above.