Full Vulkan graphics API support is added in this update (closed #10):
Tutorials applications:
HelloCube tutorial is extended with a second version of code (under UNIFORMS_BUFFER_ENABLED define) which implements vertices transformation on GPU using MVP matrix stored in uniforms buffer and program bindings object.
CubeMapArray tutorial was added to demonstrate cube-map array texturing, rendering to texture sub-resource views and Sky-box rendering with Methane graphics extension.
ParallelRendering tutorial was added to demonstrate multi-threaded render commands encoding to a single render pass.
TextureLabeler helper class was added to library MethaneAppsCommon with shared implementation of text labels rendering to texture cube/array faces.
All tutorials and samples should now work without validation layer warnings in basic usage scenarios for all graphic APIs.
Graphics libraries:
Vulkan API Graphics Core implementation was added for ProgramBindingsVK, FrameBufferTextureVK, DepthStencilTextureVK, RenderTargetTextureVK, ImageTextureVK, SamplerVK, ResourceBarriersVK, ParallelRenderCommandListVK, TimestampQueryBufferVK, TimestampQueryVK.
ResourceState enumeration was simplified: state VertexAndConstantBuffer was split to VertexBuffer and ConstantBuffer states; states NonPixelShaderResourceand PixelShaderResource were merged into one state ShaderResource.
RenderCommandListVK setup all Vulkan pipeline barriers before render pass begin by using secondary command buffer for recording all synchronisation commands separately from render pass commands in primary buffer.
Added support for resource ownership transition between command queue families in Resource::SetOwnerQueueFamily(..) and ResourceBarriers::[Add|Remove]OwnerTransition(...) interfaces and implemented ownership transition for Vulkan resources.
ResourceLocation interface was renamed to ResourceView, extended with settings of sub-resource index, count, size, offset and reworked internally for DirectX and Vulkan to support multiple views handling for a single resource.
Supported dynamic buffer indexing in Vulkan.
Added initial support of the HLLS StructuredBuffer in DirectX.
Resource factory functions were simplified with removal of optional DescriptorByUsage argument, which was previously used to restore DirectX descriptors after resource recreation on previous location in heaps to let bindings work.
Added mip-maps generation on GPU for ImageTextureVK.
Improved graphic objects naming infrastructure, extend naming of Vulkan objects.
Use Vulkan debug utils messenger instance to track validation layer message and fixed a lot of them. A few minor validation warnings were ignored in callback function in DeviceVK class.
Add support of debugger break and message filtering with DirectX debug layer in DeviceDX class.
Shared command list timestamp queries between DirectX and Vulkan using TimestampQueryBuffer and TimestampQuery objects in CommandListBase class.
Fixed Methane Tracy GPU instrumentation via Methane/TracyGpu.hpp with Tracy v0.8 (was broken after update). Added reference Tracy GPU instrumentation via TracyD3D12.hpp header under macro definition METHANE_GPU_INSTRUMENTATION_ENABLED == 2 in CommandListDX.hpp(value 1 is reserved for Methane GPU instrumentation).
Fixed many Vulkan implementation bugs of the previously supported graphic objects, here are a few of them:
Fixed Vulkan errors in case when actual swap-chain frame buffers count is different from the requested at initialisation.
Fixed Vulkan crash on swap-chain reset on switching VSync OFF.
Fixed graphics application crash on destruction Methane::Graphics::App.
Fixed parallel program bindings initialisation in Metal.
UserInterface libraries:
Fixed Text repeated buffer updates in deferred mode.
Platform libraries:
Fixed Linux application window placement in multi-monitor configuration.
Fixed MacOS window settings setup from command line.
Data libraries:
Add initial thread-safety to Events library in Emitter and Receiver classes.
Fixed ITT instrumentation issue related to access to uninitialised domain global variable at application initialisation from other global variable initialisers.
External libraries:
Tracy was updated to v0.8.1
CLI11 was updated to v2.2.0
MagicEnum was updated to v0.8.0
TaskFlow was updated to v3.4.0
Vulkan-Headers was updated to v1.3.218
Build infrastructure:
Shader config files were replaced with shaders compilation functions in CMake: add_methane_shaders_source to compiler shaders file and add_methane_shaders_library to add compiled shaders to application resources (see CMake/MethaneShaders.cmake)
CMakePresets.json now uses CMAKE_BUILD_TYPE for single-config generator Unix Makefiles.
CodeQL workflows now use Profile CMake presets same as in SonarCloud analysis builds in Azure Pipelines.
CodeQL analysis on Windows has started failing in GitHub actions since May 25 with IOException "There is not enough space on the disk", so analysis steps were disabled for Windows to let build pass without analysis until the issue is fixed by GitHub support.
Fixed GCC 11.2 build errors on Ubuntu 22.04.
Moved build instructions from root README.md to Build/README.md.
Methane Kit v0.6 Pre-Release Update 3
Full Vulkan graphics API support is added in this update (closed #10):
HelloCube
tutorial is extended with a second version of code (underUNIFORMS_BUFFER_ENABLED
define) which implements vertices transformation on GPU using MVP matrix stored in uniforms buffer and program bindings object.CubeMapArray
tutorial was added to demonstrate cube-map array texturing, rendering to texture sub-resource views and Sky-box rendering with Methane graphics extension.ParallelRendering
tutorial was added to demonstrate multi-threaded render commands encoding to a single render pass.TextureLabeler
helper class was added to libraryMethaneAppsCommon
with shared implementation of text labels rendering to texture cube/array faces.ProgramBindingsVK
,FrameBufferTextureVK
,DepthStencilTextureVK
,RenderTargetTextureVK
,ImageTextureVK
,SamplerVK
,ResourceBarriersVK
,ParallelRenderCommandListVK
,TimestampQueryBufferVK
,TimestampQueryVK
.ResourceState
enumeration was simplified: stateVertexAndConstantBuffer
was split toVertexBuffer
andConstantBuffer
states; statesNonPixelShaderResource
andPixelShaderResource
were merged into one stateShaderResource
.RenderCommandListVK
setup all Vulkan pipeline barriers before render pass begin by using secondary command buffer for recording all synchronisation commands separately from render pass commands in primary buffer.Resource::SetOwnerQueueFamily(..)
andResourceBarriers::[Add|Remove]OwnerTransition(...)
interfaces and implemented ownership transition for Vulkan resources.ResourceLocation
interface was renamed toResourceView
, extended with settings of sub-resource index, count, size, offset and reworked internally for DirectX and Vulkan to support multiple views handling for a single resource.StructuredBuffer
in DirectX.DescriptorByUsage
argument, which was previously used to restore DirectX descriptors after resource recreation on previous location in heaps to let bindings work.ImageTextureVK
.DeviceVK
class.DeviceDX
class.TimestampQueryBuffer
andTimestampQuery
objects inCommandListBase
class.Methane/TracyGpu.hpp
with Tracy v0.8 (was broken after update). Added reference Tracy GPU instrumentation viaTracyD3D12.hpp
header under macro definitionMETHANE_GPU_INSTRUMENTATION_ENABLED == 2
inCommandListDX.hpp
(value1
is reserved for Methane GPU instrumentation).Methane::Graphics::App
.Text
repeated buffer updates in deferred mode.Events
library inEmitter
andReceiver
classes.Tracy
was updated to v0.8.1CLI11
was updated to v2.2.0MagicEnum
was updated to v0.8.0TaskFlow
was updated to v3.4.0Vulkan-Headers
was updated to v1.3.218add_methane_shaders_source
to compiler shaders file andadd_methane_shaders_library
to add compiled shaders to application resources (seeCMake/MethaneShaders.cmake
)CMakePresets.json
now usesCMAKE_BUILD_TYPE
for single-config generator Unix Makefiles.Profile
CMake presets same as in SonarCloud analysis builds in Azure Pipelines.README.md
toBuild/README.md
.