rtengine/src/renderer/vk/helper.c
2024-02-27 10:00:00 +01:00

83 lines
2.6 KiB
C

#include "gpu.h"
VkFormat rtPixelFormatToVkFormat(rt_pixel_format format) {
switch (format) {
case RT_PIXEL_FORMAT_R8G8B8A8_UNORM:
return VK_FORMAT_R8G8B8A8_UNORM;
case RT_PIXEL_FORMAT_B8G8R8A8_UNORM:
return VK_FORMAT_B8G8R8A8_UNORM;
case RT_PIXEL_FORMAT_R8G8B8A8_SRGB:
return VK_FORMAT_R8G8B8A8_SRGB;
case RT_PIXEL_FORMAT_B8G8R8A8_SRGB:
return VK_FORMAT_B8G8R8A8_SRGB;
case RT_PIXEL_FORMAT_R8G8B8_UNORM:
return VK_FORMAT_R8G8B8_UNORM;
case RT_PIXEL_FORMAT_B8G8R8_UNORM:
return VK_FORMAT_B8G8R8_UNORM;
case RT_PIXEL_FORMAT_R8G8B8_SRGB:
return VK_FORMAT_R8G8B8_SRGB;
case RT_PIXEL_FORMAT_B8G8R8_SRGB:
return VK_FORMAT_B8G8R8_SRGB;
case RT_PIXEL_FORMAT_DEPTH24_STENCIL8:
return VK_FORMAT_D24_UNORM_S8_UINT;
case RT_PIXEL_FORMAT_DEPTH32:
return VK_FORMAT_D32_SFLOAT;
default:
return VK_FORMAT_UNDEFINED;
}
}
VkSampleCountFlagBits rtSampleCountToFlags(unsigned int count) {
/* Limit to what the gpu supports */
VkSampleCountFlags counts = g_gpu.phys_device_props.limits.framebufferColorSampleCounts &
g_gpu.phys_device_props.limits.framebufferDepthSampleCounts &
g_gpu.phys_device_props.limits.sampledImageColorSampleCounts &
g_gpu.phys_device_props.limits.sampledImageDepthSampleCounts;
while (count > 1) {
if ((counts & count) == 0)
count >>= 1;
else
break;
}
return (VkSampleCountFlagBits)count;
}
VkQueue rtGetQueue(rt_gpu_queue queue) {
switch (queue) {
case RT_GRAPHICS_QUEUE:
return g_gpu.graphics_queue;
case RT_COMPUTE_QUEUE:
return g_gpu.compute_queue;
case RT_TRANSFER_QUEUE:
return g_gpu.transfer_queue;
default:
return VK_NULL_HANDLE;
}
}
const char *rtVkFormatToString(VkFormat format) {
switch (format) {
case VK_FORMAT_R8G8B8A8_UNORM:
return "R8G8B8A8_UNORM";
case VK_FORMAT_B8G8R8A8_UNORM:
return "B8G8R8A8_UNORM";
case VK_FORMAT_R8G8B8A8_SRGB:
return "R8G8B8A8_SRGB";
case VK_FORMAT_B8G8R8A8_SRGB:
return "B8G8R8A8_SRGB";
case VK_FORMAT_R8G8B8_UNORM:
return "R8G8B8_UNORM";
case VK_FORMAT_B8G8R8_UNORM:
return "B8G8R8_UNORM";
case VK_FORMAT_R8G8B8_SRGB:
return "R8G8B8_SRGB";
case VK_FORMAT_B8G8R8_SRGB:
return "B8G8R8_SRGB";
case VK_FORMAT_D24_UNORM_S8_UINT:
return "D24_UNORM_S8_UINT";
case VK_FORMAT_D32_SFLOAT:
return "D32_SFLOAT";
default:
return "UNDEFINED";
}
}