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
16
17namespace Vulkan
18{
19
26
28{
29 uint32_t stageCount;
30 VkPipelineVertexInputStateCreateInfo vertexInfo;
31 VkPipelineRasterizationStateCreateInfo rasterizerInfo;
32 VkPipelineMultisampleStateCreateInfo multisampleInfo;
33 VkPipelineDepthStencilStateCreateInfo depthStencilInfo;
34 VkPipelineColorBlendStateCreateInfo colorBlendInfo;
35 VkPipelineColorBlendAttachmentState colorBlendAttachments[8];
36 VkPipelineDynamicStateCreateInfo graphicsDynamicStateInfo;
37 VkPipelineTessellationStateCreateInfo tessInfo;
38 VkPipelineShaderStageCreateInfo graphicsShaderInfos[5];
39 VkPipelineDynamicStateCreateInfo raytracingDynamicStateInfo;
40 VkPipelineShaderStageCreateInfo raytracingShaderInfos[6];
41 VkShaderModule vs, hs, ds, gs, ps, cs, ts, ms, rg, ra, rc, rm, ri, ca;
43 VkPipeline pipeline;
45 VkPipelineLayout layout;
47 uint32_t uniqueId;
48};
49
50extern uint32_t UniqueIdCounter;
51
57
58enum
59{
63};
64typedef Ids::IdAllocator<
65 VkShaderProgramSetupInfo, // used for setup
66 VkProgramReflectionInfo, // program reflection
67 VkShaderProgramRuntimeInfo // used for runtime
69
71
72
74void VkShaderProgramDiscard(VkShaderProgramSetupInfo& info, VkShaderProgramRuntimeInfo& rt, VkPipeline& computePipeline);
75
77void VkShaderProgramSetup(const Ids::Id24 id, const Resources::ResourceName& shaderName, AnyFX::VkProgram* program, const CoreGraphics::ResourcePipelineId& pipelineLayout);
78
80void VkShaderProgramCreateShader(const VkDevice dev, VkShaderModule* shader, unsigned binarySize, char* binary);
82void VkShaderProgramSetupAsGraphics(AnyFX::VkProgram* program, const Resources::ResourceName& shaderName, VkShaderProgramRuntimeInfo& runtime);
86void VkShaderProgramSetupAsRaytracing(AnyFX::VkProgram* program, const Resources::ResourceName& shaderName, VkShaderProgramSetupInfo& setup, VkShaderProgramRuntimeInfo& runtime);
88VkPipeline VkShaderProgramGetRaytracingLibrary(const CoreGraphics::ShaderProgramId id);
90VkPipelineLayout VkShaderProgramGetLayout(const CoreGraphics::ShaderProgramId id);
92void VkShaderProgramGetRaytracingVaryingSizes(const CoreGraphics::ShaderProgramId id, uint& rayPayloadSize, uint& hitAttributeSize);
93
94} // 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:40
Nebula's dynamic array class.
Definition array.h:60
A StringAtom.
Definition stringatom.h:22
ShaderPipeline
Definition config.h:111
uint32_t Id24
Definition id.h:139
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:450
@ ShaderProgram_SetupInfo
Definition vkshaderprogram.h:60
@ ShaderProgram_RuntimeInfo
Definition vkshaderprogram.h:62
@ ShaderProgram_ReflectionInfo
Definition vkshaderprogram.h:61
Ids::IdAllocator< VkShaderProgramSetupInfo, VkProgramReflectionInfo, VkShaderProgramRuntimeInfo > ShaderProgramAllocator
Definition vkshaderprogram.h:68
ShaderProgramAllocator shaderProgramAlloc
Definition vkshaderprogram.cc:18
VkPipelineLayout VkShaderProgramGetLayout(const CoreGraphics::ShaderProgramId id)
Get resource layout of shader program.
Definition vkshaderprogram.cc:460
void VkShaderProgramCreateShader(const VkDevice dev, VkShaderModule *shader, unsigned binarySize, char *binary)
create shader object
Definition vkshaderprogram.cc:87
void VkShaderProgramSetupAsGraphics(AnyFX::VkProgram *program, const Resources::ResourceName &shaderName, VkShaderProgramRuntimeInfo &runtime)
create this program as a graphics program
Definition vkshaderprogram.cc:110
void VkShaderProgramDiscard(VkShaderProgramSetupInfo &info, VkShaderProgramRuntimeInfo &rt, VkPipeline &pipeline)
discard variation
Definition vkshaderprogram.cc:481
void VkShaderProgramGetRaytracingVaryingSizes(const CoreGraphics::ShaderProgramId id, uint &rayPayloadSize, uint &hitAttributeSize)
Get ray payload and hit attribute sizes.
Definition vkshaderprogram.cc:470
void VkShaderProgramSetupAsCompute(VkShaderProgramSetupInfo &setup, VkShaderProgramRuntimeInfo &runtime)
create this program as a compute program (can be done immediately)
Definition vkshaderprogram.cc:360
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:396
uint32_t UniqueIdCounter
Definition vkshaderprogram.cc:17
A resource table declares a list of resources (ResourceTable in DX12, DescriptorSet in Vulkan)
Definition resourcetable.h:402
Nebula's universal string class.
Definition string.h:50
Definition vkshaderprogram.h:53
Util::StringAtom name
Definition vkshaderprogram.h:55
Util::StackArray< uint32_t, 8 > vsInputSlots
Definition vkshaderprogram.h:54
Definition vkshaderprogram.h:28
VkShaderModule ra
Definition vkshaderprogram.h:41
VkShaderModule gs
Definition vkshaderprogram.h:41
uint hitAttributeSize
Definition vkshaderprogram.h:44
VkPipelineRasterizationStateCreateInfo rasterizerInfo
Definition vkshaderprogram.h:31
VkShaderModule rg
Definition vkshaderprogram.h:41
VkShaderModule cs
Definition vkshaderprogram.h:41
uint rayPayloadSize
Definition vkshaderprogram.h:44
VkPipelineShaderStageCreateInfo graphicsShaderInfos[5]
Definition vkshaderprogram.h:38
VkShaderModule rc
Definition vkshaderprogram.h:41
uint32_t stageCount
Definition vkshaderprogram.h:29
uint stencilFrontRef
Definition vkshaderprogram.h:42
uint stencilBackRef
Definition vkshaderprogram.h:42
VkPipelineShaderStageCreateInfo raytracingShaderInfos[6]
Definition vkshaderprogram.h:40
VkShaderModule ms
Definition vkshaderprogram.h:41
VkPipelineDepthStencilStateCreateInfo depthStencilInfo
Definition vkshaderprogram.h:33
uint stencilReadMask
Definition vkshaderprogram.h:42
CoreGraphics::ShaderPipeline type
Definition vkshaderprogram.h:46
VkPipelineMultisampleStateCreateInfo multisampleInfo
Definition vkshaderprogram.h:32
VkPipelineColorBlendStateCreateInfo colorBlendInfo
Definition vkshaderprogram.h:34
VkShaderModule ps
Definition vkshaderprogram.h:41
VkShaderModule rm
Definition vkshaderprogram.h:41
VkPipelineDynamicStateCreateInfo raytracingDynamicStateInfo
Definition vkshaderprogram.h:39
uint stencilWriteMask
Definition vkshaderprogram.h:42
VkPipelineVertexInputStateCreateInfo vertexInfo
Definition vkshaderprogram.h:30
VkShaderModule ca
Definition vkshaderprogram.h:41
VkPipelineTessellationStateCreateInfo tessInfo
Definition vkshaderprogram.h:37
VkPipelineLayout layout
Definition vkshaderprogram.h:45
VkShaderModule ri
Definition vkshaderprogram.h:41
VkShaderModule vs
Definition vkshaderprogram.h:41
VkShaderModule hs
Definition vkshaderprogram.h:41
VkShaderModule ds
Definition vkshaderprogram.h:41
uint32_t uniqueId
Definition vkshaderprogram.h:47
VkPipelineColorBlendAttachmentState colorBlendAttachments[8]
Definition vkshaderprogram.h:35
VkPipelineDynamicStateCreateInfo graphicsDynamicStateInfo
Definition vkshaderprogram.h:36
VkPipeline pipeline
Definition vkshaderprogram.h:43
VkShaderModule ts
Definition vkshaderprogram.h:41
Definition vkshaderprogram.h:21
CoreGraphics::ShaderFeature::Mask mask
Definition vkshaderprogram.h:24
VkDevice dev
Definition vkshaderprogram.h:22
Util::String name
Definition vkshaderprogram.h:23
unsigned int uint
Definition types.h:31