Exemplo n.º 1
0
        public static int GetSizeInBytes(Member m, VulkanVersion vulkanVersion)
        {
            if (m.ExplicityLayoutValue.HasValue)
            {
                return(m.ExplicityLayoutValue.Value / 8);
            }
            else
            {
                switch (m.Type)
                {
                case "int8_t":
                case "int8_t*":
                case "uint8_t":
                case "char":
                case "uint8_t*":
                case "char*":
                    return(1);

                case "uint16_t":
                case "uint16_t*":
                case "int16_t":
                case "int16_t*":
                    return(2);

                case "uint32_t":
                case "DWORD":
                case "uint32_t*":
                case "int32_t":
                case "int32_t*":
                case "size_t":
                case "float":
                case "float*":
                    return(4);

                case "uint64_t":
                case "uint64_t*":
                case "int64_t":
                case "int64_t*":
                case "double":
                case "double*":
                case "void":
                    return(8);

                case "VkBool32":
                    return(4);

                case "VkExtent2D":
                case "VkOffset2D":
                    return(8);

                case "VkRect2D":
                    return(16);

                default:
                    var @struct = vulkanVersion.Structs.Find(s => s.Name == m.Type);

                    if (@struct != null)     // structs
                    {
                        return(StructureDefinition.GetSizeInBytes(@struct, vulkanVersion));
                    }
                    else
                    {
                        return(4);    // enums
                    }
                }
            }
        }