Skip to content
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

Closed
egorodet opened this issue Mar 12, 2019 · 0 comments · Fixed by #94
Closed

Vulkan backend implementation #10

egorodet opened this issue Mar 12, 2019 · 0 comments · Fixed by #94
Labels
help wanted Extra attention is needed infrastructure Build, tools, automation, etc.
Milestone

Comments

@egorodet
Copy link
Member

egorodet commented Mar 12, 2019

Implement Vulkan API backend in Graphics Core module.

@egorodet egorodet added the help wanted Extra attention is needed label Mar 12, 2019
@egorodet egorodet added the infrastructure Build, tools, automation, etc. label Aug 11, 2019
@egorodet egorodet added the good first issue Good for newcomers label Jan 15, 2020
@egorodet egorodet removed the good first issue Good for newcomers label Mar 29, 2021
@egorodet egorodet added this to the v0.6 milestone Apr 26, 2021
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
help wanted Extra attention is needed infrastructure Build, tools, automation, etc.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant