#pragma once #include "evk.h" const static VkFormat evkToVkFmtLUT[][5] = { [EVK_FMT_INVALID] = { VK_FORMAT_UNDEFINED, VK_FORMAT_UNDEFINED , VK_FORMAT_UNDEFINED , VK_FORMAT_UNDEFINED , VK_FORMAT_UNDEFINED }, [EVK_FMT_FLOAT32] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32B32A32_SFLOAT }, [EVK_FMT_UINT32] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R32_UINT , VK_FORMAT_R32G32_UINT , VK_FORMAT_R32G32B32_UINT , VK_FORMAT_R32G32B32A32_UINT }, [EVK_FMT_SINT32] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R32_SINT , VK_FORMAT_R32G32_SINT , VK_FORMAT_R32G32B32_SINT , VK_FORMAT_R32G32B32A32_SINT }, [EVK_FMT_FLOAT16] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16B16_SFLOAT, VK_FORMAT_R16G16B16A16_SFLOAT }, [EVK_FMT_UNORM16] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R16_UNORM , VK_FORMAT_R16G16_UNORM , VK_FORMAT_R16G16B16_UNORM , VK_FORMAT_R16G16B16A16_UNORM }, [EVK_FMT_SNORM16] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R16_SNORM , VK_FORMAT_R16G16_SNORM , VK_FORMAT_R16G16B16_SNORM , VK_FORMAT_R16G16B16A16_SNORM }, [EVK_FMT_UINT16] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R16_UINT , VK_FORMAT_R16G16_UINT , VK_FORMAT_R16G16B16_UINT , VK_FORMAT_R16G16B16A16_UINT }, [EVK_FMT_SINT16] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R16_SINT , VK_FORMAT_R16G16_SINT , VK_FORMAT_R16G16B16_SINT , VK_FORMAT_R16G16B16A16_SINT }, [EVK_FMT_UNORM8] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R8_UNORM , VK_FORMAT_R8G8_UNORM , VK_FORMAT_R8G8B8_UNORM , VK_FORMAT_R8G8B8A8_UNORM }, [EVK_FMT_SNORM8] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R8_SNORM , VK_FORMAT_R8G8_SNORM , VK_FORMAT_R8G8B8_SNORM , VK_FORMAT_R8G8B8A8_SNORM }, [EVK_FMT_UINT8] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R8_UINT , VK_FORMAT_R8G8_UINT , VK_FORMAT_R8G8B8_UINT , VK_FORMAT_R8G8B8A8_UINT }, [EVK_FMT_SINT8] = { VK_FORMAT_UNDEFINED, VK_FORMAT_R8_SINT , VK_FORMAT_R8G8_SINT , VK_FORMAT_R8G8B8_SINT , VK_FORMAT_R8G8B8A8_SINT }, }; const static u32 evkFmtToSizeLUT[][5] = { [EVK_FMT_INVALID] = { 0, 0, 0, 0, 0 }, [EVK_FMT_FLOAT32] = { 0, 4, 8, 12, 16 }, [EVK_FMT_UINT32] = { 0, 4, 8, 12, 16 }, [EVK_FMT_SINT32] = { 0, 4, 8, 12, 16 }, [EVK_FMT_FLOAT16] = { 0, 2, 4, 6, 8 }, [EVK_FMT_UNORM16] = { 0, 2, 4, 6, 8 }, [EVK_FMT_SNORM16] = { 0, 2, 4, 6, 8 }, [EVK_FMT_UINT16] = { 0, 2, 4, 6, 8 }, [EVK_FMT_SINT16] = { 0, 2, 4, 6, 8 }, [EVK_FMT_UNORM8] = { 0, 1, 2, 3, 4 }, [EVK_FMT_SNORM8] = { 0, 1, 2, 3, 4 }, [EVK_FMT_UINT8] = { 0, 1, 2, 3, 4 }, [EVK_FMT_SINT8] = { 0, 1, 2, 3, 4 }, }; static EV_FORCEINLINE VkFormat evkVertexAttributeGetVkFormat(evkVertexAttribute attr) { if(attr.dim > 4) assert(!"Unsupported Vertex Attribute Dimension"); return evkToVkFmtLUT[attr.fmt][attr.dim]; } static EV_FORCEINLINE u32 evkVertexAttributeGetSize(evkVertexAttribute attr) { if(attr.dim > 4) assert(!"Unsupported Vertex Attribute Dimension"); return evkFmtToSizeLUT[attr.fmt][attr.dim]; }