30 return (a % b != 0) ? (a / b + 1) : (a / b);
37 blockDim.
x =
iDivUp(totalSize, blockSize);
44 blockDims.
x =
iDivUp(size_x, blockSize);
45 blockDims.
y =
iDivUp(size_y, blockSize);
54 blockDims.
x =
iDivUp(size_x, blockSize);
55 blockDims.
y =
iDivUp(size_y, blockSize);
56 blockDims.
z =
iDivUp(size_z, blockSize);
96#define BUFFER(T) bufferPtr<T>()
97#define BUFFER2D(T) buffer2DPtr<T>()
98#define BUFFER3D(T) buffer3DPtr<T>()
99#define UNIFORM(T) uniformPtr<T>()
100#define CONSTANT(T) constantPtr<T>()
105 template<
typename... Args>
118 template<
typename... Args>
121 template<
typename... Args>
122 void write(Args... args);
128 void update(
bool sync =
false);
132 template<
typename... Args>
135 this->
enqueue(groupSize, args...);
142 bool load(std::string fileName);
201 template<
typename... Args>
207 VkCommandPoolCreateInfo cmdPoolInfo = {};
208 cmdPoolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
209 cmdPoolInfo.queueFamilyIndex =
ctx->queueFamilyIndices.compute;
210 cmdPoolInfo.flags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT;
214 VkCommandBufferAllocateInfo cmdBufAllocateInfo =
224 uint32_t nBuffer = 0;
225 uint32_t nUniform = 0;
226 std::initializer_list<VkVariable*> variables{args...};
227 for (
auto variable : variables)
229 switch (variable->type())
248 std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings;
257 VkDescriptorSetLayoutCreateInfo descriptorLayout =
263 std::vector<VkDescriptorPoolSize> poolSizes;
272 VkDescriptorPoolCreateInfo descriptorPoolInfo =
276 VkDescriptorSetAllocateInfo allocInfo =
283 vkGetDeviceQueue(
ctx->deviceHandle(),
ctx->queueFamilyIndices.compute, 0, &
queue);
289 template<
typename... Args>
292 std::initializer_list<VkVariable*> variables{args...};
296 for (std::size_t i = 0; i < variables.size(); i++)
298 auto variable = *(variables.begin() + i);
308 for (
auto variable : variables)
310 switch (variable->type())
327 std::vector<VkWriteDescriptorSet> writeDescriptorSets;
328 for (
size_t i = 0; i < variables.size(); i++)
330 auto variable = *(variables.begin() + i);
332 writeDescriptorSets.push_back(
337 vkUpdateDescriptorSets(
ctx->deviceHandle(),
static_cast<uint32_t
>(writeDescriptorSets.size()), writeDescriptorSets.data(), 0, NULL);
339 writeDescriptorSets.clear();
344 for (
size_t i = 0; i < variables.size(); i++)
346 auto variable = *(variables.begin() + i);
349 offset += variable->bufferSize();
358 template<
typename... Args>
361 std::initializer_list<VkVariable*> variables{ args... };
365 for (std::size_t i = 0; i < variables.size(); i++)
367 auto variable = *(variables.begin() + i);
376 for (
auto variable : variables)
378 switch (variable->type())
395 std::vector<VkWriteDescriptorSet> writeDescriptorSets;
396 for (
size_t i = 0; i < variables.size(); i++)
398 auto variable = *(variables.begin() + i);
400 writeDescriptorSets.push_back(
405 vkUpdateDescriptorSets(
ctx->deviceHandle(),
static_cast<uint32_t
>(writeDescriptorSets.size()), writeDescriptorSets.data(), 0, NULL);
406 writeDescriptorSets.clear();
415 void add(std::string name, std::shared_ptr<VkProgram> program);
423 void update(
bool sync =
false);
437 std::map<std::string, std::shared_ptr<VkProgram>>
mPrograms;
struct dyno::VkMultiProgram::@016024047062303122011057236362361021214245030321 compute
struct dyno::VkMultiProgram::@016024047062303122011057236362361021214245030321::Semaphores semaphores
std::shared_ptr< VkProgram > operator[](std::string name)
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
void addMacro(std::string key, std::string value)
VkPipelineLayout pipelineLayout
void pushConstant(VkVariable *arg)
VkCommandPool mCommandPool
void setVkCommandBuffer(VkCommandBuffer cmdBuffer)
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()
struct dyno::VkProgram::@173005120305027326137125156036200106005335301235::Semaphores semaphores
void addComputeToGraphicsBarriers(VkCommandBuffer commandBuffer)
std::vector< VkVariable * > mFormalConstants
std::vector< VkShaderModule > shaderModules
void setupArgs(std::vector< VkVariable * > &vars, VkVariable *t)
VkPipelineShaderStageCreateInfo createComputeStage(std::string fileName)
void pushDeviceBuffer(VkVariable *arg)
std::vector< VkVariable * > mConstArgs
void dispatch(dim3 groupSize)
void flush(dim3 groupSize, Args... args)
void enqueue(dim3 groupSize, Args... args)
void pushFormalConstant(VkVariable *arg)
VkCommandBuffer mCmdBufferCopy
void suspendInherentCmdBuffer(VkCommandBuffer cmdBuffer)
VkContext * currentContext()
static VkSystem * instance()
static VkDescriptorType descriptorType(const VariableType varType)
This is an implementation of AdditiveCCD based on peridyno.
DYN_FUNC Real arg(const Complex< Real > &)
static dim3 vkDispatchSize(uint totalSize, uint blockSize)
VkConstant< T > * constantPtr()
VkUniform< T > * uniformPtr()
static dim3 vkDispatchSize2D(uint size_x, uint size_y, uint blockSize)
VkDeviceArray2D< T > * buffer2DPtr()
@ DeviceBuffer
Device buffer.
@ Uniform
Uniform variable.
@ Constant
Constant variable.
static dim3 vkDispatchSize3D(uint size_x, uint size_y, uint size_z, uint blockSize)
VkDeviceArray3D< T > * buffer3DPtr()
static uint iDivUp(uint a, uint b)
VkDeviceArray< T > * bufferPtr()
VkDescriptorSetLayoutBinding descriptorSetLayoutBinding(VkDescriptorType type, VkShaderStageFlags stageFlags, uint32_t binding, uint32_t descriptorCount=1)
VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo(const VkDescriptorSetLayoutBinding *pBindings, uint32_t bindingCount)
VkDescriptorPoolSize descriptorPoolSize(VkDescriptorType type, uint32_t descriptorCount)
VkDescriptorPoolCreateInfo descriptorPoolCreateInfo(uint32_t poolSizeCount, VkDescriptorPoolSize *pPoolSizes, uint32_t maxSets)
VkCommandBufferAllocateInfo commandBufferAllocateInfo(VkCommandPool commandPool, VkCommandBufferLevel level, uint32_t bufferCount)
VkWriteDescriptorSet writeDescriptorSet(VkDescriptorSet dstSet, VkDescriptorType type, uint32_t binding, VkDescriptorBufferInfo *bufferInfo, uint32_t descriptorCount=1)
VkDescriptorSetAllocateInfo descriptorSetAllocateInfo(VkDescriptorPool descriptorPool, const VkDescriptorSetLayout *pSetLayouts, uint32_t descriptorSetCount)
VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags=0)
VkSemaphoreCreateInfo semaphoreCreateInfo()