114 lines
2.9 KiB
C++
114 lines
2.9 KiB
C++
#include "../vulkan_state.h"
|
|
#include "../commands.h"
|
|
#include "materialsystem/imaterialsystem.h"
|
|
#include "tier0/platform.h"
|
|
#include "tier1/utlvector.h"
|
|
|
|
|
|
DECLARE_VULKAN_COMMAND(ClearColor)
|
|
{
|
|
|
|
CVkImage *pImg;
|
|
|
|
if (pImage)
|
|
pImg = (CVkImage*)pImage;
|
|
if (ppSwapchainImages)
|
|
pImg = (CVkImage*)ppSwapchainImages[iCurrentFrame];
|
|
|
|
if (pImg == NULL)
|
|
Plat_FatalErrorFunc("pImage and *ppSwapchainImages are NULL\n");
|
|
|
|
|
|
VkClearColorValue color = {.float32 = {r,g,b,a}};
|
|
VkImageSubresourceRange range = {
|
|
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
|
.levelCount = 1,
|
|
.layerCount = 1,
|
|
};
|
|
vkCmdClearColorImage(hCommandBuffer, pImg->m_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &color, 1, &range);
|
|
}
|
|
|
|
DECLARE_VULKAN_COMMAND(Begin)
|
|
{
|
|
VkRenderingInfo stRenderingInfo = {};
|
|
CUtlVector<VkRenderingAttachmentInfo> attachments = {};
|
|
for (auto i: images)
|
|
{
|
|
VkRenderingAttachmentInfo a = {};
|
|
a.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO;
|
|
a.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
|
a.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
|
|
a.clearValue.color.float32[0] = i.m_fClearColor[0];
|
|
a.clearValue.color.float32[1] = i.m_fClearColor[1];
|
|
a.clearValue.color.float32[2] = i.m_fClearColor[2];
|
|
a.clearValue.color.float32[3] = i.m_fClearColor[3];
|
|
a.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
|
a.imageView = ((CVkImage*)VulkanGetObject(i.m_stImage, iCurrentFrame))->m_imageView;
|
|
attachments.AppendTail(a);
|
|
}
|
|
|
|
stRenderingInfo.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
|
|
stRenderingInfo.layerCount = 1;
|
|
stRenderingInfo.colorAttachmentCount = attachments.GetSize();
|
|
stRenderingInfo.pColorAttachments = attachments.GetData();
|
|
stRenderingInfo.renderArea = (VkRect2D){0,0,nResolutionX,nResolutionY};
|
|
|
|
vkCmdBeginRendering(hCommandBuffer, &stRenderingInfo);
|
|
}
|
|
|
|
DECLARE_VULKAN_COMMAND(End)
|
|
{
|
|
vkCmdEndRendering(hCommandBuffer);
|
|
}
|
|
|
|
DECLARE_VULKAN_COMMAND(SetShader)
|
|
{
|
|
CVkShader *pVkShader = (CVkShader*)pShader;
|
|
vkCmdBindPipeline(hCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pVkShader->m_hPipeline);
|
|
}
|
|
DECLARE_VULKAN_COMMAND(SetShaderData)
|
|
{
|
|
CVkMaterial *pMat = (CVkMaterial*)pShaderData;
|
|
vkCmdBindDescriptorSets(hCommandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pMat->m_pVkShader->m_hPipelineLayout, 0, 1, &pMat->m_hSet, 0, 0 );
|
|
}
|
|
|
|
DECLARE_VULKAN_COMMAND(SetVertexBuffer)
|
|
{
|
|
CVkBuffer *pVkBuffer = (CVkBuffer*)pBuffer;
|
|
VkDeviceSize uOffset = 0;
|
|
vkCmdBindVertexBuffers(hCommandBuffer, uBinding, 1, &pVkBuffer->m_buffer, &uOffset);
|
|
}
|
|
|
|
DECLARE_VULKAN_COMMAND(DrawPrimitives)
|
|
{
|
|
vkCmdDraw(hCommandBuffer, nVertexCount, nInstanceCount, nFirstVertex, nFirstInstance);
|
|
}
|
|
|
|
DECLARE_VULKAN_COMMAND(SetScissors)
|
|
{
|
|
VkRect2D r = {
|
|
.offset = {
|
|
iX,
|
|
iY,
|
|
},
|
|
.extent = {
|
|
uWidth,
|
|
uHeight,
|
|
},
|
|
};
|
|
vkCmdSetScissorWithCount(hCommandBuffer, 1, &r);
|
|
}
|
|
|
|
DECLARE_VULKAN_COMMAND(SetViewport)
|
|
{
|
|
VkViewport v = {
|
|
fX,
|
|
fY,
|
|
fWidth,
|
|
fHeight,
|
|
fDepthMin,
|
|
fDepthMax
|
|
};
|
|
vkCmdSetViewportWithCount(hCommandBuffer, 1, &v);
|
|
}
|