Turbo是渲染引擎
当前版本 0.0.0.12
Vulkan
硬件实时光追。C/C++
开发WebGPU
项目,并发布到浏览器页面中。
./sample
下新增 PureCCppWebGPUTest
项目,详细信息请参考 WebGPU : C/C++ 文档。./sample
下新增 PureCCppMiniWebGPUTest
项目。想赞助的小伙伴,欢迎使用爱发电
赞助,请量力而为,如果赞助完真有困难可以退回,未成年人禁止投喂!!!
- 体积云教程:详情请阅览
./docs/VolumetricCloud.md
(进行中)<研究光照散射中>
docs/TurboDesign.drawio
(需要安装drawwio
)docs/Issue.md
目前Turbo
中有以下模块
Turbo::Core
./docs/TurboDesign.drawio:Core
和Core.md./engine/core
Core
作为核心模块直接与Vulkan
沟通,是上层与Vulkan
底层最直接的桥梁,Turbo
中所有的GPU
相关工作最终都会从上层回到Core
层。Turbo::FrameGraph
./docs/TurboDesign.drawio:FrameGraph
和FrameGraph.md./engine/framegraph
FrameGraph
用于描述一帧中的资源、渲染配置和渲染指令Turbo::Render
./engine/render
Core
和FrameGraph
。Core
层进行渲染相对来说还是会比较繁琐吃力一些,Render
模块的出现就是将Core
和FrameGraph
结合起来,提供更加方便的工作流,将开发者从繁杂的Core
层脱离出来,提供更加简单易用的设计架构git clone --recursive git@github.com:FuXiii/Turbo.git
首先您需要知道的:
Turbo
目前主要有两个分支:master
和dev
。其中master
是主分支,确保可以正常编译和使用,而dev
分支会经常开发新功能,想看开发推进的可以查看dev
分支,但不保证能够正常编译。
Turbo
引擎被设计成各种模块,有Core
核心模块, 有FrameGraph
模块等。
目前Turbo
的核心模块基本完成(未完成部分和相关问题请参考下面的RoadMap
章节和docs/Issue.md
文档)
Turbo
引擎的核心位于./engine/core
,这是一个单独的模块,您可以直接将他拷贝出来放到自己的工程中
Turbo
引擎会使用核心进行渲染,有关如何使用该核心,目前可以参考./main.cpp
和./samples
文件夹下各个示例。该文件中有最新的核心实例代码,同时也是引擎的一部分。
核心会用到的第三方库为:
glslang
: 用于将Shader
代码字符串编译成Spir-V
SPIRV-Cross
: 用于解析Spir-V
,获取Shader
中相关声明
VulkanMemoryAllocator
: 用于分配Vulkan
资源内存
本人对于CMake
并不是非常精通,有关核心是如何寻找Vulkan
库的,我直接配置的绝对路径,请修改engine/core/CMakeLists.txt
中的此行代码:
#已遗弃 ##set_target_properties(vulkan PROPERTIES IMPORTED_LOCATION F:/VulkanSDK/1.3.204.1/Lib/vulkan-1.lib)
~~请将该行修改成您电脑上的
Vulkan
库目录。 该问题将会在不远的未来通过动态加载库文件得到解决。~~ ┗|`O′|┛oO 2022/7/27 该问题已修改完成,详情请参考下面的如何编译Turbo
章节的注
Turbo
非核心模块,也就是目前除了./engine/core
之外,基本上就是Turbo
的非核心了,之后将在核心之外,基于核心开发高级模块,比如FrameGraph
之类的,目前非核心模块已有核心模块使用案例,位于./main.cpp
和./samples
文件夹下,就像前面说的,用例使用如下第三方库:
glfw
:窗口库
glm
: 用于向量矩阵等运算
imgui
: 用于绘制界面UI
KTX-Software
: Khronos Texture
通用纹理标准
tinygltf
: 读取gltf
文件库
如何编译Turbo
请安装Vulkan SDK
( *注:2022/7/27 对于Windows
系统,目前Turbo
已经完成了动态加载Vulkan
函数,(有些第三方依赖需要Vulkan SDK
目前对于Turbo
不是必需品Vulkan SDK
,比如VulkanMemoryAllocator
),Vulkan
的Runtime
是Turbo
的必须品,正常Windows
都会自带该运行时库,如果没有请安装Vulkan Latest Runtime即可,(2022/11/14 Linux
系统等有空适配一下Linux
适配完成))
Vulkan Loader 文档有这么一句: In previous versions of the loader, it was possible to statically link the loader. This was removed and is no longer possible. The decision to remove static linking was because of changes to the driver which made older applications that statically linked unable to find newer drivers.
Turbo
的核心可以单独编译,编译相关的CMakeLists.txt
位于./engine/core/CMakeLists.txt
。将会输出名为TCore
的库文件。
2023/9/21 添加了TCORE_SHARED_LIBS
的CMake
选项。用于配置是否输出TCore
的动态库。默认情况下为OFF
,也就是输出静态库,如果想输出动态库请设置为ON
。
如果您想直接编译Turbo
git
的bin
目录,KTX-Sofware
编译依赖bash.exe
,正常该程序位于git
的bin
目录下python
。第三方库很多CMake
使用Python
脚本运行,安装完后请确保Python
的{Python的安装目录}/Python{版本号}/
目录和{Python的安装目录}/Python{版本号}/Scripts
目录加入到了环境变量中engine/core/CMakeLists.txt
中的Vulkan
库目录为您自己的目录./CMakeLists.txt
即可CMake
参数如下:KTX_FEATURE_LOADTEST_APPS=OFF//如果您想加载KTX测试,请设置ON
KTX_FEATURE_DOC=OFF//如果您想生成KTX文档,请设置ON
KTX_FEATURE_STATIC_LIBRARY=ON //目前Turbo按照静态库使用KTX
//2022/7/30 关于解决Turbo核心库的依赖库问题解决,核心库对于VulkanMemoryAllocator使用动态加载Vulkan API方式,这也是Turbo引擎加载Vulkan API的方式
VMA_STATIC_VULKAN_FUNCTIONS=OFF
VMA_DYNAMIC_VULKAN_FUNCTIONS=ON
TCORE_SHARED_LIBS=ON //2023/9/21 Turbo的核心库输出为动态库,如果想输出为静态库请设置为OFF
注:如果编译有遇到问题请查看常见问题文档
如果还是没有解决方法请提Issue
如何运行
./main.cpp
的示例程序使用的资源文件使用的是相对路径,所有的资源文件都指向./asset/
目录,请在./main.cpp
中全局搜索asset
字符,替换成自己的目录即可。注:如果运行有遇到问题请查看常见问题文档
如果还是没有解决方法请提Issue
注:该RoadMap
章节信息有滞后性,引擎具体细节和开发计划请查看后面的开发Log
章节(更新的比较频繁)
2022/5/15
Turbo
引擎对于Vulkan 1.0
的相关核心功能已初步成型,由于Vulkan
本身的复杂性还有很多特性没有实现,在此做一下记录,记录该引擎以实现的特性和未来计划实现特性,该特性记录将会和docs/Issue.md
文档配合使用。Core
核心层将会作为单独完整的库发布,位于./engine/core
中, 现在核心库已分离成单独的库,将会输出TCore.lib
或TCore.a
库文件Turbo
将使用该Core
核心继续开发高级特性- 未来有时间录制
Vulkan教程
和引擎开发教程
视频
2022/5/28
- 实现完
Vulkan
的input attachment
也就是完成了延迟渲染相关工作,Turbo
核心现在对于图形的核心封装设计基本上接近尾声,延迟渲染之后将会开展FrameGraph
相关设计实现工作。有关几何着色器,细分着色器,光线追踪等将会在Turbo
的核心继续展开FrameGraph
将会是Turbo
引擎实现高级特性的重点,ECS(Entity Component System)
或者EC(Entity Component)
之类管理场景的相关技术不是Turbo
引擎的重点,Turbo
引擎目前的重点目标是不依赖任何窗口库(用户自定义),不依赖任何场景结构技术(用户自己实现自己的场景结构),Turbo
可以很轻松的嵌入其中。
2022/5/30
Turbo
核心基本实现完成,接下来开始FrameGraph
的设计开发。敬请期待。
2022/6/7
- 已开始写系列的使用示例。
2022/8/10
- 开始设计实现
engine
层
HelloTriangle
- 将会使用核心绘制IMGUI
和三角形PureHelloTriangle
- 将会使用核心绘制三角形PureCombinedImageSampler
- 将会使用核心绘制三角形,在此基础上使用纹理采样器一体式
对纹理采样PureSeparateImageSampler
- 将会使用核心绘制三角形,在此基础上使用纹理采样器分离式
对纹理采样PureIndexDraw
- 将会使用核心,基于索引渲染绘制一个方形面片,并在此基础上使用纹理采样器分离式
对纹理采样FrameGraphSample
- FrameGraph
的示例,目前该示例仅供测试(FrameGraph
未实现完成),您可以通过该示例了解FrameGraph
的基本流程1.Vulkan
核心特性的基本封装,包括:
Turbo::Core::TLayerInfo
- Vulkan
相关验证层信息Turbo::Core::TExtensionInfo
- Vulkan
相关扩展信息Turbo::Core::TVersion
- 通用版本Turbo::Core::TInstance
- VkInstance
的相关封装Turbo::Core::TPhysicalDevice
- VkPhysicalDevice
相关封装Turbo::Core::TDevice
- VkDevice
相关封装Turbo::Core::TDeviceQueue
- VkQueue
相关封装Turbo::Core::TImage
- VkImage
相关封装Turbo::Core::TImageView
- VkImageView
相关封装Turbo::Core::TCommandBufferPool
- VkCommandPool
相关封装Turbo::Core::TCommandBuffer
- VkCommandBuffer
相关封装Turbo::Core::TBuffer
- VkBuffer
相关封装Turbo::Core::TShader
- VkShaderModule
相关封装Turbo::Core::TDescriptorPool
- VkDescriptorPool
相关封装Turbo::Core::TSampler
- VkSampler
相关封装Turbo::Core::TSubpass
- Vulkan
中Subpass
抽象Turbo::Core::TAttachment
- Vulkan
中Attachment
抽象Turbo::Core::TRenderPass
- VkRenderPass
相关封装Turbo::Core::TVertexBinding
- Vulkan
中顶点属性抽象Turbo::Core::TViewport
- Vulkan
中Viewport
抽象Turbo::Core::TScissor
- Vulkan
中Scissor
抽象Turbo::Core::TDescriptor
- Vulkan
中各种描述符抽象Turbo::Core::TDescriptorSetLayout
- VkDescriptorSetLayout
的相关封装Turbo::Core::TPipelineLayout
- VkPipelineLayout
的相关封装Turbo::Core::TPipeline
- TPipelineLayout
的相关封装,内部有VkPipeline vkPipeline
成员变量,但创建是在其子类中创建Turbo::Core::TGraphicsPipeline
- 继承自Turbo::Core::TPipeline
,图形渲染管线VkPipeline
的相关封装,回去创建父类中的Turbo::Core::TPipeline::vkPipeline
Turbo::Core::TDescriptorSet
- VkDescriptorSet
的相关封装Turbo::Core::TPipelineDescriptorSet
- 管线所有有关描述符集的总和抽象,对应多个Turbo::Core::TDescriptorSet
Turbo::Core::TFramebuffer
- VkFramebuffer
相关封装Turbo::Core::TSemaphore
- VkSemaphore
相关封装Turbo::Core::TFence
- VkFence
相关封装Turbo::Extension::TSurface
- VkSurfaceKHR
相关封装Turbo::Extension::TSwapchain
- VkSwapchainKHR
相关封装Turbo
引擎目前以Core
核心层为主(优先级不分先后)
mipmap
Vulkan
光追标准非Core
:跨平台窗口层抽象
非Core
:IMGUI
非Core
:KTX
和 glTF
非Core
:FrameGraph
层
非Core
:FrameGraph
层实现PBR
非Core
:ECS
层
2022/7/13 搞了个鸿蒙OS(Harmony OS)
系统的手机,有时间适配一下鸿蒙设备。
2020/10/29
- 完成
TInstance
TLayer
TObject
的文档,创建TExtension
文档。目前跳转链接没有全部测试,有些页面还没有创建。
2020/10/29
- 完成
TExtension
文档。页内跳转还没写。TExtensionType
值和描述还没写
2022/3/17 基本调通了Turbo在VSCodes上的部署。
- 注意
TApplication::InitVulkan
对于验证层的修改。- 搞清Turbo中一些函数返回局部变量,之后没有拷贝一份而直接传给Vulkan API后会卡住的问题
- 将TApplication改成TEngine,作为Turbo最高层抽象
2022/3/18
- 继承自
TInfo
的类用于实现Vulkan相关Info功能,其中的GetVkXXXInfo等相关信息函数是返回局部变量,需要函数返回立刻保存数据,可能会有问题,先暂时这样。
2022/3/19 设计架构
- 重构
TAllcator
,创建TVulkanAllocator
类专门用于Vulkan内存分配,并作为引擎的默认内存分配器- 重写
TInstance::IsSupportVulkan()
函数,原先有隐藏的Bug- 将
Turbo::Core::TPhysicalDeviceProxy
下的static VkResult EnumeratePhysicalDevices(TInstance *instance)
改成私有Turbo::Core::TEngine::InitVulkan()
函数中不应开启任何layer或extension,该函数仅仅是为用户提供收集Vulkan相关信息功能。- TEngine中增加如下
uint32_t GetPhysicalDeviceCount();
std::vector\<TPhysicalDevice\> GetPhysicalDevices();
TPhysicalDevice GetBestPhysicalDevice();
TInfo
下的TInfoType
没用,去掉TVendor
修改成TVendorInfo
- 创建
TPhysicalDeviceInfo
类(完成,待完善)TQueueFamily
修改成TQueueFamilyInfo
- 仍需修改,未完成如下:
TExtension
TLayer
TFormat
- 等
2022/3/20 设计架构
完成如下:
TExtension
转成TExtensionInfo
TLayer
转成TLayerInfos
TFormat
转成TFormatInfo
TMemoryHeap
转成TMemoryHeapInfo
TMemoryType
转成TMemoryTypeInfo
- 完成
TPhysicalDeviceInfo
与TPhysicalDevice
相结合
TPhysicalDeviceProxy::Instance(this->instance)
的调用转移到了TInstance
的构造函数中,TInstance
中增加了TPhysicalDevice
数组,接下来的所有对于TInstance
用法都是指针连接(防止拷贝浪费内存)如下函数从
TEngine
转移到了Tinstance
中,除了GetPhysicalDevice()
函数如下函数将会从TPhysicalDeviceProxy
中移除
uint32_t GetPhysicalDeviceCount();
TPhysicalDevice GetPhysicalDevice(uint32_t index);
std::vector<TPhysicalDevice> GetPhysicalDevices();
TPhysicalDevice GetBestPhysicalDevice();
2022/3/21 设计架构
完成如下:
TPhysicalDevice
中增加std::map<TQueueFamilyInfo, uint32_t *> availableQueueCountMap
,用于存储当前QueueFamily还有多少队列可用,用于DeviceQueue的创建,每成功创建一个DeviceQueue,相应的可用队列数减一,每销毁一个Queue相应的队列数加一。TPhysicalDevice::availableQueueCountMap
在TPhysicalDevice::InitDeviceQueueParameter
函数中分配动态内存,在TInstance
的构造函数中释放动态内存TPhysicalDevice
中增加uint32_t GetAvailableQueueCount(TQueueFamilyInfo& queueFamily)
函数,用于获取可用队列个数,如果返回0
说明没有可用队列,如果大于0
说明存在可用队列将TPhysicalDevice如下
TQueueFamilyInfo* bestGraphysicsQueueFamily = nullptr; TQueueFamilyInfo* bestComputeQueueFamily = nullptr; TQueueFamilyInfo* bestTransferQueueFamily = nullptr; TQueueFamilyInfo* bestSparseQueueFamily = nullptr; TQueueFamilyInfo* bestProtectedQueueFamily = nullptr;
修改成索引。指针指向成员vector变量是临时地址,会出现Bug
uint32_t bestGraphysicsQueueFamilyIndex = UINT32_MAX; uint32_t bestComputeQueueFamilyIndex = UINT32_MAX; uint32_t bestTransferQueueFamilyIndex = UINT32_MAX; uint32_t bestSparseQueueFamilyIndex = UINT32_MAX; uint32_t bestProtectedQueueFamilyIndex = UINT32_MAX;
并修改相关函数
TPhysicalDevice::GetBestXXX()
对于这类函数,如果Turbo找到了性能最好的队列族将会正常返回,如果没找到,将会返回一个全0
,索引为UINT32_MAX
的无效TQueueFamilyInfo
- 重构
TDevice
、TDeviceQueue
、TDeviceCreateInfo
、TDeviceQueueCreateInfo
:- 将
std::vector<TDeviceQueueCreateInfo> deviceQueueCreateInfos
从TDeviceCreateInfo
中移除- 移除
TDeviceQueueCreateInfo::count
默认为1
2022/3/22 设计架构
TResult
增加RESOURCE_STARVATION
,当发生可用资源匮乏,资源分配失败时会返回该结果TPhysicalDevice
中增加uint32_t Turbo::Core::TPhysicalDevice::GetAvailableQueueCount(uint32_t queueFamilyIndex)
函数,用于快速获取特定队列族的可用队列数TPhysicalDevice
中增加void Turbo::Core::TPhysicalDevice::AvailableQueueCountMinusOneByQueueFamily(uint32_t queueFamilyIndex)
私有函数,TDeviceQueue
构造函数中使用,用于将对应可用队列族数量减一TPhysicalDevice
中增加void Turbo::Core::TPhysicalDevice::ResetQueueCountMap()
私有函数,TDevice
析构构函数中使用,用于将之前可用的队列数量还原。TDeviceQueue
基本完成,还要接下来的测试。
2022/3/29 设计架构
- 增加
TPool
- 增加
TCommandBufferPool
继承自TPool
- 未增加需增加
TCommandBuffer
继承自TObject
2022/3/30 设计架构
TDeviceQueue
增加VkQueue GetVkQueue()
函数TDeviceQueue
增加TDevice *device
成员变量TDeviceQueue
增加TDevice *GetDevice()
函数- 修改
TPool
实现至头文件TCommandBufferPool
编译通过
2022/3/31 设计架构
TDevice
增加void Create()
InternalCreate()
函数(参考2022/4/1), 未完待续TDevice
增加void Destroy()
InternalDestroy()
函数(参考2022/4/1), 未完待续TDevice
增加std::vector<TQueueFamilyInfo> GetDeviceQueueFamilyInfos()
函数- 增加
TCommandBuffer
类, 基本完完成- 修改
TPool::Allocate()
函数到template <typename... Args> T *Allocate(Args &&...args)
2022/4/1 设计架构
TCommandBufferPool
增加VkCommandPool GetVkCommandPool()
函数TCommandBuffer
构造函数实现完成- 增加
TVulkanHandle
类开始重构Vulkan句柄封装类,首先是TInstance
TVulkanHandle
增加virtual void InternalDestroy() = 0
函数TVulkanHandle
增加virtual void InternalCreate() = 0
函数TVulkanHandle
增加virtual void InternalRebuild()
函数
TVulkanHandle::InternalRebuild()
内部会依次调用TVulkanHandle::InternalDestroy()
和TVulkanHandle::InternalCreate()
2022/4/2 设计架构
TPhysicalDevice
设计不合理,将值存储TPhysicalDevice改成指针存储。继承自TVulkanHandle
。修改TInstance
、TPhysicalDevice
和TPhysicalDeviceProxy
之间的关系,遗弃TPhysicalDeviceProxy
未完待续- 初步完成
TInstance
创建TPhysicalDevice
,使用TPhysicalDevice::InternalRebuild()
很方便的创建,遗弃TPhysicalDeviceProxy
TPhysicalDeviceProxy
的功能转移到了TPhysicalDevice
中
2022/4/3 设计架构
TInstance
和TPhysicalDevice
基于数据驱动,基本重构完成,遗弃TInstanceCreateInfo
和VkAllocationCallbacks
,Turbo现在完全使用内置内存分配器TVulkanAllcator
2022/4/4 设计架构
- 优化了
TInstance
和TPhysicalDevice
的重构TDevice
基本重构完成,遗弃了TDeviceCreateInfo
和VkAllocationCallbacks
,Turbo现在完全使用内置内存分配器TVulkanAllcator
TDeviceQueue
重构进行中
2022/4/5 设计架构
TPhysicalDevice
中增加void AvailableQueueCountPlussOneByQueueFamilyIndex(uint32_t queueFamilyIndex)
函数TDeviceQueue
基于数据驱动,基本重构完成,遗弃了TDeviceQueueCreateInfo
和VkAllocationCallbacks
,Turbo现在完全使用内置内存分配器TVulkanAllcator
TCommandBufferPool
基于数据驱动,基本重构完成TCommandBuffer
基于数据驱动,基本重构完成Turbo
的TVulkanHandle
派生类,现在拥有了内存自动回收能力,在delete
掉某些TVulkanHandle
派生类对现时,会自动回收与其有关的子对象(前提是所有对象均分布在堆上)。 也许Turbo不应该回收与其有关的对象内存,对于这部分内存回收应该由用户承担(除非是Turbo
对象内部new
出的内存,需要Turbo
自己管理,Turboo只会负责回收Vulkan
相关对象内存)。
2022/4/6 设计架构
TVulkanHandle
中增加(不允许拷贝或赋值)TVulkanHandle(TVulkanHandle const &) = delete; TVulkanHandle(TVulkanHandle &&) = delete; TVulkanHandle &operator=(TVulkanHandle const &) = delete; TVulkanHandle &operator=(TVulkanHandle &&) = delete;
- 增加
TVmaAllocator
类,用于VulkanMemoryAllocator(VMA)内存分配未完待续TDevice
中增加对TVmaAllocator
对象的创建和销毁
2022/4/7 设计架构
TVmaAllocator
类,初步完成TBuffer
类,初步完成- 遗弃
TDeviceMemory
类- 遗弃
TBufferCreateInfo
类- 遗弃
TImageCreateInfo
类- 遗弃
TDeviceMemoryAllocateInfo
类TImage
类,初步完成- 遗弃
TImageViewCreateInfo
类TImageView
类,初步完成
2022/4/8 设计架构
- 遗弃原先自定义创建
TDeviceQueue
类对象,现在该类对象由TDevice
统一管理,用户只需要调用如下函数即可获得TDeviceQueue* GetBestGraphicsQueue(); TDeviceQueue* GetBestComputeQueue(); TDeviceQueue* GetBestTransferQueue(); TDeviceQueue* GetBestSparseBindingQueue(); TDeviceQueue* GetBestProtectedQueue();
- 部分重构
TDevice
用于管理TDeviceQueue
2022/4/9 设计架构
- 创建
TShader
类- 原本想在
TShader
类中使用glslang
来动态编译字符串shader
到spirv
的,但是llvm-mingw32
编译完的库,无论如何都找不到glslang
的库函数,有可能是CMakeLists.txt
库配置有问题,暂时先去除该动态编译功能(也许该功能不应位于Core
层面,或许应该有个Shader编译器
之类的)TShader.h
中提供std::vector<char> ReadSpirVFile(const std::string &file)
函数用于读取spirv
文件
2022/4/10 设计架构
- 解决
glslang
库找不到的问题,在Turbo
根目录下创建thirdpart
文件夹,用于存放第三方库文件项目
2022/4/11 设计架构
- 添加
SPIRV-Cross
库用于实现反射Shader
描述符信息- 添加
TDescriptor
类,于TDescriptor.h
中,用于描述VkDescriptorSetLayoutBinding
- 添加
TOutput
和TInput
类,于TShader.h
中,用于描述Shader
的layout (location=n) in/out [type](vec3...) name;
- 未完待续
2022/4/12 设计架构
TOutput
和TInput
类,没有必要定义两份,修改成TInterface
TShader
增加virtual void InternalParseSpirV()
成员变量,用于内部构造解析SpirV
用于Vulkan
相应创建数据使用 未完待续
TShader
增加std::vector<TInterface> outputs
成员变量,表示layout (location=n) in [type](vec3...) name;
TShader
增加std::vector<TInterface> inputs
成员变量,表示layout (location=n) out [type](vec3...) name;
TDescriptor.h
中增加TShaderDataType
枚举,用于标明Shader
中的数据类型
TInterface
中增加如下:uint32_t location;//(location=n) TShaderDataType dataType; uint32_t size;//vec2 vec3 vec4
TShader
中virtual void InternalParseSpirV()
完成spirv_cross::SPIRType
到VkDescriptorType
的映射未完待续
2022/4/13 设计架构
- 解决了
TShader
中使用spirv-cross
运行时的崩溃TShader
未完待续
2022/4/14 设计架构
- 继续
TShader
中使用spirv-cross
对于Shader
的解析,在TShader
中应提供类似如下成员变量://根据TDescriptorType中的定义声明不同类型的描述符成员变量 std::vector<TUniformBufferDescriptor> uniforBuffers; std::vector<TSamplerDescriptor> samplers; std::vector<TImageSamplerDescriptor> imageSamplers; ...//等等描述符类型
这需要
Turbo
中声明TUniformBufferDescriptor
等类。
2022/4/15 设计架构
解决了
TDescriptor.h
中增加了TUniformBufferDescriptor
和TStructMember
类
TUniformBufferDescriptor
中包含TStructMember
类TUniformBufferDescriptor
用于表示UniformBuffer
描述符,TStructMember
用于表示TUniformBufferDescriptor
中的数据结构
2022/4/16 设计架构
- 继续
TUniformBufferDescriptor
2022/4/17 设计架构
TShader.cpp
中增加Turbo::Core::TShaderDataType SpirvCrossSPIRTypeBaseTypeToTShaderDataType(spirv_cross::SPIRType::BaseType baseType)
函数,将spirv_cross::SPIRType::BaseType
类型转换成Turbo::Core::TShaderDataType
类型TShader.cpp
中对UniformBuffer
的解析基本完成TShader.cpp
中对TInterface
将改成继承自Turbo::Core::TStructMember
2022/4/18 设计架构
TShader.cpp
中对TInterface
的input
和output
的解析基本完成Turbo::Core::TDescriptor
代表Vulkan
的VkDescriptorSetLayoutBinding
Turbo::Core::TUniformBufferDescriptor
代表Vulkan
的VkDescriptorSetLayoutBinding::descriptorType = VkDescriptorType::VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
- 需要创建
TDescriptorSet
类继承自Turbo::Core::TVulkanHandle
用于涵盖多个Turbo::Core::TDescriptor
并创建VkDescriptorSetLayout
(考虑是否创建VkDescriptorSet
)
2022/4/19 设计架构
创建
TDescriptorSet
类,构造函数为Turbo::Core::TDescriptorSet::TDescriptorSet(TShader *shader, std::vector<TDescriptor *> &descriptors)
,其中的std::vector<TDescriptor *> &descriptors
需要在外部new
完传进来,该任务属于Turbo
范畴(处理好TDescriptorSet
和TDescriptor
之间的联系)对于
throw Turbo::Core::TException(TResult,std::string);
对于std::string
变量,Turbo
没有使用上,需补上
2022/4/20 设计架构
- 开始将
std::vector<T[XXX]Descriptor *>
向std::vector<TDescriptorSet *> descriptorSets
中写入,TShader
维护std::vector<T[XXX]Descriptor *>
中的内存,当TShader
销毁时std::vector<T[XXX]Descriptor *>
数组中T[XXX]Descriptor *
所指向的指针也会销毁。 未完待续遗弃(不符合TShader
中增加void AddDescriptorToDescriptorSets(TDescriptor *descriptor)
内部函数,当每次new
一个TDescriptor
之后,会将刚new
的TDescriptor
通过AddDescriptorToDescriptorSets
函数加入std::vector<TDescriptorSet *> descriptorSets
中 未完待续Turbo
统一设计思想)
2022/4/21 设计架构
*目前
TShader
中只实现了TUniformBufferDescriptor
,将来待实现如下:TSamplerDescriptor; TCombinedImageSamplerDescriptor; TSampledImageDescriptor; TStorageBufferDescriptor; TInputAttachmentDescriptor; ...
- 创建
TPipeline
类,内部完成了VkPipelineLayout
的创建。 未完待续Turbo
中应该提供如下类 未完待续TGraphicsPipeline TComputePipeline
2022/4/22 设计架构
- 新增
TViewport
类- 新增
TScissor
类- 新增
TAttachment
类- 新增
TSubpass
类- 新增
TRenderPass
类- 修改了
TPipeline
类,新增成员变量,内部的TScissor
和TViewport
目前是按值存的,将来改成按照指针存,节省内存。- 以上只是初步完成,还有Bug需要修缮。 未完待续
2022/4/23 设计架构
- 修缮了
TRenderPass
中的BugTCommandBuffer
中添加对于Vulkan
中的VkCmd[...]
的相关指令声明,未实现,待实现。TCommandBuffer
中已实现完成如下:bool Turbo::Core::TCommandBuffer::Begin() bool Turbo::Core::TCommandBuffer::End() bool Turbo::Core::TCommandBuffer::Reset()
TCommandBuffer
中正在实现如下:void Turbo::Core::TCommandBuffer::BeginRenderPass(TRenderPass *renderPass) void Turbo::Core::TCommandBuffer::EndRenderPass()
- 创建
TFrameBuffer
类TCommandBuffer
中添加TFrameBuffer
成员变量,当用户调用Turbo::Core::TCommandBuffer::BeginRenderPass()
时会new
出一个TFrameBuffer
对象,当用户调用Turbo::Core::TCommandBuffer::EndRenderPass()
时会delete
销毁该对象。所以BeginRenderPass()
和EndRenderPass()
两个函数必须配合使用
2022/4/24 设计架构
- 将
TFrameBuffer
修改成TFramebuffer
TShader
,TDescriptor
,TDescriptorSet
,TPipeline
,TSubpass
,TAttachemt
,TRenderPass
,TFramebuffer
之间设计不合理,需要重构。尝试是否能够按照Vulkan
标准规范设计
2022/4/25 设计架构
- 将原先
TShader
中的TDescriptorSet
改成了TDescriptorSetLayout
- 创建
TDescriptorSet
用于表示VkDescriptorSet
,现在就不会出现TDescriptorSetLayout
和TDescriptorSet
命名歧义了- 遗弃老的
TPipeline
,TSubpass
,TAttachemt
,TRenderPass
,TFramebuffer
相关设计,回归到Vulkan
标准规范设计思路TPipeline
,TSubpass
,TAttachemt
,TRenderPass
,TFramebuffer
重构中TAttachemt
、TSubpass
重构完成TSubpass
新增TAttachmentReference
类- 创建
TDescriptorPool
、TDescriptorSize
类
2022/4/26 设计架构
TSubpass
移除TAttachmentReference
类,用起来不方便TPipeline
,TSubpass
,TAttachemt
,TRenderPass
,TFramebuffer
基本重构完成,但还不完善。需进一步完善TCommandBuffer
实现基础命令,还不完善。需进一步完善TDescriptorSet::BindData(...)
仅用于测试,须修改完善。TBuffer
新增void *Map()
和void Unmap();
函数,用于映射内存- 新增
TFence
类TFence
中新增TResult Wait()
如果超时将返回TResult::TIMEOUT
否则返回TResult::SUCCESS
TFence
中新增void WaitUntil()
将会一直等待,直到指令运行结束- 新增
TSemaphore
类TDeviceQueue
中新增bool Submit(std::vector<TSemaphore *> &waitSemaphores, std::vector<TSemaphore *> &signalSemaphores, TCommandBuffer *commandBuffer, TFence *fence)
函数,用于提交指令。
2022/4/27 设计架构
- 发布至
GitHub
和Gitee
上- 提炼
issue
2022/4/28 设计架构
TBuffer
中增加typedef enum TBufferUsageBits
枚举,与Vulkan
标准一致TBuffer
中增加typedef VkFlags TBufferUsages
声明,用于声明TBuffer
的uage
,与Vulkan
标准一致Turbo.h
中增加typedef VkDeviceSize TDeviceSize
用于TBuffer
的构造函数中,与Vulkan
标准一致TImage
中增加typedef enum TImageType
枚举,用于声明TImage
的type
,与Vulkan
标准一致TImage
中增加typedef enum TSampleCountBits
枚举,与Vulkan
标准一致TImage
中增加typedef VkFlags TSampleCounts
声明,用于TImage
的构造函数中,与Vulkan
标准一致TImage
中增加typedef enum TImageTiling
枚举,用于TImage
的构造函数中,与Vulkan
标准一致TImage
中增加typedef enum TImageUsageBits
枚举,与Vulkan
标准一致TImage
中增加typedef VkFlags TImageUsages
声明,用于TImage
的构造函数中,与Vulkan
标准一致TImage
中增加typedef enum TImageLayout
枚举,用于TImage
的构造函数中,与Vulkan
标准一致TImageView
中增加typedef enum TImageViewType
枚举,用于TImageView
的构造函数中,与Vulkan
标准一致TImageView
中增加typedef enum TImageAspectBits
枚举,与Vulkan
标准一致TImageView
中增加typedef VkFlags TImageAspects
声明,用于TImageView
的构造函数中,与Vulkan
标准一致TAttachment
中增加typedef enum TLoadOp
声明,用于TAttachment
的构造函数中,与Vulkan
标准一致TAttachment
中增加typedef enum TStoreOp
声明,用于TAttachment
的构造函数中,与Vulkan
标准一致
2022/4/29 设计架构
TAttachment
中重命名typedef enum TStoreOp
声明,成typedef enum class TStoreOp
,优化枚举内命名TAttachment
中重命名typedef enum TLoadOp
声明,成typedef enum class TLoadOp
,优化枚举内命名TImageLayout
中重命名typedef enum TImageLayout
声明,成typedef enum class TImageLayout
,优化枚举内命名TFormatInfo
进一步设计优化,完善了如下:
typedef enum TFormatContentType
、typedef enum class TFormatDataType
、typedef enum class TFormatCompression
、typedef enum class TFormatReduceFactor
TFormatInfo
实现了uint32_t GetTexelBlockSize()
函数,用于返回该格式下数据占用的字节数TAttachment
构造函数中VKFormat
替换成了TFormatInfo
TImage
增加TSampleCountBits GetSampleCountBits()
函数,用于获取采样数VkVertexInputBindingDescription
和VkVertexInputAttributeDescription
基本描述框图TurboDesign.drawwio
整理完成
2022/4/30 设计架构
TPipeline.h
中增加TVertexAttribute
,TVertexBinding
类,分别用于表示VkVertexInputAttributeDescription
和VkVertexInputBindingDescription
TPipeline.h
中增加typedef enum class TVertexRate
类,用于表示VkVertexInputRate
TPipeline.h
中剔除VkVertexInputBindingDescription
和VkVertexInputAttributeDescription
的使用,改为使用TVertexAttribute
,TVertexBinding
2022/5/1 设计架构
TFormatInfo.h
中,构造函数声明去掉explicit
,使得可直接使用TFormatType
进行隐示类型转换到TFormatInfo
TPipeline.h
中增加typedef enum class TTopologyType
用于对应VkPrimitiveTopology
TPipeline.h
中对于VkPrimitiveTopology
替换成使用TTopologyType
TPipeline.h
中增加typedef enum class TPolygonMode
用于对应VkPolygonMode
TPipeline.h
中对于VkPolygonMode
替换成使用TPolygonMode
TPipeline.h
中增加typedef enum TCullModeBits
用于对应VkCullModeFlagBits
TPipeline.h
中增加typedef VkFlags TCullModes
用于对应VkCullModeFlags
TPipeline.h
中对于VkCullModeFlags
替换成使用TCullModes
TPipeline.h
中增加typedef enum class TFrontFace
用于对应VkFrontFace
TPipeline.h
中对于VkFrontFace
替换成使用TFrontFace
- 创建
TGraphicsPipeline
继承自TPipeline
,将原先TPipeline
中有关图形管线的内容搬到了TGraphicsPipeline
中
2022/5/2 设计架构
TGraphicsPipeline
中增加bool multisampleEnable
和TSampleCountBits sample
的成员变量,提供对Multisample
特性的支持TCommandBuffer
中增加TRenderPass *currentRenderPass
和TPipeline *currentPipeline
的成员变量,提供对当前使用的RenderPass
和Pipeline
的引用
2022/5/3 设计架构
TCommandBuffer
中实现了void Turbo::Core::TCommandBuffer::NextSubpass()
的成员函数,提供对vkCmdNextSubpass(...)
特性的支持Turbo
核心现已支持多Subpass
渲染- 将
TRenderPass
的TPipelineType
转移到了TSubpass
中,符合Vulkan
标准TPipeline.h
中新增typedef enum TPipelineStageBits
和typedef VkFlags TPipelineStages
,对应Vulkan
的VkPipelineStageFlagBits
和VkPipelineStageFlags
Turbo.h
中新增typedef enum TAccessBits
和typedef VkFlags TAccess
,对应Vulkan
的VkAccessFlagBits
和VkAccessFlags
- 新增
TBarrier.h
和TBarrier.cpp
,用于实现VkMemoryBarrier
、VkBufferMemoryBarrier
、VkImageMemoryBarrier
未完待续
2022/5/4 设计架构
TBarrier.h
中增加了TBarrier
、TMemoryBarrier
、TBufferMemoryBarrier
、TImageMemoryBarrier
的成员函数,提供对VkMemoryBarrier
、VkBufferMemoryBarrier
、VkImageMemoryBarrier
特性的支持TImageView
中增加了获取成员变量的方法TCommandBuffer
中增加并实现如下函数void PipelineBarrier(TPipelineStages srcStages, TPipelineStages dstStages, std::vector<TMemoryBarrier> &memoryBarriers, std::vector<TBufferMemoryBarrier> &bufferBarriers, std::vector<TImageMemoryBarrier> &imageBarriers); void PipelineMemoryBarrier(TPipelineStages srcStages, TPipelineStages dstStages, TMemoryBarrier &memoryBarrier); void PipelineBufferBarrier(TPipelineStages srcStages, TPipelineStages dstStages, TBufferMemoryBarrier &bufferBarrier); void PipelineImageBarrier(TPipelineStages srcStages, TPipelineStages dstStages, TImageMemoryBarrier &imageBarrier); void TransformImageLayout(TPipelineStages srcStages, TPipelineStages dstStages, TAccess srcAccess, TAccess dstAccess, TImageLayout oldLayout, TImageLayout newLayout, TImage *image, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount); void TransformImageLayout(TPipelineStages srcStages, TPipelineStages dstStages, TAccess srcAccess, TAccess dstAccess,TImageLayout oldLayout, TImageLayout newLayout, TImageView *imageView);
2022/5/5 设计架构
TCommandBuffer
中增加并实现如下void FillBuffer(TBuffer *buffer, TDeviceSize offset = 0, TDeviceSize size = VK_WHOLE_SIZE, uint32_t data = 0); void FillBuffer(TBuffer *buffer, TDeviceSize offset = 0, TDeviceSize size = VK_WHOLE_SIZE, float data = 0.0f); void UpdateBuffer(TBuffer *buffer, TDeviceSize offset, TDeviceSize size, const void *data); void CopyBuffer(TBuffer *srcBuffer, TBuffer *dstBuffer, TDeviceSize srcOffset, TDeviceSize dstOffset, TDeviceSize size); void ClearColorImage(TImage *image, TImageLayout layout, float r, float g, float b, float a, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount); void ClearColorImage(TImage *image, TImageLayout layout, float r, float g, float b, float a, TImageAspects aspects); void ClearColorImage(TImageView *imageView, TImageLayout layout, float r = 0, float g = 0, float b = 0, float a = 0); void ClearDepthStencilImage(TImage *image, TImageLayout layout, float depth, uint32_t stencil, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount); void ClearDepthStencilImage(TImage *image, TImageLayout layout, float depth, uint32_t stencil, TImageAspects aspects); void ClearDepthStencilImage(TImageView *imageView, TImageLayout layout, float depth = 0, uint32_t stencil = 0); void ClearImage(TImage *image, TImageLayout layout, float r, float g, float b, float a, float depth, uint32_t stencil, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount); void ClearImage(TImage *image, TImageLayout layout, float r, float g, float b, float a, float depth, uint32_t stencil, TImageAspects aspects); void ClearImage(TImageView *imageView, TImageLayout layout, float r = 0, float g = 0, float b = 0, float a = 0, float depth = 0, uint32_t stencil = 0);
TDeviceQueue
增加void WaitIdle()
成员函数TDevice
增加void WaitIdle()
成员函数TImage
增加TImageUsages GetUsages()
、uint32_t GetMipLevels()
、uint32_t GetArrayLayers();
成员函数TFormatInfo.h
中将typedef enum TFormatDataType
修改成typedef enum TFormatDataTypeBits
、增加typedef VkFlags TFormatDataTypes
声明TFormatInfo
中增加TFormatDataTypes GetFormatDataType()
成员函数,用于获取格式所对应的的数据类型(主要用于ClearColor
中)
2022/5/6 设计架构
TFormatInfo
增加typedef enum TFormatFeatureBits
和typedef VkFlags TFormatFeatures
用于对应VkFormatFeatureFlagBits
和VkFormatFeatureFlags
TFormatInfo
增加如下函数:TFormatFeatures GetlLinearFeatures(TPhysicalDevice *physicalDevice); TFormatFeatures GetOptimalFeatures(TPhysicalDevice *physicalDevice); TFormatFeatures GetlBufferFeatures(TPhysicalDevice *physicalDevice);
用于获取
VkFormatProperties
对应的数据
- 解决了
TCommandBuffer::BeginRenderPass(...)
中ClearColor
不生效的问题(考虑ClearColor
的颜色声明放到TAttachment
中,或者BeginRenderPass(...)
提供颜色设置接口)TCommandBuffer
中实现了如下指令函数:void CopyBufferToImage(TBuffer *srcBuffer, TImage *dstImage, TImageLayout layout, TDeviceSize bufferOffset, uint32_t bufferRowLength, uint32_t bufferImageHeight, TImageAspects aspects, uint32_t mipLevel, uint32_t baseArrayLayer, uint32_t layerCount, int32_t imageOffsetX, int32_t imageOffsetY, int32_t imageOffsetZ, uint32_t imageWidth, uint32_t imageHeight, uint32_t imageDepth); void CopyImageToBuffer(TImage *srcImage, TImageLayout layout, TBuffer *dstBuffer, TDeviceSize bufferOffset, uint32_t bufferRowLength, uint32_t bufferImageHeight, TImageAspects aspects, uint32_t mipLevel, uint32_t baseArrayLayer, uint32_t layerCount, int32_t imageOffsetX, int32_t imageOffsetY, int32_t imageOffsetZ, uint32_t imageWidth, uint32_t imageHeight, uint32_t imageDepth); void CopyImage(TImage *srcImage, TImageLayout srcLayout, TImage *dstImage, TImageLayout dstLayout, TImageAspects srcAspects, uint32_t srcMipLevel, uint32_t srcBaseArrayLayer, uint32_t srcLayerCount, int32_t srcImageOffsetX, int32_t srcImageOffsetY, int32_t srcImageOffsetZ, TImageAspects dstAspects, uint32_t dstMipLevel, uint32_t dstBaseArrayLayer, uint32_t dstLayerCount, int32_t dstImageOffsetX, int32_t dstImageOffsetY, int32_t dstImageOffsetZ, uint32_t width, uint32_t height, uint32_t depth);
Turbo.h
中增加如下声明:#if defined(_WIN16) || defined(_WIN32) || defined(_WIN64) #define TURBO_PLATFORM_WINDOWS #elif defined(__APPLE__) #define TURBO_PLATFORM_APPLE #elif defined(ANDROID) || defined(__ANDROID__) #define TURBO_PLATFORM_ANDROID #elif defined(__linux) || defined(__linux__) #define TURBO_PLATFORM_LINUX #elif defined(__unix) || defined(__unix__) #define TURBO_PLATFORM_UNIX #else #define TURBO_PLATFORM_UNDEFINED #endif
TDescriptor.h
中的typedef enum class TShaderDataType
内容重命名。声明有冲突Turbo
中新增Turbo::Extension
命名空间- 开始修缮
TSurface.h
将其加入Turbo::Extension
命名空间中 未完待续
2022/5/7 设计架构
TSurface.h
中Turbo::Core::TImageUsageFlags TSurface::GetSupportedUsageFlags()
修改成Turbo::Core::TImageUsages GetSupportedUsages()
TSurface.h
中增加如下:typedef enum TSurfaceTransformBits; typedef VkFlags TSurfaceTransforms; typedef enum TCompositeAlphaBits; typedef VkFlags TCompositeAlphas; typedef enum class TPresentMode; uint32_t GetCurrentWidth(); uint32_t GetCurrentHeight(); uint32_t GetMinWidth(); uint32_t GetMinHeight(); uint32_t GetMaxWidth(); uint32_t GetMaxHeight();
将
TColorSpace
类和TSurfaceFormat
转移到TSurface.h
中,并将TColorSpace.h/.cpp
和TSurfaceFormat.h/.cpp
移除
TSurface.h
修缮完成开始修缮
TSwapchain.h
将其加入Turbo::Extension
命名空间中 未完待续
TImage.h
中加入void *Map()
和void Unmap()
成员函数,用于映射host
可访问内存
TImage.h
中加入Turbo::Extension::TSwapchain
的声明和TImage()
默认无参构造函数,用于Turbo::Extension::TSwapchain
构建TSwaphainImage
,其为TImage
的友元类
main.cpp
中将GPU
图片拷贝到CPU
的纯Vulkan
代码改成Turbo
规范有些窗口库创建完窗口直接返回
VkSurfaceKHR
,所以TSwapchain
需要对外提供一个接口构造函数TSwapchain(TDevice* device, VkSurfaceKHR)
用于接收外部创建好的VkSurfaceKHR
未完待续
2022/5/8 设计架构
- 之前
TSwapchain
对外部提供的VkSurfaceKHR
的接口改成由TSurface
提供,TSwapchain
统一使用TSurface
TSwapchain
修缮完毕TSwapchain
中增加VkSwapchainKHR GetVkSwapchainKHR()
成员函数TResult
新增TResult::NOT_READY
和TResult::SUBOPTIMAL
用于Turbo::Extension::TSwapchain::AcquireNextImage(...)
的返回结果./thirdparty
新增SDL2
库用于创建窗口TDevice
的InternalCreate()
中有Bug
,已修复TCommandBuffer
的BeginRenderPass()
中有Bug
,已修复TSemaphore
中的VkPipelineStageFlags
改成TPipelineStages
,统一Turbo
标准TDeviceQueue
中增加TResult Present(Turbo::Extension::TSwapchain *swapchain, uint32_t imageIndex)
函数用于调用vkQueuePresentKHR
TDeviceQueue
中增加bool IsSupportSurface(Turbo::Extension::TSurface *surface)
判断该队列是否支持该TSurface
2022/5/9 设计架构
- 进入调整阶段
TCommandBuffer
中有关VkCmd...
的成员函数前面加上Cmd...
的前缀,与CommandBuffer::Begin()
和CommandBuffer::End()
等非命令成员函数分开,直接告诉用户哪些会是VkCmd...
哪些不是TFormatInfo
中删除有关TFormatFeatureFlags
的成员变量,没用
2022/5/10 设计架构
TBuffer
中增加typedef enum class TIndexType
表明索引缓存的数据类型TCommandBuffer
中增加如下函数:void CmdBindIndexBuffer(TBuffer *buffer, TDeviceSize offset = 0, TIndexType indexType = TIndexType::UINT32); void CmdDrawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance);
用于索引渲染
TAllocator
平台相关使用Turbo.h
中定义的宏- 开始整理
TException
的输出信息,和优化TException
TFormatInfo
增加Get...Features(TDevice* device)
版本成员函数
2022/5/11 设计架构
- 开始实现纹理特性
TDescriptor.h
中增加TCombinedImageSamplerDescriptor
类,用于表示VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
TShader.h
中增加std::vector<TCombinedImageSamplerDescriptor *> combinedImageSamplerDescriptors
成员变量- 新增
TSampler.h
中增加TSampler
类并增加如下枚举定义:typedef enum class TFilter;//对应VkFilter typedef enum class TMipmapMode;//对应VkSamplerMipmapMode typedef enum class TAddressMode;//对应VkSamplerAddressMode typedef enum class TBorderColor;//对应VkBorderColor
- 新增
TDescriptorSet
中增加void BindData(uint32_t binding, uint32_t arrayElement, TImageView *imageView, TSampler *sampler)
,仅用于测试- 将原先的
SDL2
窗口库换成GLFW
窗口库,使用SDL2
会有main
入口函数重定向,并且终端的输出信息不显示等很奇怪的问题。- 纹理特性初步完成
Descriptor
设计有重大逻辑漏洞,需要重构
2022/5/12 设计架构
- 开始重构
Descriptor
TShader
中移除有关TDescriptorSetLayout
创建相关,相关任务转移到TPipeline
中进行,TShader
仅用于创建VkShaderModule
和收集Descriptor
数据TDescriptorSetLayout
中移除有关TShader
成员TDescriptorSetLayout
中增加uint32_t GetSet()
成员函数TDescriptor
中增加TShader*
成员变量,用于指代该描述符所属哪个TShader
TShader
中增加如下函数:const std::vector<TUniformBufferDescriptor *> &GetUniformBufferDescriptors; const std::vector<TCombinedImageSamplerDescriptor *> &GetCombinedImageSamplerDescriptors;
目前
Turbo
只实现了这两个,更多待以后实现
- (转移到
TPipelineLayout
中) 目前TPipeline
中增加了std::vector<TDescriptorSetLayout *> descriptorSetLayouts
成员变量,用于存储当前管线的描述符集合布局- 新增
TPipelineLayout
类- 新增
TPipeline
中开始使用TPipelineLayout
- 新增
TPipelineDescriptorSet
类TDescriptorPool
适配TPipelineDescriptorSet
TDescriptorSet
中增加uint32_t GetSet()
成员函数TCommandBuffer
中增加void CmdBindPipelineDescriptorSet(TPipelineDescriptorSet* pipelineDescriptorSet)
成员函数,用于适配TPipelineDescriptorSet
Descriptor
目前初步重构完成
2022/5/13 设计架构
TResult::SUBOPTIMAL
更改成TResult::MISMATCH
TSurface
中有关获取当前大小的函数可以动态获取当前大小了,不需要delete
之后重新new
了TSwapchain
中增加TSwapchain(TSwapchain *oldSwapchain)
构造函数,用于重新创建TSwapchain
2022/5/14 设计架构
TDescriptor.h
中的typedef enum class TShaderDataType
更改成typedef enum class TDescriptorDataType
TDescriptor.h
中增加class TSampledImageDescriptor
和TSamplerDescriptor
,用于对应VkDescriptorType::VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
和VkDescriptorType::VK_DESCRIPTOR_TYPE_SAMPLER
TShader
中增加std::vector<TSampledImageDescriptor *> sampledImageDescriptors
和std::vector<TSamplerDescriptor *> samplerDescriptors
- 开始修缮
TDescriptorSet
中的void BindData(...);
使其规范化,TPipelineDescriptorSet
同理:void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TBuffer *> buffers);//for uniform buffer void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<std::pair<TImageView *, TSampler *>> &combinedImageSamplers);//combined image sampler void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TImageView *> &imageViews);//sampled image void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TSampler *> &sampler);//sampler
2022/5/16 设计架构
TCommandBuffer
实现CmdBlitImage
等价于vkCmdBlitImage
engine/
下新建core
文件夹用于存放Turbo
核心engine/core/include/Turbo.h
更改成TCore.h
engine/core/include/Turbo.cpp
更改成TCore.cpp
- 现在
engine/core
将会输出单独的库文件作为Turbo
的核心TFormatInfo
中的TFormatFeatures Get...Features(TPhysicalDevice *physicalDevice)
转移到了TPhysicalDevice
中
2022/5/17 设计架构
TPhysicalDevice
中增加如下函数(用于获取某一特定纹理格式的图片的限制属性):TExtent3D GetMaxImageExtent(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); TExtent3D GetMaxImageExtent(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); uint32_t GetMaxImageMipLevels(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); uint32_t GetMaxImageMipLevels(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); uint32_t GetMaxImageArrayLayers(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); uint32_t GetMaxImageArrayLayers(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); TSampleCounts GetSupportImageSampleCounts(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); TSampleCounts GetSupportImageSampleCounts(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); TDeviceSize GetMaxImageResourceSize(TFormatType formatType, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags); TDeviceSize GetMaxImageResourceSize(TFormatInfo &format, TImageType imageType, TImageTiling tiling, TImageUsages usages, VkImageCreateFlags imageFlags);
TCommandBuffer
实现如下函数void CmdResolveImage(TImage *srcImage, TImageLayout srcLayout, TImage*dstImage, TImageLayout dstLayout, TImageAspects srcAspects, uint32_t srcMipLevel, uint32_t srcBaseArrayLayer, uint32_t srcLayerCount, int32_t srcOffsetX, int32_t srcOffsety, int32_t srcOffsetZ, TImageAspects dstAspects, uint32_t dstMipLevel, uint32_t dstBaseArrayLayer, uint32_t dstLayerCount, int32_t dstOffsetX, int32_t dstOffsety, int32_t dstOffsetZ, uint32_t width, uint32_t height, uint32_t depth); void CmdSetLineWidth(float lineWidth);
- 将
TCommandBuffer
中的void CmdBindPipelineDescriptorSet(uint32_t firstSet, TPipelineDescriptorSet *pipelineDescriptorSet);
修改成void CmdBindPipelineDescriptorSet(TPipelineDescriptorSet *pipelineDescriptorSet);
2022/5/18 设计架构
TDescriptor.h
中增加class TNaNDescriptor
,用于表示无效占位描述符。- 将
TDeviceQueue.h
中:TDeviceQueue::Submit(...)
函数中有关TSemaphore
数组引用改成数组指针- 从
tinygltf
库中拷贝stb_image.h
,stb_image_write.h
,json.hpp
和tiny_gltf.h
到./engine/include
中
2022/5/19 设计架构
TGraphicsPipeline::InternalCreate()
中增加对于多个fragment output interface state(片元着色器的输出)
应该对应相同个数的VkPipelineColorBlendStateCreateInfo::attachmentCount
的适配。(也许这不是最优解,blend目前未想好如何设计)TShader
中增加如下函数:std::vector<TInterface> GetInputs(); std::vector<TInterface> GetOutputs(); TShaderType GetType();
2022/5/20 设计架构
TRenderPass
中增加TSubpass GetSubpass(uint32_t subpass)
成员函数- 增加
glm
第三方库
2022/5/21 设计架构
- 移除原先拷贝的
tinygltf
头文件,将tinygltf
库加到./thirdparty
文件夹下- 成功渲染
Suzanne
2022/5/22 设计架构
- 将
imgui
库加到./thirdparty
文件夹下- 将
KTX-Software
库加到./thirdparty
文件夹下TDescriptor
增加TPushConstantDescriptor
用于描述Vulkan
的Push Constant
TShader
增加std::vector<TPushConstantDescriptor *> pushConstantDescriptors
和相应的获取函数。TPipelineLayout
和TPipeline
中适配TPushConstantDescriptors
TUniformBufferDescriptor
和TPipeline
中增加uint32_t size
成员属性和相应的获取函数,用于表示数据块大小TCommandBuffer
中增加void CmdPushConstants(...)
成员函数,对应vkCmdPushConstants(...)
2022/5/23 设计架构
TBuffer
中增加void Flush(...)
成员函数,用于刷新数据到GPU domain
TSubpass
中GetDepthStencilAttachmentReference()
有Bug
,现已修改完毕
2022/5/24 设计架构
TGraphicsPipeline
中移除std::vector<TViewport> &viewports
和std::vector<TScissor> &scissors
成员,由于核心创建的Pipeline
的Viewport
和Scissor
都是动态状态,Vulkan
会忽略VkPipelineViewportStateCreateInfo::pViewports
和VkPipelineViewportStateCreateInfo::pScissors
TGraphicsPipeline
中增加typedef enum class TCompareOp
声明,对应VkCompareOp
TGraphicsPipeline
中增加typedef enum class TStencilOp
声明,对应VkStencilOp
TGraphicsPipeline
中增加对深度测试和模板测试支持- 调整
TGraphicsPipeline
构造函数的参数顺序,填入默认值
2022/5/25 设计架构
- 成功渲染
KTX
纹理
2022/5/27 设计架构
- 成功渲染
KTX
的Cubemap
纹理- 开始适配几何管线的
Blend
TGraphicsPipeline
中增加typedef enum class TLogicOp
声明,对应VkLogicOp
TGraphicsPipeline
中增加typedef enum class TBlendFactor
声明,对应VkBlendFactor
TGraphicsPipeline
中增加typedef enum class TBlendOp
声明,对应VkBlendOp
TGraphicsPipeline
构造函数中增加混合相关参数
2022/5/28 设计架构
- 使用
Turbo
核心成功渲染IMGUI
2022/5/29 设计架构
- 开始适配
input attachment
2022/5/30 设计架构
TDescriptor
中增加class TInputAttachmentDescriptor
对应VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
TShader
中增加std::vector<TInputAttachmentDescriptor *> inputAttachmentDescriptors;
用于存input attachment
,并增加const std::vector<TInputAttachmentDescriptor *> &GetInputAttachmentDescriptors();
成员函数用于获取相关数据TShader
中增加对于input attachment
的解析TPipeline
中增加对于input attachment
的解析TPipelineDescriptorSet::BindData(...)
中增加对于input attachment
的适配TDescriptorSetLayout
中增加TDescriptorType GetDescriptorType(uint32_t binding)
成员函数,用于获取特性binding
对应的描述符类型input attachment
基本适配完成
2022/6/1 设计架构
- 开始
FrameGraph
的设计,具体请参看./docs/TurboDesign.drawio:FrameGraph
章节
2022/6/2 设计架构
- 设计
FrameGraph
,具体请参看./docs/TurboDesign.drawio:FrameGraph
章节
2022/6/3 设计架构
- 设计
FrameGraph
,具体请参看./docs/TurboDesign.drawio:FrameGraph
章节
2022/6/4 设计架构
- 设计
FrameGraph
,具体请参看./docs/TurboDesign.drawio:FrameGraph
章节
2022/6/5 设计架构
- 设计
FrameGraph
,具体请参看./docs/TurboDesign.drawio:FrameGraph
章节- 最基本的
FrameGraph
初步设计完成,具体请参看./docs/TurboDesign.drawio:FrameGraph
章节
2022/6/6 设计架构
- 开始实现
FrameGraph
,详细设计请参看./docs/TurboDesign.drawio:FrameGraph
章节FrameGraph
,将会是一个独立的模块,不会依赖任何第三方库,甚至是Turbo
,按照常见的标准容器实现。将会输出名为TFrameGraph
的静态库文件engine
文件夹下创建/framegraph
文件夹,FrameGraph
相关代码将会在这里实现FrameGraph
将会在Turbo::FrameGraph
命名空间下实现- 增加
TFrameGraph.h
和TFrameGraph.cpp
2022/6/7 设计架构
- 将第三方库配置成
Submodule
,glm
库好像有问题,MVP
矩阵好像不对导致渲染结果有问题,应该不是核心的问题,该问题先忽略,等到FrameGraph
写完,开始写例子的时候再统一解决,加入Issue
中- 创建
./Turbo/samples
文件夹,用于存放示例代码。FrameGraph
的void Turbo::FrameGraph::TFrameGraph::Compile()
未实现待实现FrameGraph
的void Turbo::FrameGraph::TFrameGraph::Execute()
未实现待实现./Turbo/samples
种增加HelloTriangle
示例./Turbo/samples
种增加PureHelloTriangle
示例./Turbo/samples
种增加FrameGraph
测试示例
2022/6/13 设计架构
- 适配
Linux
系统(基于Deepin
)Turbo::Core::TAllocator::Allocate(...)
中增加对于Linux
的内存分配支持TSurface
中增加对于Linux
的支持://for wayland #include <wayland-client.h> #include <vulkan/vulkan_wayland.h> //for xcb #include <xcb/xcb.h> #include <vulkan/vulkan_xcb.h> //for xlib #include <X11/Xlib.h> #include <vulkan/vulkan_xlib.h>
TSurface
中增加TSurface(Turbo::Core::TDevice *device, wl_display *display, wl_surface *surface)
构造函数,用于适配wayland
TSurface
中InternalCreate()
适配Linux
的wayland
TSurface
中GetSurfaceSupportQueueFamilys()
适配Linux
的wayland
2022/6/15 设计架构
- 适配
TSurface
基于xcb
TSurface
中增加xcb_connection_t *connection
和xcb_window_t window
成员变量,用于适配xcb
TSurface
中增加适配xcb
相应的构造函数TSurface
的InternalCreate(...)
中通过vkCreateXcbSurfaceKHR(...)
适配xcb
- 适配
TSurface
基于xlib
TSurface
中增加Display *xlibDpy = nullptr
和Window xlibWindow
成员变量,用于适配xlib
TSurface
中增加适配xlib
相应的构造函数TSurface
的InternalCreate(...)
中通过vkCreateXlibSurfaceKHR(...)
适配xlib
TSwapchain
的InternalCreate(...)
中会去判断当前给的图片数量是否合法(判断数量是否在[最小值,最大值]之间),但是有些显卡设备返回的最小值为有效数据,最大值为0
,比如Intel(R) HD Graphics 6000 (BDW GT3)
集显设备就是出现最小值为3
,最大值为0
的情况,由此适配修改Turbo::Extension::TSurface::GetSurfaceCapabilities()
函数- 适配修改
Turbo::Extension::TSurface::GetSurfaceCapabilities()
函数,对应修改maxImageCount
- 修改
Turbo
中对于物理设备的计分算法,最好的图形设备没有返回预计的显卡,而返回了一个CPU
,void Turbo::Core::TPhysicalDevice::CalculatePerformanceScore()
中对于CPU
的分值给的太高了,减小
2022/6/16 设计架构
- 修改
./samples
下的示例,使其适配Linux
./samples
中增加PureCombinedImageSampler.cpp
例子,用于演示带有纹理图片的采样器
2022/6/29 设计架构
FrameGraph
将会转至c++20
标准,将会尝试使用concept
和metaTemplate
方式编写samples
中添加PureSeparateImageSampler
示例,用于展示分离式纹理采样器的使用- 对于资源的读写将会改用相对路径
samples
中添加PureIndexDraw
示例,用于展示索引渲染
2022/6/30 设计架构
TFrameGraph
中的拷贝构造/赋值
和移动构造/赋值
的相关函数使用delete
声明去掉TFrameGraph::AdddPass(...)
中对于模板形参Setup
,Execute
做出限制,限制为可调用实体,对Execute
的大小作出限制,最大为EXECUTE_MAX_LOAD
TFrameGraph::TPassAgency(...)
中对于形参和模板形参Execute
,由于是右值万能引用,所以使用std::forward(...)
来完美转发TFrameGraph::CreatePassNode(...)
中TAgency*
模板参数修改为std::unique_ptr<TAgency>&& agency
TPassNode
中TAgency*
相成员修改为std::unique_ptr<TAgency>
- 去掉
TPassNode
中析构函数的实现,使用编译器默认生成的TFrameGraph::AddPass(...)
中增加如下代码,调用初始化入口函数:std::invoke(setup, builder, pass_agency->GetData())
- 增加
TAgency
的构造/析构函数
2022/7/4 设计架构
FrameGraph
设计参考Filement
做出的修改意见目前写在各行的注释中(//*...
),考虑是否采纳,之后需要同步修改FrameGraph
的设计文档- 将
Filament
的FrameGraph
结构分析加入FrameGraph
文档,作为参考,与c++
新标准的模板元编程和concept
结合设计
2022/7/5 设计架构
- 开始解析
Filament 1.9.9
的FrameGraph
(截止2022/7/5filament
的最新版本为1.24
对于FrameGraph
做了很多更新,但总体思路没变),请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看(注:重点过程被标注为橘黄色)
2022/7/6 设计架构
- 开始解析
Filament
的FrameGraph::compile()
阶段,请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看
2022/7/7 设计架构
- 开始解析
Filament
的FrameGraph::execute()
阶段,请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看
2022/7/8 设计架构
- 解析
Filament
的FrameGraph::execute()
阶段,reset()
函数调用位置标错了,修改回来。- 开始解析
Filament
的FrameGraph::execute()
阶段的resources.get(data.rt);
,请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看- 至此
Filament
的FrameGraph
核心解析完毕,请在./docs/TurboDesign.drawio::FrameGraph
的右侧查看TFrameGraph.hpp
中增加如下,用于表示无效ID,并用该值初始化所有ID:constexpr uint32_t TURBO_NVALID_ID = std::numeric_limits<uint32_t>::max();
TFrameGraph::AddPass(name, setup, execute)
中的execute
回调中TResources
使用const
声明,对应的TBuilder::Get(...)
等函数需要适配,碰到再改TFrameGraph::TBuilder::Create(...)
中的Virtualizable
模板形参改回T
TFrameGraph::Create(...)
中的Virtualizable
模板形参改回T
2022/7/9 设计架构
- 修缮
TFrameGraph::TBuilder::Create(...)
函数TFrameGraph::TResourceAgency(...)
中的Virtualizable
模板形参改回T
TFrameGraph::TResourceAgency(...)
中增加std::string name
属性,用于存储资源名称TFrameGraph::TResourceAgency
中的T *resource
改为T resource
- 新增
TVirtualResourceAgency
类继承自TAgency
,将TResourceAgency
改为继承自T TVirtualResourceAgency
- 将
TFrameGraph::std::vector<TAgency *> *agencys
成员变量改成TFrameGraph::std::vector<TVirtualResourceAgency *> *agencys
- 将
TNode
中的name
成员变量移动到TPassNode
中,TResourceNoded
的名称位于其资源代理中- 将
TResourceNode
中的TAgencyID agencyID
成员变量换成TVirtualResourceAgency*
指向对应的资源代理- 将
TResourceNode
中的TAgencyID agencyID
成员变量换成TVirtualResourceAgency*
指向对应的资源代理- 将
TFrameGraph::TBuilder::Create(...)
函数基本修缮完成- 修缮
TFrameGraph::TBuilder::Write(...)
函数TFrameGraph
中增加TResourceNode &GetResourceNode(TResource resource)
函数TVirtualResourceAgency
中增加TVersion version
成员变量,并增加相应的Set/Get
函数TResourceNode
中增加TVirtualResourceAgency *GetResourceAgency()
函数- 遗弃
TFrameGraph
中的CloneResourceNode(...)
函数- 遗弃
TFrameGraph
中的GetResourceAgency(...)
函数TFrameGraph
中增加bool IsValid(TPass pass)
函数TFrameGraph::TBuilder::Write(...)
函数基本修缮完成- 修缮
TResources::Get(TResource resource)
函数TResourceNode
中增加TPass writer
成员变量,用与表示资源的写入者
2022/7/10 设计架构
TVirtualResourceAgency
类中增加TPass firstUser
和TPass lastUser
用于表示第一次和最后一次使用该资源的使用者TVirtualResourceAgency
类中增加如下,用于表示该PassNode运行时需要创建和销毁的资源:std::vector<TVirtualResourceAgency*> devirtualizes; std::vector<TVirtualResourceAgency*> destroies;
TVirtualResourceAgency
增加如下成员函数:virtual void Create() = 0; virtual void Destroy() = 0;
TResourceAgency
增加如下成员函数:virtual void Create() override; virtual void Destroy() override;
- 增加
class TPassExecutorAgency
类,用于定义pass
代理的Executor(...)
的虚函数回调- 修改
class TPassAgency
类,继承自TPassExecutorAgency
,并实现Executor(...)
虚函数回调- 将
TPassNode
类中的std::unique_ptr<TAgency> agency
修改成std::unique_ptr<TPassExecutorAgency> agency;
- 将
TFrameGraph
类中的void Execute();成员函数
修改成void Execute(void *context);
- 修改
TFrameGraph::CreatePassNode(...)
适配新的TPassExecutorAgency
类- 修改
TPassNode
构造函数,适配新的TPassExecutorAgency
类TFrameGraph
大框架基本上写完了,剩下的就是Resource
和PassNode
等特化和引擎提供的特性资源类,比如PresentNode(PassNode的特化,有PresentData)
和Texture(纹理资源),DepthTexture(深度纹理),ColorTexture(颜色纹理)
等- 接下来需要实现
TFrameGraph
的Blackboard
特性
2022/7/11 设计架构
- 实现
FrameGraph
的Blackboard
特性- 实现
TFrameGraph
中增加TBlackboard
类TFrameGraph
中增加TBlackboard
类成员变量TFrameGraph
中增加TBlackboard &GetBlackboard()
成员函数需要特化当前的算法正常并不会剔除PresentPassNode
,显示节点一般作为结束节点,但是FrameGraph
演讲中并没有显示的给出显示阶段往哪个资源身上写入,所以目前显示节点没有写入,也就是没有出度,没有出度在FrameGraph::Compile()
阶段就会被剔除,这也许会造成一连串的剔除,所以需要专门特化一个PresentPassNode
或是采用SideEffect
解决(目前TFrameGraph
并没有引入SideEffect
特性)PresentPass
,FrameGraph
目前的剔除算法首先基于资源引用数进行的剔除,目前显示节点不向任何资源写入,只是读取资源,正常不会发生递归性的一连串剔除TFrameGraph
还需要经过测试,目前还没有严格测试
2022/7/12 设计架构
修复Bug:
TFrameGraph::Compile()
中计算资源的创建者和销毁者时,FrameGraph
的所有资源可能会被全部剔除,造成空图,这会导致资源的创建者和销毁者为无效节点(比如强制PresentPass
往资源中写入,由于PresentPass
为结束节点,正常不应该再写入资源,这时该写入的资源没有出度,也就是没有人使用该节点,这时Compile()
阶段会发生资源剔除,导致一连串的资源剔除,最坏的情况会剔除成空图,这时资源的创建者和销毁者不会被赋值,从而导致创建者和销毁者的节点id
无效非法)有关
TFrameGraph
如何使用和测试,请参考./samples/FrameGraphSample.cpp
TFrameGraph::Execute(...)
中增加对PassNode
的引用数的判断,如果引用数大于零,说明该节点有使用者,运行节点的Executor
回调,否则没有使用,不去调用回调。(注意:这将会导致PresentNode
的运行回调不会被调用,考虑使用SideEffect
特性强制驱动,如果一个PassNode
有SideEffect
特性,说明在节点不会被剔除)
TPassNode
中增加bool sideEffect
成员变量
TFrameGraph::TBuilder
中增加TBuilder &SideEffect();
成员函数,用于设置PassNode
的sideEffect
成员
TFrameGraph::Execute()
中增加对于sideEffect
的判断
2022/7/13 设计架构
- 修改
SideEffect
强制不剔除PassNode
,应该修改其refCount
- 移除
TVirtualResourceAgency::SetVersion(...)
函数,通过直接修改成员变量完成- 至此最基础的
FrameGraph
实现完成,接下来将会于./engine/include
和./engine/src
中实现更高级的资源和特性(比如Surface
,Material
和各种Resource
等)
2022/7/16 设计架构
- 修改
./main.cpp
中的绝对路径修改到相对路径- 开始尝试动态加载
Vulkan
库来获取函数- 核心中添加
TVulkanLoader
类用于实现Vulkan
的Loader
- 核心中添加
TCore::TResult
中增加UNIMPLEMENTED
用于表示引擎未实现先关定义,请实现
2022/7/17 设计架构
TVulkanLoader
中增加如下私有函数,用于加载Vulkan API
的函数:template <TLoaderType type, typename Function> Function LoadAll(void *context, const char*name);
TVulkanLoader
中增加如下函数:void Load(TInstance *instance); void LoadAllInstanceFunctions(TInstance *instance); void LoadAllDeviceFunctions(TInstance *instance); template <typename Function> Function LoadInstanceFunction(TInstance *instance, const char *name); template <typename Function> Function LoadInstanceFunction(VkInstance instance, const char *name); template <typename Function> Function LoadDeviceFunction(TInstance*instance, const char*name); template <typename Function> Function LoadDeviceFunction(VkInstance instance, const char*name); TVersion GetVulkanVersion();
TInstance::InternalCreate()
中增加对于TVulkanLoader
的相关调用,用于加载Vulkan API
函数TInstance::InternalCreate()
中对于vkCreateInstance
的相关调用,更改成Turbo::Core::vkCreateInstance
调用,并在之后调用TVulkanLoader::Instance()->LoadAll(this);
用于获取所有Vulkan API
函数TInstance::IsSupportVulkan()
中对于vkCreateInstance
的相关调用,更改成使用TVulkanLoader
调用TInstance::GetVulkanInstanceVersion()
中对于vkEnumerateInstanceVersion
的相关调用,更改成使用TVulkanLoader
调用
2022/7/18 设计架构
TLayerInfo
中使用TVulkanLoader
调用相应函数TExtensionInfo
中使用TVulkanLoader
调用相应函数
2022/7/20 设计架构
TVulkanLoader
加载vkEnumeratePhysicalDevices
函数TVulkanLoader
加载vkGetPhysicalDeviceProperties
函数TVulkanLoader
加载vkEnumerateDeviceLayerProperties
函数TVulkanLoader
加载vkEnumerateDeviceExtensionProperties
函数TVulkanLoader
加载vkGetPhysicalDeviceQueueFamilyProperties
函数TVulkanLoader
加载vkGetPhysicalDeviceFeatures
函数TVulkanLoader
加载vkGetPhysicalDeviceMemoryProperties
函数TPhysicalDevice::InternalCreate()
使用Turbo::Core::vkEnumeratePhysicalDevices(...)
函数TFormatInfo::GetSupportFormats
使用TVulkanLoader
获取函数TVulkanLoader
加载vkCreateDevice
函数TVulkanLoader
加载vkGetPhysicalDeviceFormatProperties
函数TVulkanLoader
加载vkGetPhysicalDeviceImageFormatProperties
函数TDevice::InternalCreate()
使用TVulkanLoader
获取函数TVulkanLoader
增加如下成员函数:template <typename Function> Function LoadDeviceFunction(TDevice *device, const char *name); template <typename Function> Function LoadDeviceFunction(VkDevice device, const char *name);
TVulkanLoader
提供专门TDevice/VkDevice
设备的特定实现函数版本获取TVulkanLoader
加载vkDestroyDevice
函数TVulkanLoader
加载vkGetPhysicalDeviceSparseImageFormatProperties
函数TVulkanLoader
加载如下设备函数:extern VULKAN_DEVICE_API PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; extern VULKAN_DEVICE_API PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; extern VULKAN_DEVICE_API PFN_vkAllocateMemory vkAllocateMemory; extern VULKAN_DEVICE_API PFN_vkBeginCommandBuffer vkBeginCommandBuffer; extern VULKAN_DEVICE_API PFN_vkBindBufferMemory vkBindBufferMemory; extern VULKAN_DEVICE_API PFN_vkBindImageMemory vkBindImageMemory; extern VULKAN_DEVICE_API PFN_vkCmdBeginQuery vkCmdBeginQuery; extern VULKAN_DEVICE_API PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; extern VULKAN_DEVICE_API PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; extern VULKAN_DEVICE_API PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; extern VULKAN_DEVICE_API PFN_vkCmdBindPipeline vkCmdBindPipeline; extern VULKAN_DEVICE_API PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; extern VULKAN_DEVICE_API PFN_vkCmdBlitImage vkCmdBlitImage; extern VULKAN_DEVICE_API PFN_vkCmdClearAttachments vkCmdClearAttachments; extern VULKAN_DEVICE_API PFN_vkCmdClearColorImage vkCmdClearColorImage; extern VULKAN_DEVICE_API PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; extern VULKAN_DEVICE_API PFN_vkCmdCopyBuffer vkCmdCopyBuffer; extern VULKAN_DEVICE_API PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; extern VULKAN_DEVICE_API PFN_vkCmdCopyImage vkCmdCopyImage; extern VULKAN_DEVICE_API PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; extern VULKAN_DEVICE_API PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; extern VULKAN_DEVICE_API PFN_vkCmdDispatch vkCmdDispatch; extern VULKAN_DEVICE_API PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; extern VULKAN_DEVICE_API PFN_vkCmdDraw vkCmdDraw; extern VULKAN_DEVICE_API PFN_vkCmdDrawIndexed vkCmdDrawIndexed; extern VULKAN_DEVICE_API PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; extern VULKAN_DEVICE_API PFN_vkCmdDrawIndirect vkCmdDrawIndirect; extern VULKAN_DEVICE_API PFN_vkCmdEndQuery vkCmdEndQuery; extern VULKAN_DEVICE_API PFN_vkCmdEndRenderPass vkCmdEndRenderPass; extern VULKAN_DEVICE_API PFN_vkCmdExecuteCommands vkCmdExecuteCommands; extern VULKAN_DEVICE_API PFN_vkCmdFillBuffer vkCmdFillBuffer; extern VULKAN_DEVICE_API PFN_vkCmdNextSubpass vkCmdNextSubpass; extern VULKAN_DEVICE_API PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; extern VULKAN_DEVICE_API PFN_vkCmdPushConstants vkCmdPushConstants; extern VULKAN_DEVICE_API PFN_vkCmdResetEvent vkCmdResetEvent; extern VULKAN_DEVICE_API PFN_vkCmdResetQueryPool vkCmdResetQueryPool; extern VULKAN_DEVICE_API PFN_vkCmdResolveImage vkCmdResolveImage; extern VULKAN_DEVICE_API PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; extern VULKAN_DEVICE_API PFN_vkCmdSetDepthBias vkCmdSetDepthBias; extern VULKAN_DEVICE_API PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; extern VULKAN_DEVICE_API PFN_vkCmdSetEvent vkCmdSetEvent; extern VULKAN_DEVICE_API PFN_vkCmdSetLineWidth vkCmdSetLineWidth; extern VULKAN_DEVICE_API PFN_vkCmdSetScissor vkCmdSetScissor; extern VULKAN_DEVICE_API PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; extern VULKAN_DEVICE_API PFN_vkCmdSetStencilReference vkCmdSetStencilReference; extern VULKAN_DEVICE_API PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; extern VULKAN_DEVICE_API PFN_vkCmdSetViewport vkCmdSetViewport; extern VULKAN_DEVICE_API PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; extern VULKAN_DEVICE_API PFN_vkCmdWaitEvents vkCmdWaitEvents; extern VULKAN_DEVICE_API PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; extern VULKAN_DEVICE_API PFN_vkCreateBuffer vkCreateBuffer; extern VULKAN_DEVICE_API PFN_vkCreateBufferView vkCreateBufferView; extern VULKAN_DEVICE_API PFN_vkCreateCommandPool vkCreateCommandPool; extern VULKAN_DEVICE_API PFN_vkCreateComputePipelines vkCreateComputePipelines; extern VULKAN_DEVICE_API PFN_vkCreateDescriptorPool vkCreateDescriptorPool; extern VULKAN_DEVICE_API PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; extern VULKAN_DEVICE_API PFN_vkCreateEvent vkCreateEvent; extern VULKAN_DEVICE_API PFN_vkCreateFence vkCreateFence; extern VULKAN_DEVICE_API PFN_vkCreateFramebuffer vkCreateFramebuffer; extern VULKAN_DEVICE_API PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; extern VULKAN_DEVICE_API PFN_vkCreateImage vkCreateImage; extern VULKAN_DEVICE_API PFN_vkCreateImageView vkCreateImageView; extern VULKAN_DEVICE_API PFN_vkCreatePipelineCache vkCreatePipelineCache; extern VULKAN_DEVICE_API PFN_vkCreatePipelineLayout vkCreatePipelineLayout; extern VULKAN_DEVICE_API PFN_vkCreateQueryPool vkCreateQueryPool; extern VULKAN_DEVICE_API PFN_vkCreateRenderPass vkCreateRenderPass; extern VULKAN_DEVICE_API PFN_vkCreateSampler vkCreateSampler; extern VULKAN_DEVICE_API PFN_vkCreateSemaphore vkCreateSemaphore; extern VULKAN_DEVICE_API PFN_vkCreateShaderModule vkCreateShaderModule; extern VULKAN_DEVICE_API PFN_vkDestroyBuffer vkDestroyBuffer; extern VULKAN_DEVICE_API PFN_vkDestroyBufferView vkDestroyBufferView; extern VULKAN_DEVICE_API PFN_vkDestroyCommandPool vkDestroyCommandPool; extern VULKAN_DEVICE_API PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; extern VULKAN_DEVICE_API PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; extern VULKAN_DEVICE_API PFN_vkDestroyDevice vkDestroyDevice; extern VULKAN_DEVICE_API PFN_vkDestroyEvent vkDestroyEvent; extern VULKAN_DEVICE_API PFN_vkDestroyFence vkDestroyFence; extern VULKAN_DEVICE_API PFN_vkDestroyFramebuffer vkDestroyFramebuffer; extern VULKAN_DEVICE_API PFN_vkDestroyImage vkDestroyImage; extern VULKAN_DEVICE_API PFN_vkDestroyImageView vkDestroyImageView; extern VULKAN_DEVICE_API PFN_vkDestroyPipeline vkDestroyPipeline; extern VULKAN_DEVICE_API PFN_vkDestroyPipelineCache vkDestroyPipelineCache; extern VULKAN_DEVICE_API PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; extern VULKAN_DEVICE_API PFN_vkDestroyQueryPool vkDestroyQueryPool; extern VULKAN_DEVICE_API PFN_vkDestroyRenderPass vkDestroyRenderPass; extern VULKAN_DEVICE_API PFN_vkDestroySampler vkDestroySampler; extern VULKAN_DEVICE_API PFN_vkDestroySemaphore vkDestroySemaphore; extern VULKAN_DEVICE_API PFN_vkDestroyShaderModule vkDestroyShaderModule; extern VULKAN_DEVICE_API PFN_vkDeviceWaitIdle vkDeviceWaitIdle; extern VULKAN_DEVICE_API PFN_vkEndCommandBuffer vkEndCommandBuffer; extern VULKAN_DEVICE_API PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; extern VULKAN_DEVICE_API PFN_vkFreeCommandBuffers vkFreeCommandBuffers; extern VULKAN_DEVICE_API PFN_vkFreeDescriptorSets vkFreeDescriptorSets; extern VULKAN_DEVICE_API PFN_vkFreeMemory vkFreeMemory; extern VULKAN_DEVICE_API PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; extern VULKAN_DEVICE_API PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; extern VULKAN_DEVICE_API PFN_vkGetDeviceQueue vkGetDeviceQueue; extern VULKAN_DEVICE_API PFN_vkGetEventStatus vkGetEventStatus; extern VULKAN_DEVICE_API PFN_vkGetFenceStatus vkGetFenceStatus; extern VULKAN_DEVICE_API PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; extern VULKAN_DEVICE_API PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; extern VULKAN_DEVICE_API PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; extern VULKAN_DEVICE_API PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; extern VULKAN_DEVICE_API PFN_vkGetPipelineCacheData vkGetPipelineCacheData; extern VULKAN_DEVICE_API PFN_vkGetQueryPoolResults vkGetQueryPoolResults; extern VULKAN_DEVICE_API PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; extern VULKAN_DEVICE_API PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; extern VULKAN_DEVICE_API PFN_vkMapMemory vkMapMemory; extern VULKAN_DEVICE_API PFN_vkMergePipelineCaches vkMergePipelineCaches; extern VULKAN_DEVICE_API PFN_vkQueueBindSparse vkQueueBindSparse; extern VULKAN_DEVICE_API PFN_vkQueueSubmit vkQueueSubmit; extern VULKAN_DEVICE_API PFN_vkQueueWaitIdle vkQueueWaitIdle; extern VULKAN_DEVICE_API PFN_vkResetCommandBuffer vkResetCommandBuffer; extern VULKAN_DEVICE_API PFN_vkResetCommandPool vkResetCommandPool; extern VULKAN_DEVICE_API PFN_vkResetDescriptorPool vkResetDescriptorPool; extern VULKAN_DEVICE_API PFN_vkResetEvent vkResetEvent; extern VULKAN_DEVICE_API PFN_vkResetFences vkResetFences; extern VULKAN_DEVICE_API PFN_vkSetEvent vkSetEvent; extern VULKAN_DEVICE_API PFN_vkUnmapMemory vkUnmapMemory; extern VULKAN_DEVICE_API PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; extern VULKAN_DEVICE_API PFN_vkWaitForFences vkWaitForFences;
2022/7/22 设计架构
TVulkanLoader
中只提供Vulkan_Core
的函数函数声明和获取,也就是说TVulkanLoader.h
中只存在Vulkan
核心函数声明和获取,有关Vulkan
的属于扩展范围的函数,需要在相应的扩展模块使用TVulkanLoader
自定义加载相应的函数TVulkanLoader.h
中增加如下声明用来标识函数是Vulkan
的核心函数还是扩展函数#define VULKAN_CORE #define VULKAN_EXTENSION
2022/7/23 设计架构
TVulkanLoader
中增加struct TDeviceFunctionTable
内部有设备相关函数声明,并用TDeviceDriver
重命名TVulkanLoader
中增加TDeviceDriver LoadDeviceDriver(TDevice *device)
用于返回特定设备函数实现版本TDevice
中增加TDeviceDriver *deviceDriver;
用于创建设备函数表TDevice::InternalCreate()
中增加对TDeviceDriver *deviceDriver;
的初始化TDevice
中增加const TDeviceDriver *GetDeviceDriver();
函数,用于返回设备指定实现函数表(驱动)~TDevice
中增加vkDeviceWaitIdle(...)
调用使用driver
替换调用- 开始将
TVmaAllocator
中使用TDeviceDriver
调用使适配
2022/7/24 设计架构
- 开始将
TDeviceQueue
中使用TDeviceDriver
调用使适配- 开始将
TCommandBuffer
中使用TDeviceDriver
调用使适配TPipeline
中增加TDevice* GetDevice()
成员函数- 开始将
TCommandBufferPool
中使用TDeviceDriver
调用使适配- 开始将
TDescriptorPool
中使用TDeviceDriver
调用使适配- 开始将
TDescriptorSet
中使用TDeviceDriver
调用使适配- 开始将
TDescriptorSetLayout
中使用TDeviceDriver
调用使适配- 开始将
TFence
中使用TDeviceDriver
调用使适配- 开始将
TFramebuffer
中使用TDeviceDriver
调用使适配- 开始将
TGraphicsPipeline
中使用TDeviceDriver
调用使适配- 开始将
TImageView
中使用TDeviceDriver
调用使适配- 开始将
TPipelineLayout
中使用TDeviceDriver
调用使适配- 开始将
TRenderPass
中使用TDeviceDriver
调用使适配- 开始将
TSampler
中使用TDeviceDriver
调用使适配- 开始将
TSemaphore
中使用TDeviceDriver
调用使适配- 开始将
TShader
中使用TDeviceDriver
调用使适配
2022/7/25 设计架构
TDeviceQueue::InternalCreate()
中使用TVulkanLoader
加载vkQueuePresentKHR
函数TDeviceQueue::Present(...)
中使用TVulkanLoader
加载的vkQueuePresentKHR
函数进行调用- 将如下定义从
TVulkanLoader.h
中移动到TCore.h
中:#define VULKAN_GLOBAL_API #define VULKAN_INSTANCE_API #define VULKAN_DEVICE_API #define VULKAN_CORE # efine VULKAN_EXTENSION
- 开始将
TSurface
中使用TDeviceDriver
调用使适配
2022/7/27 设计架构
- 开始将
TSwapchain
中使用TDeviceDriver
调用使适配- 有小伙伴提出在单独使用
Turbo
的TCore
核心库的时候,需要手动链接TCore
库的依赖库,经过检验确实如此,这不是TCore
库发布的初衷,有关该问题的细节请参阅./docs/issue.md::Turbo核心生成的TCore库...
,由于本人CMake
并不是很精通,目前正在研究中...TCore
中有关Vulkan
函数的动态加载目前基本结束,接下来陆续撤走CMake
中需要硬编码指定vulkan-1.lib
目录的配置,计划将vulkan/vulkan.h
头文件加入TCore
中- 将
Vulkan SDK 1.3.204.1
中的Include
文件夹下的内容拷贝到了./engine/core/include/vulkan
目录下- 修改
TCore.h
中对于#include <vulkan/vulkan.h>
的引用,修改成#include "vulkan/vulkan.h"
- 修改
TSurface.h
中对于Vulkan
头文件的引用,修改成本地vulkan
头文件- 移除
TCore
的CMake
中对于Vulkan
目录配置的硬编码
2022/7/28 设计架构
- 调整
Turbo
核心的CMakeLists.txt
- 移除
Turbo
核心的vk_mem_alloc.h
,使用第三方库中的头文件- 尝试解决
TCore
的依赖库问题- 修改
PureIndexDraw
例子中的IndexBuffer
大小的bug
,感谢会翔
提供的反馈
2022/7/30 设计架构
- 调整
./engine/core/CMakeLists.txt
,尝试解决TCore
的依赖库问题- 调整
TShader.cpp
中对于glslang
中GlslangToSpv.h
头文件引用层级- 调整
./main.cpp
中对于vkGetImageSubresourceLayout(...)
的调用,改成Turbo::Core::vkGetImageSubresourceLayout(...)
- 调整
./main.cpp
中对于vkDestroySurfaceKHR(...)
的调用,改成使用TVulkanLoader
获取调用- 将
./CMakeLists.txt
中对于imgui_impl_glfw.cpp
和imgui_impl_vulkan.cpp
的引用去掉,用不上- 同理将
./samples/CMakeLists.txt
中对于imgui_impl_glfw.cpp
和imgui_impl_vulkan.cpp
的引用去掉,用不上./samples
中的示例将适配TVulkanLoader
- 注:[VulkanMemoryAllocator]:If you fetch pointers to all Vulkan functions in a custom way, e.g. using some loader likeVolk
- Define
VMA_STATIC_VULKAN_FUNCTIONS
andVMA_DYNAMIC_VULKAN_FUNCTIONS
to 0.- Pass these pointers via structure #VmaVulkanFunctions.
- 考虑是否将外部引入的
VkSurfaceKHR
中在TSurface
析构时顺便销毁,目前外部引入的VkSurfaceKHR
,需要在外部自己销毁TVmaAllocator
目前对于Vulkan API
的获取,使用VulkanMemoryAllocator
内部自动获取。
- If you want VMA to fetch pointers to Vulkan functions dynamically using vkGetInstanceProcAddr, vkGetDeviceProcAddr (this is the option presented in the example below):
- Define VMA_STATIC_VULKAN_FUNCTIONS to 0, VMA_DYNAMIC_VULKAN_FUNCTIONS to 1.
- Provide pointers to these two functions via VmaVulkanFunctions::vkGetInstanceProcAddr, VmaVulkanFunctions::vkGetDeviceProcAddr.
- The library will fetch pointers to all other functions it needs internally.
- 至此
Turbo
核心库TCore
依赖库问题已解决,感谢会翔
提供的问题反馈
2022/8/4 设计架构
./samples
中增加PBRTest.cpp
,用于physically based rendering
与BSDF
研究
2022/8/7 设计架构
./samples
中PBRTest.cpp
,对于physically based rendering
与BSDF
初步调试成功。看样子渲染结果应该是对的(○` 3′○)
2022/8/10 设计架构
- 开始
engine
层面的设计和实现,engine
层的相关设计将会位于./docs/TurboDesign.drawio::Engine
章节中,engine
层的相关实现将会放入./engine/include
和./engine/src
中
2022/8/11 设计架构
./docs/TurboDesign.drawio::Engine
章节中创建纲要
- 修正
./docs/TurboDesign.drawio::Engine
章节中Subapss
的问题
2022/8/13 设计架构
./docs/TurboDesign.drawio::Engine
章节中创建概要设计
2022/8/15 设计架构
./docs/TurboDesign.drawio::Engine
章节中完善概要设计
设计思路
2022/8/16 设计架构
./docs/TurboDesign.drawio::Engine
章节中概要设计
设计增加对于FrameGraph
结合的设计思路
2022/8/17 设计架构
./docs/TurboDesign.drawio::Engine
章节中概要设计
设计增加对于CommandBuffer相关
的设计思路./docs/TurboDesign.drawio::Engine
章节中增加详细设计
Turbo
核心TCommandBuffer
中新增TSecondaryCommandBuffer
类,用于表示二级指令缓冲Turbo
核心TCommandBuffer
中新增TCommandBufferBase
类,用于表示指令缓冲的基类,用于实现指令。该类为虚基类Turbo
核心TCommandBuffer
中TCommandBufferBase
类,增加TCommandBufferLevel GetLevel();
函数,用于获取指令缓冲等级Turbo
核心TCommandBuffer
中新增TCommandBufferLevel
枚举,用于表示指令缓冲的的级别Turbo
核心TCommandBuffer
中将TCommandBuffer
修改成继承自TCommandBufferBase
Turbo
核心修改TCommandBufferPool
中将取消继承自Turbo::Core::TPool<TCommandBuffer>
Turbo
核心TCommandBufferPool
中增加void Free(TCommandBufferBase *commandBufferBase);
用于统一回收一级、二级指令缓冲Turbo
核心TCommandBufferPool
中增加TSecondaryCommandBuffer *AllocateSecondary();
和void Free(TSecondaryCommandBuffer *secondaryCommandBuffer);
用于创建和回收二级指令缓冲Turbo
核心TCommandBuffer
中应该实现void CmdExecuteCommand(...);
函数,用于一级指令缓冲调度二级指令缓冲。今天太晚了,明天再弄。
2022/8/18 设计架构
Turbo
核心TCommandBuffer
中增加TCommandBufferPool* GetCommandBufferPool();
函数Turbo
核心TCommandBuffer
中实现void CmdExecuteCommand(...);
函数Turbo
核心TCommandBufferBase
中增加VkCommandBufferInheritanceInfo *vkCommandBufferInheritanceInfo = nullptr
成员变量,用于二级指令缓冲的继承信息Turbo
核心TCommandBufferBase
中增加uint32_t currentSubpass = 0;
成员变量,表示当前的Subpass
Turbo
核心TCommandBufferBase
中增加TFramebuffer *currentFramebuffer = nullptr;
成员变量,表示当前的Framebuffer
Turbo
核心TSecondaryCommandBuffer
中删除void Begin() = delete
成员函数调用,转而使用void Begin(TRenderPass *renderPass, TFramebuffer *framebuffer, uint32_t subpass);
成员函数Turbo
核心TCommandBuffer.h
中增加typedef enum class TSubpassContents
枚举,用于对应VkSubpassContents
Turbo
核心TCommandBufferBase
中将void CmdBeginRenderPass(...)
的形参增加一个TSubpassContents
参数Turbo
核心TCommandBufferBase::Begin()
中将vk_command_buffer_begin_info.flags
设置成VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
为适应二级指令缓冲./samples
中增加SecondaryCommandBufferTest
例子,用于测试二级指令缓冲
2022/8/18 设计架构
./docs/TurboDesign.drawio::Engine
章节中详细设计
设计,细化具体资源
2022/8/19 设计架构
./docs/TurboDesign.drawio::Engine
章节中系统设计
中增加文件加载层相关./asset/models/
增加material_sphere.gltf
文件./samples/PBRTest.cpp
例子中将读取的模型改为material_sphere.gltf
文件
2022/8/20 设计架构
./docs/TurboDesign.drawio::Engine
章节中详细设计
中增加Material
设计思路./samples
中增加MultiDrawTest.cpp
文件,用于探究Subpass
和MutilDraw
之间的联系./samples
中增加SubpassTest.cpp
文件,用于探究Subpass
和MutilDraw
之间的联系
2022/8/21 设计架构
./docs/TurboDesign.drawio::Engine
章节中详细设计::Material
设计思路,有设计问题,进一步设计完善
2022/8/25 知会
- 现在
Turbo::Engine
层面的设计多少都有些问题,比如:如果用户想要调配使用FrameGraph
就需要对渲染有过硬的理解,目前看了Filament
,LegitEngine
,FrameGraph-Example
等相关引擎对于FrameGraph
亦或是RenderGraph
的封装设计,这些引擎都会提供一套固定的FrameGraph
,用于一套已经定义好了的渲染流程,这些流程多是GBuffer
流程,用户提供Renderable
结构数据,引擎将其塞入特定的PassNode
中,这个塞入工作并不是用户自定义的,而是引擎完成的,这就会导致用户(对图形学不是很熟悉)需要按照引擎先前定好的流程渲染,渲染出有限的效果(大部分情况下这个有限的效果是够用的),除非用户对于图形学和FrameGraph
有比较深刻的理解,则可自己使用FrameGraph
配置自定义渲染流程。- 从现在开始要全力备考了,再写代码我妈要打死我了,不管考得上,还是考不上,明年引擎都将继续,回见~
2022/9/4 设计架构
- 感谢
会翔
提供的反馈。修复TCommandBufferBase::CmdSetLineWidth(...)
时程序报错的问题,原因是TGraphicsPipeline::InternalCreate()
在创建管线时VkPipelineDynamicStateCreateInfo::dynamicStateCount
给个固定数值2
,导致VkDynamicState::VK_DYNAMIC_STATE_LINE_WIDTH
并不会加入动态状态中。
2022/10/16 设计架构
./samples
中增加InstancedDrawTest
示例,用于示例实例化渲染
2022/11/7 设计架构
./samples
中增加PerlinWorleyNoiseTest
示例,用于尝试生成Perlin-Woley噪音
2022/11/9 设计架构
core
中创建TComputerPipeline
类
2022/11/10 设计架构
TurboDesign
中Core
章节增加Pipeline与Shader分支箭头(非常大的黄色箭头)
TShader
中增加TVertexShader
、TFragmentShader
、TComputeShader
并在TShader.cpp
中实现(目前先实现这几个,剩下等有时间的)TPipeline
中增加图形管线的构造函数TPipeline(TDevice *device, TVertexShader* vertexShader,TFragmentShader* fragmentShader);
和计算管线的构造函数TPipeline(TDevice *device, TComputeShader *computeShader);
。老的构造函数将会声明置成弃用函数。TGraphicsPipeline
中增加使用TVertxShader
和TFragmentShader
的构造函数。老的构造函数将会声明置成弃用函数。- 实现
TComputerPipeline
中并在其中调用vkCreateComputePipelines
创建计算管线的VkPipeline
./samples
中增加CineShaderLava
示例,在ShaderToy
上看到的,感觉挺有意思,想试试使用Turbo
渲染,就搬过来了。
2022/11/11 设计架构
./samples
中增加Octagrams
示例,在ShaderToy
上看到的,感觉挺有意思,就搬过来了。./samples
中增加ProteanClouds
示例,在ShaderToy
上看到的,感觉挺有意思,就搬过来了。- 开始实现
Core
中TCommandBufferBase
中的void CmdDispatch(...)
函数,用于调用执行计算着色器的计算管线./samples
中增加ComputePipelineTest
测试示例,用于测试计算着色器和计算管线是否正确有效- 引擎中目前没有
storage image
相关的解析,现进行实现。TDescriptor
中增加TStorageImageDescriptor
类,继承自TDescriptor
,并实现TShader
中增加TStorageImageDescriptor
类的数组使用:声明std::vector<TStorageImageDescriptor *> storageImageDescriptors
成员变量。TShader
中增加const std::vector<TStorageImageDescriptor *> &GetStorageImageDescriptors()
成员函数。TShader
的InternalParseSpirV()
成员函数中对storage image
进行解析构建,并在TShader
析构时销毁。TPipeline
的InternalCreate()
成员函数中对storage image
进行解析添加。- 在
TDescriptorSet
的BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<TImageView *> &imageViews)
成员函数中增加对storage image
的支持。
2022/11/12 设计架构
- 加了个
爱发电
赞助,感谢投喂。./samples
中增加Auroras
示例,在ShaderToy
上看到的,太漂亮了没忍住,又搬过来了。./samples
中ProteanClouds
示例中增加对应的鼠标位置数据
2022/11/13 设计架构
./samples
中增加ComputerPipelineGeneratePerlinWorley
示例。用于使用计算着色器生成128×128×128的3维PerlinWorley噪音
,之后再使用图形管线显示。./samples
中增加ComputerPipelineGenerateWorley
示例。用于使用计算着色器生成32×32×32的3维Worley噪音
,之后使用图形管线显示。./samples
中增加IspGlassball11Mix
示例。在ShaderToy
上看到的,进行了一些魔改,没有进行降噪,原版代码好像是用的前一帧的数据进行降噪的,具体没咋看(主要是懒的写代码)。- 接下来计划重点实现
Volumetric Cloud
,之前一直想尝试实现体积云,该体积云将会写较为详细的实现文档,敬请期待。
2022/11/14 设计架构
./samples
中增加VolumetricCloud
示例。用于尝试实现体积云./asset/shaders
中增加imgui.vert
顶点着色器文件./asset/shaders
中增加imgui.frag
片元着色器文件./asset/shaders
中增加perlin-worley.comp
计算着色器文件./asset/shaders
中增加worley.comp
计算着色器文件./asset/shaders
中增加post_processing.vert
顶点着色器文件./asset/shaders
中增加post_processing_voulmetric_cloud.frag
片元着色器文件./docs
中增加VolumetricCloud.md
用于书写体积云的实现说明文档TVulkanLoader
中增加Linux
平台的支持Deepin
环境好像不支持C++20
和c++17
,现已退回到c++11
版本- 由于退回到
c++11
版本,TFrameGraph
中的一些c++
新特性将会退回老版本,目前TFrameGraph
不成熟,有待完善或重构,目前不是非常重要。
2022/11/15 设计架构
- 修改
TVulkanLoader
中增加Linux
头文件dlfcn.h
忘添加平台宏限制的Bug- 修改
CppStandardTest.cpp
中代码,由于退回到了C++11
PerlinWorleyNoiseTest.cpp
中向着色器传递增加一个float h
数据,用于控制噪音算法的赫斯特指数(Hurst Exponent)README
中赞助
栏目增加体积云项目
- 修改
TSwapchain.cpp
中InternalCreate()
中vk_swapchain_create_info_khr.oldSwapchain=nullptr
改成vk_swapchain_create_info_khr.oldSwapchain=VK_NULL_HANDLE
,Visual Studio 2017
中赋nullptr
报错- 修改
TFrameGraph.hpp
中Execute
的相关声明,声明成TExecute
,在使用Visual Studio 2017
编译Turbo
时会有报error C2244 无法将函数定义与现有的声明匹配
,估计是名称和微软的库冲突了,换了名。TFrameGraph
有时间要大修- 修改所有示例中有关寻找是否支持
VK_LAYER_KHRONOS_VALIDATION
验证层相关代码。如果设备支持将该验证层加入TInstance
的激活数组中,有个Bug是当电脑不支持时或engine.GetInstance().GetSupportLayers()
返回数据有问题,将会造成不应该添加Turbo::Core::TLayerInfo khronos_validation
(此时khronos_validation
还是未赋值状态,内部类型为TLayerType::UNDEFINED
)到最后还是会调用enable_layer.push_back(khronos_validation)
增加这个内部类型为TLayerType::UNDEFINED
的验证层,导致在创建TInstance
时不识别该验证层,返回异常。- 增加一个
Issue
:在Windows11
下,英伟达驱动472.91
,显卡型号RTX3070
下std::vector<Turbo::Core::TLayerInfo> Turbo::Core::TLayerInfo::GetInstanceLayers()
将会返回空数组,Vulkan
运行时此时找不到支持的验证层。./docs
中增加images
文件夹,用于存放文档图片
2022/11/16 设计架构
./doc/images
增加Hurst_Exponent.gif
文件,用于体积云说明- 更新
./docs/VolumetricCloud.md
文件./docs/images
增加base_cloud.png
文件和detail_cloud.png
文件./samples
增加RayMarchingTest
示例,展示一个基本的光线步进示例,该示例未完成。./asset/shaders
增加base_ray_marching.frag
着色器,用于基本光线步进。
2022/11/17 设计架构
- 修改
main.cpp
使其输出的Turbo.exe
。在当运行时按下键盘W
、A
、S
、D
后可以移动相机,按住鼠标右键
可以俯仰相机。- 修改
main.cpp
中的eye
变量名称,起错名了。
2022/11/18 设计架构
- 完成
./sample
下的RayMarchingTest
示例./docs
下增加compile_env.png
,此为Windows
环境下编译Turbo
的环境对照表。KTX-Software
很早之前的Issue
,一直存在,可能GNU
标准的clang/clang++
不是这么用的吧。- 增加
README.txt
中第三方库的链接。glm
有个历史遗留库,我下错好几次了。- 更新
VolumetricCloud
文章
2022/11/19 设计架构
./docs
增加camera_coordinate.png
。用于VolumetricCloud.md
文章说明./docs
增加camera_relative_pos.png
。用于VolumetricCloud.md
文章说明./docs
增加camera_pixel_pos.png.png
。用于VolumetricCloud.md
文章说明./docs
增加ndc.png
。用于VolumetricCloud.md
文章说明./docs
增加base_ray_marching.gif
。用于VolumetricCloud.md
文章说明- 更新
VolumetricCloud
文章./asset/shaders
增加volumetric_cloud.frag
并对应修改VolumetricCloud
示例。计划用于实现体积云
,将会随着VolumetricCloud.md
文章的进度完善
2022/11/20 设计架构
./samples
增加RayMarchingBoundingBoxTest
。用于VolumetricCloud
的碰撞包围盒(为什么会有一圈圈的、类似摩尔纹的东西?光追噪音吗?)。./asset/shaders
增加ray_marching_bounding_box.frag
着色器。RayMarchingTest
实例增加界面文字操作提示。
2022/11/21 设计架构
./asset/shaders
中将ray_marching_bounding_box.frag
的BoudingBoxOrthogonalBasis GetBoundingBoxForwardDir(...)
函数修改成GetBoundingBoxOrthogonalBasis(...)
,之前名字起错了./asset/shaders
中通过修改ray_marching_bounding_box.frag
的bool IsPointInBoundingBox(vec3 point, BoundingBox boundingBox)
函数,增加一小点包围盒长宽高,用于补偿浮点数计算精度,进而改善了噪点,之前的精度太高了,导致生成了噪点
2022/11/22 设计架构
./docs
增加compiler_env_version.png
用于标识编译环境,Windows
系统中,该环境在LLVM
新版本下编译不了,需要导成Visual Studio
能够顺利编译,Linux
不变./docs
增加raymarching.png
。用于VolumetricCloud.md
文章说明./docs
增加ray_surface_intersect.png
。用于VolumetricCloud.md
文章说明- 更新
VolumetricCloud
文章
2022/11/23 设计架构
- 修改
TFrameGraph.hpp
中的Execute
命名,在Visual Studio
编译器下会冲突,改成TExecute
,- 修改
TFrameGraph.hpp
中C++17
的[[nodiscard]]
目前Turbo
使用C++11
/.gitignore
中增加忽略install/
文件夹
2022/11/24 设计架构
- 更新
VolumetricCloud
文章- 更改
./samples
下的VolumetricCloud
,使其将ComputerPipelineGeneratePerlinWorley
和RayMarchingBoundingBoxTest
相结合
2022/11/25 设计架构
./docs/images
增加intersect_case_out_box_forward.png
用于VolumetricCloud.md
文章说明./docs/images
增加intersect_case_in_box.png
用于VolumetricCloud.md
文章说明./docs/images
增加intersect_case_out_box_backward.png
用于VolumetricCloud.md
文章说明./docs/images
增加ray_marching_bounding_box.gif
用于VolumetricCloud.md
文章说明- 更新
VolumetricCloud
文章
2022/11/26 设计架构
./docs/images
增加bounding_box_sample_space.png
用于VolumetricCloud.md
文章说明./docs/images
增加ray_marching_bounding_box_sample_space.gif
用于VolumetricCloud.md
文章说明./samples
下的VolumetricCloud
实例中增加delete my_computer_shader
。- 更新
VolumetricCloud
文章./samples
下增加RayMarchingPerlinWorleyNoise
实例,用于展示光线步进中基于包围盒对柏林沃利噪音的采样。./asset/shaders
下增加ray_marching_perlin_worley_noise.frag
片元着色器,并使用于RayMarchingPerlinWorleyNoise
实例中
2022/11/29 设计架构
./samples
中VolumetricCloud
中增加power
、absorption
、outScattering
传输变量,用于体积云渲染./samples
中VolumetricCloud
中增加对高频沃利纹理的采样
2022/12/1 设计架构
- 目前
VolumetricCloud
体积云渲染正在研究光照散射传输,研究周期可能会较长,先重构FrameGraph
- 对于
Deepin
环境下C++17/20
的支持一直没有很好的解决方式,有可能LLVM
环境没有配对,研究研究。- 将
TFrameGraph
下的*Agency
重命名成*Proxy
2022/12/2 设计架构
- 将
TFrameGraph
下的TURBO_NVALID_ID
重命名成TURBO_INVALID_ID
- 将
TFrameGraph
下的Data
重命名成TData
- 将
TFrameGraph
下的Setup
重命名成TSetup
- 修缮
TFrameGraph
./docs
下增加Desgin
文件夹./docs/Desgin/images
下增加fg1~18
文件,记录平日的FrameGraph
的琐碎设计./docs
下增加linux_env
文件,记录linux
上的依赖库(随便扯了张纸,有点脏,噗哈哈)./docs/Desgin
下增加FrameGraphAdvance.md
文件,用于整理位于Turbo
教上层的FrameGraph
和Turbo
引擎衔接设计,相关设计源头位于./docs/Desgin/images
下的一些琐碎设计
2022/12/4 设计架构
./docs/Desgin
下FrameGraphAdvance.md
基本完成,之后新的设计都会在此文档中增加- 将
./docs/TurboDesign
中的Engine
模块重命名成Render
(考虑到将来可能会集成实现ECS
)./engine
下新建render
文件夹,并在render
文件夹下创建include
和src
文件夹./engine/render
下创建TImage
类
2022/12/5 设计架构
FrameGraph
下对于资源的创建和销毁需要一个分配器或上下文./docs/Desgin
下FrameGraphAdvance.md
更新设计
2022/12/6 设计架构
./engine/render
下新建TContext
类,用于引擎上下文./samples
下新建RenderDesignTest
示例,用于Turbo::Render
架构的测试
2022/12/7 设计架构
./docs/Desgin
下FrameGraphAdvance.md
更新设计./engine/render
下TContext
中增加TInstance
初始化构建./engine/render
下TContext
中增加TDevice
初始化构建
2022/12/8 设计架构
./docs/Desgin
下FrameGraphAdvance.md
更新设计
2022/12/9 设计架构
./docs/Desgin
下FrameGraphAdvance.md
更新设计./engine/render
下新建TSurface
类- 重命名
Turbo
中所有的头文件定义宏,防止冲突
2022/12/10 设计架构
./engine/render
下TContext
增加Turbo::Core::TImage *CreateImage(...)
函数./engine/render
下TImage
增加typedef enum TImageCreateFlagBits
用于创建TImage
的描述的位域标示./engine/render
下TImage
增加using TImageCreateFlags = uint32_t
用于创建TImage
的描述的位域标示集./engine/render
下TImage
的Descriptor
增加TImageCreateFlags flags
成员./engine/render
下TImage
增加typedef enum TImageUsageBits
用于创建TImage
的描述的usage
位域标示./engine/render
下TImage
增加using TImageUsages = uint32_t;
用于创建TImage
的描述的usage
位域标示集./engine/render
下TImage
的Descriptor
增加TImageUsages usages
成员- 更新
./engine/render
下TImage
及其子类的Descriptor
成员- 更新
./engine/render
下TImage
其子类的Create()
和Destroy()
成员函数,增加allocator
- 更新
./engine/render
下TContext
的CreateImage()
函数./engine/render
下新建TResourceAllocator
类,用于资源创建的分配器
2022/12/11 设计架构
- 更新
./docs/Desgin
下FrameGraphAdvance.md
设计./engine/render
下增加TDomain.h
,用于定义资源分配的所有者端域./engine/render
下TImage
的Descriptor
增加TDomain domain
成员- 更新
./engine/render
下TContext
的CreateImage()
函数
2022/12/12 设计架构
- 更新
./docs/Desgin
下FrameGraphAdvance.md
设计./samples
下创建VulkanTest
示例,用于纯Vulkan
代码测试
2022/12/13 设计架构
- 更新
./engine/render
下TContext
的CreateImage()
函数- 更新
./engine/render
下TImage
中TImageUsageBits
枚举成员命名增加..._ATTACHMENT
明确用意
2022/12/14 设计架构
- 更新
./docs/Desgin
下FrameGraphAdvance.md
设计- 更新
readme
文档开头的
2022/12/15 设计架构
./engine/core
下TImage
内增加void *vmaAllocationInfo
成员变量,用于存储vma
内存分配信息,并在构造函数中初始化,并赋值
,析构
函数中释放./engine/core
下TImage
的构造函数
中获取VmaAllocationInfo
的vma
内存分配信息./engine/core
下TBuffer
内增加void *vmaAllocationInfo
成员变量,用于存储vma
内存分配信息,并在构造函数中初始化,并赋值
,析构
函数中释放./engine/core
下TBuffer
的构造函数
中获取VmaAllocationInfo
的vma
内存分配信息./engine/core
下TImage
中增加TMemoryTypeInfo GetMemoryTypeInfo()
成员函数,用于获取底层数据的内存属性./engine/core
下TBuffer
中增加TMemoryTypeInfo GetMemoryTypeInfo()
成员函数,用于获取底层数据的内存属性./engine/render
下TContext
中根据FrameGraphAdvance.md
设计文档,更新实现Turbo::Render::TContext::CreateImage(...)
成员函数./engine/render
下TDomainBits
中增加一个BOTH
位标,用于表示CPU+GPU
,方便使用
2022/12/16 设计架构
./engine/render
下TFormat
内增加R8G8B8A8_SRGB
、B8G8R8A8_UNORM
、D16_UNORM
、R8G8B8_SRGB
、B8G8R8_SRGB
、R8G8B8_UNORM
、B8G8R8_UNORM
枚举成员./engine/render
下TContext
内增加Turbo::Render::TContext::CreateImage(...)
增加对新增格式枚举成员的适配./engine/render
下TContext
的Turbo::Render::TContext::CreateImage(...)
中对于Turbo::Core::TImageType
的判断逻辑上有问题,修复./engine/core
下TCore
增加typedef VkFormatProperties TFormatProperties
定义./engine/core
下TFormatInfo
增加TFormatProperties formatProperties
成员变量./engine/core
下TFormatInfo
新增构造函数TFormatInfo(TFormatType formatType = TFormatType::UNDEFINED, TFormatProperties formatProperties)
./engine/core
下TFormatInfo
构造函数TFormatInfo(TFormatType formatType)
设置成遗弃函数./engine/core
下TFormatInfo
修改Turbo::Core::TFormatInfo::GetSupportFormats()
函数适配TFormatInfo
带有TFormatProperties formatProperties
参数函数。./engine/core
下TPhysicalDeviceInfo
修改std::vector<TFormatInfo> supportFormats
成员变量为std::map<TFormatType, TFormatInfo> supportFormats
参数函数。./engine/core
下TPhysicalDevice
修改void Turbo::Core::TPhysicalDevice::EnumerateFromat()
成员函数,为适配std::map<TFormatType, TFormatInfo> TPhysicalDeviceInfo::supportFormats
参数函数。./engine/core
下TPhysicalDevice
修改Turbo::Core::TPhysicalDevice::GetSupportFormats()
成员函数./engine/core
下TPhysicalDevice
修改Turbo::Core::TPhysicalDevice::IsSupportFormat()
成员函数
2022/12/17 设计架构
./engine/core
下TPhysicalDevice
修改Turbo::Core::TPhysicalDevice::IsSupportFormat()
成员函数
./engine/core
下TFormatInfo
的TFormatInfo(TFormatType formatType = TFormatType::UNDEFINED);
构造函数移除
./engine/core
下TSwapchain
增加TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatType formatType, uint32_t width, uint32_t height, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, TSurfaceTransformBits transform, TCompositeAlphaBits compositeAlpha, TPresentMode presentMode, bool isClipped)
构造函数,并实现
./engine/core
下TSwapchain
增加explicit TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatType formatType, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, bool isClipped);
构造函数,并实现
./engine/core
下TSwapchain
的explicit TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatInfo format, uint32_t width, uint32_t height, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, TSurfaceTransformBits transform, TCompositeAlphaBits compositeAlpha, TPresentMode presentMode, bool isClipped);
构造函数标记为遗弃
./engine/core
下TSwapchain
的explicit TSwapchain(TSurface *surface, uint32_t minImageCount, Turbo::Core::TFormatInfo format, uint32_t imageArrayLayers, Turbo::Core::TImageUsages usages, bool isClipped);
构造函数标记为遗弃
./engine/core
下TPhysicalDevice
增加TFormatInfo GetFormatInfo(TFormatType formatType);
函数,用于返回更加丰富的格式信息
./engine/core
下TImageView
增加explicit TImageView(TImage *image, TImageViewType viewType, TFormatType formatType, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount)
构造函数
./engine/core
下TImageView
下explicit TImageView(TImage *image, TImageViewType viewType, TFormatInfo format, TImageAspects aspects, uint32_t baseMipLevel, uint32_t levelCount, uint32_t baseArrayLayer, uint32_t layerCount)
构造函数标记为遗弃
./engine/core
下TImage
下[[deprecated]] explicit TImage(TDevice *device, VkImageCreateFlags imageFlags, TImageType type, TFormatInfo format, uint32_t width, uint32_t height, uint32_t depth, uint32_t mipLevels, uint32_t arrayLayers, TSampleCountBits samples, TImageTiling tiling, TImageUsages usages, TMemoryFlags memoryFlags, TImageLayout layout = TImageLayout::UNDEFINED);
构造函数标记为遗弃
./engine/core
下TImage
增加explicit TImage(TDevice *device, VkImageCreateFlags imageFlags, TImageType type, TFormatType formatType, uint32_t width, uint32_t height, uint32_t depth, uint32_t mipLevels, uint32_t arrayLayers, TSampleCountBits samples, TImageTiling tiling, TImageUsages usages, TMemoryFlags memoryFlags, TImageLayout layout = TImageLayout::UNDEFINED);
构造函数
./engine/core
下TGraphicsPipeline
的TVertexBinding
增加void AddAttribute(uint32_t location, TFormatType formatType, uint32_t offset);
成员函数
./engine/core
下TGraphicsPipeline
的TVertexBinding
增加void AddAttribute(uint32_t location, TFormatType formatType, uint32_t offset);
成员函数标记为遗弃
./engine/core
下TGraphicsPipeline
的TVertexAttribute
的TFormatInfo format
成员变量更改为TFormatType formatType
./engine/core
下TGraphicsPipeline
的TVertexAttribute
的TFormatInfo GetFormat();
成员函数更改为TFormatType GetFormatType()
并实现
./engine/core
下TGraphicsPipeline
的TVertexAttribute
增加TVertexAttribute(uint32_t location, TFormatType formatType, uint32_t offset);
构造函数
./engine/core
下TGraphicsPipeline
的TVertexAttribute
的TVertexAttribute(uint32_t location, TFormatInfo format, uint32_t offset)
构造函数移除
./engine/core
下TFormatInfo
中增加如下成员函数:bool IsSupportBuffer(); bool IsSupportVertexBuffer(); bool IsSupportLinearTiling(); bool IsLinearTilingSupportSampledImage(); bool IsLinearTilingSupportStorageImage(); bool IsLinearTilingSupportStorageImageAtomic(); bool IsLinearTilingSupportColorAttachment(); bool IsLinearTilingSupportColorAttachmentBlend(); bool IsLinearTilingSupportDepthStencilAttachment(); bool IsLinearTilingSupportBlitSrc(); bool IsLinearTilingSupportBlitDst(); bool IsLinearTilingSupportSampledImageFilterLinear(); bool IsLinearTilingSupportTransferSrc(); bool IsLinearTilingSupportTransferDst(); bool IsSupportOptimalTiling(); bool IsOptimalTilingSupportSampledImage(); bool IsOptimalTilingSupportStorageImage(); bool IsOptimalTilingSupportStorageImageAtomic(); bool IsOptimalTilingSupportColorAttachment(); bool IsOptimalTilingSupportColorAttachmentBlend(); bool IsOptimalTilingSupportDepthStencilAttachment(); bool IsOptimalTilingSupportBlitSrc(); bool IsOptimalTilingSupportBlitDst(); bool IsOptimalTilingSupportSampledImageFilterLinear(); bool IsOptimalTilingSupportTransferSrc(); bool IsOptimalTilingSupportTransferDst();
更新
./docs/Desgin
下FrameGraphAdvance.md
设计
2022/12/18 设计架构
更新
./docs/Desgin
下FrameGraphAdvance.md
设计
./docs
下增加vkspec1.3Core.pdf
文件,为Vulkan1.3
官方标准文档,国内在线访问Vulkan
官网真难受。
./engine/render
下TFormat
中增加UNDEFINED
枚举成员
./engine/render
下将TFormat
中的枚举成员的值与Vulkan
标准一一对应上
./engine/render
下将TContext
下增加如下函数并实现Turbo::Core::TInstance *GetInstance(); Turbo::Core::TPhysicalDevice*GetPhysicalDevice(); Turbo::Core::TDevice *GetDevice(); Turbo::Core::TDeviceQueue *GetDeviceQueue();
./engine/render
下TResourceAllocator
下增加TContext* GetContext()
函数并实现
./engine/render
下TColorImage
下Turbo::Render::TColorImage::Create()
函数更新实现
./engine/render
下TImage
下增加class TDepthStencilImage
./engine/render
下TImage
下增加class TDepthImage
./engine/render
下TImage
下增加class TDepthImage2D
2022/12/19 设计架构
- 更新
./docs/Desgin
下FrameGraphAdvance.md
设计./engine/render
下TImage
下增加class TTexture2D
./engine/render
下TImage
下增加class TColorImage3D
./engine/render
下TImage
下增加class TTexture3D
readme
增加平台支持标签./docs/Desgin
下新增WebGPU_Dawn.md
文档,用于记录Google Dawn, a WebGPU implementation学习记录
2022/12/20 设计架构
- 🐑了,好难受。(눈_눈)
./engine/render
下TImage
下增加class TDepthTexture2D
./engine/render
下TImage
下增加TFormat GetFormat()
成员函数./engine/render
下TImage
下增加uint32_t GetWidth()
成员函数./engine/render
下TImage
下增加uint32_t GteHeight()
成员函数./engine/render
下TImage
下增加uint32_t GetDepth()
成员函数./engine/render
下TImage
下增加uint32_t GetLayers()
成员函数./engine/render
下TImage
下增加uint32_t GetMipLevels()
成员函数./engine/render
下TImage
下增加TImageUsages GetUsage()
成员函数./engine/render
下TImage
下增加TDomain GetDomain()
成员函数
2022/12/21 设计架构
./engine/render
下增加TBuffer
类./engine/render
下TContext
下增加Turbo::Core::TBuffer *CreateBuffer(const TBuffer::Descriptor &descriptor)
成员函数./engine/render
下TContext
下增加void DestroyBuffer(Turbo::Core::TBuffer *buffer)
成员函数./engine/render
下TResourceAllocator.h
下增加Turbo::Core::TBuffer *CreateBuffer(const TBuffer::Descriptor &descriptor)
成员函数./engine/render
下ResourceAllocator.h
下增加void DestroyBuffer(Turbo::Core::TBuffer *buffer)
成员函数
2022/12/23 设计架构
./docs/Desgin
下将WebGPU_Dawn.md
重命名为WebGPU_CCPP.md
- 更新
./docs/Desgin
下WebGPU_CCPP
./engine/render
下TBuffer::Descriptor::usages
类型由原来的TBufferUsageBits
改为TBufferUsages
./engine/render
下TBuffer
中增加TBufferUsages GetUsages()
成员函数./engine/render
下TBuffer
中增加uint64_t GetSize()
成员函数./engine/render
下TBuffer
中增加TDomain GetDomain()
成员函数./engine/render
下TImage
中TImageUsages GetUsage()
成员函数更名为TImageUsages GetUsages()
2022/12/24 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
2022/12/25 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/render
下TBuffer
中增加void Copy(void *src, uint64_t size)
成员函数./engine/render
下TBuffer
中增加void *allocator = nullptr
成员变量
2022/12/26 设计架构
- 更新
./docs/Desgin
下WebGPU_CCPP.md
./engine/render
下TContext
中增加Turbo::Core::TCommandBufferPool *commandBufferPool = nullptr
成员变量./engine/render
下TContext
中增加Turbo::Core::TCommandBuffer *AllocateCommandBuffer()
成员函数./engine/render
下TContext
中增加void FreeCommandBuffer(Turbo::Core::TCommandBuffer *commandBuffer)
成员函数./engine/render
下TResourceAllocator
中增加Turbo::Core::TCommandBuffer *AllocateCommandBuffer()
成员函数./engine/render
下TResourceAllocator
中增加void FreeCommandBuffer(Turbo::Core::TCommandBuffer *commandBuffer)
成员函数./engine/render
下TBuffer
中void Copy(void *src, uint64_t size)
成员函数进行优化./engine/render
下TBuffer
中增加void Copy(TBuffer *src, uint64_t srcOffset, uint64_t size)
成员函数
2022/12/27 设计架构
./engine/render
下TContext
中增加Turbo::Core::TCommandBuffer *commandBuffer
成员变量./engine/render
下TContext
中增加Turbo::Core::TCommandBuffer *GetCommandBuffer()
成员变量- 更新
./docs/Design/
下的FrameGraphAdvance.md
2022/12/28 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
- 修改
./engine/core
下的TSwapchain::InternalCreate()
中的if (this->surface->GetMaxImageArrayLayers() > this->imageArrayLayers)
,更改成if (this->surface->GetMaxImageArrayLayers() < this->imageArrayLayers)
原先是个Bug
2022/12/29 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
2022/12/30 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/framegraph
下TFrameGraph
中增加struct TRenderPass
成员,目前是实验性代码./engine/render
下TContext
中增加void BeginRenderPass(Turbo::FrameGraph::TRenderPass &renderPass);
成员函数,目前是实验性代码./docs/Design/
下新增FrameGraph.md
,用于FrameGraph
设计文档
2022/12/31 设计架构
- 更新
./docs/Design/
下的FrameGraph.md
2023/1/1 设计架构
./engine/framegraph/include/TFrameGraph.hpp
中增加class TSubpass
类./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TResource> writes
成员变量./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TResource> reads
成员变量./engine/framegraph
中TFrameGraph::TSubpass
增加TResource Write(TResource resource)
成员函数./engine/framegraph
中TFrameGraph::TSubpass
增加TResource Read(TResource resource)
成员函数./engine/framegraph
中TFrameGraph::TRenderPass
增加std::vector<TSubpass> subpasses
成员变量./engine/framegraph
中TFrameGraph::TRenderPass
增加void AddSubpass(const TSubpass &subpass)
成员变量
2023/1/2 设计架构
./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TResource> GetWrites()
成员函数./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TResource> GetReads()
成员函数./engine/framegraph
中TFrameGraph::TSubpass
增加std::vector<TSubpass> GetSubpasses()
成员函数./engine/framegraph
中TFrameGraph::TSubpass
增加friend class TFrameGraph
友元类./engine/framegraph
中TFrameGraph::TRenderPass
增加friend class TFrameGraph
友元类./engine/framegraph
中TFrameGraph::TBuilder
增加class TSubpass
成员类,其作为TFrameGraph::TSubpass
类的前端类或代理./engine/framegraph
中TFrameGraph::TBuilder
增加TSubpass CreateSubpass()
成员函数./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加TSubpass(TBuilder *builder, uint32_t index)
构造函数./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加TTBuilder *builder = nullptr
成员变量./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加uint32_t index
成员变量./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加TResource Write(TResource resource)
成员函数./engine/framegraph
中TFrameGraph::TBuilder::TSubpass
增加TResource Read(TResource resource)
成员函数./engine/framegraph
中TFrameGraph::TPassNode
增加TRenderPass renderPass
成员变量./engine/framegraph
中TFrameGraph::TPassNode
增加TRenderPass GetRenderPass()
成员函数./engine/framegraph
中TFrameGraph
增加uint32_t TURBO_INVALID_SUBPASS_INDEX
全局变量- 更新
./samples
中rameGraphSample
增加int test3()
对于新FrameGraph
标准的测试代码
2023/1/3 设计架构
- 更新
./docs/Design/
下的FrameGraph.md
./engine/framegraph
中TFrameGraph::TBuilder
下的TResource Read(TResource resource)
成员函数访问域从public
改成private
./engine/framegraph
中TFrameGraph::TBuilder
下的TResource Write(TResource resource)
成员函数访问域从public
改成private
- 更新
./samples
中rameGraphSample
示例代码,适配到新的FrameGraph
标准并移除原先的test2
,并将test3
改名成test2
./engine/framegraph
中TFrameGraph::TRenderPass
移除uint32_t testValue
成员变量./engine/samples
中RenderDesignTest
移除TFrameGraph::TRenderPass::testValue
有关代码- 更新
./docs/Design/
下的FrameGraphAdvance.md
./asset/models/
下增加fuxiii-2022.gltf
模型./engine/framegraph
中TFrameGraph
增加std::string ToMermaid()
成员函数
2023/1/4 设计架构
- 更新
./docs/Design/
下的FrameGraph.md
./engine/framegraph
中TFrameGraph
更新std::string ToMermaid()
成员函数./engine/render
下增加TRenderPass.h
,TRenderPass.cpp
文件./engine/render
下增加TRenderPass
类./asset/models
下增加SciFiHelmet
模型
2023/1/5 设计架构
./engine/render
下的RenderPass
中增加TSubpass
类./engine/render
下的TSubpass
中增加std::vector<Turbo::Render::TColorImage> colors
成员变量./engine/render
下的TSubpass
中增加std::vector<Turbo::Render::TImage> inputs
成员变量./engine/render
下的TSubpass
中增加Turbo::Render::TDepthStencilImage depthStencil
成员变量./engine/render
下的TSubpass
中增加TSubpass &AddColorAttachment(const Turbo::Render::TColorImage &colorImage)
成员函数./engine/render
下的TSubpass
中增加const std::vector<Turbo::Render::TImage>& GetInputAttachments()
成员函数./engine/render
下的TSubpass
中增加Turbo::Render::TDepthStencilImage GetDepthStencilAttachment()
成员函数./engine/render
下的TRenderPass
中去除实验性代码./engine/render
下的TRenderPass
中增加std::vector<TSubpass> subpasses
成员变量./engine/render
下的TRenderPass
中增加TRenderPass &AddSubpass(const Turbo::Render::TSubpass &subpass)
成员函数./engine/render
下的TRenderPass
中增加const std::vector<Turbo::Render::TSubpass> &GetSubpasses()
成员函数./engine/render
下的TContext
中增加void BeginRenderPass(Turbo::Render::TRenderPass &renderPass)
成员函数
2023/1/6 设计架构
./engine/render
下的TImage
中增加对于Get*()
成员函数的const
修饰
./engine/render
下的TImage
中增加bool IsValid()
成员函数
./engine/render
下的TSubpass
中增加Attachment
时增加对于传入Image
参数的有效性判断(Turbo::Render::TImage::IsValid()
),有效则加入,无效则直接返回异常
./engine/render
下增加TPipeline.h
和TPipeline.cpp
./engine/render
下TPipeline
中增加class TPipeline
./engine/render
下TPipeline
中增加class TComputePipeline
./engine/render
下TPipeline
中增加class TGraphicsPipeline
./engine/render
下增加TShader.h
和TShader.cpp
./engine/render
下TShader
中增加class TShader
更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/render
下TShader
中增加class TVertexShader
./engine/render
下TShader
中增加typedef enum TLanguage
成员枚举
./engine/render
下TVertexShader
中增加TVertexShader(TContext *context, TShader::TLanguage language, const std::string &code)
构造函数
./engine/render
下TVertexShader
中增加TVertexShader(TContext *context, size_t size, uint32_t *code)
构造函数
./engine/render
下TShader
中增加class TFragmentShader
./engine/render
下TFragmentShader
中增加TFragmentShader(TContext *context, TShader::TLanguage language, const std::string &code)
构造函数
./engine/render
下TFragmentShader
中增加TFragmentShader(TContext *context, size_t size, uint32_t *code)
构造函数
./engine/render
下TShader
中增加class TComputeShader
./engine/render
下TComputeShader
中增加TComputeShader(TContext *context, TShader::TLanguage language, const std::string &code)
构造函数
./engine/render
下TComputeShader
中增加TComputeShader(TContext *context, size_t size, uint32_t *code)
构造函数
Turbo::Core
层与Turbo::Render
有同名头文件,会有冲突,使用Turbo::Core
的头文件使用core/include/...
,使用Turbo::Render
的头文件使用render/include/...
,同时修改CMakeList.txt
中的相关设置
./engine/render
下TShader
中增加如下,使得Shader
必须通过new
创建:TShader(TShader const &) = delete; TShader(TShader &&) = delete; TShader &operator=(TShader const &) = delete; TShader &operator=(TShader &&) = delete;
./engine/render
下TComputePipeline
中增加TComputePipeline(Turbo::Render::TComputeShader *computeShader)
构造函数
./engine/render
下TComputePipeline
中增加Turbo::Render::TComputeShader* computeShader
成员变量
2023/1/7 设计架构
./engine/render
下TComputePipeline
中增加TComputePipeline &SetComputeShader(Turbo::Render::TComputeShader *computeShader)
成员函数./engine/render
下TComputePipeline
中移除TComputePipeline(Turbo::Render::TComputeShader *computeShader)
构造函数./engine/render
下TGraphicsPipeline
中增加Turbo::Render::TVertexShader *vertexShader
成员变量./engine/render
下TGraphicsPipeline
中增加Turbo::Render::TFragmentShader *fragmentShader
成员变量./engine/render
下TGraphicsPipeline
中增加typedef enum TTopology
成员枚举./engine/render
下TGraphicsPipeline
中增加TTopology topology
成员变量./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetTopology(TTopology topology)
成员函数./engine/render
下TGraphicsPipeline
中增加typedef enum TCullBits
成员枚举./engine/render
下TGraphicsPipeline
中增加using TCull = uint32_t
成员声明./engine/render
下TGraphicsPipeline
中增加bool primitiveRestartEnable
成员变量./engine/render
下TGraphicsPipeline
中增加bool depthClampEnable
成员变量./engine/render
下TGraphicsPipeline
中增加bool rasterizerDiscardEnable
成员变量./engine/render
下TGraphicsPipeline
中增加TPolygon polygon
成员变量./engine/render
下TGraphicsPipeline
中增加TCull cull
成员变量./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetPrimitiveRestartEnable(bool primitiveRestartEnable);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthClampEnable(bool depthClampEnable);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetRasterizerDiscardEnable(bool rasterizerDiscardEnable);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetPolygon(TPolygon polygon);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetCull(TCull cull);
成员函数./engine/render
下TGraphicsPipeline
中增加typedef enum TFront
成员枚举./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetFront(TFront front)
成员函数./engine/render
下TGraphicsPipeline
中增加bool depthBiasEnable
成员变量./engine/render
下TGraphicsPipeline
中增加float depthBiasConstantFactor
成员变量./engine/render
下TGraphicsPipeline
中增加float depthBiasClamp
成员变量./engine/render
下TGraphicsPipeline
中增加float depthBiasSlopeFactor
成员变量./engine/render
下TGraphicsPipeline
中增加float lineWidth
成员变量./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBiasEnable(bool depthBiasEnable);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBiasConstantFactor(float depthBiasConstantFactor);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBiasClamp(float depthBiasClamp);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBiasSlopeFactor(float depthBiasSlopeFactor);
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetLineWidth(float lineWidth);
成员函数
2023/1/8 设计架构
./engine/render
下TGraphicsPipeline
中增加typedef enum class TCompareOp
成员枚举./engine/render
下TGraphicsPipeline
中增加typedef enum class TStencilOp
成员枚举./engine/render
下TGraphicsPipeline
中增加typedef enum class TLogicOp
成员枚举./engine/render
下TGraphicsPipeline
中增加typedef enum class TBlendFactor
成员枚举./engine/render
下TGraphicsPipeline
中增加typedef enum class TBlendOp
成员枚举./engine/render
下TGraphicsPipeline
中增加bool depthTestEnable = true
成员变量./engine/render
下TGraphicsPipeline
中增加bool depthWriteEnable = true
成员变量./engine/render
下TGraphicsPipeline
中增加TCompareOp depthCompareOp = TCompareOp::LESS_OR_EQUAL
成员变量./engine/render
下TGraphicsPipeline
中增加bool depthBoundsTestEnable = false
成员变量./engine/render
下TGraphicsPipeline
中增加bool stencilTestEnable = false
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp frontFailOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp frontPassOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp frontDepthFailOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TCompareOp frontCompareOp = TCompareOp::ALWAYS
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t frontCompareMask = 0
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t frontWriteMask = 0
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t frontReference = 0
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp backFailOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp backPassOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TStencilOp backDepthFailOp = TStencilOp::KEEP
成员变量./engine/render
下TGraphicsPipeline
中增加TCompareOp backCompareOp = TCompareOp::ALWAYS
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t backCompareMask = 0
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t backWriteMask = 0
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t backReference = 0
成员变量./engine/render
下TGraphicsPipeline
中增加float minDepthBounds = 0
成员变量./engine/render
下TGraphicsPipeline
中增加float maxDepthBounds = 0
成员变量./engine/render
下TGraphicsPipeline
中增加bool logicOpEnable = false
成员变量./engine/render
下TGraphicsPipeline
中增加TLogicOp logicOp = TLogicOp::NO_OP
成员变量./engine/render
下TGraphicsPipeline
中增加bool blendEnable = false
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendFactor srcColorBlendFactor = TBlendFactor::ZERO
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendFactor dstColorBlendFactor = TBlendFactor::ZERO
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendOp colorBlendOp = TBlendOp::ADD
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendFactor srcAlphaBlendFactor = TBlendFactor::ZERO
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendFactor dstAlphaBlendFactor = TBlendFactor::ZERO
成员变量./engine/render
下TGraphicsPipeline
中增加TBlendOp alphaBlendOp = TBlendOp::ADD
成员变量./engine/render
下TGraphicsPipeline
中增加uint32_t patchControlPoints
成员变量./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetPatchControlPoints(uint32_t patchControlPoints)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthTestEnable(bool depthTestEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthWriteEnable(bool depthWriteEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthCompareOp(TCompareOp depthCompareOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDepthBoundsTestEnable(bool depthBoundsTestEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilTestEnable(bool stencilTestEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontFailOp(TStencilOp frontFailOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontPassOp(TStencilOp frontPassOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontDepthFailOp(TStencilOp frontDepthFailOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontCompareOp(TCompareOp frontCompareOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontCompareMask(uint32_t frontCompareMask)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontWriteMask(uint32_t frontWriteMask)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilFrontReference(uint32_t frontReference)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackFailOp(TStencilOp backFailOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackPassOp(TStencilOp backPassOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackDepthFailOp(TStencilOp backDepthFailOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackCompareOp(TCompareOp backCompareOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackCompareMask(uint32_t backCompareMask)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackWriteMask(uint32_t backWriteMask)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetStencilBackReference(uint32_t backReference)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetMinDepthBounds(float minDepthBounds)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetMaxDepthBounds(float maxDepthBounds)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetLogicOpEnable(bool logicOpEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetLogicOp(TLogicOp logicOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetBlendEnable(bool blendEnable)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetSrcColorBlendFactor(TBlendFactor srcColorBlendFactor)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDstColorBlendFactor(TBlendFactor dstColorBlendFactor)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetColorBlendOp(TBlendOp colorBlendOp)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetSrcAlphaBlendFactor(TBlendFactor srcAlphaBlendFactor)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetDstAlphaBlendFactor(TBlendFactor dstAlphaBlendFactor)
成员函数./engine/render
下TGraphicsPipeline
中增加TGraphicsPipeline &SetAlphaBlendOp(TBlendOp alphaBlendOp)
成员函数./docs/Issue.md
中增加TGraphicsPipeline
对于VkPipelineTessellationStateCreateInfo
不支持的待解决问题
2023/1/9 设计架构
./engine/render
下TContext
中增加void BindPipeline(const TComputePipeline *computePipeline)
成员函数./engine/render
下TContext
中增加void BindPipeline(const TGraphicsPipeline *graphicsPipeline)
成员函数./README.md
下增加Modular
章节,用于描述Turbo
架构中的各个模块- 更新
./docs/Design/
下的FrameGraphAdvance.md
2023/1/10 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/core
下TFence.h
中增加class TFences
类./engine/core
下TFences
中增加std::map<TDevice *, std::vector<TFence *>> fenceMap
成员变量./engine/core
下TFences
中增加void Add(TFence *fence)
成员函数./engine/core
下TFences
中增加bool Wait(uint64_t timeout)
成员函数./engine/core
下TFence
中增加TDevice *GetDevice()
成员函数./engine/render
下TContext
中增加void Flush()
成员函数./engine/render
下TContext
中增加bool Wait(uint64_t timeout)
成员函数./engine/render
下TContext.h
中增加typedef struct TCommandBuffer
结构体./engine/render
下TContext
中Turbo::Core::TCommandBuffer *commandBuffer
成员变量改为Turbo::Render::TCommandBuffer currentCommandBuffer
./engine/render
下TContext
中Turbo::Core::TCommandBuffer *GetCommandBuffer()
成员变量改为Turbo::Render::TCommandBuffer GetCommandBuffer()
./engine/render
下TContext
中增加std::vector<Turbo::Render::TCommandBuffer> commandBuffers
成员变量./docs/
下增加FAQ.md
用于记录常见问题
2023/1/11 设计架构
./engine/framegraph
下TVirtualResourceProxy
中virtual void Create()
成员函数增加void *allocator
函数参数./engine/framegraph
下TVirtualResourceProxy
中virtual void Destroy()
成员函数增加void *allocator
参数./engine/framegraph
下TResourceProxy
中virtual void Create()
成员函数增加void *allocator
函数参数./engine/framegraph
下TResourceProxy
中virtual void Destroy()
成员函数增加void *allocator
参数./engine/framegraph
下TFrameGraph
中void Execute(void *context = nullptr)
成员函数增加void *allocator
参数- 更新
./docs/Design/
下的FrameGraphAdvance.md
- 更新
./docs/Design/
下的FrameGraph.md
2023/1/12 设计架构
- 更新
./docs/Design/
下的FrameGraph.md
./engine/framegraph
下TSubpass
中增加std::vector<TResource> inputs
成员变量./engine/framegraph
下TSubpass
中增加void Input(TResource resource)
成员函数./engine/framegraph
下TSubpass
中增加std::vector<TResource> GetInputs()
成员函数./engine/framegraph
下TResource
中增加bool isInput
成员变量./engine/framegraph
下TFrameGraph::TBuilder
中增加TResource Input(TResource resource)
成员函数./engine/framegraph
下TFrameGraph::TBuilder::TSubpass::Read(TResource resource)
中增加resource.isInput = false
设置代码./engine/framegraph
下TFrameGraph::TBuilder::TSubpass::Input(TResource resource)
中增加resource.isInput = true
设置代码./engine/framegraph
下Turbo::FrameGraph::TPassNode::IsRead(TResource resource)
下增加重复性isInput
检测./engine/framegraph
下Turbo::FrameGraph::TFrameGraph::ToMermaid()
下增加对input
资源的解析./engine/framegraph
下Turbo::FrameGraph::TFrameGraph::ToMermaid()
下struct linkStyle
下增加enum Type
成员枚举,并增加Type type
成员变量,移除bool isWrite
成员变量./engine/framegraph
下Turbo::FrameGraph::TPassNode::AddRead(...)
中移除assert(!this->IsCreate(resource) && !this->IsWrite(resource))
判断- 更新
./samples
下FrameGraphSample
示例
2023/1/13 设计架构
- 更新
./samples
下的VulkanTest.cpp
2023/1/14 设计架构
./engine/core
下Turbo::Core::TGraphicsPipeline
下增加兼容VkPipelineCache
的构造函数,目前为测试研发
2023/1/15 设计架构
./engine/core
下增加TPipelineCache.h
和TPipelineCache.cpp
./engine/core
下TPipelineCache
中增加class Turbo::Core::TPipelineCache
./engine/core
下TPipelineCache
中增加TDevice *device
成员变量./engine/core
下TPipelineCache
中增加VkPipelineCache vkPipelineCache
成员变量./engine/core
下TPipelineCache
中增加size_t size
成员变量./engine/core
下TPipelineCache
中增加void *data
成员变量./engine/core
下TPipelineCache
中增加void InternalCreate()
成员函数./engine/core
下TPipelineCache
中增加void InternalDestroy()
成员函数./engine/core
下TPipelineCache
中增加TPipelineCache(TDevice *device)
构造函数./engine/core
下TPipelineCache
中增加TPipelineCache(TDevice *device, size_t size, void *data)
构造函数./engine/core
下TPipelineCache
中增加~TPipelineCache()
析构函数./engine/core
下TPipelineCache
中增加VkPipelineCache GetVkPipelineCache()
成员函数./engine/core
下TPipelineCache
中增加size_t GetSize()
成员函数./engine/core
下TPipelineCache
中增加TResult GetData(size_t size, void *dst)
成员函数./engine/core
下TPipelineCache
中增加std::string ToString()
成员函数./engine/core
下TPipelineCache
中增加uint32_t GetHeaderSize()
成员函数./engine/core
下TPipelineCache
中增加enum class TPipelineCacheHeaderVersion
枚举./engine/core
下TPipelineCache
中增加TPipelineCacheHeaderVersion GetHeaderVersion()
成员函数./engine/core
下TPipelineCache
中增加TVendorInfo GetVendor()
成员函数./engine/core
下TPipelineCache
中增加uint32_t GetDeviceID()
成员函数./engine/core
下TPipelineCache
中增加std::vector<uint8_t> GetUUID()
成员函数
2023/1/16 设计架构
./engine/core
下TPipeline.h
中构造函数,增加对TPipelineCache
的使用./engine/core
下TPipeline.h
中增加TPipelineCache *pipelineCache
成员变量./engine/core
下TPipeline.h
中增加TPipelineCache *GetPipelineCache()
成员函数./engine/core
下TGraphicsPipeline.h
中移除VkPipelineCache vkPipelineCache
的相关参数和成员,改为使用TPipelineCache
./engine/core
下TComputePipeline
中增加TComputePipeline(TPipelineCache *pipelineCache, TComputeShader *computeShader)
构造函数./engine/core
下TComputePipeline
中更新TComputePipeline::InternalCreate()
成员函数,适配TPipelineCache
来创建TComputePipeline
- 更新
./samples
下的VulkanTest.cpp
- 移除
./engine/core
下TPipelineCache.cpp
中莫名其妙的头文件,应该是clangd
的自动头文件补全搞的- 移除
./engine/core
下TPipelineCache.cpp
中#include <basetsd.h>
头文件,应该是clangd
的自动头文件补全搞的- 移除
./engine/core
下TFrameGraph.cpp
中#include <basetsd.h>
头文件,应该是clangd
的自动头文件补全搞的- 移除
./samples
下VulkanTest.cpp
中移除#include <vcruntime.h>
和#include <vcruntime_string.h>
头文件,应该是clangd
的自动头文件补全搞的./engine/core
下TObject.h
中增加#include <string.h>
头文件memcpy
,在此头文件声明
2023/1/17 设计架构
- 更新
./docs/Design/
下的FrameGraph.md
2023/1/18 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
- 更新
./.gitmodules
下的thirdparty/glm
库链接- 更新
./docs
下的FAQ.md
./engine/framegraph
下TResources
中增加Turbo::FrameGraph::TRenderPass GetRenderPass() const
成员函数- 更新
./samples
下的RenderDesignTest.cpp
2023/1/19 设计架构
./engine/framegraph
下TRenderPass
中增加Turbo::FrameGraph::TSubpass GetSubpass(size_t index)
成员函数./engine/framegraph
下TSubpass
中增加TResource GetWrite(size_t index)
成员函数./engine/framegraph
下TSubpass
中增加TResource GetRead(size_t index)
成员函数./engine/framegraph
下TSubpass
中增加TResource GetInput(size_t index)
成员函数./engine/framegraph
下TNodeHandle
中增加bool IsValid()
成员函数./engine/render
下TImage
中uint32_t GteHeight() const
成员函数,更改成uint32_t GetHeight() const
。之前拼写错误
2023/1/21 设计架构
./engine/core
下TBuffer
中Map
函数中有,当想要映射内存时,目前使用的是用户创建TBuffer
时,是否指定了HOST_ACCESS_RANDOM
或者HOST_ACCESS_SEQUENTIAL_WRITE
标志位,如果设置了该标志位说明内存可以进行映射,但是某些移动设备(手机或笔记本等平台端)上的内存是CPU
与GPU
共存、共享的。换句话说当你在上层创建一个GPU
端的内存(此时用户指定的是DEDICATED_MEMORY
),在底层也许是CPU
和GPU
共享的内存,所以此时根据用户是否指定了HOST_ACCESS_RANDOM
和HOST_ACCESS_SEQUENTIAL_WRITE
标志位来判断是否可以Map
是不合理的,应该查看分配的内存是否有在host
端能够访问,能访问将返回映射的内存指针,反之则返回nullptr
,但是当前VulkanMemoryAllocator
中对于内存分配,如果没有使用Host
端的相关标志位(HOST_ACCESS_RANDOM
或者HOST_ACCESS_SEQUENTIAL_WRITE
),在VulkanMemoryAllocator
中都被认为是不能进行内存映射的,所以需要在Turbo::Render::TBuffer::Copy(...)
中增加额外判断,判断内存是否支持映射./engine/core
下TBuffer
中增加bool IsMappable()
成员函数./engine/core
下TBuffer
中Copy
函数中增加对this->buffer->IsMappable()
的判断./engine/core
下TImage
中增加bool IsMappable()
成员函数
2023/1/22 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/render
下TContext
中增加class TRenderPassPool
类./engine/render
下TContext
中class TRenderPassPool
下增加class TRenderPassProxy
类
2023/1/23 设计架构
- 更新
./docs/Design/
下的FrameGraphAdvance.md
./engine/render
下TRenderPassPool
中TRenderPassProxy
增加void Create(Turbo::Render::TRenderPass &renderPass)
成员函数./engine/render
下TRenderPassPool
中TRenderPassProxy
增加void Destroy()
成员函数./engine/render
下TRenderPassPool
中TRenderPassProxy
增加friend class TRenderPassPool
友元类./engine/render
下TRenderPassPool
中Find(...)
函数更改成TRenderPassProxy Find(Turbo::Render::TRenderPass &renderPass)
./engine/render
下TRenderPassPool
中增加TRenderPassProxy Allocate(Turbo::Render::TRenderPass &renderPass)
成员函数./engine/render
下TRenderPassPool
中增加void Free(Turbo::Render::TRenderPass &renderPass)
成员函数./engine/render
下TRenderPassPool
中TRenderPassProxy
增加bool IsValid()
成员函数
2023/1/26 设计架构
./engine/render
下TRenderPassPool
更新完善Find(...)
函数算法./engine/render
下TImage.h
中增加typedef enum TSampleCountBits
./engine/render
下TImage.h
中增加using TSampleCounts = uint32_t
./engine/render
下TImage
中增加TSampleCountBits GetSampleCountBits() const
成员函数,目前只支持Turbo::Render::TSampleCountBits::SAMPLE_1_BIT
./engine/render
下TContext.h
中TRenderPassPool
构造函数增加TContext *context
参数./engine/render
下TContext.h
中TRenderPassPool::TRenderPassProxy
中Create
函数增加TContext *context
参数./engine/render
下TContext.h
中TRenderPassPool::TRenderPassProxy
中更新完善Create
函数- 更新
./docs/Design/
下的FrameGraphAdvance.md
2023/1/27 设计架构
./engine/render
下TImage
中增加friend class TRenderPassPool
友元类./engine/render
下TContext.h
中TRenderPassPool
中TRenderPassProxy
中,更新完善Create(...)
函数./engine/render
下TContext.h
中TRenderPassPool
中,更新完善~TRenderPassPool()
析构函数- 更新
./samples
下RenderDesignTest
示例
2023/1/28 设计架构
- 更新
./samples
下VolumetricCloud
示例中的对于./asset/shaders/volumetric_cloud.frag
中对于高频细节纹理使用的算法
2023/1/31 设计架构
- 有关
./samples
下VolumetricCloud
示例中对于体积云光照渲染,总是渲染不出满意的效果。国外常见的体积云渲染的论文、文章之类的也零零散散的看了,大部分的文章套路就是,先把一长串光照传输方程列出来,讲讲朗伯-比尔定律,讲讲Phase
相函数(米氏散射,H-G散射,瑞利散射,几何散射等等),讲讲内散射、外散射、吸收以及消亡之间的关系,略过了大量的细节,到后文的相关实现,更是略之又略(比如寒霜引擎的那片文章,散射、外散射、吸收以及消亡系数如何计算并没有说明,有的文章直接拿采样密度作为消亡系数,等等很多问题),而且不同文章都有各自的实现(特别是计算采样点到太阳之间的光照,一个人一个写法),很难获得一个统一的、较明确的实现原理和过程(说白了就是,文章的实现和理论有时并不是一一对应的),这就会导致看的越多越迷惑(只能说大致相同,落到细节疑问百出),所以我尝试将Production Volume Rendering SIGGRAPH 2017 Course
文章(该文章较理论化,原文放到了./docs
下volumePaper.pdf
)翻译到./docs/VolumetricCloud.md
文档中(光照章节),希望在边学边翻译的过程中能解决之前的疑问吧- 更新
./docs
下VolumetricCloud.md
文档
2023/2/1 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
2023/2/2 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
2023/2/3 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
2023/2/4 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
2023/2/6 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
2023/2/7 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
2023/2/8 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
2023/2/9 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
2023/2/10 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档./engine/render
下TImage.h
中TImage
中增加virtual void CreateImageView(Turbo::Core::TImage *image)
函数./engine/render
下TImage.h
中TImage::Create(...)
中增加对virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)
成员函数的调用./engine/render
下TTexture2D
中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)
函数./engine/render
下TTexture3D
中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)
函数./engine/render
下TDepthTexture2D
中增加virtual Turbo::Core::TImageView * CreateImageView(Turbo::Core::TImage *image)
函数./engine/render
下TImage
的Destroy
成员函数中进行ImageView
的资源回收./engine/render
下TImage
的IsValid()
成员函数中增加对ImageView
的判断- 更新
./docs
下VolumetricCloud.md
文档
2023/2/11 设计架构
./engine/render
下TRenderPass.h
中TRenderPass
中增加Turbo::Core::TRenderPass *renderPass = nullptr
成员变量./engine/render
下TRenderPass.h
中TRenderPass
中增加friend class TRenderPassPool;
友元类./engine/render
下TContext
中将TRenderPassProxy
移除./engine/render
下TContext
中将std::vector<TRenderPassProxy> renderPassProxies
更改成std::vector<TRenderPass> renderPasses
./engine/render
下TContext
中将TRenderPassProxy
中的void Create(Turbo::Render::TRenderPass &renderPass, Turbo::Render::TContext *context)
和void Destroy()
移动到TRenderPassPool
中,并重命名为void CreateRenderPass(Turbo::Render::TRenderPass &renderPass, Turbo::Render::TContext *context)
和void DestroyRenderPass(Turbo::Render::TRenderPass &renderPass)
./engine/render
下TContext
中将TRenderPassPool
中移除void DestroyRenderPass(Turbo::Render::TRenderPass &renderPass)
成员函数./engine/render
下TContext
中将TRenderPassProxy Find(Turbo::Render::TRenderPass &renderPass)
更改成bool Find(Turbo::Render::TRenderPass &renderPass)
./engine/render
下TContext
中将TRenderPassProxy Allocate(Turbo::Render::TRenderPass &renderPass)
更改成bool Allocate(Turbo::Render::TRenderPass &renderPass)
./engine/render
下TRenderPass
中增加bool IsValid()
函数
2023/2/13 设计架构
./engine/render
下TContext.h
中增加TFrameBufferPool
类./engine/render
下TContext.h
中TRenderPassPool
中的成员函数void CreateRenderPass(Turbo::Render::TRenderPass &renderPass, Turbo::Render::TContext *context)
修改成void CreateRenderPass(Turbo::Render::TRenderPass &renderPass)
,其中的Turbo::Render::TContext *context
在TRenderPassPool
中存在对应的成员变量./engine/render
下TContext.h
中TRenderPassPool
中的成员变量std::vector<TRenderPass> renderPasses;
修改成std::vector<TRenderPass> renderPasses;
./engine/render
下TRenderPass.h
中TRenderPass
中增加Turbo::Core::TFramebuffer *framebuffer
成员变量
2023/2/14 设计架构
- 修改
./engine/core
下TPhysicalDevice
中GetMaxImageExtent()
中增加当格式不被支持时的判断- 修改
./engine/core
下TPhysicalDevice
中GetMaxImageMipLevels()
中增加当格式不被支持时的判断- 修改
./engine/core
下TPhysicalDevice
中GetMaxImageArrayLayers()
中增加当格式不被支持时的判断- 修改
./engine/core
下TPhysicalDevice
中GetSupportImageSampleCounts()
中增加当格式不被支持时的判断- 修改
./engine/core
下TPhysicalDevice
中GetMaxImageResourceSize()
中增加当格式不被支持时的判断./engine/core
下TPhysicalDevice
中增加bool IsFormatSupportImage(...)
成员函数./engine/core
下TImage
中InternalCreate()
中增加对于格式是否支持的判断./engine/render
下TRenderPass
中增加friend class TFramebufferPool
使得TFramebufferPool
在分配之后将结果刷新到TRenderPass
中- 更新
./docs/Design
下FrameGraphAdvance.md
文档./engine/core
下TFramebuffer
中增加std::vector<TImageView *> GetAttachments()
成员函数./engine/render
下TRenderPass
下增加std::vector<Turbo::Render::TImage> GetAttachments();
成员函数./engine/render
下TImage
下增加bool operator ==(const TImage& image)
成员函数./engine/render
下TImage
下增加bool operator !=(const TImage& image)
成员函数./engine/render
下TImage
下增加friend class TFramebufferPool
友元类./engine/render
下TContext.h
下的TFramebufferPool
基本完成
2023/2/15 设计架构
./engine/render
下TRenderPass
中IsValid()
成员函数,增加对于Turbo::Core::TFramebuffer *framebuffer
成员变量的判断./engine/render
下TRenderPassPool
中增加TFramebufferPool *framebufferPool;
成员变量,增加对于Turbo::Core::TFramebuffer
的分配./engine/render
下TRenderPassPool
中增加Allocate(...)
成员函数,增加对于Turbo::Core::TFramebuffer
的分配./engine/render
下TContext
中增加TRenderPassPool *renderPassPool
成员变量,并在构造函数和析构函数中进行创建和销毁./engine/render
下TRenderPass
中增加friend class TContext;
友元类./engine/render
下TContext
中更新完善BeginRenderPass(...)
成员函数./samples
下增加PushConstantTest
例子,用于测试Vulkan
的Push Constant
./engine/render
下TContext
中增加void EndRenderPass();
成员函数./engine/render
下TRenderPass
中增加bool IsEmpty() const
成员函数./engine/render
下TSubpass
中增加bool IsEmpty() const
成员函数
2023/2/16 设计架构
./engine/render
下TContext
中BeginRenderPass(...)
成员函数增加bool
返回结果./engine/render
下TImage
中Create()
成员函数中增加Layout
从UNDEFINED
转成GENERAL
的测试代码./engine/render
下TContext
中增加void ClearTexture(Turbo::Render::TTexture2D &texture2D, float r = 0, float g = 0, float b = 0, float a = 0)
成员函数./engine/render
下TImage
中增加friend class TContext
友元类./engine/render
下TContext
构造函数中,修改对于Window
系统中VK_KHR_WIN32_SURFACES
扩展对应错误的Bug
2023/2/17 设计架构
./engine/render
下TContext
中增加Turbo::Core::TImage *GetTextureImage(Turbo::Render::TTexture2D texture2d)
成员函数,该函数仅用于测试,请谨慎调用./samples
下增加RenderAndFrameGraph
例子,用于测试使用FrameGraph
来驱动Turbo
进行绘制。./samples
下VolumetricCloud
例子,中用于体积云的着色器文件对应目录被误改了,修正
2023/2/18 设计架构
./samples
下增加ClearColorTest
例子,用于测试Vulkan
清空颜色测试
2023/2/19 设计架构
- 更新
./docs
下VolumetricCloud.md
文档
2023/2/20 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
2023/2/21 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
2023/2/22 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档./engine/render
下TBuffer.h
中增加TVertexBuffer
类./engine/render
下TBuffer.h
中TVertexBuffer
类中声明typedef enum TRate
枚举./engine/render
下TBuffer.h
中TVertexBuffer
类中声明class TAttribute
类./engine/render
下TBuffer.h
中TVertexBuffer
类中声明std::vector<TVertexBuffer::TAttribute> attributes
成员变量./engine/render
下TBuffer.h
中TVertexBuffer
类中声明struct Descriptor
成员结构./engine/render
下TBuffer.h
中TVertexBuffer
类中声明uint32_t stride
成员变量./engine/render
下TBuffer.h
中TVertexBuffer
类中声明TRate rate
成员变量./engine/render
下TBuffer.h
中TVertexBuffer
类中声明void Create(const std::string &name, const Descriptor &descriptor, void *allocator)
成员函数./engine/render
下TBuffer.h
中TVertexBuffer
类中声明TAttributeID AddAttribute(Turbo::Render::TFormat format, uint32_t offset)
成员函数./engine/render
下TBuffer.h
中TVertexBuffer
类中声明TAttribute GetAttribute(TAttributeID id)const
成员函数
2023/2/23 设计架构
./engine/render
下TBuffer.h
中TVertexBuffer
类中声明uint32_t GetStride() const
成员函数./engine/render
下TBuffer.h
中TVertexBuffer
类中声明TRate GetRate()const
成员函数
2023/2/24 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档./engine/render
下TFormat.h
中增加R32_SFLOAT
成员枚举./engine/render
下TFormat.h
中增加R32G32_SFLOAT
成员枚举./engine/render
下TFormat.h
中增加R32G32B32_SFLOAT
成员枚举./engine/render
下TFormat.h
中增加R32G32B32A32_SFLOAT
成员枚举./engine/render
下TContext.h
中TContext
增加void BindVeretxAttribute(const Turbo::Render::TVertexBuffer &vertexBuffer, Turbo::Render::TAttributeID attributeID, uint32_t location)
成员函数./engine/render
下TContext.h
中TContext
增加std::vector<Turbo::Core::TVertexBinding *> vertexBindings
成员变量,用于管理和暂存绑定的顶点信息./engine/render
下TBuffer.h
中TBuffer
增加bool IsValid() const
成员函数./engine/render
下TBuffer.h
中TBuffer
增加friend class TContext;
友元类./engine/render
下TContext.h
中TContext
增加std::vector<Turbo::Core::TBuffer *> vertexBuffers
成员变量,用于管理和暂存绑定的顶点缓冲./engine/render
下TBuffer.h
中TVertexBuffer
中TAttribute
增加bool IsValid() const;
成员函数- 修改
./engine/core
下TVertexBinding
中AddAttribute(...)
成员函数的算法(防止重复的location
,如果有重复的location
,将对应的属性覆盖刷新)./engine/core
下TVertexAttribute
中增加void SetLocation(uint32_t location)
成员函数./engine/core
下TVertexAttribute
中增加void SetFormatType(TFormatType formatType)
成员函数./engine/core
下TVertexAttribute
中增加void SetOffset(uint32_t offset)
成员函数
2023/2/25 设计架构
- 修正
./samples
下RenderAndFrameGraph.cpp
示例中,由于Layout
转换Bug
导致什么也不显示。
2023/2/26 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
2023/2/27 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档
2023/2/28 设计架构
- 更新
./docs/Design
下FrameGraphAdvance.md
文档./engine/render
下TBuffer.h
中新增TIndexBuffer
类,继承自Turbo::Render::TBuffer
。用于代表索引缓冲
2023/3/1 设计架构
./engine/render
下TBuffer.h
中TIndexBuffer
类中增加void Copy(const std::vector<uint32_t>& indexs)
成员函数./engine/render
下TBuffer.h
中TIndexBuffer
类中增加void Copy(const std::vector<uint16_t>& indexs)
成员函数./engine/render
下TBuffer.h
中增加TUniformBuffer
类
2023/3/2 设计架构
./engine/render
下TBuffer.h
中TUniformBuffer
类增加void Create(const std::string &name, const Descriptor &descriptor, void *allocator)
成员函数./engine/render
下TBuffer.h
中TUniformBuffer
类增加void Copy(const T &uniform)
成员函数
2023/3/3 设计架构
./engine/render
下TContext.h
中TContext
类中增加void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TTexture2D> &texture2Ds)
成员函数./engine/render
下TContext.h
中TContext
类中增加void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TTexture2D &texture2D)
成员函数./engine/render
下TContext.h
中TContext
类中增加void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TTexture3D> &texture3Ds)
成员函数./engine/render
下TContext.h
中TContext
类中增加void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TTexture3D &texture3D)
成员函数./engine/render
下TContext.h
中TContext
类中增加template <typename T>void BindDescriptor(uint32_t set, uint32_t binding, const std::vector<Turbo::Render::TUniformBuffer<T>> &uniformBuffers)
成员函数./engine/render
下TContext.h
中TContext
类中增加template <typename T>void BindDescriptor(uint32_t set, uint32_t binding, const Turbo::Render::TUniformBuffer<T> &uniformBuffer)
成员函数./engine/render
下TContext.h
中TContext
类中增加using TSetID = uint32_t
成员声明./engine/render
下TContext.h
中TContext
类中增加using TBindingID = uint32_t
成员声明./engine/render
下TContext.h
中TContext
类中增加typedef enum class TDescriptorMapType
成员枚举./engine/render
下TContext.h
中TContext
类中增加typedef struct TDescriptorID
成员结构体声明./engine/render
下TContext.h
中TContext
类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TBuffer *>, TDescriptorID> uniformBufferMap
成员变量./engine/render
下TContext.h
中TContext
类中增加std::map<TDescriptorID, std::vector<std::pair<Turbo::Core::TImageView *, Turbo::Core::TSampler *>>, TDescriptorID> combinedImageSamplerMap
成员变量./engine/render
下TContext.h
中TContext
类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TImageView *>, TDescriptorID> sampledImageMap
成员变量./engine/render
下TContext.h
中TContext
类中增加std::map<TDescriptorID, std::vector<Turbo::Core::TSampler *>, TDescriptorID> samplerMap
成员变量./engine/render
下TContext.h
中TContext
类中增加std::map<TSetID, std::map<TBindingID, TDescriptorMapType>> descriptorMap
成员变量
2023/3/5 设计架构
./engine/render
下TContext.h
中TContext
类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TTexture2D &texture2D)
成员函数./engine/render
下TContext.h
中TContext
类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const std::vector<Turbo::Render::TTexture3D> &texture3Ds)
成员函数./engine/render
下TContext.h
中TContext
类中,更新实现BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TTexture3D &texture3D)
成员函数./engine/render
下TContext.h
中TContext
类中,更新实现template <typename T>void BindDescriptor(TSetID set, TBindingID binding, const std::vector<Turbo::Render::TUniformBuffer<T>> &uniformBuffers)
成员函数./engine/render
下TContext.h
中TContext
类中,更新实现template <typename T>void BindDescriptor(TSetID set, TBindingID binding, const Turbo::Render::TUniformBuffer<T> &uniformBuffer)
成员函数- 更新
./docs/Design
下FrameGraphAdvance.md
文档./engine/render
下增加TSampler.h
和TSampler.cpp
用于表示Sampler
./engine/render
下TSampler.h
中TSampler
类中增加typedef enum class TFilter
成员枚举./engine/render
下TSampler.h
中TSampler
类中增加typedef enum class TMipmapMode
成员枚举./engine/render
下TSampler.h
中TSampler
类中增加typedef enum class TAddressMode
成员枚举./engine/render
下TSampler.h
中TSampler
类中增加Turbo::Core::TSampler *sampler = nullptr
成员变量./engine/render
下TSampler.h
中TSampler
类中增加struct Descriptor
成员声明./engine/render
下TSampler.h
中TSampler
类中增加friend class TContext
友元类./engine/render
下TSampler.h
中TSampler
类中增加void *allocator = nullptr
成员变量./engine/render
下TSampler.h
中TSampler
类中增加Turbo::Core::TSampler *sampler = nullptr
成员变量./engine/render
下TSampler.h
中TSampler
类中增加Descriptor descriptor
成员变量./engine/render
下TSampler.h
中TSampler
类中增加void Create(const std::string &name, const Descriptor &descriptor, void *allocator)
成员函数./engine/render
下TSampler.h
中TSampler
类中增加void Destroy(void *allocator)
成员函数./engine/render
下TSampler.h
中TSampler
类中增加bool IsValid() const
成员函数
2023/3/6 设计架构
./engine/render
下TResourceAllocator.h
中TResourceAllocator
类中,增加Turbo::Core::TSampler *CreateSampler(const Turbo::Render::TSampler::Descriptor &descriptor)
成员函数./engine/render
下TResourceAllocator.h
中TResourceAllocator
类中,增加void DestroySampler(Turbo::Core::TSampler *sampler)
成员函数./engine/render
下TContext.h
中TContext
类中,增加Turbo::Core::TSampler *CreateSampler(const Turbo::Render::TSampler::Descriptor &descriptor)
成员函数./engine/render
下TContext.h
中TContext
类中,增加void DestroySampler(Turbo::Core::TSampler *sampler)
成员函数./engine/render
下TSampler.h
中TSampler
类中更新void Create(const std::string &name, const Descriptor &descriptor, void *allocator)
成员函数./engine/render
下TSampler.h
中TSampler
类中更新void Destroy(void *allocator)
成员函数- 更新
./docs/Design
下FrameGraphAdvance.md
文档
2023/3/7 设计架构
./engine/render
下TContext.h
中增加TGraphicsPipelinePool
类./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加std::map<Turbo::Core::TRenderPass *, std::map<uint32_t /*subpass*/, std::vector<Turbo::Core::TGraphicsPipeline *>>> graphicsPipelineMap
成员变量./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加bool Allocate(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)
成员函数./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加bool Find(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)
成员函数./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加void CreateGraphicsPipeline(Turbo::Render::TRenderPass &renderPass, uint32_t subpass, Turbo::Render::TGraphicsPipeline &graphicsPipeline)
成员函数./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加void Free(Turbo::Render::TGraphicsPipeline &graphicsPipeline)
成员函数./engine/render
下TRenderPass.h
中TRenderPass
类中增加friend class TGraphicsPipelinePool
友元类./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加friend class TGraphicsPipelinePool
友元类./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加Turbo::Core::TGraphicsPipeline *graphicsPipeline = nullptr
成员变量
2023/3/8 设计架构
./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加TContext *context
成员变量./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加TGraphicsPipelinePool(TContext *context)
构造函数./engine/render
下TContext.h
中TContext
类中增加std::vector<Turbo::Core::TVertexBinding *> GetVertexBindings()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加Turbo::Render::TVertexShader *GetVertexShader()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加Turbo::Render::TFragmentShader *GetFragmentShader()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TTopology GetTopology()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetPrimitiveRestartEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetPatchControlPoints()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthClampEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetRasterizerDiscardEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TPolygon GetPolygon()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TCull GetCull()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TFront GetFront()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthBiasEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetDepthBiasConstantFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetDepthBiasClamp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetDepthBiasSlopeFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetLineWidth()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthTestEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthWriteEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TCompareOp GetDepthCompareOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetDepthBoundsTestEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetStencilTestEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilFrontFailOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilFrontPassOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilFrontDepthFailOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TCompareOp GetStencilFrontCompareOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilFrontCompareMask()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilFrontWriteMask()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilFrontReference()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilBackFailOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilBackPassOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TStencilOp GetStencilBackDepthFailOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TCompareOp GetStencilBackCompareOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilBackCompareMask()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilBackWriteMask()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加uint32_t GetStencilBackReference()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetMinDepthBounds()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加float GetMaxDepthBounds()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetLogicOpEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TLogicOp GetLogicOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加bool GetBlendEnable()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendFactor GetSrcColorBlendFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendFactor GetDstColorBlendFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendOp GetColorBlendOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendFactor GetSrcAlphaBlendFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendFactor GetDstAlphaBlendFactor()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TBlendOp GetAlphaBlendOp()
成员函数./engine/render
下TPipeline.h
中TGraphicsPipeline
类中增加TGraphicsPipeline
友元类./engine/render
下TShader.h
中TComputeShader
类中增加Turbo::Core::TComputeShader * GetComputeShader()
成员函数./engine/render
下TShader.h
中TVertexShader
类中增加Turbo::Core::TVertexShader * GetVertexShader()
成员函数./engine/render
下TShader.h
中TFragmentShader
类中增加Turbo::Core::TFragmentShader * GetFragmentShader()
成员函数./engine/render
下TContext.h
中TContext
类中增加void Draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)
成员函数./engine/render
下TContext.h
中TGraphicsPipelinePool
类中增加void GC()
成员函数./engine/render
下TContext.h
中TFramebufferPool
类中增加void GC()
成员函数./engine/render
下TContext.h
中TRenderPassPool
类中增加void GC()
成员函数./engine/render
下TContext.h
中增加void GC()
成员函数./engine/render
下TContext.h
中增加TGraphicsPipelinePool *graphicsPipelinePool
成员变量./engine/render
下TContext.h
中增加Turbo::Render::TGraphicsPipeline currentGraphicsPipeline
成员变量./engine/render
下TContext.h
中增加Turbo::Render::TRenderPass currentRenderPass
成员变量./engine/render
下TContext.h
中增加uint32_t currentSubpass
成员变量
2023/3/9 设计架构
./engine/core
下TShader.h
中TShader
类中增加对于DirStackFileIncluder
的使用,使得Turbo
支持解析带有#include
的着色器代码./engine/core
下TShader.h
中TVertexShader
类构造函数增加const std::vector<std::string>& includePaths
形参,用于将着色器#include
文件路径传入进行解析./engine/core
下TShader.h
中TFragmentShader
类构造函数增加const std::vector<std::string>& includePaths
形参,用于将着色器#include
文件路径传入进行解析./engine/core
下TShader.h
中TComputeShader
类构造函数增加const std::vector<std::string>& includePaths
形参,用于将着色器#include
文件路径传入进行解析./samples
下增加ShaderIncludeTest
示例,用于测试着色器的#include
特性
2023/3/10 设计架构
./samples
下增加GreenFieldDiorama
示例,用于测试多通道,颜色附件,纹理采样,着色器#include
等
2023/3/13 设计架构
- 修正
./engine/render
下TRenderPass
类中GetAttachments()
对于深度模板纹理的信息收集Bug
- 修正
./engine/render
下TContext
类中BindVeretxAttribute()
对于顶点绑定索引的计算错误Bug
- 修正
./engine/render
下TRenderPassPool
类中Find()
对于深度模板附件未对空指针进行检查Bug
./samples
下增加PureHelloTriangleAndFrameGraph
示例,用于测试基于FrameGraph
驱动Turbo
绘制一个纯三角形
2023/3/14 设计架构
- 修正
./samples
下PureHelloTriangleAndFrameGraph
示例,在改变窗口大小时导致的VkImageView
无效的Bug
,该Bug
的原因是一帧结束,并且当窗口大小改变时没有及时回收FrameBuffer
的资源
2023/3/15 设计架构
./docs/Design
下增加Core.md
文档。用于记录Turbo
核心的相关设计- 尝试解决
内存泄漏
的Bug
2023/3/16 设计架构
- 尝试解决
内存泄漏
的Bug
- 经过多次测试和探索,
内存泄漏
位于vkCreatePipelineLayout
和vkDestroyPipelineLayout
函数内部,而这一部分属于显卡驱动范畴,大概率是GPU
驱动Bug
2023/3/17 设计架构
- 确定
vkCreatePipelineLayout
和vkDestroyPipelineLayout
发生的内存泄漏是NVIDIA GPU
驱动Bug
,Game Ready Driver
驱动版本为531.29
发布日期为2023/03/14
- 修正添加
./engine/core
下TDescriptorSetLayout
类中~TDescriptorSetLayout()
成员函数对于Turbo::Core::TNaNDescriptor
资源内存的释放回收。
2023/3/19 设计架构
./samples
下增加VulkanDynamicRenderingTest
示例,用于测试Vulkan
的Dynamic Rendering
特性./engine/core
下TExtensionInfo
中TExtensionType
增加VK_KHR_DYNAMIC_RENDERING
扩展./engine/core
下TExtensionInfo
中TAllExtensionNames
增加VK_KHR_dynamic_rendering
名称- 更新
./docs/Design/Core.md
文档
2023/3/20 设计架构
- 更新
./docs/Design/Core.md
文档./engine/core
下的TPhysicalDeviceInfo
类中的TPhysicalDeviceFeatures
更改成VkPhysicalDeviceFeatures
./engine/core
下的TPhysicalDevice
类中的TPhysicalDeviceFeatures GetDeviceFeatures()
更改成VkPhysicalDeviceFeatures GetDeviceFeatures()
./engine/core
下的TCore.h
中移除typedef VkPhysicalDeviceFeatures TPhysicalDeviceFeatures
声明./engine/core
下的TPhysicalDevice.h
中增加class TPhysicalDeviceFeatures
类型,内部增加如下声明:./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool geometryShader
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool tessellationShader
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool sampleRateShading
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool depthClamp
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool depthBiasClamp
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool wideLines
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool fillModeNonSolid
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool timelineSemaphore
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool dynamicRendering
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加virtual std::string ToString() override
成员函数声明
2023/3/21 设计架构
./engine/core
下的TPhysicalDeviceInfo.h
中的TPhysicalDeviceInfo
类中增加VkPhysicalDeviceVulkan11Features vulkan11Feature
成员变量./engine/core
下的TPhysicalDeviceInfo.h
中的TPhysicalDeviceInfo
类中增加VkPhysicalDeviceVulkan12Features vulkan12Feature
成员变量./engine/core
下的TPhysicalDeviceInfo.h
中的TPhysicalDeviceInfo
类中增加VkPhysicalDeviceVulkan13Features vulkan13Feature
成员变量./engine/core
下的TVulkanLoader.h
中增加extern VULKAN_GLOBAL_API VULKAN_CORE PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2
声明./engine/core
下的TVulkanLoader.h
中TVulkanLoader
类中LoadAllInstanceFunctions(TInstance *instance)
增加对于Turbo::Core::vkGetPhysicalDeviceFeatures2
函数的获取./engine/core
下的TPhysicalDevice.h
中TPhysicalDevice
类中EnumerateProperties()
成员函数中增加对于VkPhysicalDeviceVulkan11Features
,VkPhysicalDeviceVulkan12Features
和VkPhysicalDeviceVulkan13Features
数据的获取
2023/3/22 设计架构
./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool samplerAnisotropy
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDeviceFeatures
增加bool logicOp
成员变量声明./engine/core
下的TPhysicalDevice.h
中class TPhysicalDevice
移除VkPhysicalDeviceFeatures GetDeviceFeatures()
成员函数./engine/core
下的TPhysicalDevice.h
中class TPhysicalDevice
增加TPhysicalDeviceFeatures GetDeviceFeatures()
成员函数./engine/core
下的TDevice.h
中class TDevice
中移除TDevice(TPhysicalDevice *, std::vector<TLayerInfo> *, std::vector<TExtensionInfo> *, VkPhysicalDeviceFeatures *)
构造函数./engine/core
下的TDevice.h
中class TDevice
中移除VkPhysicalDeviceFeatures enabledFeatures
成员变量./engine/core
下的TDevice.h
中class TDevice
中增加TPhysicalDeviceFeatures enabledFeatures
成员变量./engine/core
下的TDevice.h
中class TDevice
中移除VkPhysicalDeviceFeatures GetEnableDeviceFeatures()
成员函数./engine/core
下的TDevice.h
中class TDevice
中增加TPhysicalDeviceFeatures GetEnableDeviceFeatures()
成员函数./engine/core
下的TDevice.h
中class TDevice
中InternalCreate()
成员函数中增加对于Vulkan1.1
,Vulkan1.2
和Vulkan1.3
的Feature
激活./engine/core
下的TVulkanLoader.h
中class TVulkanLoader
中增加对于vkCmdBeginRendering
和vkCmdEndRendering
两个函数的获取- 更新
./docs/Design/Core.md
文档
2023/3/25 设计架构
./engine/core
下的新建TRenderingPipeline.h
和TRenderingPipeline.cpp
./engine/core
下TRenderingPipeline.h
中增加声明TRenderingPipeline
类./engine/core
下TRenderingPipeline.h
中增加声明TRenderingAttachments
类./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加std::vector<TFormatType> colorAttachmentFormats
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加TFormatType depthAttachmentFormat
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加TFormatType stencilAttachmentFormat
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加void AddColorAttachmentFormat(TFormatType formatType)
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加void SetDepthAttachmentFormat(TFormatType formatType)
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加void SetStencilAttachmentFormat(TFormatType formatType)
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加const std::vector<TFormatType> &GetColorAttachmentFormats() const
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加const TFormatType &GetDepthAttachmentFormat() const
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingAttachments
类中增加const TFormatType &GetStencilAttachmentFormat() const
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加``成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TRenderingAttachments renderingAttachments
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TTopologyType topology
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool primitiveRestartEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加std::vector<TVertexBinding> vertexBindings
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthClampEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool rasterizerDiscardEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TPolygonMode polygonMode
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TCullModes cullMode
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TFrontFace frontFace
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthBiasEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float depthBiasConstantFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float depthBiasClamp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float depthBiasSlopeFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float lineWidth
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool multisampleEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TSampleCountBits sample
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthTestEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthWriteEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TCompareOp depthCompareOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool depthBoundsTestEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool stencilTestEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp frontFailOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp frontPassOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp frontDepthFailOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TCompareOp frontCompareOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t frontCompareMask
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t frontWriteMask
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t frontReference
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp backFailOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp backPassOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TStencilOp backDepthFailOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TCompareOp backCompareOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t backCompareMask
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t backWriteMask
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加uint32_t backReference
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float minDepthBounds
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float maxDepthBounds
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool logicOpEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TLogicOp logicOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加bool blendEnable
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendFactor srcColorBlendFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendFactor dstColorBlendFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendOp colorBlendOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendFactor srcAlphaBlendFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendFactor dstAlphaBlendFactor
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加TBlendOp alphaBlendOp
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float constantR
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float constantG
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float constantB
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加float constantA
成员变量./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加virtual void InternalCreate() override
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加Turbo::Core::TRenderingPipeline::TRenderingPipeline(const TRenderingAttachments &renderingAttachments, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TFragmentShader *fragmentShader, TTopologyType topology, bool primitiveRestartEnable, bool depthClampEnable, bool rasterizerDiscardEnable, TPolygonMode polygonMode, TCullModes cullMode, TFrontFace frontFace, bool depthBiasEnable, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor, float lineWidth, bool multisampleEnable, TSampleCountBits sample, bool depthTestEnable, bool depthWriteEnable, TCompareOp depthCompareOp, bool depthBoundsTestEnable, bool stencilTestEnable, TStencilOp frontFailOp, TStencilOp frontPassOp, TStencilOp frontDepthFailOp, TCompareOp frontCompareOp, uint32_t frontCompareMask, uint32_t frontWriteMask, uint32_t frontReference, TStencilOp backFailOp, TStencilOp backPassOp, TStencilOp backDepthFailOp, TCompareOp backCompareOp, uint32_t backCompareMask, uint32_t backWriteMask, uint32_t backReference, float minDepthBounds, float maxDepthBounds, bool logicOpEnable, TLogicOp logicOp, bool blendEnable, TBlendFactor srcColorBlendFactor, TBlendFactor dstColorBlendFactor, TBlendOp colorBlendOp, TBlendFactor srcAlphaBlendFactor, TBlendFactor dstAlphaBlendFactor, TBlendOp alphaBlendOp, float constantR, float constantG, float constantB, float constantA) : Turbo::Core::TPipeline(vertexShader->GetDevice(), vertexShader, fragmentShader)
成员函数
2023/3/26 设计架构
./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加virtual void InternalDestroy() override
成员函数./engine/core
下TRenderingPipeline.h
中TRenderingPipeline
类中增加~TRenderingPipeline()
析构函数
2023/3/27 设计架构
- 完成
./sample
下的VulkanDynamicRenderingTest
示例
2023/3/29 设计架构
./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
重命名为class TAttachmentsFormat
./engine/core
下TRenderingPipeline.h
中增加class TRenderingAttachments
./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
增加void CmdBeginRendering(const TRenderingAttachments &renderingAttachment)
成员函数./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
增加void CmdEndRendering()
成员函数./engine/core
下TRenderingPipeline.h
中增加typedef enum TResolveModeBits
枚举./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加struct TRenderingAttachment
结构体声明./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加std::vector<TRenderingAttachment> colorAttachments
成员变量./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加TRenderingAttachment depthAttachment
成员变量./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加TRenderingAttachment stencilAttachment
成员变量./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void AddColorAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void AddColorAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void SetDepthAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void SetDepthAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void SetStencilAttachment(TImageView *imageView, TImageLayout layout, TImageView *resolveImageView, TImageLayout resolveLayout, TResolveModeBits resolveModeBits, TLoadOp loadOp, TStoreOp storeOp)
成员函数./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加void SetStencilAttachment(TImageView *imageView, TImageLayout layout, TLoadOp loadOp, TStoreOp storeOp)
成员函数- 更新
./docs/Design/Core.md
文档
2023/3/30 设计架构
./engine/core
下TRenderingPipeline.h
中class TRenderingAttachments
中增加friend class TCommandBufferBase
友元类声明,使得在TCommandBufferBase
中记录指令时能够访问到对应数据./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
完善实现void CmdBeginRendering(const TRenderingAttachments &renderingAttachment)
成员函数./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
完善实现void CmdEndRendering()
成员函数./engine/core
下TCommandBuffer.h
中class TCommandBufferBase
中void CmdBeginRendering(const TRenderingAttachments &renderingAttachment)
成员函数增加形参为void CmdBeginRendering(const TRenderingAttachments &renderingAttachment, uint32_t offsetX, uint32_t offsetY, uint32_t width, uint32_t height)
./samples
中增加DynamicRenderingTest
例子,用于测试Turbo
封装的Vulkan1.3
中Dynamic Rendering
特性
2023/4/3 设计架构
./engine/core
下TSurface
构造函数中增加对于Surface
扩展是否已经激活的判断./engine/core
下TSwapchain
构造函数中增加对于Swapchain
扩展是否已经激活的判断
2023/4/4 设计架构
./asset/images
下增加RockCliffLayered
文件夹,用于存储RockCliffLayered
的PBR
纹理./samples
中增加NormalTexture
例子,用于尝试使用法线纹理获得切线空间的法线
2023/4/5 设计架构
./samples
中更新完善NormalTexture
例子./samples
中增加BRDF
例子,用于尝试实现常见的PBR
纹理流程渲染
2023/4/6 设计架构
./samples
中修改NormalTexture
例子中my_buffer
的TBuffer
的大小值,之前是sizeof(float)
应该为sizeof(my_buffer_data)
此为一个Bug
,现修正。
2023/4/7 设计架构
./samples
中更新完善BRDF
例子
2023/4/8 设计架构
./samples
中增加CPPMultithreading
例子,用于研究C++
的多线程特性
2023/4/10 设计架构
- 更新
./docs/Design/Core.md
文档,研究Vulkan
中的细分着色器。./samples
中增加TessellationTest
例子,用于研究测试Vulkan
的细分特性./engine/core
下TShader.h
中增加class TTessellationControlShader
类./engine/core
下TShader.h
中增加class TTessellationEvaluationShader
类./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TFragmentShader *fragmentShader, uint32_t patchControlPoints, ...)
构造函数./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加uint32_t patchControlPoints
成员变量./engine/core
下TPipeline.h
中class TPipeline
中增加TPipeline(TDevice *device, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache)
构造函数./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
的InternalCreate()
成员函数中增加对VkPipelineTessellationStateCreateInfo
的设置
2023/4/11 设计架构
./asset/shaders
中增加TessellationTest.vert
细分示例使用的顶点着色器./asset/shaders
中增加TessellationTest.tesc
细分示例使用的细分控制着色器./asset/shaders
中增加TessellationTest.tese
细分示例使用的细分评估着色器./asset/shaders
中增加TessellationTest.frag
细分示例使用的片元着色器./samples
中完成TessellationTest
例子
2023/4/12 设计架构
./engine/core
下TShader.h
中增加class TGeometryShader
类./samples
中增加GeometryShaderTest
例子,用于测试研究Vulkan
中的几何着色器特性./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, ...)
支持几何着色器的构造函数./engine/core
下TPipeline.h
中class TPipeline
中增加TPipeline(TDevice *device, TVertexShader *vertexShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache)
支持几何着色器的构造函数./asset/shaders
中增加GeometryTest.vert
几何着色器示例使用的顶点着色器./asset/shaders
中增加GeometryTest.geom
几何着色器示例使用的几何着色器./asset/shaders
中增加GeometryTest.frag
几何着色器示例使用的片元着色器./engine/core
下TDescriptorSetLayout.h
中class TDescriptorSetLayout
中InternalCreate()
成员函数中增加对于重复Binding
描述符号的检查筛选,并且合并不同着色器使用相同描述符的ShaderStageFlag
2023/4/14 设计架构
./samples
中增加TessellationAndGeometry
例子,用于测试研究Vulkan
中的细分着色器和几何着色器配合使用的特性./asset/shaders
中增加TessellationAndGeometry.vert
细分和几何着色器示例使用的顶点着色器./asset/shaders
中增加TessellationAndGeometry.tesc
细分和几何着色器示例使用的细分控制着色器./asset/shaders
中增加TessellationAndGeometry.tese
细分和几何着色器示例使用的细分评估着色器./asset/shaders
中增加TessellationAndGeometry.geom
细分和几何着色器示例使用的几何着色器./asset/shaders
中增加TessellationAndGeometry.frag
细分和几何着色器示例使用的片元着色器./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, uint32_t patchControlPoints, ...)
支持细分和几何着色器的构造函数./engine/core
下TPipeline.h
中class TPipeline
中增加TPipeline(TDevice *device, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TGeometryShader *geometryShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache = nullptr)
支持细分和几何着色器的构造函数
2023/4/16 设计架构
./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TPipelineCache *pipelineCache, TRenderPass *renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader *tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TFragmentShader *fragmentShader, ...)
支持管线缓存的细分着色器的图形管线构造函数./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TPipelineCache *pipelineCache, TRenderPass*renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TGeometryShader*geometryShader, TFragmentShader *fragmentShader, ...)
支持管线缓存的几何着色器的图形管线构造函数./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TPipelineCache *pipelineCache, TRenderPass*renderPass, uint32_t subpass, std::vector<TVertexBinding> &vertexBindings, TVertexShader *vertexShader, TTessellationControlShader*tessellationControlShader, TTessellationEvaluationShader *tessellationEvaluationShader, TGeometryShader*geometryShader, TFragmentShader *fragmentShader, ...)
支持管线缓存的细分和几何着色器的图形管线构造函数- 更新
./docs/Design/Core.md
文档,研究Mesh Shader
。./samples
中增加VulkanFeatureTest
例子,用于研究Vulkan
特性
2023/4/17 设计架构
./samples
中移除VulkanFeatureTest
例子,改用VulkanTest
进行Vulkan
接口测试- 更新
./engine/core/include
下的Vulkan
头文件,当前的VK_HEADER_VERSION
为204
有点老,更新到247
,并且增加Vulkan
的vk_video
头文件夹
2023/4/18 设计架构
- 更新
./engine/core
下的TVulkanLoader.h
中TVulkanLoader
类中的GetVulkanVersion()
函数,将其更改为静态函数,并更新内部算法- 更新
./engine/core
下的TInstance.h
中TInstance
类中的IsSupportVulkan()
函数- 更新
./engine/core
下的TInstance.h
中TInstance
类中的GetVulkanInstanceVersion()
函数- 更新
./docs/Design/Core.md
文档
2023/4/19 设计架构
- 更新
./docs/Design/Core.md
文档./engine/core
下TCore.h
中增加#define VULKAN_PHYSICAL_DEVICE_API
声明./engine/core
下TVulkanLoader.h
中增加struct TPhysicalDeviceFunctionTable
声明./engine/core
下TVulkanLoader.h
中增加using TPhysicalDeviceDriver = TPhysicalDeviceFunctionTable
声明./engine/core
下TPhysicalDevice.h
中增加struct TPhysicalDeviceFunctionTable
声明./engine/core
下TPhysicalDevice.h
中增加using TPhysicalDeviceDriver = TPhysicalDeviceFunctionTable
声明./engine/core
下TPhysicalDevice.h
中TPhysicalDevice
类中增加TPhysicalDeviceDriver *physicalDeviceDriver
成员变量./engine/core
下TPhysicalDevice.h
中TPhysicalDevice
类中增加const TPhysicalDeviceDriver* GetPhysicalDeviceDriver()
成员函数./engine/core
下TVulkanLoader.h
中TVulkanLoader
类中增加TPhysicalDeviceDriver LoadPhysicalDeviceDriver(TPhysicalDevice *physicalDevice)
成员函数- 更新
./engine/core
下TPhysicalDevice.h
中TPhysicalDevice
类中InternalCreate()
增加TPhysicalDeviceDriver* physicalDeviceDriver
成员变量的构建和初始化- 更新
./engine/core
下TPhysicalDevice.h
中TPhysicalDevice
类中InternalDestroy()
增加TPhysicalDeviceDriver* physicalDeviceDriver
成员变量回收释放- 更新
./engine/core
下TPhysicalDevice.h
中TPhysicalDevice
类中使用TPhysicalDeviceDriver* physicalDeviceDriver
进行Vulkan
函数调用./engine/core
下TVulkanLoader.h
中移除全局的PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion
声明./engine/core
下TVulkanLoader.h
中移除全局的PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2
声明./engine/core
下TVulkanLoader.h
中移除全局的PFN_vkCmdBeginRendering vkCmdBeginRendering
声明./engine/core
下TVulkanLoader.h
中移除全局的PFN_vkCmdEndRendering vkCmdEndRendering
声明
2023/4/20 设计架构
./engine/core
下TPhysicalDeviceInfo
类中增加VkPhysicalDeviceMeshShaderFeaturesEXT meshShaderFeaturesEXT
和VkPhysicalDeviceMeshShaderFeaturesNV meshShaderFeaturesNV
的成员变量./engine/core
下TPhysicalDevice
类中EnumerateProperties()
成员函数中增加对VkPhysicalDeviceMeshShaderFeaturesEXT
和VkPhysicalDeviceMeshShaderFeaturesNV
的特性获取和赋值./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool taskShaderNV
成员变量./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool meshShaderNV
成员变量./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool taskShaderEXT
成员变量./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool meshShaderEXT
成员变量./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool multiviewMeshShaderEXT
成员变量./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool primitiveFragmentShadingRateMeshShaderEXT
成员变量./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool meshShaderQueriesEXT
成员变量./engine/core
下TPhysicalDevice
类中GetDeviceFeatures()
中增加对Mesh Shader
特性的赋值./samples
中增加MeshShaderTest
例子,用于研究Mesh Shader
./engine/core
下TDevice
类中InternalCreate()
中增加对Mesh Shader
特性的赋值
2023/4/21 设计架构
- 更新
./docs/Design/Core.md
文档./engine/core
下TExtensionInfo.h
中TExtensionType
枚举中增加VK_EXT_MESH_SHADER
枚举量./engine/core
下TExtensionInfo.cpp
中TAllExtensionNames
数组中增加VK_EXT_mesh_shader
字符串./engine/core
下TVulkanLoader.h
中TDeviceFunctionTable
结构体中增加PFN_vkCmdDrawMeshTasksEXT vkCmdDrawMeshTasksEXT
成员变量,并在TDeviceDriver::LoadDeviceDriver(...)
中对应获取./engine/core
下TVulkanLoader.h
中TDeviceFunctionTable
结构体中增加PFN_vkCmdDrawMeshTasksIndirectCountEXT vkCmdDrawMeshTasksIndirectCountEXT
成员变量,并在TDeviceDriver::LoadDeviceDriver(...)
中对应获取./engine/core
下TVulkanLoader.h
中TDeviceFunctionTable
结构体中增加PFN_vkCmdDrawMeshTasksIndirectEXT vkCmdDrawMeshTasksIndirectEXT
成员变量,并在TDeviceDriver::LoadDeviceDriver(...)
中对应获取./engine/core
下TVulkanLoader.h
中TDeviceFunctionTable
结构体中增加PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV
成员变量,并在TDeviceDriver::LoadDeviceDriver(...)
中对应获取./engine/core
下TVulkanLoader.h
中TDeviceFunctionTable
结构体中增加PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV
成员变量,并在TDeviceDriver::LoadDeviceDriver(...)
中对应获取./engine/core
下TVulkanLoader.h
中TDeviceFunctionTable
结构体中增加PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV
成员变量,并在TDeviceDriver::LoadDeviceDriver(...)
中对应获取./engine/core
下TCommandBuffer.h
中TCommandBufferBase
类中增加void CmdDrawMeshTasksEXT(uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)
成员函数./engine/core
下TCommandBuffer.h
中TCommandBufferBase
类中增加void CmdDrawMeshTasksNV(uint32_t taskCount, uint32_t firstTask)
成员函数
2023/4/22 设计架构
./engine/core
下TDevice.h
中TDevice
类中增加void InspectExtensionAndVersionDependencies()
成员函数用于检查扩展依赖./engine/core
下TDevice.h
中TDevice
类中InternalCreate()
成员函数中增加对于设备扩展依赖的检查./engine/core
下TPhysicalDevice.h
中TPhysicalDevice
类中增加TExtensionInfo GetExtensionByType(TExtensionType extensionType)
成员函数
2023/4/23 设计架构
./engine/core
下TDevice.h
中TDevice
类中更新void InspectExtensionAndVersionDependencies()
成员函数用于检查扩展依赖./engine/core
下TShader.h
中TShader
类中更新TShader(...)
构造函数中对于glslang::EShTargetClientVersion
和glslang::EShTargetLanguageVersion
的设置,如果想使用Mesh Shader
特性,Spir-V
的版本需要大于等于1.4
./engine/core
下TShader.h
中TShaderType
枚举中增加TASK
枚举值,用于Task Shader
./engine/core
下TShader.h
中TShaderType
枚举中增加MESH
枚举值,用于Mesh Shader
./engine/core
下TShader.cpp
中TShaderTypeToGlslangEShLanguage(...)
增加对于Turbo::Core::TShaderType::TASK
到EShLanguage::EShLangTaskNV
的转换./engine/core
下TShader.cpp
中TShaderTypeToGlslangEShLanguage(...)
增加对于Turbo::Core::TShaderType::MESH
到EShLanguage::EShLangMeshNV
的转换./engine/core
下TShader.h
中TShader
类中GetVkShaderStageFlags()
成员函数中增加对于Turbo::Core::TShaderType::TASK
到VK_SHADER_STAGE_TASK_BIT_EXT
的转换./engine/core
下TShader.h
中TShader
类中GetVkShaderStageFlags()
成员函数中增加对于Turbo::Core::TShaderType::MESH
到VK_SHADER_STAGE_MESH_BIT_EXT
的转换./engine/core
下TShader.h
中TShader
类中GetVkShaderStageFlagBits()
成员函数中增加对于Turbo::Core::TShaderType::TASK
到VK_SHADER_STAGE_TASK_BIT_EXT
的转换./engine/core
下TShader.h
中TShader
类中GetVkShaderStageFlagBits()
成员函数中增加对于Turbo::Core::TShaderType::MESH
到VK_SHADER_STAGE_MESH_BIT_EXT
的转换./engine/core
下TShader.h
中增加TTaskShader
类,用于表示Task Shader
./engine/core
下TShader.h
中增加TMeshShader
类,用于表示Mesh Shader
./asset/shaders
中增加MeshShaderTest.mesh
的网格着色器文件./asset/shaders
中增加MeshShaderTest.frag
的片元着色器文件
2023/4/24 设计架构
./engine/core/thirdparty
下的glslang
库改成git
的submodule
进行管理,随着Vulkan
的版本升级,glslang
也会跟随更新使得符合Vulkan
的新标准(这样Mesh Shader
就支持解析相应GLSL
扩展了)./engine/core
下的TShader.cpp
中增加glslang/Public/ShaderLang.h
头文件,用于使用glslang
中GetDefaultResource()
函数./engine/core
下的CMakeLists.txt
中增加glslang-default-resource-limits
库包含./engine/core
下的TShader.h
中TShader
类的构造函数中从hader_glslang.parse(&resources, ...)
修改为shader_glslang.parse(GetDefaultResources(), ...)
./engine/core
下的TShader.h
中TShader
类的构造函数中移除TBuiltInResource resources
的声明和相关使用./engine/core
下的TShader.cpp
中TShaderTypeToGlslangEShLanguage(...)
中返回的EShLangTaskNV
更改为EShLangTask
./engine/core
下的TShader.cpp
中TShaderTypeToGlslangEShLanguage(...)
中返回的EShLangMeshNV
更改为EShLangMesh
- 更新
./docs/Design/Core.md
文档
2023/4/25 设计架构
- 更新
./docs/Design/Core.md
文档./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
中增加TGraphicsPipeline(TRenderPass *renderPass, uint32_t subpass, TMeshShader *meshShader, TFragmentShader *fragmentShader, ...)
支持Mesh Shader
的图形管线构造函数./engine/core
下TPipeline.h
中class TPipeline
中增加TPipeline(TDevice *device, TMeshShader *meshShader, TFragmentShader *fragmentShader, TPipelineCache *pipelineCache)
支持Mesh Shader
的管线基类构造函数
2023/4/26 设计架构
- 更新
./docs/FAQ.md
文档./samples
中增加SpecializationConstantsTest
例子,用于研究着色器中的常量设定./engine/core
下TShader.h
中class TShader
中InternalParseSpirV()
成员函数中增加对于Specialization Constants
特化常量的解析
2023/4/27 设计架构
- 更新
./docs/Design/Core.md
文档./asset/shaders
中增加SpecializationConstantsTest.comp
的计算着色器文件,用于测试特化常量
2023/4/28 设计架构
./engine/core
下TShader.h
中增加class TSpecializationConstant
用于描述特化常量./engine/core
下TShader.h
中class TShader
中增加std::vector<TSpecializationConstant> specializationConstants
成员变量./engine/core
下TShader.h
中class TSpecializationConstant
类中增加uint32_t id
成员变量./engine/core
下TShader.h
中class TSpecializationConstant
类中增加std::string name
成员变量./engine/core
下TShader.h
中class TSpecializationConstant
类中增加Turbo::Core::TDescriptorDataType descriptorDataType
成员变量./engine/core
下TShader.h
中class TSpecializationConstant
类中增加uint32_t width
成员变量./engine/core
下TShader.h
中class TSpecializationConstant
类中增加TSpecializationConstant(uint32_t id, const std::string &name, Turbo::Core::TDescriptorDataType descriptorDataType, uint32_t width)
构造函数./engine/core
下TShader.h
中class TSpecializationConstant
类中增加uint32_t GetConstantID()
成员函数./engine/core
下TShader.h
中class TSpecializationConstant
类中增加const std::string &GetName()
成员函数./engine/core
下TShader.h
中class TSpecializationConstant
类中增加Turbo::Core::TDescriptorDataType GetDescriptorDataType()
成员函数./engine/core
下TShader.h
中class TSpecializationConstant
类中增加uint32_t GetWidth()
成员函数./engine/core
下TShader.h
中class TShader
中InternalParseSpirV()
成员函数中完善对于Specialization Constants
特化常量的解析./engine/core
下TShader.h
中class TShader
中增加const std::vector<TSpecializationConstant> &GetSpecializationConstants()
成员函数./engine/core
下TPipeline.h
中增加class TSpecializations
类./engine/core
下TPipeline.h
中class TSpecializations
类中增加union TConstant
成员union
类型./engine/core
下TPipeline.h
中class TSpecializations
类中增加struct TConstValue
成员类型./engine/core
下TPipeline.h
中class TSpecializations
类中增加std::map<uint32_t, TConstValue> specializationMap
成员变量./engine/core
下TPipeline.h
中class TSpecializations
类中增加std::map<uint32_t, TConstValue> specializationMap
成员变量./engine/core
下TPipeline.h
中class TSpecializations
类中增加void SetConstant(uint32_t id, bool value)
成员函数./engine/core
下TPipeline.h
中class TSpecializations
类中增加void SetConstant(uint32_t id, int32_t value)
成员函数./engine/core
下TPipeline.h
中class TSpecializations
类中增加void SetConstant(uint32_t id, uint32_t value)
成员函数./engine/core
下TPipeline.h
中class TSpecializations
类中增加void SetConstant(uint32_t id, float value)
成员函数./engine/core
下TPipeline.h
中class TSpecializations
类中增加void SetConstant(uint32_t id, double value)
成员函数./engine/core
下TPipeline.h
中class TPipeline
类中增加std::vector<TSpecializationConstant> specializationConstants
成员变量./engine/core
下TPipeline.h
中class TPipeline
类中增加TSpecializations specializations
成员变量./engine/core
下TPipeline.h
中class TPipeline
类中所有的构造函数增加TSpecializations *specializations
形参./engine/core
下TPipeline.h
中class TPipeline
类中更新InternalCreate()
成员函数,统计特化常量./engine/core
下TComputePipeline.h
中class TComputePipeline
类中增加TComputePipeline(TSpecializations *specializations, TComputeShader *computeShader)
构造函数./engine/core
下TComputePipeline.h
中class TComputePipeline
类中增加TComputePipeline(TPipelineCache *pipelineCache, TSpecializations *specializations, TComputeShader *computeShader)
构造函数
2023/4/29 设计架构
./engine/core
下TPipeline.h
中class TPipeline
类中移除std::vector<TSpecializationConstant> specializationConstants
成员变量./engine/core
下TPipeline.h
中class TPipeline
类中增加std::vector<TSpecializationConstant> GetSpecializationConstants()
成员函数
2023/5/2 设计架构
- 更新
./docs/Design/Core.md
文档./engine/core
下TPipeline.h
中移除TSpecializations
类和相关声明./engine/core
下将TSpecializations
中的相关声明转移至TShader.h
中的TShader
类中./engine/core
下TPipeline.h
中class TPipeline
类中移除std::vector<TSpecializationConstant> GetSpecializationConstants()
成员函数
2023/5/4 设计架构
- 更新
./docs/Design/Core.md
文档./engine/core
下TComputePipeline.h
中class TComputePipeline
类中InternalCreate()
成员函数中增加对VkSpecializationInfo
的解析./asset/shaders
中增加post_show_texture.frag
片元着色器文件,用于在后处理中采样显示纹理- 更新
./sample
下的SpecializationConstantsTest
示例
2023/5/5 设计架构
./engine/core
下TComputePipeline.h
中class TComputePipeline
类中InternalCreate()
成员函数中更新对VkSpecializationInfo
的解析,之前constant_width
计算有误- 更新
./sample
下的SpecializationConstantsTest
示例./engine/core
下TGraphicsPipeline.h
中class TGraphicsPipeline
类中InternalCreate()
成员函数中增加对VkSpecializationInfo
的解析./asset/shaders
中增加SpecializationConstantsTest.vert
顶点着色器文件,用于测试图形管线特化常量./asset/shaders
中增加SpecializationConstantsTest.frag
片元着色器文件,用于测试图形管线特化常量
2023/5/6 设计架构
- 更新
./docs/Design/Core.md
文档。开始研究Vulkan
硬件实时光追
2023/5/7 设计架构
- 更新
./docs/Design/Core.md
文档
2023/5/8 设计架构
- 更新
./docs/Design/Core.md
文档
2023/5/9 设计架构
- 更新
./docs/Design/Core.md
文档
2023/5/10 设计架构
- 更新
./docs/Design/Core.md
文档
2023/6/5 设计架构
./sample
下增加VulkanKHRRayTracingTest
示例,用于研究Vulkan KHR
标准硬件实时光追。相关研究文档请查阅Vulkan KHR 光线追踪标准。./engine/core
下TExtensionInfo.h
下的TExtensionType
枚举中增加VK_KHR_ACCELERATION_STRUCTURE
枚举量。并且在对应的TExtensionInfo.cpp
中的TAllExtensionNames
中增加VK_KHR_acceleration_structure
名称。
2023/6/6 设计架构
./engine/core
下TPhysicalDeviceInfo.h
下的TPhysicalDeviceInfo
类中增加VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeaturesKHR
成员变量,用于存储加速结构特性信息。./engine/core
下TPhysicalDevice.h
下的TPhysicalDevice
类中EnumerateProperties
函数中增加对于VkPhysicalDeviceAccelerationStructureFeaturesKHR
加速结构特性信息的获取和赋值。./engine/core
下TPhysicalDevice.h
下的TPhysicalDeviceFeatures
类中增加bool accelerationStructure
、bool accelerationStructureIndirectBuild
、bool accelerationStructureHostCommands
和bool descriptorBindingAccelerationStructureUpdateAfterBind
成员。用于获取和激活加速结构。./engine/core
下TPhysicalDevice.h
下的TPhysicalDevice
类中GetDeviceFeatures()
函数中,增加对于bool accelerationStructure
、bool accelerationStructureIndirectBuild
、bool accelerationStructureHostCommands
和bool descriptorBindingAccelerationStructureUpdateAfterBind
成员的赋值和获取。./engine/core
下TDevice.h
下的TDevice
类中InternalCreate()
函数中,增加对于VkPhysicalDeviceAccelerationStructureFeaturesKHR
特性的激活判断赋值。
2023/6/7 设计架构
./engine/core
下TDevice.h
下的TDevice
类中InternalCreate()
增加扩展指针链对于VkPhysicalDeviceAccelerationStructureFeaturesKHR
特性的激活。- 更新
./samples
下的VulkanKHRRayTracingTest
示例
2023/6/12 设计架构
./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中增加对VK_KHR_acceleration_structure
相关函数声明。./engine/core
下TVulkanLoader.h
下的TVulkanLoader
类中LoadDeviceDriver
成员函数增加对VK_KHR_acceleration_structure
相关函数的获取。
2023/6/13 设计架构
./engine/core
下TVulkanLoader.h
下的TVulkanLoader
类中LoadDeviceDriver
成员函数增加对获取扩展函数之前判断是否支持相应扩展的判断。
2023/6/15 设计架构
./engine/core
下TPhysicalDevice.h
下的TPhysicalDevice
类中IsSupportExtension
成员函数,将扩展名再次转换成扩展类型枚举进行判断去掉,没必要且重复。./engine/core
下TDevice.h
下的TDevice
类中IsEnabledExtension
成员函数,将扩展名再次转换成扩展类型枚举进行判断去掉,没必要且重复。
2023/6/20 设计架构
./engine/core
下TDevice.h
下的TDevice
类中更新InspectExtensionAndVersionDependencies()
成员函数为InspectExtensionAndVersionDependencies(TExtensionInfo& extensionInfo)
。应该使用递归的方式检查依赖。./engine/core
下TDevice.h
下的TDevice
类中更新InternalCreate()
成员函数。检查依赖。./engine/core
下TBuffer.h
下的TBufferUsageBits
枚举中增加BUFFER_SHADER_DEVICE_ADDRESS
、BUFFER_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY
、BUFFER_ACCELERATION_STRUCTURE_STORAGE
和BUFFER_SHADER_BINDING_TABLE
枚举成员枚举。./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中增加对VK_KHR_buffer_device_address
相关函数声明。./engine/core
下TVulkanLoader.h
下的TVulkanLoader
类中更新LoadDeviceDriver
成员函数。增加对VK_KHR_buffer_device_address
相关函数获取。
2023/6/21 设计架构
./engine/core
下TDevice.h
下的TDevice
类中更新InspectExtensionAndVersionDependencies()
成员函数中增加VK_KHR_MAINTENANCE2
扩展依赖检查。./engine/core
下TDevice.h
下的TDevice
类中更新InspectExtensionAndVersionDependencies()
成员函数中移除对VK_KHR_DEVICE_GROUP_CREATION
和VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES2
扩展依赖检查,这两个依赖属于instance
依赖,不应该出现在device
扩展中。
2023/6/25 设计架构
./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中增加VK_KHR_get_physical_device_properties2
扩展的函数。./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中增加VK_KHR_external_memory_capabilities
扩展的函数。./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中增加VK_KHR_external_fence_capabilities
扩展的函数。./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中增加VK_KHR_external_semaphore_capabilities
扩展的函数。./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中增加VK_EXT_tooling_info
扩展的函数。
2023/6/27 设计架构
./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中增加VK_EXT_buffer_device_address
扩展的函数。./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中增加VK_KHR_external_semaphore_capabilities
提升至核心得函数。./engine/core
下TDevice.h
下的TDevice
类中InspectExtensionAndVersionDependencies()
成员函数中增加对VK_EXT_BUFFER_DEVICE_ADDRESS
扩展依赖检查。./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中增加VK_KHR_device_group
扩展的函数。./engine/core
下TVulkanLoader.h
下增加TInstanceFunctionTable
结构体并声明TInstanceDriver
为TInstanceFunctionTable
别名。./engine/core
下TVulkanLoader.h
下TInstanceFunctionTable
结构体中增加VK_KHR_device_group_creation
扩展的函数。
2023/6/29 设计架构
./engine/core
下TPhysicalDevice.h
下的TPhysicalDeviceFeatures
类中增加bool bufferDeviceAddress
成员。./engine/core
下TPhysicalDevice.h
下的TPhysicalDeviceFeatures
类中增加bool bufferDeviceAddressCaptureReplay
成员。./engine/core
下TPhysicalDevice.h
下的TPhysicalDeviceFeatures
类中增加bool bufferDeviceAddressMultiDevice
成员。./engine/core
下TPhysicalDevice.h
下的EnumerateProperties()
成员函数中增加对VK_KHR_buffer_device_address
特性的获取。./engine/core
下TPhysicalDeviceInfo.h
下的TPhysicalDeviceInfo
类中增加对VkPhysicalDeviceBufferDeviceAddressFeaturesKHR physicalDeviceBufferDeviceAddressFeaturesKHR
成员变量。./engine/core
下TPhysicalDevice.h
下的TPhysicalDevice
类中GetDeviceFeatures()
成员函数中增加对VK_KHR_buffer_device_address
特性的获取。
2023/6/30 设计架构
./engine/core
下TVulkanLoader.h
下的TInstanceFunctionTable
结构体中,增加Vulkan 1.0
的函数。./engine/core
下TVulkanLoader.h
下的TVulkanLoader
类中,增加LoadInstanceDriver
成员函数。用于获取instance
函数。
2023/7/1 设计架构
./engine/core
下TVulkanLoader.h
下增加vkEnumerateInstanceVersion
的Vulkan
全局函数,并在TVulkanLoader
构造函数中获取。./engine/core
下TVulkanLoader.h
下移除所有非Vulkan
全局函数。./engine/core
下TVulkanLoader.h
下TVulkanLoader
类的Load
函数增加PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr
形参。./engine/core
下TVulkanLoader.h
下TVulkanLoader
类中移除LoadDeviceFunction(TInstance *instance, const char *name)
成员函数。./engine/core
下TVulkanLoader.h
下TVulkanLoader
类中移除LoadDeviceFunction(VkInstance instance, const char *name)
成员函数。./engine/core
下TVulkanLoader.h
下TVulkanLoader
类中LoadDeviceFunction(VkDevice device, const char *name)
成员函数增加PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr
形参./engine/core
下TVulkanLoader.h
下TVulkanLoader
类中移除void LoadAllInstanceFunctions(TInstance *instance)
成员函数./engine/core
下TVulkanLoader.h
下TVulkanLoader
类中移除void LoadAllDeviceFunctions(TInstance *instance)
成员函数./engine/core
下TVulkanLoader.h
下TVulkanLoader
类中移除void LoadAll(TInstance *instance)
成员函数./engine/core
下TInstance.h
下TInstance
类中增加TInstanceDriver *instanceDriver = nullptr
成员变量,并在InternalCreate
成员函数中分配获取,在InternalDestroy
中回收./engine/core
下TInstance.h
下TInstance
类中增加const TInstanceDriver *GetInstanceDriver()
成员函数./engine/core
下TDevice.h
下TDevice
类中InternalCreate
中vkCreateDevice
函数使用Turbo::Core::TPhysicalDeviceDriver
中的vkCreateDevice
创建./engine/core
下TPhysicalDevice.h
下TPhysicalDevice
类中InternalCreate
中vkEnumeratePhysicalDevices
函数使用Turbo::Core::GetInstanceDriver
中的vkEnumeratePhysicalDevices
函数./engine/core
下TVmaAllocator.h
下TVmaAllocator
类中InternalCreate
中vkGetDeviceProcAddr
函数使用Turbo::Core::TInstanceDriver
中的vkGetDeviceProcAddr
函数./docs
下FAQ.md
下Could Not find Vulkan (missing: VULKAN_LIBRARY VULKAN_INCLUDE_DIR)
更新最新确切的解决方法。./engine/core
下TVulkanLoader.h
下的TInstanceFunctionTable
结构体中,增加PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups
的函数并获取。./engine/core
下TVulkanLoader.h
下的TPhysicalDeviceFunctionTable
结构体中VK_EXT_tooling_info
先关函数转移至TDeviceFunctionTable
中并获取。./engine/core
下TInstance.h
下的TInstance
类中增加void InspectExtensionAndVersionDependencies(TExtensionType extensionType)
成员函数。使用递归的方式检查依赖。并在InternalCreate()
进行调用。./engine/core
下TInstance.h
下的TInstance
类中增加TExtensionInfo GetExtensionByType(TExtensionType extensionType)
成员函数
2023/7/2 设计架构
./engine/core
下TPhysicalDevice.h
下TPhysicalDevice
类中EnumerateProperties()
成员函数中,增加对vkGetPhysicalDeviceFeatures2KHR
函数的判断和使用。./engine/core
下TDevice.h
下TDevice
类中InspectExtensionAndVersionDependencies()
成员函数中,移除对于扩展的Vulkan
版本限制,对于扩展不应该使用版本限制。./engine/core
下TInstance.h
下TInstance
类中InspectExtensionAndVersionDependencies()
成员函数中,移除对于扩展的Vulkan
版本限制,对于扩展不应该使用版本限制。
2023/7/3 设计架构
./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkCmdDispatchBase vkCmdDispatchBase
成员函数并获取。./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask
成员函数并获取。./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures
成员函数并获取。./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR
成员函数并获取。./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupport
成员函数并获取。./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR
成员函数并获取./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR
成员函数并获取./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR
成员函数并获取./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR
成员函数并获取./engine/core
下TVulkanLoader.h
下的TDeviceFunctionTable
结构体中,增加PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR
成员函数并获取./engine/core
下TDevice.h
下的TDevice
类中InternalCreate
成员函数中,修正遍历enabledExtensions
时调用InspectExtensionAndVersionDependencies
导致的遍历器失效Bug
./engine/core
下TInstance.h
下的TInstance
类中InternalCreate
成员函数中,修正遍历enabledExtensions
时调用InspectExtensionAndVersionDependencies
导致的遍历器失效Bug
./engine/core
下TVmaAllocator.h
下的TVmaAllocator
类中InternalCreate
成员函数中,增加对于VmaAllocatorCreateInfo::flags
的使用(如果要使用buffer device address
的特性,需要开启VmaAllocatorCreateFlagBits::VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT
标志位)./engine/core
下TDevice.h
下的TDevice
类中InternalCreate
成员函数中,增加对于VkPhysicalDeviceBufferDeviceAddressFeaturesKHR
的使用激活设置./docs/Design
下增加ForVulkanFeatureNote.md
文档用于记录开发Vulkan
特性的流程./samples
下更新VulkanKHRRayTracingTest.cpp
探索实时光追的设备内存地址获取
2023/7/4 设计架构
./engine/core
下TVmaAllocator.h
下的TVmaAllocator
类中InternalCreate
成员函数中,对于VmaAllocatorCreateInfo::flags
的使用(在Vulkan 1.2
标准之后被升级为核心标准)./samples
下更新VulkanKHRRayTracingTest.cpp
探索实时光追的加速结构
2023/7/5 设计架构
./samples
下更新VulkanKHRRayTracingTest.cpp
探索实时光追的加速结构,成功创建一个底层加速结构
2023/7/6 设计架构
./samples
下更新VulkanKHRRayTracingTest.cpp
探索压缩实时光追的加速结构
2023/7/10 设计架构
./samples
下更新VulkanKHRRayTracingTest.cpp
探索实时光追的顶层加速结构
2023/7/11 设计架构
./samples
下更新VulkanKHRRayTracingTest.cpp
探索实时光追的顶层加速结构
2023/7/12 设计架构
./samples
下更新VulkanKHRRayTracingTest.cpp
探索实时光追的顶层加速结构./engine/core
下thirdparty
中SPIRV-Cross
和VulkanMemoryAllocator
转成submodules
./engine/core
下更新CMakeLists.txt
适配新版的VulkanMemoryAllocator
README
增加Clone
章节
2023/7/13 设计架构
./engine/core
下TDescriptor.h
中TDescriptorType
枚举增加ACCELERATION_STRUCTURE
用于加速结构描述符类型./engine/core
下TDescriptor.h
中增加TAccelerationStructureDescriptor
类。用于加速结构描述符./engine/core
下TShader.h
中TShader
类中增加std::vector<TAccelerationStructureDescriptor *> accelerationStructureDescriptors
成员变量。用于存储加速结构描述符./engine/core
下TShader.h
中TShader
类中增加std::vector<TAccelerationStructureDescriptor *> accelerationStructureDescriptor
成员变量。用于存储加速结构描述符./engine/core
下TShader.h
中TShader
类中InternalParseSpirV()
成员函数中增加对TAccelerationStructureDescriptor
的加速结构描述符的创建./engine/core
下TShader.h
中TShader
类中~TShader
析构函数中增加对TAccelerationStructureDescriptor
的加速结构描述符的销毁./asset/shaders
下增加RayTraceTest.rgen
光线生成着色器,用于测试光线生成着色器。./engine/core
下TShader.h
中TShaderType
枚举中增加RAY_GENERATION
、ANY_HIT
、CLOSEST_HIT
、MISS
、INTERSECTION
、CALLABLE
成员枚举量,用于光线追踪着色器./engine/core
下TShader.h
中TShader
类中更新GetVkShaderStageFlagBits()
成员函数,适配光线追踪着色器./engine/core
下TShader.cpp
中更新TShaderTypeToGlslangEShLanguage()
全局函数,适配光线追踪着色器./samples
下更新VulkanKHRRayTracingTest.cpp
探索实时光追的着色器和相关描述符./engine/core
下TShader.h
中增加TRayGenerationShader
类。用于描述光线生成着色器。
2023/7/14 设计架构
./engine/core
下TDescriptorPool.h
中TDescriptorPool
类中增加对TDescriptorType::ACCELERATION_STRUCTURE
的适配./engine/core
下TShader.h
中TShader
类中增加const std::vector<TAccelerationStructureDescriptor *> &GetAccelerationStructureDescriptors()
的成员函数./engine/core
下TPipeline.h
中TPipeline
类中增加对TDescriptorType::ACCELERATION_STRUCTURE
的适配./engine/core
下TPipelineDescriptorSet.h
中TPipelineDescriptorSet
类中增加void BindData(uint32_t set, uint32_t binding, uint32_t dstArrayElement, std::vector<VkAccelerationStructureKHR> &accelerationStructures)
的临时测试函数,用于绑定加速结构./engine/core
下TDescriptorSet.h
中TDescriptorSet
类中增加void BindData(uint32_t binding, uint32_t dstArrayElement, std::vector<VkAccelerationStructureKHR> &accelerationStructures)
的临时测试函数,用于绑定加速结构
2023/7/19 设计架构
./samples
下增加PureCCppWebGPUTest
项目文件夹,用于测试C/C++
的WebGPU
项目编译至浏览器的网页端渲染。- 更新
README.md
下的State
段落,简单记录当前开发状态。- 更新
./docs/Design/WebGPU_CCPP.md
文档,增加对PureCCppWebGPUTest
项目的说明。
2023/7/20 设计架构
./samples
下PureCCppWebGPUTest
项目文件夹增加compile_flags.txt
,用于设置clangd
的Emscripten
的头文件目录。
2023/7/22 设计架构
./samples
下新增PureCCppWebGlslangAndSpirVCrossTest
项目。用于存放将GLSL
或HLSL
或Spir-V
着色器代码通过Web
网页端,在线将代码进行互相编译和转换项目。
2023/7/24 设计架构
./samples
下新增PureCCppWebGlfwTest
项目。用于存放glfw
的Web
网页端测试工程。./samples
下新增PureCCppWebImGuiTest
项目。用于存放imgui
的Web
网页端测试工程。
2023/7/25 设计架构
./samples
下新增PureCCppWebShaderCompiler
项目。用于存放在线GLSL
、HLSL
和SPIR-V
网页端着色器转化编译器项目。./samples
下更新PureCCppWebShaderCompiler
项目。提供在线GLSL
、HLSL
转SPIR-V
功能。
2023/7/26 设计架构
./samples
下更新PureCCppWebShaderCompiler
项目。增大显示大小,之前的可视范围太小了。./samples
下更新PureCCppWebShaderCompiler
项目。增加Ctrl+V
粘贴代码快捷键的支持。
2023/7/27 设计架构
./samples
下更新PureCCppWebShaderCompiler
项目。增加反编译SPIR-V
的功能。
2023/7/28 设计架构
./samples
下更新PureCCppWebShaderCompiler
项目。增加编译SPIR-V
的功能。
2023/7/29 设计架构
./samples
下更新PureCCppWebShaderCompiler
项目。增加编译GLSL
、HLSL
、MSL
、C++
和Reflection
的功能。
2023/7/31 设计架构
./samples
下更新PureCCppWebShaderCompiler
项目。修改Bug
和一些错误。
2023/8/1 设计架构
./samples
下新增PureCCppMiniWebGPUTest
项目。一个使用C/C++
书写的WebGPU
的小例子。./samples
下更新PureCCppMiniWebGPUTest
项目。测试WebGPU
的C
接口。
2023/8/2 设计架构
./samples
下更新PureCCppMiniWebGPUTest
项目。测试WebGPU
的C
接口。
2023/8/3 设计架构
./samples
下更新PureCCppMiniWebGPUTest
项目。测试WebGPU
的C
接口的WGPUCommandEncoder
和WGPUCommandBuffer
。
2023/8/7 设计架构
./engine/core
下新增TRayTracingPipeline.h
和TRayTracingPipeline.cpp
用于声明定义TRayTracingPipeline
类./engine/core
下TShader.h
中增加TAnyHitShader
类。用于描述任意命中着色器。./engine/core
下TShader.h
中增加TClosestHitShader
类。用于描述最近命中着色器。./engine/core
下TShader.h
中增加TMissShader
类。用于描述未命中着色器。./engine/core
下TShader.h
中增加TIntersectionShader
类。用于描述相交着色器。./engine/core
下TShader.h
中增加TCallableShader
类。用于描述可调用着色器。./engine/core
下TShader.h
中TShader
类中增加std::vector<uint32_t> GetSpirV()
成员函数。用于获取着色器的Spir-V
的数据。./asset/shaders
下新增RayTracingKHRTest.rmiss
。表示光追测试程序使用的未命中着色器。./asset/shaders
下RayTraceTest.rgen
更改命名为RayTracingKHRTest.rgen
。./samples
下更新VulkanKHRRayTracingTest.cpp
探索光追管线和着色器
2023/8/9 设计架构
./samples
下更新SubpassTest.cpp
。修正内部小三角形随时间变化大小。./samples
下更新VulkanKHRRayTracingTest.cpp
。可控制视点方便查看渲染效果。
2023/8/10 设计架构
./samples
下更新VulkanKHRRayTracingTest.cpp
。尝试创建光追管线。./engine/core
下TExtensionInfo.cpp
中TAllExtensionNames
增加VK_KHR_ray_tracing_pipeline
元素值。用于光追管线扩展。./engine/core
下TExtensionInfo.h
中TExtensionType
增加VK_KHR_RAY_TRACING_PIPELINE
枚举值。用于与VK_KHR_ray_tracing_pipeline
元素光追管线扩展元素对应。./engine/core
下TDevice.cpp
中InspectExtensionAndVersionDependencies
中增加对VK_KHR_RAY_TRACING_PIPELINE
扩展依赖的检查。./engine/core
下TVulkanLoader.h
中TDeviceFunctionTable
结构体中增加对VK_KHR_ray_tracing_pipeline
扩展函数的声明./engine/core
下TVulkanLoader.cpp
中LoadDeviceDriver
函数中增加对VK_KHR_ray_tracing_pipeline
扩展函数的加载获取.docs/Design
下增加ForVulkanExtensionNote.md
文档文件,用于记录Vulkan Extension 开发流程
2023/8/11 设计架构
./engine/core
下TPhysicalDeviceInfo.h
中TPhysicalDeviceInfo
类中增加VkPhysicalDeviceRayTracingPipelineFeaturesKHR physicalDeviceRayTracingPipelineFeaturesKHR
成员变量。用于存储光追管线特性信息。./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool rayTracingPipeline
成员变量。用于存储光追管线特性信息。./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool rayTracingPipelineShaderGroupHandleCaptureReplay
成员变量。用于存储光追管线特性信息。./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool rayTracingPipelineShaderGroupHandleCaptureReplayMixed
成员变量。用于存储光追管线特性信息。./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool rayTracingPipelineTraceRaysIndirect
成员变量。用于存储光追管线特性信息。./engine/core
下TPhysicalDevice.h
中TPhysicalDeviceFeatures
类中增加bool rayTraversalPrimitiveCulling
成员变量。用于存储光追管线特性信息。./engine/core
下TPhysicalDevice
类中EnumerateProperties
成员函数中增加对VkPhysicalDeviceRayTracingPipelineFeaturesKHR
特性的获取。./engine/core
下TPhysicalDevice
类中GetDeviceFeatures
成员函数中增加对VkPhysicalDeviceRayTracingPipelineFeaturesKHR
特性的设置。./engine/core
下TDevice
类中InternalCreate
成员函数中增加对VkPhysicalDeviceRayTracingPipelineFeaturesKHR
特性的设置。./samples
下更新VulkanKHRRayTracingTest.cpp
。尝试创建光追管线和着色器绑定表。
2023/8/12 设计架构
./engine/core
下TDevice
类中GetBestGraphicsQueue
成员函数对score
的设置有Bug
,修正。./engine/core
下TDevice
类中GetBestComputeQueue
成员函数对score
的设置有Bug
,修正。./engine/core
下TDevice
类中GetBestTransferQueue
成员函数对score
的设置有Bug
,修正。./engine/core
下TDevice
类中GetBestSparseBindingQueue
成员函数对score
的设置有Bug
,修正。./engine/core
下TDevice
类中GetBestProtectedQueue
成员函数对score
的设置有Bug
,修正。
2023/8/14 设计架构
./engine/core
下TVulkanAllocator
类中AlignUp
静态成员函数移至TAllocator
类中。并增加std::is_integral
的判断。./samples
下更新VulkanKHRRayTracingTest.cpp
。尝试创建光追管线和着色器绑定表。
2023/8/15 设计架构
./engine/core
下TAllocator
类中AlignUp
静态成员函数修改计算错误的Bug
。./samples
下更新VulkanKHRRayTracingTest.cpp
。尝试创建光追管线和着色器绑定表。./samples
下更新VulkanKHRRayTracingTest.cpp
。尝试创建用于光追的图片。
2023/8/16 设计架构
./asset/shaders
下RayTracingKHRTest.rgen
着色器中set
和binding
写反了,修正。./samples
下更新VulkanKHRRayTracingTest.cpp
。尝试创建用于光追的描述符集并进行vkCmdTraceRaysKHR
光追指令。
2023/8/17 设计架构
./samples
下更新VulkanKHRRayTracingTest.cpp
。修正一些小Bug
和着色器矩阵不匹配的问题。现在可以输出正确光追渲染结果了。
2023/8/18 设计架构
./samples
下增加VulkanKHRRayTracingTestForLighting
示例。用于尝试使用硬件实时光追渲染光照。./asset/shaders
下增加RayTracingKHRTestForLighting.rchit
着色器。用于VulkanKHRRayTracingTestForLighting
示例。./asset/shaders
下增加RayTracingKHRTestForLighting.rgen
着色器。用于VulkanKHRRayTracingTestForLighting
示例。./asset/shaders
下增加RayTracingKHRTestForLighting.miss
着色器。用于VulkanKHRRayTracingTestForLighting
示例。./samples
下更新VulkanKHRRayTracingTest
示例。将模型摆正。./samples
下优化VulkanKHRRayTracingTest
示例。丰富渲染。
2023/8/19 设计架构
./samples
下更新PureCCppMiniWebGPUTest
示例。研究WebGPU
。
2023/8/20 设计架构
./samples
下新增PureMiniWebGPUTest
示例。研究纯C
语言版WebGPU
。
2023/8/21 设计架构
./samples
下更新VulkanKHRRayTracingTestForLighting
示例。研究光照计算。
2023/8/22 设计架构
./samples
下新增VulkanKHRRayTracingTestForLightingShadow
示例。研究光照计算中的阴影。./asset/shaders
下新增RayTracingKHRTestForLightingShadow.rgen
着色器。./asset/shaders
下新增RayTracingKHRTestForLightingShadow.rchit
着色器。./asset/shaders
下新增RayTracingKHRTestForLightingShadow.rmiss
着色器。./asset/shaders
下新增RayTracingKHRTestForLightingShadowShadow.rmiss
着色器。
2023/8/23 设计架构
./samples
下新增VulkanKHRRayTracingTestForLightingShadowWithTexture
示例。研究光追光照计算中对纹理采样。./asset/shaders
下新增RayTracingKHRTestForLightingShadowWithTexture.rgen
着色器。./asset/shaders
下新增RayTracingKHRTestForLightingShadowWithTexture.rchit
着色器。./asset/shaders
下新增RayTracingKHRTestForLightingShadowWithTexture.rmiss
着色器。./asset/shaders
下新增RayTracingKHRTestForLightingShadowShadowWithTexture.rmiss
着色器。
2023/8/28 设计架构
./samples
下新增VulkanKHRRayTracingJitterCamera
示例。通过抖动采样点并多帧累积采样结果进行抗锯齿。./asset/shaders
下新增random.glsl
文件,用于生成随机数。./asset/shaders
下新增RayTracingKHRJitterCamera.rgen
文件,用于VulkanKHRRayTracingJitterCamera
示例。./asset/shaders
下新增RayTracingKHRJitterCamera.rmiss
文件,用于VulkanKHRRayTracingJitterCamera
示例。./asset/shaders
下新增RayTracingKHRJitterCameraShadow.rmiss
文件,用于VulkanKHRRayTracingJitterCamera
示例。./asset/shaders
下新增RayTracingKHRJitterCamera.rchit
文件,用于VulkanKHRRayTracingJitterCamera
示例。
2023/8/29 设计架构
./samples
下新增VulkanKHRRayTracingAnyHitShader
示例。用于研究实时光追中的任意命中着色器。./asset/shaders
下新增RayTracingAnyHitShader.rgen
文件,用于VulkanKHRRayTracingAnyHitShader
示例。./asset/shaders
下新增RayTracingAnyHitShader.rmiss
文件,用于VulkanKHRRayTracingAnyHitShader
示例。./asset/shaders
下新增RayTracingAnyHitShaderShadow.rmiss
文件,用于VulkanKHRRayTracingAnyHitShader
示例。./asset/shaders
下新增RayTracingAnyHitShader.rchit
文件,用于VulkanKHRRayTracingAnyHitShader
示例。
2023/8/30 设计架构
./samples
下更新VulkanKHRRayTracingAnyHitShader
示例。用于研究实时光追中的任意命中着色器。./asset/shaders
下新增RayTracingAnyHitShader.rahit
文件(任意命中着色器),用于VulkanKHRRayTracingAnyHitShader
示例。
2023/8/31 设计架构
./asset/shaders
下新增RayTracingAnyHitShaderShadow.rahit
文件(任意命中着色器),用于VulkanKHRRayTracingAnyHitShader
示例中阴影负载1
的任意命中。./asset/shaders
下更新RayTracingAnyHitShaderShadow.rmiss
。将阴影负载增加随机种子seed
成员。./asset/shaders
下更新RayTracingAnyHitShader.rchit
。将阴影负载增加随机种子seed
成员。./samples
下更新VulkanKHRRayTracingAnyHitShader
示例。增加对阴影负载的任意命中着色器的适配。./samples
下更新BRDF
示例。使用非Y
轴向上的材质球,并将背景清空成浅色。./samples
下更新NormalTexture
示例。使用非Y
轴向上的材质球,并将背景清空成浅色。./samples
下更新PBRTest
示例。roughness
参数默认设置为0.5
。
2023/9/4 设计架构
./samples
下新增VulkanKHRRayTracingTestForInstances
示例。用于光追实例化(多实体)。
2023/9/6 设计架构
./samples
下更新VulkanKHRRayTracingTestForInstances
示例。用于光追实例化(多实体)。
2023/9/8 设计架构
./samples
下更新VulkanKHRRayTracingTestForReflections
示例。用于光追反射。./asset/shaders
下新增RayTracingKHRTestForReflections.rgen
文件,用于VulkanKHRRayTracingTestForReflections
示例。./asset/shaders
下新增RayTracingKHRTestForReflections.rmiss
文件,用于VulkanKHRRayTracingTestForReflections
示例。./asset/shaders
下新增RayTracingKHRTestForReflectionsShadow.rmiss
文件,用于VulkanKHRRayTracingTestForReflections
示例。./asset/shaders
下新增RayTracingKHRTestForReflections.rchit
文件,用于VulkanKHRRayTracingTestForReflections
示例。
2023/9/11 设计架构
./samples
下更新VulkanKHRRayTracingTestForReflections_WithoutLimited
示例。用于不受VkPhysicalDeviceRayTracingPipelinePropertiesKHR::maxRayRecursionDepth
限制的光追反射。./asset/shaders
下新增RayTracingKHRTestForReflections_WithoutLimited.rgen
文件,用于VulkanKHRRayTracingTestForReflections_WithoutLimited
示例。./asset/shaders
下新增RayTracingKHRTestForReflections_WithoutLimited.rmiss
文件,用于VulkanKHRRayTracingTestForReflections_WithoutLimited
示例。./asset/shaders
下新增RayTracingKHRTestForReflectionShadows_WithoutLimited.rmiss
文件,用于VulkanKHRRayTracingTestForReflections_WithoutLimited
示例。./asset/shaders
下新增RayTracingKHRTestForReflections_WithoutLimited.rchit
文件,用于VulkanKHRRayTracingTestForReflections_WithoutLimited
示例。
2023/9/19 设计架构
./samples
下新增VulkanKHRRayTracingTestForMultiClosestHits
示例。用于研究实时光追中的多个最近命中着色器。
2023/9/20 设计架构
engine\core\include
下TCore.h
新增对于VK_USE_PLATFORM_OHOS
或OHOS_PLATFORM
的开源鸿蒙系统的TURBO_PLATFORM_OPEN_HARMONY
宏定义的。engine\core\include
下TCore.h
新增对于vulkan_ohos.h
的开源鸿蒙系统的头文件加入。engine\core\src
下TVulkanLoader.cpp
新增对于的开源鸿蒙系统TURBO_PLATFORM_OPEN_HARMONY
宏适配。
2023/9/21 设计架构
engine\core\include
下TVulkanLoader.h
将外部全局变量PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr
移动到TVulkanLoader
类中作为成员变量。engine\core\include
下TVulkanLoader.h
将外部全局变量PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion
移动到TVulkanLoader
类中作为成员变量。engine\core\include
下TVulkanLoader.h
将外部全局变量PFN_vkCreateInstance vkCreateInstance
移动到TVulkanLoader
类中作为成员变量。engine\core\include
下TVulkanLoader.h
将外部全局变量PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties
移动到TVulkanLoader
类中作为成员变量。engine\core\include
下TVulkanLoader.h
将外部全局变量PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties
移动到TVulkanLoader
类中作为成员变量。engine\core\include
下TVulkanLoader.h
中的TVulkanLoader
类Turbo::Core::TVulkanLoader::Load
使用相应的成员变量获取函数。engine\core\src
下TVulkanLoader.cpp
中的TVulkanLoader
类构造函数获取初始化相应的成员变量。engine\core\include
下TVulkanLoader.h
增加struct TGlobalFunctionTable
结构体,用于将Vulkan
全局函数打包。engine\core\include
下TVulkanLoader.h
增加TGlobalDriver
重命名TGlobalFunctionTable
。engine\core
下TVulkanLoader
类增加TGlobalDriver LoadGlobalDriver()
成员函数,并实现。engine\core
下TVmaAllocator
类的构造函数中使用TVulkanLoader
获取vkGetInstanceProcAddr
接口。engine\core
下TExtensionInfo
类的GetInstanceExtensionCount
函数中使用TVulkanLoader
中的LoadGlobalDriver
接口获取vkEnumerateInstanceExtensionProperties
接口。engine\core
下TExtensionInfo
类的GetInstanceExtensions
函数中使用TVulkanLoader
中的LoadGlobalDriver
接口获取vkEnumerateInstanceExtensionProperties
接口。engine\core
下TInstance
类的InternalCreate
函数中使用TVulkanLoader
中的LoadGlobalDriver
接口获取vkCreateInstance
接口。engine\core
下TLayerInfo
类的GetInstanceLayerCount
函数中使用TVulkanLoader
中的LoadGlobalDriver
接口获取vkEnumerateInstanceLayerProperties
接口。engine\core
下CMakeLists.txt
中增加TCORE_SHARED_LIBS
选项,用于编译输出TCore
的动态库。
2023/9/24 设计架构
./samples
下增加AndroidVulkanTest
,用于研究Adnroid
的Vulkan
,并尝试将Turbo
适配到Android
平台。./engine/core/src
下TVulkanLoader.cpp
增加对于TURBO_PLATFORM_ANDROID
宏适配,用于适配到Android
平台。./engine/core
下TSurface
增加对于TURBO_PLATFORM_ANDROID
宏适配,用于适配到Android
平台。./engine/core
下TSurface
类中,适配Android
平台,增加ANativeWindow *nativeWindow
成员变量。./engine/core
下TSurface
类中,适配Android
平台,增加PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR
成员变量。./engine/core/src
下实现TSurface
类中TSurface(Turbo::Core::TDevice *device, ANativeWindow *window)
构造函数。适配Android
平台。./engine/core/src
下更新TSurface
类中InternalCreate
函数。适配Android
平台。./engine/core/src
下更新TSurface
类中GetSurfaceSupportQueueFamilys()
函数。适配Android
平台。./engine/core/include
下更新TPlatform.h
中的TPlatformType
平台枚举值声明。会与安卓平台特定的ADNROID
宏冲突。./engine/core/src
下更新TVulkanLoader.cpp
中的TVulkanLoader::GetVulkanVersion()
函数。适配Android
平台。./engine/core/src
下更新TPlatform.cpp
中修正return32;
为return 32;
的Bug
。
2023/9/25 设计架构
engine/core
下更新TSwapchain
的构造函数。修改之前强制判断并使用TCompositeAlphaBits::ALPHA_OPAQUE_BIT
透明配置,该配置在Android
平台上不适用。在Android
平台上会返回TCompositeAlphaBits::ALPHA_INHERIT_BIT
,也就是透明度不由Vulkan
控制,而是Android
平台自己控制。engine/core
下更新TSwapchain
的InternalCreate()
函数。增加对于TCompositeAlphaBits::ALPHA_OPAQUE_BIT
的判断,防止在Android
平台上导致不应该的异常抛出。engine/core
下更新TException
。统一错误消息格式,使用标准异常消息输出。engine/core
下更新TCore
下增加std::string TResultToString(TResult result)
函数。用于帮助将结果枚举转成字符串。engine/core
下更新TSurface
下InternalCreate()
。将VkAndroidSurfaceCreateInfoKHR
下的sType
设置为VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR
,之前为VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR
是个Bug
engine/core
下更新TException
,增加一个std::string whatStr
成员变量。移除使用exception(char const* const _Message)
构造函数(该函数非标准函数)。
2023/9/26 设计架构
engine/core
下更新TException
,增加std::string GetTip()
成员函数。移用于获取提示信息。engine/core
下更新TVersion
的版本大小比较算法,之前的比较有逻辑Bug
。engine/core
下增加AndroidPureHelloTriangle
文件夹,用于存放Turbo
在Android
上绘制三角形的示例程序。
2023/9/27 设计架构
./samples
下增加VulkanKHRRayTracingTestForAnimationTLAS
示例。用于研究光追中顶层加速结构的更新。
2023/9/28 设计架构
./samples
下增加VulkanKHRRayTracingTestForAnimationBLAS
示例。用于研究光追中底层加速结构的更新。./asset/shaders
下增加RayTracingKHRTestForAnimationBLAS.comp
计算着色器。用于研究光追中底层加速结构更新中使用计算管线更新顶点数据。./engine/core
下TDescriptorSet
类中增加void BindData(uint32_t binding, TBuffer *buffer, uint32_t dstArrayElement)
成员函数。用于简单绑定单个缓存。./engine/core
下TPipelineDescriptorSet
类中增加void BindData(uint32_t set, uint32_t binding, TBuffer *buffer, uint32_t dstArrayElement)
成员函数。用于简单绑定单个缓存。./engine/core
下TDescriptorSet
类中BindData(..., std::vector<TBuffer *> &buffers)
中增加对STORAGE_BUFFER
描述符类型判断。- 不支持
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
描述符类型(相关代码未实现)。需要填补这一部分空缺。./engine/core
下TDescriptor.h
中增加TStorageBufferDescriptor
类声明。用于表述VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
类型的描述符./engine/core
下TShader
类中增加std::vector<TStorageBufferDescriptor *> storageBufferDescriptors
成员变量。用于存储VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
类型的描述符。./engine/core
下TShader
类析构中增加对std::vector<TStorageBufferDescriptor *> storageBufferDescriptors
成员的内存释放。./engine/core
下TShader
类中增加const std::vector<TStorageBufferDescriptor *> &GetStorageBufferDescriptors()
成员函数。用于获取着色器中的对应描述符信息。./engine/core
下TPipeline
类中InternalCreate()
成员函数中增加对于std::vector<TStorageBufferDescriptor *>
描述符的处理。
2023/10/11 设计架构
./samples
下增加VulkanKHRRayTracingTestForIntersectionShader
示例。用于研究光追中相交着色器的使用。./asset/shaders
下新增RayTracingKHRTestForIntersection.rgen
文件,用于VulkanKHRRayTracingTestForIntersectionShader
示例。./asset/shaders
下新增RayTracingKHRTestForIntersection.rchit
文件,用于VulkanKHRRayTracingTestForIntersectionShader
示例。./asset/shaders
下新增RayTracingKHRTestForIntersection.rmiss
文件,用于VulkanKHRRayTracingTestForIntersectionShader
示例。./asset/shaders
下新增RayTracingKHRTestForIntersection.rint
文件,用于VulkanKHRRayTracingTestForIntersectionShader
示例。
2023/10/29 设计架构
- 配了一台
3060Ti
显卡的电脑,光追研究继续。./engine/render
下TBuffer.h
中TUniformBuffer
移除std::enable_if_t
(llvm-mingw
编译器不支持,估计是C++
标准配置不对)。./thirdparty
下更新KTX-Software
到最新main
分支。./engine/render
下TContext
中移除对于TDescriptorID
的初始化列表写法使用最原始的结构体赋值法。(llvm-mingw
好像不支持初始化列表写法,目前不知道如何设置编译器支持初始化列表写法,估计是C++
标准配置不对)。./engine/render
下TContext
中将std::is_class_v<A_Test>
改为std::is_class<A_Test>::value
。./samples
下VulkanTest
中将所有std::exception(const std::string&)
改为Turbo::Core::TException
。./samples
下VulkanAllocatorTest
中将所有std::exception(const std::string&)
改为Turbo::Core::TException
。
2023/10/31 设计架构
./engine/render
下TBuffer.h
中TUniformBuffer
移除std::enable_if_t
(C++14
特性),使用std::enable_if
替换(C++11
特性)。
2023/11/4 设计架构
./samples
下增加VulkanKHRRayTracingTestForCallableShader
示例。用于研究可调用着色器的使用。./asset/shaders
下新增RayTracingKHRTestForCallableShader.rchit
文件,用于VulkanKHRRayTracingTestForCallableShader
示例。./asset/shaders
下新增RayTracingKHRTestForCallableShader_R.rchit
文件,用于VulkanKHRRayTracingTestForCallableShader
示例。./asset/shaders
下新增RayTracingKHRTestForCallableShader_G.rchit
文件,用于VulkanKHRRayTracingTestForCallableShader
示例。./asset/shaders
下新增RayTracingKHRTestForCallableShader_B.rchit
文件,用于VulkanKHRRayTracingTestForCallableShader
示例。./engine/core
下TPhysicalDeviceInfo.h
中类TPhysicalDeviceInfo
中新增VkPhysicalDeviceRayQueryFeaturesKHR physicalDeviceRayQueryFeaturesKHR
成员。./engine/core
下TPhysicalDevice.h
中类TPhysicalDeviceFeatures
中新增bool rayQuery = false
成员。./engine/core
下TPhysicalDevice.h
中类TPhysicalDevice
中更新EnumerateProperties()
成员函数,获取并保存VkPhysicalDeviceRayQueryFeaturesKHR
相关数据。./engine/core
下TPhysicalDevice.h
中类TPhysicalDevice
中更新GetDeviceFeatures()
成员函数,获取VkPhysicalDeviceRayQueryFeaturesKHR
相关数据。./engine/core
下TDevice.h
中类TDevice
中更新InternalCreate()
成员函数,更新对VkPhysicalDeviceRayQueryFeaturesKHR
相关数据的激活设置。
2023/11/5 设计架构
./samples
下增加VulkanRayQueryTest
示例。用于研究VK_KHR_ray_query
扩展的使用。./engine/core
下TExtensionInfo.cpp
中数组TAllExtensionNames
中增加VK_KHR_ray_query
项。./engine/core
下TExtensionInfo.h
中枚举TExtensionType
中增加VK_KHR_RAY_QUERY
项。./engine/core
下TDevice.cpp
中,类TDevice
的成员函数InspectExtensionAndVersionDependencies()
中增加对VK_KHR_RAY_QUERY
扩展依赖项的检查。
2023/11/6 设计架构
./samples
下更新VulkanRayQueryTest
示例。用于研究VK_KHR_ray_query
扩展的使用。
2023/11/7 设计架构
./samples
下更新VulkanRayQueryTest
示例。用于研究VK_KHR_ray_query
扩展的使用。./asset/shaders
下增加VulkanRayQueryTest.vert
示例。用于研究VK_KHR_ray_query
扩展的顶点着色器。./asset/shaders
下增加VulkanRayQueryTest.frag
示例。用于研究VK_KHR_ray_query
扩展的片元着色器。./engine/core
下TDescriptor.cpp
中,类TDescriptor
的成员函数GetVkDescriptorType()
中增加对ACCELERATION_STRUCTURE
加速结构描述符类型(VkDescriptorType::VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR
)的适配。
2023/11/8 设计架构
./asset
下增加CornellBox
的glTF
模型。
2023/11/9 设计架构
./samples
下增加VulkanKHRRayTracingTestForGLTF
示例。用于研究对于glTF
模型文件的光线追踪渲染。
2023/11/10 设计架构
./samples
下更新VulkanKHRRayTracingTestForGLTF
示例。用于研究对于glTF
模型文件的光线追踪渲染。
2023/11/11 设计架构
./samples
下更新VulkanKHRRayTracingTestForGLTF
示例。用于研究对于glTF
模型文件的光线追踪渲染。
2023/11/12 设计架构
./samples
下更新VulkanKHRRayTracingTestForGLTF
示例。用于研究对于glTF
模型文件的光线追踪渲染。glTF
场景解析和基本渲染完成。
2023/11/13 设计架构
./samples
下更新VulkanKHRRayTracingTestForGLTF
示例。用于研究对于glTF
模型文件的光线追踪渲染。完成对于光追结果的采样积累。./samples
下更新VulkanKHRRayTracingTestForGLTF
示例。用于研究对于glTF
模型文件的光线追踪渲染。完成对于材质信息的采样渲染。
2023/11/14 设计架构
./samples
下更新VulkanKHRRayTracingTestForGLTF
示例。用于研究对于glTF
模型文件的光线追踪渲染。修正法线错误Bug
。./engine/core
下更新TDevice
类中InspectExtensionAndVersionDependencies()
成员函数中增加对VK_KHR_shader_clock
扩展的依赖检查。./engine/core
下更新TPhysicalDeviceInfo.h
中class TPhysicalDeviceInfo
中增加VkPhysicalDeviceShaderClockFeaturesKHR physicalDeviceShaderClockFeaturesKHR
成员。./engine/core
下更新TPhysicalDevice.h
中class TPhysicalDeviceFeatures
中增加bool shaderSubgroupClock
和bool shaderDeviceClock
成员。./engine/core
下更新TPhysicalDevice
类中EnumerateProperties()
成员函数中增加对VkPhysicalDeviceShaderClockFeaturesKHR
特性的获取。./engine/core
下更新TPhysicalDevice
类中GetDeviceFeatures()
成员函数中增加对VkPhysicalDeviceShaderClockFeaturesKHR
特性的赋值。./engine/core
下更新TDevice
类中InternalCreate()
成员函数中增加对VkPhysicalDeviceShaderClockFeaturesKHR
特性的激活。./samples
下更新VulkanKHRRayTracingTestForGLTF
示例。用于研究对于glTF
模型文件的光线追踪渲染。增加对于VK_KHR_shader_clock
扩展和相关特性的支持。
2023/11/15 设计架构
./engine/core
下新增TReferenced
类。用于计数引用内存回收机制。
2023/11/16 设计架构
./engine/core
下更新TReferenced
类中的UnReference()
成员函数。修正delete
返回对象内部变量的Bug
。./samples
下增加ReferencedTest
示例。用于计数引用内存回收机制测试。./engine/core
下新增ref_ptr
类。用于计数引用内存回收机制。
2023/11/17 设计架构
./engine/core
下更新ref_ptr
类。用于计数引用内存回收机制。
2023/11/18 设计架构
./engine/core
下将ref_ptr
重命名为TRefPtr
(统一命名规则)。用于计数引用内存回收机制。./engine/core
下更新TRefPtr
。用于计数引用内存回收机制。
2023/11/19 设计架构
Turbo
使用Turbo::Core::TRefPtr
和Turbo::Core::TReferenced
进行重构。./engine/core
下将Turbo::Core::TObject
继承自Turbo::Core::TReferenced
。./engine/core
下将Turbo::Core::TInfo
暂时取消继承自Turbo::Core::TObject
。Turbo
中将所有继承自Turbo::Core::TObject
的子类的析构函数全部转成protected
权限。./engine/core
下将TBarrier.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TBuffer.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TCommandBuffer.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TCommandBufferPool.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。
2023/11/20 设计架构
./engine/core
下将TComputePipeline.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TDescriptor.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TDescriptorPool.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TDescriptorSet.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TDescriptorSetLayout.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TDevice.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TDeviceQueue.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。
2023/11/21 设计架构
./engine/core
下将TEngine.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TFence.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TFramebuffer.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TGraphicsPipeline.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TImage.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。
2023/11/22 设计架构
./engine/core
下将TImageView.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TInstance.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TPhysicalDevice.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TPipeline.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TPipelineCache.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TPipelineDescriptorSet.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TPipelineLayout.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TRenderingPipeline.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TRenderPass.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TSampler.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TSemaphore.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TShader.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。
2023/11/23 设计架构
./engine/core
下将TSurface.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TSwapchain.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TVmaAllocator.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TVulkanAllocator.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下将TVulkanLoader.h
及其cpp
中的所有计数引用子类使用Turbo::Core::TRefPtr
维护。./engine/core
下更新TRefPtr
中使用class
声明的模板关键字,使用typename
替代。./engine/core
下更新TReferenced
中增加virtual bool Valid() const
成员虚函数。用于判定该引用是否有效(用于自定义判定有效性)。./engine/core
下更新TRefPtr
中更新bool Valid() const
成员函数。增加对该指针自身对象的有效性判断(用于自定义判定有效性)。./engine/core
下更新TBarrier.cpp
中更新TBufferMemoryBarrier
构造函数的buffer
参数使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TBarrier.cpp
中更新TImageMemoryBarrier
构造函数的image
参数使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TBarrier.cpp
中更新TImageMemoryBarrier
构造函数的imageView
参数使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TCommandBuffer.cpp
中更新TCommandBufferBase
构造函数的commandBufferPool
参数使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TCommandBuffer.cpp
中更新TCommandBufferBase
的CmdBindPipelineDescriptorSet
成员函数使用Turbo::Core::TRefPtr
。./engine/core
下更新TCommandBufferPool.cpp
中更新TCommandBufferPool
的Free(const TRefPtr<TCommandBufferBase> &commandBufferBase)
成员函数移除对delete
的使用。./engine/core
下更新TCommandBufferPool.cpp
中更新~TCommandBufferPool
析构函数,使用Turbo::Core::TRefPtr
。./engine/core
下更新TCommandBufferPool.cpp
中更新Free(const TRefPtr<TCommandBuffer> &commandBuffer)
成员函数,使用Turbo::Core::TRefPtr
。./engine/core
下更新TCommandBufferPool.cpp
中更新Free(const TRefPtr<TSecondaryCommandBuffer> &secondaryCommandBuffer)
成员函数,使用Turbo::Core::TRefPtr
。./engine/core
下更新TCommandBufferPool.cpp
中更新TCommandBufferPool
构造函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TCommandBuffer.cpp
中更新CmdBindDescriptorSets
成员函数中,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TCommandBuffer.cpp
中更新TCommandBufferBase
的CmdBeginRendering
成员函数中,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TCommandBuffer.cpp
中更新TCommandBufferBase
的CmdUpdateBuffer
成员函数中,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TCommandBuffer.cpp
中更新TCommandBufferBase
的CmdPushConstants
成员函数中,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDescriptorPool.cpp
中更新TDescriptorPool
的构造函数中,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDescriptorPool.cpp
中更新TDescriptorPool
的Free
成员函数,回收资源。./engine/core
下更新TCommandBufferPool.cpp
中更新TCommandBufferPool
的Free
成员函数,回收资源。
2023/11/24 设计架构
./engine/core
下的TDescriptorPool
类内增加std::vector<TRefPtr<TPipelineDescriptorSet>> pipelineDescriptorSets
成员。./engine/core
下的TDescriptorPool
类内更新Allocate(...)
成员函数。内部使用容器存储。./engine/core
下的TDescriptorPool
类内更新Free(...)
成员函数。内部判断是否为该池分配。./engine/core
下的TDescriptorPool
类内更新~TDescriptorPool()
析构函数。回收所有分配的描述符。./engine/core
下更新TDescriptorSet.cpp
中更新TDescriptorSet
的构造函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDescriptorSet.cpp
中更新TDescriptorSet
的BindData
成员函数,使用Turbo::Core::TRefPtr
。./engine/core
下更新TDescriptorSetLayout.cpp
中TDescriptorSetLayout
的InternalCreate
成员函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDescriptorSetLayout.cpp
中TDescriptorSetLayout
的构造函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDevice.cpp
中TDevice
的AddChildHandle
成员函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDevice.cpp
中TDevice
的InternalCreate
成员函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDevice.cpp
中TDevice
的InternalDestroy
成员函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDevice.cpp
中TDevice
的构造函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDevice.cpp
中TDevice
的析构函数,移除对于delete
的显式调用。./engine/core
下更新TDevice.cpp
中TDevice
的GetDeviceQueueCountByQueueFamily
成员函数,使用Turbo::Core::TRefPtr<T>
。./engine/core
下更新TDeviceQueue
中的Submit
成员函数。将指针变成引用。并在内部适配Turbo::Core::TRefPtr
。./engine/core
下更新TDeviceQueue
。增加只使用Fence
的Submit
成员函数。并在内部适配Turbo::Core::TRefPtr
。./engine/core
下更新TDeviceQueue.cpp
中TDeviceQueue
的Present
成员函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TDeviceQueue.cpp
中TDeviceQueue
的AddChildHandle
成员函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TEngine.cpp
中TEngine
的VerificationInitVulkan
成员函数,移除对于delete
的显式调用。./engine/core
下更新TEngine.cpp
中TEngine
的析构函数,移除对于delete
的显式调用。./engine/core
下更新TEngine.cpp
中TEngine
的GetInstance
函数,使用Turbo::Core::TRefPtr
适配。./engine/core
下更新TException
。继承自std::runtime_error
。并移除不必要的成员变量和函数。./engine/core
下更新TFence.cpp
中TFence
的构造函数,使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下更新TFence.cpp
中TFence
的Wait
成员函数,使用Turbo::Core::TRefPtr
进行适配。./engine/core
下更新TCommandBufferBase
中CmdBindDescriptorSets
成员函数,std::vector
形参使用const
进行适配。./engine/core
下更新TCommandBufferBase
中CmdBindVertexBuffers
成员函数,std::vector
形参使用const
进行适配。./engine/core
下更新TCommandBufferBase
中CmdSetViewport
成员函数,std::vector
形参使用const
进行适配。./engine/core
下更新TCommandBufferBase
中CmdSetScissor
成员函数,std::vector
形参使用const
进行适配。./engine/core
下更新TCommandBufferBase
中CmdPipelineBarrier
成员函数,std::vector
形参使用const
进行适配。./engine/core
下更新TAttachment
中所有信息获取函数后增加const
。./engine/core
下更新TMemoryBarrier
中所有信息获取函数后增加const
。./engine/core
下更新TBufferMemoryBarrier
中所有信息获取函数后增加const
。./engine/core
下更新TImageMemoryBarrier
中所有信息获取函数后增加const
。./engine/core
下更新TReferenced
中增加void Release() const
成员函数。用于内存强制回收。./engine/core
下更新TRefPtr<T>
中增加void Release()
成员函数。用于内存强制回收。./engine/core
下更新TCommandBufferPool
中Allocate
成员函数。优化调用。./engine/core
下更新TCommandBufferPool
中AllocateSecondary
成员函数。优化调用。./engine/core
下更新TCommandBufferPool
中Free(TRefPtr<TCommandBuffer> &)
成员函数。修正导致错误递归Bug
。./engine/core
下更新TCommandBufferPool
中Free(TRefPtr<TSecondaryCommandBuffer> &)
成员函数。修正导致错误递归Bug
。./engine/core
下更新TCommandBufferPool
中Free(TRefPtr<TCommandBufferBase> &)
成员函数。优化调用,并强制回收内存。
2023/11/27 设计架构
./engine/core
下的TCommandBufferPool
类内更新Free(TRefPtr<TCommandBufferBase> &)
成员函数。移除对于TRefPtr::Release()
的调用。./engine/core
下的TDescriptorPool
类内更新Free(TRefPtr<TPipelineDescriptorSet> &)
成员函数。./engine/core
下的TReferenced
类内增加uint32_t GetReferenceCount() const
成员函数。./engine/core
下的TReferenced
类内更新uint32_t referenceCount
成员从protected
转成private
。./engine/core
下的TRefPtr
类内增加uint32_t ReferenceCount() const
成员函数。./engine/core
下的TFences
类内更新Add(const TRefPtr<TFence> &)
成员函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TFormatInfo
类内更新GetSupportFormats(TPhysicalDevice *)
成员函数为GetSupportFormats(const TRefPtr<TPhysicalDevice> &)
。./engine/core
下的TFormatInfo
类内更新IsSupportFormat(TPhysicalDevice *, TFormatType)
成员函数为IsSupportFormat(const TRefPtr<TPhysicalDevice> &, TFormatType)
。./engine/core
下的TFormatInfo
类内更新GetSupportFormats(const TRefPtr<TPhysicalDevice> &)
成员函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TFormatInfo
类内更新IsSupportFormat(const TRefPtr<TPhysicalDevice> &, TFormatType)
成员函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TFramebuffer
类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TGraphicsPipeline
类内更新InternalCreate()
函数。使用Turbo::Core::TRefPtr
。./engine/core
下的TGraphicsPipeline
类内更新InternalCreate()
函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TGraphicsPipeline
类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TImage
类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TImageView
类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TInstance
类内更新IsHaveHandle
成员函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TInstance
类内更新AddChildHandle
成员函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TLayerInfo
类内更新GetPhysicalDeviceLayerCount(TPhysicalDevice *)
成员函数。修改为GetPhysicalDeviceLayerCount(const TRefPtr<TPhysicalDevice> &)
。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TLayerInfo
类内更新GetPhysicalDeviceLayers(TPhysicalDevice *physicalDevice)
成员函数。修改为GetPhysicalDeviceLayers(const TRefPtr<TPhysicalDevice> &)
./engine/core
下的TPhysicalDevice
类内更新AddChildHandle
成员函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TPhysicalDevice
类内更新构造函数。使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。
2023/11/30 设计架构
./engine/core
下的TPipeline
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TPipeline
类内更新InternalCreate()
成员函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TPipeline
类内更新InternalDestroy()
成员函数。移除对于pipelineLayout
内存回收。./engine/core
下的TPipelineCache
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TPipelineDescriptorSet
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TPipelineDescriptorSet
类内更新InternalCreate()
成员函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TPipelineDescriptorSet
类内更新InternalDestroy()
成员函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TPipelineDescriptorSet
类内更新BindData()
成员函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TPipelineLayout
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TPipelineDescriptorSet
类内更新析构函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TRenderingPipeline
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TRenderingPipeline
类内更新InternalCreate
函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TRenderPass
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TSampler
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TSemaphore
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TShader
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TShader
类内更新构造函数,修正之前有效性判断的代码错误。./engine/core
下的TSurface
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TSurface
类内更新InternalCreate
函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TSurface
类内更新InternalDestroy
函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TSwapchain
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TSwapchain
类内更新InternalCreate
函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TSwapchain
类内更新构造函数。使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TVersion.cpp
修正其继承自TInfo
。./engine/core
下的TVmaAllocator
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TVulkanAllocator
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TVulkanAllocator
类内使用Turbo::Core::TRefPtr
进行适配。./engine/core
下的TVulkanAllocator
类内Destory()
静态成员函数内移除对delete
的使用。./engine/core
下的TRefPtr.h
中增加cstdint
头文件。./engine/core
下的TVulkanLoader
类内使用Turbo::Core::TRefPtr::Valid()
进行有效性判断。./engine/core
下的TVulkanLoader
类内使用Turbo::Core::TRefPtr
进行适配。
2023/12/1 设计架构
./.gitignore
下增加对thirdparty
第三方库的追踪忽略。./engine/framegraph
下的TFrameGraph.hpp
内的TResourceProxy<T>
增加T resource
的限制描述备注。./engine/framegraph
下更新TFrameGraph.hpp
内的TResourceProxy<T>
内的uint32_t id
成员修改为ID id
。./engine/framegraph
下更新TFrameGraph.hpp
内的TRenderPass
内的AddSubpass()
成员函数。函数形参增加默认值。并返回索引值./engine/framegraph
下更新TFrameGraph.hpp
内的Turbo::FrameGraph::TFrameGraph::TBuilder
内的CreateSubpass()
成员函数。去掉不必要的临时变量。./engine/framegraph
下更新TFrameGraph.hpp
内的TSubpass
内增加bool IsWrite(TResource resource)
成员函数。./engine/framegraph
下更新TFrameGraph.hpp
内的TSubpass
内增加bool IsRead(TResource resource)
成员函数。./engine/framegraph
下更新TFrameGraph.hpp
内的TSubpass
内增加bool IsInput(TResource resource)
成员函数。./engine/framegraph
下更新TFrameGraph.hpp
内的TSubpass
内的void Write(TResource resource)
成员函数。./engine/framegraph
下更新TFrameGraph.hpp
内的TSubpass
内的void Read(TResource resource)
成员函数。./engine/framegraph
下更新TFrameGraph.hpp
内的TSubpass
内的void Input(TResource resource)
成员函数。./engine/framegraph
下更新TFrameGraph.hpp
内的TFrameGraph
内的Compile()
成员函数。增加对计数引用数为0
的判断。./engine/framegraph
下更新TFrameGraph.hpp
内的TFrameGraph
内的Execute()
成员函数。资源只在PassNode
有效的情况下创建和销毁。./engine/framegraph
下TFrameGraph.hpp
内的TFrameGraph
内增加std::string ToHtml()
成员函数。方便输出查看。
2023/12/2 设计架构
./engine/render
下的TBuffer
中增加core/include/TRefPtr.h
头文件的引入。./engine/render
下的TBuffer
类中将Turbo::Core::TBuffer *buffer
成员改成Turbo::Core::TRefPtr<Turbo::Core::TBuffer> buffer
。
2023/12/3 设计架构
./engine/core
下更新TBuffer.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TCommandBuffer.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TCommandBufferPool.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TDescriptor.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TDescriptorPool.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TDescriptorSet.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TDescriptorSetLayout.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TDevice.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TDeviceQueue.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TException.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TExtensionInfo.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TFormatInfo.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TFramebuffer.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TGraphicsPipeline.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TImage.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TImageView.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TInstance.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TLayerInfo.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TMemoryHeapInfo.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TMemoryTypeInfo.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TPhysicalDevice.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TPipeline.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TPipelineCache.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TQueueFamilyInfo.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TRenderPass.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TScissor.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TSemaphore.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TShader.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TSubpass.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TSurface.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TSwapchain.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TVendorInfo.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TVersion.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TViewport.h
中对所有的信息获取函数后增加const
。并更新相应cpp
文件。./engine/core
下更新TCommandBufferBase
中CmdPipelineBarrier
成员函数。为了调用const
形参中的非const
函数而进行了拷贝。(这可能是没有必要的拷贝)./engine/core
下更新TBarrier.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TCommandBuffer.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TCommandBufferPool.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TDescriptor.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TDescriptorPool.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TDevice.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TDeviceQueue.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TEngine.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TFence.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TFramebuffer.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TImage.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TImageView.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TInstance.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TPhysicalDevice.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TPipeline.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TRenderPass.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TShader.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TSurface.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。./engine/core
下更新TSwapchain.h
所有的TRefPtr<T>
返回函数,都使用const TRefPtr<T>&
格式返回(减少不必要的拷贝构造)。
2023/12/4 设计架构
./engine/core
下更新TRefPtr.h
。增加StaticCast<T,S>
静态强制转换函数。./engine/core
下更新TRefPtr.h
。增加DynamicCast<T,S>
动态强制转换函数。./engine/core
下更新TRefPtr.h
。增加ConstCast<T,S>
常量强制转换函数。./engine/core
下更新TCommandBufferPool
。将原先的std::vector<TRefPtr<TCommandBufferBase>> commandBuffers
成员分成两个成员std::vector<TRefPtr<TCommandBuffer>> commandBuffers
和std::vector<TRefPtr<TSecondaryCommandBuffer>> secondaryCommandBuffers
。./engine/core
下更新TCommandBufferPool
。Allocate()
和AllocateSecondary()
成员函数返回引用。./engine/core
下更新TCommandBufferPool
的Free(TRefPtr<TCommandBufferBase> &)
成员函数。适配一级和二级的指令缓存的释放。./engine/core
下更新TCommandBufferPool
的InternalDestroy
成员函数。适配二级的指令缓存数组的释放。./engine/core
下更新TCommandBufferPool
的析构函数。将指令缓存数组的清空转移至InternalDestroy
成员函数中。./docs
下更新Issue.md
。记录一些待解决的问题。
2023/12/5 设计架构
./engine/core
下将所有的ToString()
函数后面都加上const
声明。./engine/core
下将TReferenced
中的Release()
公有成员函数转移至私有。./engine/core
下TBuffer
中增加Valid()
函数的重写。./engine/core
下TCommandBufferBase
中增加Valid()
函数的重写。./engine/core
下TCommandBufferPool
中增加Valid()
函数的重写。./engine/core
下TDescriptorPool
中增加Valid()
函数的重写。./engine/core
下TDescriptorSet
中增加Valid()
函数的重写。./engine/core
下TDevice
中增加Valid()
函数的重写。./engine/core
下TDeviceQueue
中增加Valid()
函数的重写。./engine/core
下TEngine
中增加Valid()
函数的重写。./engine/core
下TFence
中增加Valid()
函数的重写。./engine/core
下TFences
中增加Valid()
函数的重写。./engine/core
下TFramebuffer
中增加Valid()
函数的重写。./engine/core
下TImage
中增加Valid()
函数的重写。./engine/core
下TImageView
中增加Valid()
函数的重写。./engine/core
下TInstance
中增加Valid()
函数的重写。./engine/core
下TPhysicalDevice
中增加Valid()
函数的重写。./engine/core
下TPipeline
中增加Valid()
函数的重写。./engine/core
下TPipelineCache
中增加Valid()
函数的重写。./engine/core
下TPipelineDescriptorSet
中增加Valid()
函数的重写。./engine/core
下TPipelineLayout
中增加Valid()
函数的重写。./engine/core
下TRenderPass
中增加Valid()
函数的重写。./engine/core
下TSampler
中增加Valid()
函数的重写。./engine/core
下TSemaphore
中增加Valid()
函数的重写。./engine/core
下TSurface
中增加Valid()
函数的重写。./engine/core
下TSwapchain
中增加Valid()
函数的重写。./engine/core
下TVmaAllocator
中增加Valid()
函数的重写。
2023/12/6 设计架构
./engine/core
下TFormatInfo
中移除对于Turbo::Core::TDevice
的提前声明和头文件引入。./engine/core
下移除所有类中对TRefPtr<T>
成员赋nullptr
初始值。使其通过默认的构造函数进行初始化。./engine/core
下TDescriptor.cpp
开头增加对于TShader.h
头文件的包含。./engine/core
下TPhysicalDevice
中GetSupportFormats() const
成员函数中将this
的const TPhysicalDevice *
指针强制转换成TPhysicalDevice *
。用于获取支持的格式。./engine/core
下TPipelineDescriptorSet.cpp
开头增加对于TDescriptorSetLayout.h
头文件的包含。./engine/core
下TPipelineDescriptorSet.cpp
开头增加对于TDescriptorPool.h
头文件的包含。./engine/core
下TPipelineDescriptorSet.cpp
开头增加对于TBuffer.h
头文件的包含。./engine/core
下TRenderingPipeline.cpp
开头增加对于TImageView.h
头文件的包含。./engine/core
下TBarrier.h
中TImageMemoryBarrier
的析构函数声明为default
。./engine/core
下TDescriptorPool.h
中TDescriptorSize
的析构函数声明为default
。
2023/12/7 设计架构
./engine/core
下main.cpp
进行TRefPtr<T>
计数引用适配。./engine/core
下TDeviceQueue
中的bool Submit(std::vector<TRefPtr<TSemaphore>> &, std::vector<TRefPtr<TSemaphore>> &,...)
更改成bool Submit(const std::vector<TRefPtr<TSemaphore>> &, const std::vector<TRefPtr<TSemaphore>> &,...)
。形参为const
的版本。./engine/core
下TInstance
中InternalCreate()
成员函数,对于this->physicalDevices
数组遍历时出现了未知异常。尝试解决该Bug
。./engine/core
下TRefPtr
中移除void Release()
成员函数。./engine/core
下TReferenced
中增加uint32_t UnReferenceWithoutDelete() const
成员函数。用于仅解除计数引用而不触发销毁判断。./engine/core
下TRefPtr
中增加T *Unbind()
成员函数。用于仅解除计数引用而不触发销毁判断。./engine/core
下TInstance
中InternalCreate()
成员函数,在内部会调用TVulkanLoader::Instance()->LoadInstanceDriver(this)
而this
当前的计数引用是0
,当执行完该函数后计数引用发现自身引用数为0
,将会触发自销毁(delete this)
这将导致不必要的异常Bug
。修正。./engine/core
下TPhysicalDevice
中InternalCreate()
成员函数,在内部某些函数会使用TRefPtr
引用this
,当前的计数引用是0
,当执行完该函数后计数引用发现自身引用数为0
,将会触发自销毁(delete this)
这将导致不必要的异常Bug
。修正。./engine/core
下TDevice
中InternalCreate()
成员函数,在内部某些函数会使用TRefPtr
引用this
,当前的计数引用是0
,当执行完该函数后计数引用发现自身引用数为0
,将会触发自销毁(delete this)
这将导致不必要的异常Bug
。修正。./engine/core
下创建TDevice
和TDeviceQueue
时内部有非常恶心的逻辑前后互调用和重建,调整这一部分使其清晰明了。(历史遗留问题,当时脑子抽了写的啥玩意???)./engine/core
下更新TDevice
下的InternalCreate()
函数。内部构建已知队列方式。而不是使用之前动态创建队列再反补回头重构设备方式(太麻烦,也没必要)。./engine/core
下更新TDevice
下的std::vector<TRefPtr<TDeviceQueue>> deviceQueues
成员变量修改为std::map<TQueueFamilyIndex, std::vector<TRefPtr<TDeviceQueue>>>
类型。./engine/core
下更新TInstance
下的InternalCreate()
成员函数中移除对于TPhysicalDevice::InternalCreate()
的调用。./engine/core
下更新TPhysicalDevice
下的InternalCreate()
成员函数中移除对于TDevice::InternalCreate()
的调用。./engine/core
下更新TDevice
下的InternalCreate()
成员函数中移除对于TDeviceQueue::InternalCreate()
的调用。./engine/core
下更新TDevice
下的构造函数中对于TDeviceQueue
的创建。./engine/core
下更新TDeviceQueue
下的构造函数。移除对于重构TDevice
的策略。./engine/core
下更新TPhysicalDevice
下移除std::map<TQueueFamilyInfo, uint32_t> availableQueueCountMap
成员变量。./engine/core
下更新TPhysicalDevice
下移除void AvailableQueueCountMinusOneByQueueFamilyIndex(uint32_t queueFamilyIndex)
成员函数。./engine/core
下更新TPhysicalDevice
下移除void AvailableQueueCountPlussOneByQueueFamilyIndex(uint32_t queueFamilyIndex)
成员函数。./engine/core
下更新TPhysicalDevice
下移除void ResetQueueCountMap()
成员函数。./engine/core
下更新TPhysicalDevice
下GetAvailableQueueCount
成员函数。./engine/core
下更新TDeviceQueue
下的InternalCreate()
成员函数中移除对于TCommandBufferPool::InternalCreate()
的调用。./engine/core
下更新TDevice
下的AddChildHandle(..)
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新TDevice
下的InternalDestroy(..)
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新TDevice
下的InternalDestroy(..)
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新TDevice
下的GetDeviceQueueCountByQueueFamily(..)
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新TDevice
下移除GetDeviceQueueCountByQueueFamily
成员函数。./engine/core
下更新TDevice
下移除GetDeviceQueueFamilyInfos
成员函数。./engine/core
下更新TDevice
下的GetBestGraphicsQueue
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新TDevice
下的GetBestComputeQueue
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新TDevice
下的GetBestTransferQueue
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新TDevice
下的GetBestSparseBindingQueue
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新TDevice
下的GetBestProtectedQueue
成员函数。适配deviceQueues
的成员变量。./engine/core
下更新main.cpp
下结尾处提出对于销毁VkSurfaceKHR
修改意见。
2023/12/11 设计架构
./docs
下TurboDesign.drawio
增加JobSystem
板块。用于研究JobSystem
。./docs
下TurboDesign.drawio
的JobSystem
板块增加WorkStealingDequeue
的架构图。用于研究JobSystem
。./engine/core
下TSurface
中增加const VkAllocationCallbacks *externalVkAllocationCallbacks
成员变量。用于适配外部VkSurfaceKHR
句柄。./engine/core
下TSurface
中TSurface(const Turbo::Core::TRefPtr<Turbo::Core::TDevice> &, VkSurfaceKHR)
构造函数中增加const VkAllocationCallbacks *pAllocator
形参。并修改相应cpp
中的实现。用于适配外部VkSurfaceKHR
句柄。./engine/core
下TSurface
更新InternalDestroy()
成员函数。用于适配外部VkSurfaceKHR
句柄。./engine/core
下main.cpp
更新对于glfw
创建的外部VkSurfaceKHR
句柄的适配。
2023/12/13 设计架构
./engine/render
下更新TBuffer
中的buffer
使用默认构造初始化。./engine/render
下更新TBuffer
中的Destroy
成员函数。释放所有成员变量。./engine/render
下更新TBuffer
中的Copy
成员函数。将所有Turbo::Core
下的计数引用对象使用Turbo::Core::TRefPtr
承接。./engine/render
下更新TImage
中的image
和imageView
成员。使用Turbo::Core::TRefPtr<T>
适配。./engine/render
下更新TImage
及其子类中的CreateImageView
成员函数。使用Turbo::Core::TRefPtr<T>
适配。./engine/render
下更新TImage
中的Destroy
成员函数。释放所有成员变量。./engine/render
下更新TShader
。使用Turbo::Core::TRefPtr<T>
适配。./engine/render
下更新TSampler
。使用Turbo::Core::TRefPtr<T>
适配。./engine/render
下更新TRenderPass
。使用Turbo::Core::TRefPtr<T>
适配。./engine/render
下更新TGraphicsPipeline
。使用Turbo::Core::TRefPtr<T>
适配。
2023/12/14 设计架构
./engine/render
下更新TResourceAllocator
。使用Turbo::Core::TRefPtr<T>
适配。./engine/render
下更新TContext
。使用Turbo::Core::TRefPtr<T>
适配。./engine/render
下更新TContext
下的Turbo::Render::TCommandBuffer
从原先的typedef struct
转成class
声明。./engine/render
下更新TBuffer.h
下引入Core
的TBuffer.h
的头文件。通过编译。./engine/render
下更新TBuffer.cpp
下引入Core
的TDevice.h
的头文件。通过编译。./engine/render
下更新TContext.h
下引入Core
的TFence.h
的头文件。通过编译。./engine/render
下更新TImage.h
下引入Core
的TImage.h
的头文件。通过编译。./engine/render
下更新TImage.h
下引入Core
的TImageView.h
的头文件。通过编译。./engine/render
下更新TImage.cpp
下引入Core
的TImage.h
的头文件。通过编译。./engine/render
下更新TResourceAllocator.cpp
下引入Core
的TCommandBuffer.h
的头文件。通过编译。./engine/render
下更新TShader.cpp
下引入Core
的TDevice.h
的头文件。通过编译。./engine/render
目前有些头文件有冗余。./engine/render
使用Turbo::Core::TRefPtr<T>
初步适配完成。
2023/12/18 设计架构
./thirdparty
下更新KTX-Software
同步到main
分支。./thirdparty
下KTX-Software
中用到了std::make_unique
。基本上为C++14
以上特性。为此将Turbo
从C++11
提升至C++17
。
2024/2/26
- 更新
HelloTriangle
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
TReferenced
优化代码调用。
2024/2/28
- 更新
PureHelloTriangle
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/2/29
- 更新
PureCombinedImageSampler
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/2
- 更新
PureSeparateImageSampler
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
PureIndexDraw
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
TurboTest
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/3
- 更新
PBRTest
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/4
- 更新
SecondaryCommandBufferTest
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/5
- 更新
MultiDrawTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
SubpassTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
LineAndLineWidth
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/6
- 更新
InstancedDrawTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
PerlinWorleyNoiseTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
CineShaderLava
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/7
- 更新
Octagrams
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
ProteanClouds
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
ComputePipelineTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
Auroras
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/8
- 更新
ComputerPipelineGeneratePerlinWorley
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
ComputerPipelineGenerateWorley
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
IspGlassball11Mix
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VolumetricCloud
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
RayMarchingTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
RayMarchingBoundingBoxTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
RayMarchingPerlinWorleyNoise
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/9
- 暂时移除
RenderDesignTest
示例。Render
库重构中。- 更新
PushConstantTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 暂时移除
RenderAndFrameGraph
示例。Render
库重构中。- 更新
ClearColorTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
ShaderIncludeTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
GreenFieldDiorama
示例。使用Turbo::Core::TRefPtr<T>
适配。- 暂时移除
PureHelloTriangleAndFrameGraph
示例。Render
库重构中。- 更新
VulkanDynamicRenderingTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
DynamicRenderingTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
NormalTexture
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/10
- 更新
BRDF
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
TessellationTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
GeometryShaderTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
TessellationAndGeometry
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
MeshShaderTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
SpecializationConstantsTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTest
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/11
- 更新
VulkanKHRRayTracingTestForLighting
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForLightingShadow
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/12
- 更新
VulkanKHRRayTracingTestForLightingShadowWithTexture
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingJitterCamera
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingAnyHitShader
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForInstances
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForReflections
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForReflections_WithoutLimited
示例。使用Turbo::Core::TRefPtr<T>
适配。
2024/3/13
- 更新
VulkanKHRRayTracingTestForMultiClosestHits
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForAnimationTLAS
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForAnimationBLAS
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForIntersectionShader
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForCallableShader
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanRayQueryTest
示例。使用Turbo::Core::TRefPtr<T>
适配。- 更新
VulkanKHRRayTracingTestForGLTF
示例。使用Turbo::Core::TRefPtr<T>
适配。