]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/vertexformat_backend.cpp
Initial implementation of Vulkan backend
[libs/gl.git] / source / backends / vulkan / vertexformat_backend.cpp
diff --git a/source/backends/vulkan/vertexformat_backend.cpp b/source/backends/vulkan/vertexformat_backend.cpp
new file mode 100644 (file)
index 0000000..8a962f5
--- /dev/null
@@ -0,0 +1,63 @@
+#include "vertexformat.h"
+#include "vertexformat_backend.h"
+#include "vulkan.h"
+
+using namespace std;
+
+namespace Msp {
+namespace GL {
+
+unsigned get_vulkan_attribute_format(VertexAttribute a)
+{
+       switch(a&0x1FF)
+       {
+       case 0x011: return VK_FORMAT_R8_UNORM;
+       case 0x012: return VK_FORMAT_R8G8_UNORM;
+       case 0x013: return VK_FORMAT_R8G8B8_UNORM;
+       case 0x014: return VK_FORMAT_R8G8B8A8_UNORM;
+       case 0x019: return VK_FORMAT_R8_UINT;
+       case 0x01A: return VK_FORMAT_R8G8_UINT;
+       case 0x01B: return VK_FORMAT_R8G8B8_UINT;
+       case 0x01C: return VK_FORMAT_R8G8B8A8_UINT;
+       case 0x021: return VK_FORMAT_R16_UNORM;
+       case 0x022: return VK_FORMAT_R16G16_UNORM;
+       case 0x023: return VK_FORMAT_R16G16B16_UNORM;
+       case 0x024: return VK_FORMAT_R16G16B16A16_UNORM;
+       case 0x029: return VK_FORMAT_R16_UINT;
+       case 0x02A: return VK_FORMAT_R16G16_UINT;
+       case 0x02B: return VK_FORMAT_R16G16B16_UINT;
+       case 0x02C: return VK_FORMAT_R16G16B16A16_UINT;
+       case 0x049: return VK_FORMAT_R32_UINT;
+       case 0x04A: return VK_FORMAT_R32G32_UINT;
+       case 0x04B: return VK_FORMAT_R32G32B32_UINT;
+       case 0x04C: return VK_FORMAT_R32G32B32A32_UINT;
+       case 0x091: return VK_FORMAT_R8_SNORM;
+       case 0x092: return VK_FORMAT_R8G8_SNORM;
+       case 0x093: return VK_FORMAT_R8G8B8_SNORM;
+       case 0x094: return VK_FORMAT_R8G8B8A8_SNORM;
+       case 0x099: return VK_FORMAT_R8_SINT;
+       case 0x09A: return VK_FORMAT_R8G8_SINT;
+       case 0x09B: return VK_FORMAT_R8G8B8_SINT;
+       case 0x09C: return VK_FORMAT_R8G8B8A8_SINT;
+       case 0x0A1: return VK_FORMAT_R16_SNORM;
+       case 0x0A2: return VK_FORMAT_R16G16_SNORM;
+       case 0x0A3: return VK_FORMAT_R16G16B16_SNORM;
+       case 0x0A4: return VK_FORMAT_R16G16B16A16_SNORM;
+       case 0x0A9: return VK_FORMAT_R16_SINT;
+       case 0x0AA: return VK_FORMAT_R16G16_SINT;
+       case 0x0AB: return VK_FORMAT_R16G16B16_SINT;
+       case 0x0AC: return VK_FORMAT_R16G16B16A16_SINT;
+       case 0x0C9: return VK_FORMAT_R32_SINT;
+       case 0x0CA: return VK_FORMAT_R32G32_SINT;
+       case 0x0CB: return VK_FORMAT_R32G32B32_SINT;
+       case 0x0CC: return VK_FORMAT_R32G32B32A32_SINT;
+       case 0x1C1: return VK_FORMAT_R32_SFLOAT;
+       case 0x1C2: return VK_FORMAT_R32G32_SFLOAT;
+       case 0x1C3: return VK_FORMAT_R32G32B32_SFLOAT;
+       case 0x1C4: return VK_FORMAT_R32G32B32A32_SFLOAT;
+       default: throw invalid_argument("get_vulkan_attribute_format");
+       }
+}
+
+} // namespace GL
+} // namespace Msp