Nebula
Loading...
Searching...
No Matches
vkshaderprogram.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
9//------------------------------------------------------------------------------
10#include "core/refcounted.h"
11#include "lowlevel/vk/vkprogram.h"
14#include "util/arraystack.h"
15#include "util/serialize.h"
16
17
18namespace Vulkan
19{
20
27
29{
30 uint32_t stageCount;
31 VkPipelineVertexInputStateCreateInfo vertexInfo;
32 VkPipelineRasterizationStateCreateInfo rasterizerInfo;
33 VkPipelineMultisampleStateCreateInfo multisampleInfo;
34 VkPipelineDepthStencilStateCreateInfo depthStencilInfo;
35 VkPipelineColorBlendStateCreateInfo colorBlendInfo;
36 VkPipelineColorBlendAttachmentState colorBlendAttachments[8];
37 VkPipelineDynamicStateCreateInfo graphicsDynamicStateInfo;
38 VkPipelineTessellationStateCreateInfo tessInfo;
39 VkPipelineShaderStageCreateInfo graphicsShaderInfos[5];
40 VkPipelineDynamicStateCreateInfo raytracingDynamicStateInfo;
41 VkPipelineShaderStageCreateInfo raytracingShaderInfos[6];
42 VkShaderModule vs, hs, ds, gs, ps, cs, ts, ms, rg, ra, rc, rm, ri, ca;
44 VkPipeline pipeline;
46 VkPipelineLayout layout;
48 uint32_t uniqueId;
49};
50
51extern uint32_t UniqueIdCounter;
52
58
59enum
60{
64};
65typedef Ids::IdAllocator<
66 VkShaderProgramSetupInfo, // used for setup
67 VkProgramReflectionInfo, // program reflection
68 VkShaderProgramRuntimeInfo // used for runtime
70
72
73
75void VkShaderProgramDiscard(VkShaderProgramSetupInfo& info, VkShaderProgramRuntimeInfo& rt, VkPipeline& computePipeline);
76
78void VkShaderProgramSetup(const Ids::Id24 id, const Resources::ResourceName& shaderName, AnyFX::VkProgram* program, const CoreGraphics::ResourcePipelineId& pipelineLayout);
80void VkShaderProgramSetup(const Ids::Id24 id, const Resources::ResourceName& shaderName, GPULang::Deserialize::Program* program, const CoreGraphics::ResourcePipelineId& pipelineLayout);
81
83void VkShaderProgramCreateShader(const VkDevice dev, VkShaderModule* shader, unsigned binarySize, char* binary);
85void VkShaderProgramCreateShader(const VkDevice dev, VkShaderModule* shader, GPULang::Deserialize::Program::Shader* binary);
87void VkShaderProgramSetupAsGraphics(AnyFX::VkProgram* program, const Resources::ResourceName& shaderName, VkShaderProgramRuntimeInfo& runtime);
89void VkShaderProgramSetupAsGraphics(GPULang::Deserialize::Program* program, const Resources::ResourceName& shaderName, VkShaderProgramRuntimeInfo& runtime);
93void VkShaderProgramSetupAsRaytracing(AnyFX::VkProgram* program, const Resources::ResourceName& shaderName, VkShaderProgramSetupInfo& setup, VkShaderProgramRuntimeInfo& runtime);
95void VkShaderProgramSetupAsRaytracing(GPULang::Deserialize::Program* program, const Resources::ResourceName& shaderName, VkShaderProgramSetupInfo& setup, VkShaderProgramRuntimeInfo& runtime);
97VkPipeline VkShaderProgramGetRaytracingLibrary(const CoreGraphics::ShaderProgramId id);
99VkPipelineLayout VkShaderProgramGetLayout(const CoreGraphics::ShaderProgramId id);
101void VkShaderProgramGetRaytracingVaryingSizes(const CoreGraphics::ShaderProgramId id, uint& rayPayloadSize, uint& hitAttributeSize);
102
103} // namespace Vulkan
uint Mask
a shader feature bit mask
Definition shaderfeature.h:31
An ID allocator associates an id with a slice in an N number of arrays.
Definition idallocator.h:39
A StringAtom.
Definition stringatom.h:22
ShaderPipeline
Definition config.h:111
uint32_t Id24
Definition id.h:139
Util::StringAtom ResourceName
Definition resourceid.h:33
Array< TYPE, STACK_SIZE > StackArray
Definition array.h:1881
Vulkan implementation of GPU acceleration structure.
Definition vkaccelerationstructure.cc:15
void VkShaderProgramSetup(const Ids::Id24 id, const Resources::ResourceName &shaderName, AnyFX::VkProgram *program, const CoreGraphics::ResourcePipelineId &pipelineLayout)
setup from AnyFX program
Definition vkshaderprogram.cc:23
VkPipeline VkShaderProgramGetRaytracingLibrary(const CoreGraphics::ShaderProgramId id)
Get raytracing library pipepline.
Definition vkshaderprogram.cc:1080
Ids::IdAllocator< VkShaderProgramSetupInfo, VkProgramReflectionInfo, VkShaderProgramRuntimeInfo > ShaderProgramAllocator
Definition vkshaderprogram.h:69
ShaderProgramAllocator shaderProgramAlloc
Definition vkshaderprogram.cc:18
VkPipelineLayout VkShaderProgramGetLayout(const CoreGraphics::ShaderProgramId id)
Get resource layout of shader program.
Definition vkshaderprogram.cc:1090
void VkShaderProgramCreateShader(const VkDevice dev, VkShaderModule *shader, unsigned binarySize, char *binary)
create shader object
Definition vkshaderprogram.cc:162
void VkShaderProgramSetupAsGraphics(AnyFX::VkProgram *program, const Resources::ResourceName &shaderName, VkShaderProgramRuntimeInfo &runtime)
create this program as a graphics program
Definition vkshaderprogram.cc:208
void VkShaderProgramDiscard(VkShaderProgramSetupInfo &info, VkShaderProgramRuntimeInfo &rt, VkPipeline &pipeline)
discard variation
Definition vkshaderprogram.cc:1111
@ ShaderProgram_SetupInfo
Definition vkshaderprogram.h:61
@ ShaderProgram_RuntimeInfo
Definition vkshaderprogram.h:63
@ ShaderProgram_ReflectionInfo
Definition vkshaderprogram.h:62
void VkShaderProgramGetRaytracingVaryingSizes(const CoreGraphics::ShaderProgramId id, uint &rayPayloadSize, uint &hitAttributeSize)
Get ray payload and hit attribute sizes.
Definition vkshaderprogram.cc:1100
void VkShaderProgramSetupAsCompute(VkShaderProgramSetupInfo &setup, VkShaderProgramRuntimeInfo &runtime)
create this program as a compute program (can be done immediately)
Definition vkshaderprogram.cc:931
void VkShaderProgramSetupAsRaytracing(AnyFX::VkProgram *program, const Resources::ResourceName &shaderName, VkShaderProgramSetupInfo &setup, VkShaderProgramRuntimeInfo &runtime)
create this program as a compute program (can be done immediately)
Definition vkshaderprogram.cc:967
uint32_t UniqueIdCounter
Definition vkshaderprogram.cc:17
A resource table declares a list of resources (ResourceTable in DX12, DescriptorSet in Vulkan)
Definition resourcetable.h:399
Nebula's universal string class.
Definition String.cs:8
Definition vkshaderprogram.h:54
Util::StringAtom name
Definition vkshaderprogram.h:56
Util::StackArray< uint32_t, 8 > vsInputSlots
Definition vkshaderprogram.h:55
Definition vkshaderprogram.h:29
VkShaderModule ra
Definition vkshaderprogram.h:42
VkShaderModule gs
Definition vkshaderprogram.h:42
uint hitAttributeSize
Definition vkshaderprogram.h:45
VkPipelineRasterizationStateCreateInfo rasterizerInfo
Definition vkshaderprogram.h:32
VkShaderModule rg
Definition vkshaderprogram.h:42
VkShaderModule cs
Definition vkshaderprogram.h:42
uint rayPayloadSize
Definition vkshaderprogram.h:45
VkPipelineShaderStageCreateInfo graphicsShaderInfos[5]
Definition vkshaderprogram.h:39
VkShaderModule rc
Definition vkshaderprogram.h:42
uint32_t stageCount
Definition vkshaderprogram.h:30
uint stencilFrontRef
Definition vkshaderprogram.h:43
uint stencilBackRef
Definition vkshaderprogram.h:43
VkPipelineShaderStageCreateInfo raytracingShaderInfos[6]
Definition vkshaderprogram.h:41
VkShaderModule ms
Definition vkshaderprogram.h:42
VkPipelineDepthStencilStateCreateInfo depthStencilInfo
Definition vkshaderprogram.h:34
uint stencilReadMask
Definition vkshaderprogram.h:43
CoreGraphics::ShaderPipeline type
Definition vkshaderprogram.h:47
VkPipelineMultisampleStateCreateInfo multisampleInfo
Definition vkshaderprogram.h:33
VkPipelineColorBlendStateCreateInfo colorBlendInfo
Definition vkshaderprogram.h:35
VkShaderModule ps
Definition vkshaderprogram.h:42
VkShaderModule rm
Definition vkshaderprogram.h:42
VkPipelineDynamicStateCreateInfo raytracingDynamicStateInfo
Definition vkshaderprogram.h:40
uint stencilWriteMask
Definition vkshaderprogram.h:43
VkPipelineVertexInputStateCreateInfo vertexInfo
Definition vkshaderprogram.h:31
VkShaderModule ca
Definition vkshaderprogram.h:42
VkPipelineTessellationStateCreateInfo tessInfo
Definition vkshaderprogram.h:38
VkPipelineLayout layout
Definition vkshaderprogram.h:46
VkShaderModule ri
Definition vkshaderprogram.h:42
VkShaderModule vs
Definition vkshaderprogram.h:42
VkShaderModule hs
Definition vkshaderprogram.h:42
VkShaderModule ds
Definition vkshaderprogram.h:42
uint32_t uniqueId
Definition vkshaderprogram.h:48
VkPipelineColorBlendAttachmentState colorBlendAttachments[8]
Definition vkshaderprogram.h:36
VkPipelineDynamicStateCreateInfo graphicsDynamicStateInfo
Definition vkshaderprogram.h:37
VkPipeline pipeline
Definition vkshaderprogram.h:44
VkShaderModule ts
Definition vkshaderprogram.h:42
Definition vkshaderprogram.h:22
CoreGraphics::ShaderFeature::Mask mask
Definition vkshaderprogram.h:25
VkDevice dev
Definition vkshaderprogram.h:23
Util::String name
Definition vkshaderprogram.h:24
unsigned int uint
Definition types.h:33