#include "materialsystem/imaterialsystem.h" #include "vulkan_state.h" IRenderingObject *VulkanGetObject( VkFrameObject_t stObject, int iIndex ) { switch (stObject.m_eObjectType) { case FRAME_OBJECT_TYPE_SINGLE: return stObject.m_pSingle; case FRAME_OBJECT_TYPE_SWAPPED: return stObject.m_ppSwapped[iIndex]; default: return NULL; } } VkAccessFlags2 VulkanGetAccessFlags( EDependencyMode eMode ) { switch (eMode) { case DEPENDENCY_MODE_JUST_CREATED: return VK_ACCESS_2_NONE; case DEPENDENCY_MODE_DRAWCALL_OUTPUT_IMAGE: return VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR; case DEPENDENCY_MODE_DRAWCALL_OUTPUT_DEPTH_IMAGE: return VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; case DEPENDENCY_MODE_COLOR_CLEAR_DESTINATION: return VK_ACCESS_2_TRANSFER_WRITE_BIT; case DEPENDENCY_MODE_IMAGE_PRESENT: return VK_ACCESS_2_NONE; case DEPENDENCY_MODE_BLIT_IMAGE_SOURCE: case DEPENDENCY_MODE_IMAGE_SOURCE: case DEPENDENCY_MODE_BUFFER_SOURCE: return VK_ACCESS_2_TRANSFER_READ_BIT; case DEPENDENCY_MODE_IMAGE_DESTINATION: case DEPENDENCY_MODE_BLIT_IMAGE_DESTINATION: case DEPENDENCY_MODE_BUFFER_DESTINATION: return VK_ACCESS_2_TRANSFER_WRITE_BIT; default: return VK_ACCESS_2_NONE; } } VkPipelineStageFlags2 VulkanGetStageFlags( EDependencyMode eMode ) { switch (eMode) { case DEPENDENCY_MODE_JUST_CREATED: return VK_PIPELINE_STAGE_2_NONE; case DEPENDENCY_MODE_DRAWCALL_OUTPUT_IMAGE: return VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT; case DEPENDENCY_MODE_DRAWCALL_OUTPUT_DEPTH_IMAGE: return VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT; case DEPENDENCY_MODE_COLOR_CLEAR_DESTINATION: return VK_PIPELINE_STAGE_2_TRANSFER_BIT; case DEPENDENCY_MODE_IMAGE_PRESENT: return VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT; case DEPENDENCY_MODE_BLIT_IMAGE_DESTINATION: case DEPENDENCY_MODE_BLIT_IMAGE_SOURCE: return VK_PIPELINE_STAGE_2_BLIT_BIT; case DEPENDENCY_MODE_BUFFER_SOURCE: case DEPENDENCY_MODE_BUFFER_DESTINATION: case DEPENDENCY_MODE_IMAGE_SOURCE: case DEPENDENCY_MODE_IMAGE_DESTINATION: return VK_PIPELINE_STAGE_2_COPY_BIT; default: return VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT; } } VkImageLayout VulkanGetImageLayout( EDependencyMode eMode ) { switch (eMode) { case DEPENDENCY_MODE_JUST_CREATED: return VK_IMAGE_LAYOUT_UNDEFINED; case DEPENDENCY_MODE_DRAWCALL_OUTPUT_IMAGE: return VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; case DEPENDENCY_MODE_DRAWCALL_OUTPUT_DEPTH_IMAGE: return VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL; case DEPENDENCY_MODE_COLOR_CLEAR_DESTINATION: return VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; case DEPENDENCY_MODE_IMAGE_PRESENT: return VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; case DEPENDENCY_MODE_BLIT_IMAGE_SOURCE: case DEPENDENCY_MODE_IMAGE_SOURCE: case DEPENDENCY_MODE_BUFFER_SOURCE: return VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; case DEPENDENCY_MODE_BLIT_IMAGE_DESTINATION: case DEPENDENCY_MODE_IMAGE_DESTINATION: case DEPENDENCY_MODE_BUFFER_DESTINATION: return VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; default: return VK_IMAGE_LAYOUT_UNDEFINED; } } VkFormat VulkanGetVertexFormat( EVertexFormat eFormat ) { switch (eFormat) { case VERTEX_FORMAT_X32_SFLOAT: return VK_FORMAT_R32_SFLOAT; case VERTEX_FORMAT_XY32_SFLOAT: return VK_FORMAT_R32G32_SFLOAT; case VERTEX_FORMAT_XYZ32_SFLOAT: return VK_FORMAT_R32G32B32_SFLOAT; case VERTEX_FORMAT_XYZW32_SFLOAT: return VK_FORMAT_R32G32B32A32_SFLOAT; default: return VK_FORMAT_UNDEFINED; } } VkPrimitiveTopology VulkanGetTopology( ETopologyMode eMode ) { switch ( eMode ) { case TOPOLOGY_MODE_POINT_LIST: return VK_PRIMITIVE_TOPOLOGY_POINT_LIST; case TOPOLOGY_MODE_LINE_LIST: return VK_PRIMITIVE_TOPOLOGY_LINE_LIST; case TOPOLOGY_MODE_LINE_STRIP: return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP; case TOPOLOGY_MODE_TRIANGLE_LIST: return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; case TOPOLOGY_MODE_TRIANGLE_STRIP: return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; } } VkShaderStageFlagBits VulkanGetShaderStage( EShaderStage eStage ) { switch (eStage) { case SHADER_STAGE_VERTEX: return VK_SHADER_STAGE_VERTEX_BIT; case SHADER_STAGE_PIXEL: return VK_SHADER_STAGE_FRAGMENT_BIT; case SHADER_STAGE_COMPUTE: return VK_SHADER_STAGE_COMPUTE_BIT; case SHADER_STAGE_RAYGEN: return VK_SHADER_STAGE_RAYGEN_BIT_KHR; case SHADER_STAGE_RAYGEN_SOFTWARE: return VK_SHADER_STAGE_COMPUTE_BIT; default: break; } return VK_SHADER_STAGE_VERTEX_BIT; }