16 vkDestroyShaderModule(
ctx->deviceHandle(), shderModule,
nullptr);
19 vkDestroyPipeline(
ctx->deviceHandle(),
pipeline,
nullptr);
25 vkDestroyFence(
ctx->deviceHandle(),
mFence,
nullptr);
26 vkDestroySemaphore(
ctx->deviceHandle(),
compute.semaphores.ready,
nullptr);
27 vkDestroySemaphore(
ctx->deviceHandle(),
compute.semaphores.complete,
nullptr);
33 cmdBufInfo.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT;
43 for (
size_t i = 0; i <
mAllArgs.size(); i++)
48 offset += variable->bufferSize();
65 vkResetFences(
ctx->deviceHandle(), 1, &
mFence);
67 static bool firstDraw =
true;
70 VkPipelineStageFlags computeWaitDstStageMask = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
82 computeSubmitInfo.commandBufferCount = 1;
100 if (
ctx->isComputeQueueSpecial()) {
102 bufferBarrier.srcAccessMask = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;
103 bufferBarrier.dstAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
104 bufferBarrier.srcQueueFamilyIndex =
ctx->queueFamilyIndices.graphics;
105 bufferBarrier.dstQueueFamilyIndex =
ctx->queueFamilyIndices.compute;
106 bufferBarrier.size = VK_WHOLE_SIZE;
108 std::vector<VkBufferMemoryBarrier> bufferBarriers;
111 bufferBarrier.buffer =
mBufferArgs[i]->bufferHandle();
112 bufferBarriers.push_back(bufferBarrier);
118 vkCmdPipelineBarrier(commandBuffer,
119 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
120 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
123 static_cast<uint32_t
>(bufferBarriers.size()), bufferBarriers.data(),
131 bufferBarrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
132 bufferBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
133 bufferBarrier.srcQueueFamilyIndex =
ctx->queueFamilyIndices.compute;
134 bufferBarrier.dstQueueFamilyIndex =
ctx->queueFamilyIndices.compute;
135 bufferBarrier.size = VK_WHOLE_SIZE;
136 std::vector<VkBufferMemoryBarrier> bufferBarriers;
139 bufferBarrier.buffer =
mBufferArgs[i]->bufferHandle();
140 bufferBarriers.push_back(bufferBarrier);
143 vkCmdPipelineBarrier(
145 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
146 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
149 static_cast<uint32_t
>(bufferBarriers.size()), bufferBarriers.data(),
155 if (
ctx->isComputeQueueSpecial()) {
157 bufferBarrier.srcAccessMask = VK_ACCESS_SHADER_WRITE_BIT;
158 bufferBarrier.dstAccessMask = VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;
159 bufferBarrier.srcQueueFamilyIndex =
ctx->queueFamilyIndices.compute;
160 bufferBarrier.dstQueueFamilyIndex =
ctx->queueFamilyIndices.graphics;
161 bufferBarrier.size = VK_WHOLE_SIZE;
162 std::vector<VkBufferMemoryBarrier> bufferBarriers;
165 bufferBarrier.buffer =
mBufferArgs[i]->bufferHandle();
166 bufferBarriers.push_back(bufferBarrier);
173 vkCmdPipelineBarrier(
175 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,
176 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT,
179 static_cast<uint32_t
>(bufferBarriers.size()), bufferBarriers.data(),
204 std::vector<VkPushConstantRange> pushConstantRanges;
210 VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo =
212 pipelineLayoutCreateInfo.pushConstantRangeCount = pushConstantRanges.size();
213 pipelineLayoutCreateInfo.pPushConstantRanges = pushConstantRanges.data();
220 VK_CHECK_RESULT(vkCreateComputePipelines(
ctx->deviceHandle(),
ctx->pipelineCacheHandle(), 1, &computePipelineCreateInfo,
nullptr, &
pipeline));
227 VkPipelineShaderStageCreateInfo shaderStage = {};
228 shaderStage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
229 shaderStage.stage = VK_SHADER_STAGE_COMPUTE_BIT;
231 shaderStage.pName =
"main";
232 assert(shaderStage.module != VK_NULL_HANDLE);
284 VkCommandPoolCreateInfo cmdPoolInfo = {};
285 cmdPoolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
286 cmdPoolInfo.queueFamilyIndex =
ctx->queueFamilyIndices.compute;
287 cmdPoolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
291 VkCommandBufferAllocateInfo cmdBufAllocateInfo =
305 vkGetDeviceQueue(
ctx->deviceHandle(),
ctx->queueFamilyIndices.compute, 0, &
queue);
315 assert(program !=
nullptr);
323 cmdBufInfo.flags = VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT;
335 vkResetFences(
ctx->deviceHandle(), 1, &
mFence);
340 VkPipelineStageFlags computeWaitDstStageMask = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
351 computeSubmitInfo.commandBufferCount = 1;
366 pgm.second->restoreInherentCmdBuffer();
struct dyno::VkMultiProgram::@016024047062303122011057236362361021214245030321 compute
std::map< std::string, std::shared_ptr< VkProgram > > mPrograms
void update(bool sync=false)
VkCommandBuffer commandBuffers
void add(std::string name, std::shared_ptr< VkProgram > program)
VkCommandPool commandPool
void pushArgument(VkVariable *arg)
void pushUniform(VkVariable *arg)
std::vector< VkVariable * > mFormalParamters
VkDescriptorSetLayout descriptorSetLayout
void update(bool sync=false)
VkDescriptorSet descriptorSet
std::vector< VkVariable * > mAllArgs
bool load(std::string fileName)
std::vector< VkVariable * > mUniformArgs
VkPipelineLayout pipelineLayout
void pushConstant(VkVariable *arg)
VkCommandPool mCommandPool
VkDescriptorPool descriptorPool
void pushFormalParameter(VkVariable *arg)
std::vector< VkVariable * > mBufferArgs
void addGraphicsToComputeBarriers(VkCommandBuffer commandBuffer)
VkCommandBuffer mCommandBuffers
struct dyno::VkProgram::@173005120305027326137125156036200106005335301235 compute
void addComputeToComputeBarriers(VkCommandBuffer commandBuffer)
void restoreInherentCmdBuffer()
void addComputeToGraphicsBarriers(VkCommandBuffer commandBuffer)
std::vector< VkVariable * > mFormalConstants
std::vector< VkShaderModule > shaderModules
VkPipelineShaderStageCreateInfo createComputeStage(std::string fileName)
void pushDeviceBuffer(VkVariable *arg)
std::vector< VkVariable * > mConstArgs
void dispatch(dim3 groupSize)
void pushFormalConstant(VkVariable *arg)
VkCommandBuffer mCmdBufferCopy
void suspendInherentCmdBuffer(VkCommandBuffer cmdBuffer)
VkContext * currentContext()
static VkSystem * instance()
This is an implementation of AdditiveCCD based on peridyno.
DYN_FUNC Real arg(const Complex< Real > &)
@ DeviceBuffer
Device buffer.
@ Uniform
Uniform variable.
@ Constant
Constant variable.
VkComputePipelineCreateInfo computePipelineCreateInfo(VkPipelineLayout layout, VkPipelineCreateFlags flags=0)
VkCommandBufferAllocateInfo commandBufferAllocateInfo(VkCommandPool commandPool, VkCommandBufferLevel level, uint32_t bufferCount)
VkPushConstantRange pushConstantRange(VkShaderStageFlags stageFlags, uint32_t size, uint32_t offset)
VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo(const VkDescriptorSetLayout *pSetLayouts, uint32_t setLayoutCount=1)
VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags=0)
VkCommandBufferBeginInfo commandBufferBeginInfo()
VkSemaphoreCreateInfo semaphoreCreateInfo()
VkBufferMemoryBarrier bufferMemoryBarrier()
Initialize a buffer memory barrier with no image transfer ownership.
VkSubmitInfo submitInfo()