-
-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Vulkan backend implementation #10
Labels
Milestone
Comments
egorodet
added a commit
that referenced
this issue
Jun 27, 2022
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 `NonPixelShaderResource`and `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`.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Implement Vulkan API backend in Graphics Core module.
The text was updated successfully, but these errors were encountered: