diff --git a/example/Vulkan/VKFormat.h b/example/Vulkan/VKFormat.h index 5749cff3..d59d55fa 100644 --- a/example/Vulkan/VKFormat.h +++ b/example/Vulkan/VKFormat.h @@ -95,6 +95,22 @@ #define FMT_RGBA32I VK_FORMAT_R32G32B32A32_SINT #define FMT_RGBA32F VK_FORMAT_R32G32B32A32_SFLOAT +#define FMT_R64U VK_FORMAT_R64_UINT +#define FMT_R64I VK_FORMAT_R64_SINT +#define FMT_R64F VK_FORMAT_R64_SFLOAT + +#define FMT_RG64U VK_FORMAT_R64G64_UINT +#define FMT_RG64I VK_FORMAT_R64G64_SINT +#define FMT_RG64F VK_FORMAT_R64G64_SFLOAT + +#define FMT_RGB64U VK_FORMAT_R64G64B64_UINT +#define FMT_RGB64I VK_FORMAT_R64G64B64_SINT +#define FMT_RGB64F VK_FORMAT_R64G64B64_SFLOAT + +#define FMT_RGBA64U VK_FORMAT_R64G64B64A64_UINT +#define FMT_RGBA64I VK_FORMAT_R64G64B64A64_SINT +#define FMT_RGBA64F VK_FORMAT_R64G64B64A64_SFLOAT + #define FMT_B10GR11 VK_FORMAT_B10G11R11_UFLOAT_PACK32 #define FMT_E5BGR9 VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 diff --git a/example/Vulkan/VKShader.cpp b/example/Vulkan/VKShader.cpp index e4a77fcd..6f85446d 100644 --- a/example/Vulkan/VKShader.cpp +++ b/example/Vulkan/VKShader.cpp @@ -5,49 +5,28 @@ VK_NAMESPACE_BEGIN const VkFormat GetVecFormat(const spirv_cross::SPIRType &type) { - if(type.basetype==spirv_cross::SPIRType::Float) + constexpr VkFormat format[][4]= { - constexpr VkFormat format[4]={FMT_R32F,FMT_RG32F,FMT_RGB32F,FMT_RGB32F}; + {FMT_R8I,FMT_RG8I,FMT_RGB8I,FMT_RGBA8I}, //sbyte + {FMT_R8U,FMT_RG8U,FMT_RGB8U,FMT_RGBA8U}, //ubyte + {FMT_R16I,FMT_RG16I,FMT_RGB16I,FMT_RGBA16I},//short + {FMT_R16U,FMT_RG16U,FMT_RGB16U,FMT_RGBA16U},//ushort + {FMT_R32I,FMT_RG32I,FMT_RGB32I,FMT_RGBA32I},//int + {FMT_R32U,FMT_RG32U,FMT_RGB32U,FMT_RGBA32U},//uint + {FMT_R64I,FMT_RG64I,FMT_RGB64I,FMT_RGBA64I},//int64 + {FMT_R64U,FMT_RG64U,FMT_RGB64U,FMT_RGBA64U},//uint64 + {}, //atomic + {FMT_R16F,FMT_RG16F,FMT_RGB16F,FMT_RGBA16F},//half + {FMT_R32F,FMT_RG32F,FMT_RGB32F,FMT_RGBA32F},//float + {FMT_R64F,FMT_RG64F,FMT_RGB64F,FMT_RGBA64F} //double + }; - return format[type.vecsize-1]; - } - else - if(type.basetype==spirv_cross::SPIRType::Half) - { - constexpr VkFormat format[4]={FMT_R16F,FMT_RG16F,FMT_RGB16F,FMT_RGB16F}; + if(type.basetypespirv_cross::SPIRType::Double + ||type.basetype==spirv_cross::SPIRType::AtomicCounter) + return VK_FORMAT_UNDEFINED; - return format[type.vecsize-1]; - } - else - if(type.basetype==spirv_cross::SPIRType::UInt) - { - constexpr VkFormat format[4]={FMT_R32U,FMT_RG32U,FMT_RGB32U,FMT_RGB32U}; - - return format[type.vecsize-1]; - } - else - if(type.basetype==spirv_cross::SPIRType::Int) - { - constexpr VkFormat format[4]={FMT_R32I,FMT_RG32I,FMT_RGB32I,FMT_RGB32I}; - - return format[type.vecsize-1]; - } - else - if(type.basetype==spirv_cross::SPIRType::UShort) - { - constexpr VkFormat format[4]={FMT_R16U,FMT_RG16U,FMT_RGB16U,FMT_RGB16U}; - - return format[type.vecsize-1]; - } - else - if(type.basetype==spirv_cross::SPIRType::Short) - { - constexpr VkFormat format[4]={FMT_R16I,FMT_RG16I,FMT_RGB16I,FMT_RGB16I}; - - return format[type.vecsize-1]; - } - - return VK_FORMAT_UNDEFINED; + return format[type.basetype-spirv_cross::SPIRType::SByte][type.vecsize-1]; } bool Shader::CreateVIS(const void *spv_data,const uint32_t spv_size) @@ -67,8 +46,7 @@ bool Shader::CreateVIS(const void *spv_data,const uint32_t spv_size) const uint32_t location=comp.get_decoration(si.id,spv::DecorationLocation); const UTF8String & name =comp.get_name(si.id).c_str(); - const int binding=vertex_input_state->Add(name,location,format); - + vertex_input_state->Add(name,location,format); } return(true);