compute shaders
This commit is contained in:
@@ -5,3 +5,8 @@
|
||||
DECLARE_VULKAN_COMMAND(Empty)
|
||||
{
|
||||
}
|
||||
|
||||
DECLARE_VULKAN_COMMAND(Dispatch)
|
||||
{
|
||||
vkCmdDispatch(hCommandBuffer, uX, uY, uZ);
|
||||
}
|
||||
|
||||
@@ -76,13 +76,22 @@ DECLARE_VULKAN_COMMAND(End)
|
||||
|
||||
DECLARE_VULKAN_COMMAND(SetShader)
|
||||
{
|
||||
CVkShader *pVkShader = (CVkShader*)pShader;
|
||||
vkCmdBindPipeline(hCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pVkShader->m_hPipeline);
|
||||
CVkShader *pS = dynamic_cast<CVkShader*>(pShader);
|
||||
CVkComputeShader *pCS = dynamic_cast<CVkComputeShader*>(pShader);
|
||||
if (pS)
|
||||
vkCmdBindPipeline(hCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pS->m_hPipeline);
|
||||
if (pCS)
|
||||
vkCmdBindPipeline(hCommandBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pCS->m_hPipeline);
|
||||
}
|
||||
DECLARE_VULKAN_COMMAND(SetShaderData)
|
||||
{
|
||||
CVkMaterial *pMat = (CVkMaterial*)pShaderData;
|
||||
vkCmdBindDescriptorSets(hCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pMat->m_pVkShader->m_hPipelineLayout, 0, pMat->m_hSets.GetSize(), pMat->m_hSets.GetData(), 0, 0 );
|
||||
CVkShader *pS = dynamic_cast<CVkShader*>(pMat->m_pShader);
|
||||
CVkComputeShader *pCS = dynamic_cast<CVkComputeShader*>(pMat->m_pShader);
|
||||
if (pS)
|
||||
vkCmdBindDescriptorSets(hCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pS->m_hPipelineLayout, 0, pMat->m_hSets.GetSize(), pMat->m_hSets.GetData(), 0, 0 );
|
||||
if (pCS)
|
||||
vkCmdBindDescriptorSets(hCommandBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, pCS->m_hPipelineLayout, 0, pMat->m_hSets.GetSize(), pMat->m_hSets.GetData(), 0, 0 );
|
||||
}
|
||||
|
||||
DECLARE_VULKAN_COMMAND(SetVertexBuffer)
|
||||
@@ -153,24 +162,4 @@ DECLARE_VULKAN_COMMAND(ResolveImage)
|
||||
};
|
||||
vkCmdResolveImage2(hCommandBuffer, &i);
|
||||
}
|
||||
DECLARE_VULKAN_COMMAND(CopyBufferToImage)
|
||||
{
|
||||
VkBufferImageCopy2 r = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2,
|
||||
.imageSubresource = {
|
||||
.aspectMask = ((CVkImage*)VulkanGetObject(stOutputImage, iCurrentFrame))->m_range.aspectMask,
|
||||
.layerCount = 1,
|
||||
},
|
||||
.imageOffset = {iOffsetX, iOffsetY, iOffsetZ},
|
||||
.imageExtent = {iImageX, iImageY, iImageZ},
|
||||
};
|
||||
VkCopyBufferToImageInfo2 c = {
|
||||
.sType = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2,
|
||||
.srcBuffer = ((CVkBuffer*)pBuffer)->m_buffer,
|
||||
.dstImage = ((CVkImage*)VulkanGetObject(stOutputImage, iCurrentFrame))->m_image,
|
||||
.dstImageLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
.regionCount = 1,
|
||||
.pRegions = &r,
|
||||
};
|
||||
vkCmdCopyBufferToImage2(hCommandBuffer, &c);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,3 +33,25 @@ DECLARE_VULKAN_COMMAND(Blit)
|
||||
|
||||
vkCmdBlitImage(hCommandBuffer, pVkInputImage->m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, pVkOutputImage->m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &stBlit, VK_FILTER_NEAREST);
|
||||
}
|
||||
|
||||
DECLARE_VULKAN_COMMAND(CopyBufferToImage)
|
||||
{
|
||||
VkBufferImageCopy2 r = {
|
||||
.sType = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2,
|
||||
.imageSubresource = {
|
||||
.aspectMask = ((CVkImage*)VulkanGetObject(stOutputImage, iCurrentFrame))->m_range.aspectMask,
|
||||
.layerCount = 1,
|
||||
},
|
||||
.imageOffset = {iOffsetX, iOffsetY, iOffsetZ},
|
||||
.imageExtent = {iImageX, iImageY, iImageZ},
|
||||
};
|
||||
VkCopyBufferToImageInfo2 c = {
|
||||
.sType = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2,
|
||||
.srcBuffer = ((CVkBuffer*)pBuffer)->m_buffer,
|
||||
.dstImage = ((CVkImage*)VulkanGetObject(stOutputImage, iCurrentFrame))->m_image,
|
||||
.dstImageLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
.regionCount = 1,
|
||||
.pRegions = &r,
|
||||
};
|
||||
vkCmdCopyBufferToImage2(hCommandBuffer, &c);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user