Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
Divide::vkShaderProgram Class Referencefinal

#include <vkShaderProgram.h>

+ Inheritance diagram for Divide::vkShaderProgram:

Public Types

using vkShaders = eastl::fixed_vector< vkShaderEntry, to_base(ShaderType::COUNT), false >
 
- Public Types inherited from Divide::ShaderProgram
using RenderTargets = std::array< bool, to_base(RTColourAttachmentSlot::COUNT)>
 
using ShaderLoadData = std::array< LoadData, to_base(ShaderType::COUNT)>
 
using ShaderProgramMap = eastl::fixed_vector< ShaderProgram *, U16_MAX, true >
 
using AtomMap = hashMap< U64, string >
 
using AtomInclusionMap = hashMap< U64, eastl::set< U64 > >
 
using ShaderQueue = eastl::stack< ShaderQueueEntry, vector< ShaderQueueEntry > >
 
using BindingsPerSetArray = std::array< BindingsPerSet, MAX_BINDINGS_PER_DESCRIPTOR_SET >
 
using SetUsageData = std::array< bool, to_base(DescriptorSetUsage::COUNT)>
 
using BindingSetData = std::array< BindingsPerSetArray, to_base(DescriptorSetUsage::COUNT)>
 
- Public Types inherited from Divide::GraphicsResource
enum class  Type : U8 {
  RENDER_TARGET , SHADER_BUFFER , BUFFER , SHADER ,
  SHADER_PROGRAM , TEXTURE , COUNT
}
 

Public Member Functions

 vkShaderProgram (PlatformContext &context, const ResourceDescriptor< ShaderProgram > &descriptor)
 
 ~vkShaderProgram () override
 
const vkShadersshaderStages () const noexcept
 
VkShaderStageFlags stageMask () const noexcept
 
ShaderResult validatePreBind (const bool rebind) override
 
 PROPERTY_RW (VkDescriptorSetLayout, descriptorSetLayout, VK_NULL_HANDLE)
 
 PROPERTY_RW (DynamicBindings, dynamicBindings)
 
- Public Member Functions inherited from Divide::ShaderProgram
 ShaderProgram (PlatformContext &context, const ResourceDescriptor< ShaderProgram > &descriptor)
 
 ~ShaderProgram () override
 
bool load (PlatformContext &context) override
 Loading and unloading interface.
 
bool postLoad () override
 
bool unload () override
 
bool recompile ()
 
bool recompile (bool &skipped)
 Rebuild the specified shader stages from source code.
 
virtual ShaderResult validatePreBind (bool rebind=true)
 
bool uploadUniformData (const UniformData &data, DescriptorSet &set, GFX::MemoryBarrierCommand &memCmdInOut)
 
const ShaderProgramDescriptordescriptor () const noexcept
 
 PROPERTY_RW (bool, highPriority, true)
 
 PROPERTY_RW (bool, useShaderCache, true)
 
 PROPERTY_R_IW (BindingsPerSetArray, perDrawDescriptorSetLayout)
 
 PROPERTY_R_IW (RenderTargets, fragmentOutputs)
 
 PROPERTY_R_IW (SetUsageData, setUsage)
 
- Public Member Functions inherited from Divide::CachedResource
 CachedResource (const ResourceDescriptorBase &descriptor, std::string_view typeName)
 
virtual bool load (PlatformContext &context)
 Loading and unloading interface.
 
virtual bool postLoad ()
 
virtual bool unload ()
 
void setState (ResourceState currentState) final
 
- Public Member Functions inherited from Divide::Resource
 Resource (std::string_view resourceName, std::string_view typeName)
 
ResourceState getState () const noexcept
 
 PROPERTY_R (Str< 32 >, typeName)
 
 PROPERTY_R (Str< 256 >, resourceName)
 
- Public Member Functions inherited from Divide::GUIDWrapper
 GUIDWrapper () noexcept
 
 GUIDWrapper (const GUIDWrapper &old) noexcept
 
 GUIDWrapper (GUIDWrapper &&old) noexcept
 
virtual ~GUIDWrapper ()=default
 
FORCE_INLINE I64 getGUID () const noexcept
 
GUIDWrapperoperator= (const GUIDWrapper &old)=delete
 
GUIDWrapperoperator= (GUIDWrapper &&other)=delete
 
- Public Member Functions inherited from Divide::GraphicsResource
virtual ~GraphicsResource ()
 
GFXDevicecontext () const noexcept
 
U64 nameHash () const noexcept
 
- Public Member Functions inherited from Divide::NonCopyable
 NonCopyable (const NonCopyable &)=delete
 
NonCopyableoperator= (const NonCopyable &)=delete
 
 NonCopyable (NonCopyable &&)=default
 
NonCopyableoperator= (NonCopyable &&)=default
 
- Public Member Functions inherited from Divide::NonMovable
 NonMovable (NonMovable &&)=delete
 
NonMovableoperator= (NonMovable &&)=delete
 
 NonMovable (const NonMovable &)=default
 
NonMovableoperator= (const NonMovable &)=default
 

Protected Member Functions

bool unload () override
 Make sure this program is ready for deletion.
 
bool loadInternal (hashMap< U64, PerFileShaderData > &fileData, bool overwrite) override
 Returns true if at least one shader linked successfully.
 
- Protected Member Functions inherited from Divide::ShaderProgram
virtual bool loadInternal (hashMap< U64, PerFileShaderData > &fileData, bool overwrite)
 
bool loadSourceCode (const ModuleDefines &defines, bool reloadExisting, LoadData &loadDataInOut, Reflection::UniformsSet &previousUniformsInOut, U8 &blockIndexInOut)
 
void loadAndParseGLSL (const ModuleDefines &defines, LoadData &loadDataInOut, Reflection::UniformsSet &previousUniformsInOut, U8 &blockIndexInOut, eastl::set< U64 > &atomIDsInOut)
 
void initDrawDescriptorSetLayout (const PerFileShaderData &loadData)
 
void initUniformUploader (const PerFileShaderData &loadData)
 
- Protected Member Functions inherited from Divide::CachedResource
 PROPERTY_RW (ResourcePath, assetLocation)
 
 PROPERTY_RW (Str< 256 >, assetName)
 
 PROPERTY_R (size_t, descriptorHash)
 
virtual void setState (ResourceState currentState)
 
- Protected Member Functions inherited from Divide::GraphicsResource
 GraphicsResource (GFXDevice &context, Type type, I64 GUID, U64 nameHash)
 
- Protected Member Functions inherited from Divide::NonCopyable
 NonCopyable ()=default
 
 ~NonCopyable ()=default
 
- Protected Member Functions inherited from Divide::NonMovable
 NonMovable ()=default
 
 ~NonMovable ()=default
 

Private Attributes

vkShaders _shaderStage
 

Additional Inherited Members

- Static Public Member Functions inherited from Divide::ShaderProgram
static void Idle (PlatformContext &platformContext, bool fast)
 
static void InitStaticData ()
 
static void DestroyStaticData ()
 
static ErrorCode OnStartup (PlatformContext &context)
 
static bool OnShutdown ()
 
static void OnBeginFrame (GFXDevice &gfx)
 
static void OnEndFrame (GFXDevice &gfx)
 
static bool RecompileShaderProgram (const std::string_view name)
 Queue a shaderProgram recompile request.
 
static bool UnregisterShaderProgram (ShaderProgram *shaderProgram)
 Remove a shaderProgram from the program cache.
 
static void RegisterShaderProgram (ShaderProgram *shaderProgram)
 Add a shaderProgram to the program cache.
 
static void RebuildAllShaders ()
 
static vector< ResourcePathGetAllAtomLocations ()
 
static I32 ShaderProgramCount () noexcept
 
static void OnAtomChange (std::string_view atomName, FileUpdateEvent evt)
 
static U8 GetGLBindingForDescriptorSlot (DescriptorSetUsage usage, U8 slot) noexcept
 
static std::pair< DescriptorSetUsage, U8GetDescriptorSlotForGLBinding (U8 binding, DescriptorSetBindingType type) noexcept
 
static BindingSetDataGetBindingSetData () noexcept
 
static void RegisterSetLayoutBinding (DescriptorSetUsage usage, U8 slot, DescriptorSetBindingType type, ShaderStageVisibility visibility)
 
static ErrorCode SubmitSetLayouts (GFXDevice &gfx)
 
static U32 GetBindingCount (DescriptorSetUsage usage, DescriptorSetBindingType type)
 
- Static Public Member Functions inherited from Divide::GUIDWrapper
static I64 generateGUID () noexcept
 
- Static Public Attributes inherited from Divide::ShaderProgram
static constexpr const char * UNIFORM_BLOCK_NAME = "dvd_uniforms"
 
static U8 k_commandBufferID = U8_MAX - MAX_BINDINGS_PER_DESCRIPTOR_SET
 
static Mutex g_cacheLock
 
- Static Protected Member Functions inherited from Divide::ShaderProgram
static bool SaveToCache (LoadData::ShaderCacheType cache, const LoadData &dataIn, const eastl::set< U64 > &atomIDsIn)
 
static bool LoadFromCache (LoadData::ShaderCacheType cache, LoadData &dataInOut, eastl::set< U64 > &atomIDsOut)
 
static void OnThreadCreated (const GFXDevice &gfx, const std::thread::id &threadID, bool isMainRenderThread)
 
- Protected Attributes inherited from Divide::ShaderProgram
const ShaderProgramDescriptor _descriptor
 
vector< UniformBlockUploader_uniformBlockBuffers
 
eastl::set< U64_usedAtomIDs
 
- Protected Attributes inherited from Divide::CachedResource
Mutex _callbackLock {}
 
- Protected Attributes inherited from Divide::Resource
std::atomic< ResourceState_resourceState
 
- Protected Attributes inherited from Divide::GUIDWrapper
const I64 _guid
 
- Protected Attributes inherited from Divide::GraphicsResource
GFXDevice_context
 
- Static Protected Attributes inherited from Divide::ShaderProgram
static ShaderQueue s_recompileQueue
 
static ShaderQueue s_recompileFailedQueue
 
static ShaderProgramMap s_shaderPrograms
 Shader program cache.
 
static eastl::fixed_vector< ShaderProgram *, U16_MAX, false > s_usedShaderPrograms
 
static LastRequestedShader s_lastRequestedShaderProgram = {}
 
static SharedMutex s_programLock
 
static std::atomic_int s_shaderCount
 
static I64 s_shaderFileWatcherID = -1
 
static Mutex s_atomLock
 Shaders loaded from files are kept as atoms.
 
static AtomMap s_atoms
 
static AtomInclusionMap s_atomIncludes
 
static ResourcePath shaderAtomLocationPrefix [to_base(ShaderType::COUNT)+1]
 
static Str< 8 > shaderAtomExtensionName [to_base(ShaderType::COUNT)+1]
 
static U64 shaderAtomExtensionHash [to_base(ShaderType::COUNT)+1]
 
static BindingSetData s_bindingsPerSet
 

Detailed Description

Definition at line 75 of file vkShaderProgram.h.

Member Typedef Documentation

◆ vkShaders

Definition at line 77 of file vkShaderProgram.h.

Constructor & Destructor Documentation

◆ vkShaderProgram()

Divide::vkShaderProgram::vkShaderProgram ( PlatformContext context,
const ResourceDescriptor< ShaderProgram > &  descriptor 
)

Definition at line 106 of file vkShaderProgram.cpp.

◆ ~vkShaderProgram()

Divide::vkShaderProgram::~vkShaderProgram ( )
override

Definition at line 111 of file vkShaderProgram.cpp.

Member Function Documentation

◆ loadInternal()

bool Divide::vkShaderProgram::loadInternal ( hashMap< U64, PerFileShaderData > &  fileData,
bool  overwrite 
)
overrideprotectedvirtual

Returns true if at least one shader linked successfully.

Reimplemented from Divide::ShaderProgram.

Definition at line 152 of file vkShaderProgram.cpp.

◆ PROPERTY_RW() [1/2]

Divide::vkShaderProgram::PROPERTY_RW ( DynamicBindings  ,
dynamicBindings   
)

◆ PROPERTY_RW() [2/2]

Divide::vkShaderProgram::PROPERTY_RW ( VkDescriptorSetLayout  ,
descriptorSetLayout  ,
VK_NULL_HANDLE   
)

◆ shaderStages()

const vkShaderProgram::vkShaders & Divide::vkShaderProgram::shaderStages ( ) const
noexcept

Definition at line 131 of file vkShaderProgram.cpp.

◆ stageMask()

VkShaderStageFlags Divide::vkShaderProgram::stageMask ( ) const
noexcept

Definition at line 136 of file vkShaderProgram.cpp.

◆ unload()

bool Divide::vkShaderProgram::unload ( )
overrideprotectedvirtual

Make sure this program is ready for deletion.

Reimplemented from Divide::CachedResource.

Definition at line 119 of file vkShaderProgram.cpp.

◆ validatePreBind()

ShaderResult Divide::vkShaderProgram::validatePreBind ( const bool  rebind)
overridevirtual

Reimplemented from Divide::ShaderProgram.

Definition at line 146 of file vkShaderProgram.cpp.

Member Data Documentation

◆ _shaderStage

vkShaders Divide::vkShaderProgram::_shaderStage
private

Definition at line 96 of file vkShaderProgram.h.


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