改进SPIRType到VkFormat转换
This commit is contained in:
parent
d485dd90e3
commit
d8978b6eaa
@ -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
|
||||
|
||||
|
@ -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.basetype<spirv_cross::SPIRType::SByte
|
||||
||type.basetype>spirv_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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user