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 for RmlUi #236

Closed
wants to merge 95 commits into from
Closed

Vulkan for RmlUi #236

wants to merge 95 commits into from

Conversation

wh1t3lord
Copy link
Contributor

@wh1t3lord wh1t3lord commented Sep 10, 2021

Vulkan for RmlUi!

Firstly, I need to finish this pull request.

I opened it in order to keep this pull request visible for users who wanted/started wrote their own implementation.

I will implement for win32 only because I don't have enough time to test on different platforms.

Using files from other projects:
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator - MIT License
https://github.com/KhronosGroup/SPIRV-Reflect - Apache-2.0 License

@mikke89
Copy link
Owner

mikke89 commented Sep 10, 2021

Awesome, thanks! Looking forward to seeing this developed, it will be a welcome addition. Doing it for win32 initially is all good.

It would be preferable not to have any dependencies so that users wanting to use the same backend aren't forced to use the same dependencies. With that said, their licenses are good, and if it considerably helps to speed up development then it is alright initially.

Let me know when you'd like some feedback. I have little Vulkan experience, so I hope somebody with Vulkan experience will be so nice as to volunteer to review this work at a later stage.

@wh1t3lord
Copy link
Contributor Author

wh1t3lord commented Sep 10, 2021

@mikke89 I want to warn you that your architecture use only width and height for rendering texture (I mean what backend needs to know about how to generate textures and etc). But in Vulkan realities, you need to know how much memory you need to allocate in order to represent your texture to GPU. Thus the user must provide information about an 'upload' size of your texture and in that case, we need to change the API calls which have RenderInterface.

So I saw your codebase and for calculating uploading size for texture you use width * height * 4, but that's normal for our examples. But for real examples, the user wants to use different textures with different formats and that causes the changes into our formula like width * height * different_format_which_is_not_4_bytes (e.g. VK_FORMAT_BC1_RGB_SRGB_BLOCK and others).

But there's one important thing if a user has his own implementation of Vulkan it's all okay if he wants to use our implementation and base his engine somehow on it or you want to support different images or texture formats that will cause changes in API.

It's only a warning. If we just need to run our examples on Vulkan, so all is fine and we can do that without any changes in architecture and API at all.

@mikke89
Copy link
Owner

mikke89 commented Sep 11, 2021

We always generate textures with RGBA using 1 byte per channel per pixel, so the texture size is well known. If users want to apply compression or use another texture format they have to do that conversion themselves, I don't see this as a reason to change the API.

@wh1t3lord
Copy link
Contributor Author

@mikke89 I don't call to change the API, but I described what we have and what we would have if we wanted to support new features like new formats or etc. 👍🏻

@wh1t3lord
Copy link
Contributor Author

The current state is:

  1. Vulkan is working well;
  2. Resizing is not working well; (idk, but two guessings, like we didn't update uniform member 'translate' or somewhere in OnResize method something doesn't update at all);
  3. Needs to change the VkDescriptorSet model. Like we need to use only one VkDescriptorSet instance for rendering.

@mikke89
Copy link
Owner

mikke89 commented May 21, 2022

Great work on getting things up and rendering! Appreciate your continued work on this.

@mikke89 mikke89 added the backends Platforms and renderers label May 21, 2022
@wh1t3lord
Copy link
Contributor Author

Resizing is working well, but now we have bugs with rendering treeview and invaders examples. Seems like you can merge this branch, but it is better to finish all things and merge.

@wh1t3lord
Copy link
Contributor Author

Also I didn't finish with allocation geometry_handle_t, I will finish.

@wh1t3lord
Copy link
Contributor Author

Now allocation is fixed. So we need to think how to resolve those rendering bugs and we are done with Vulkan :)

@wh1t3lord
Copy link
Contributor Author

So Vulkan is implemented. Probably some bugs can exist, but I worked with old version. Better to merge and test again in order to obtain all possible bugs. @mikke89

Would be great if you create appropriate backend for sdl/glfw but Vulkan renderer. Like SDL_VK.

mikke89 added a commit that referenced this pull request Jun 9, 2022
Currently, only the SDL platform is supported together with the Vulkan renderer. To use this backend, set the CMake configuration `SAMPLES_BACKEND=SDL_Vulkan`.

Development commits by @wh1t3lord (#236):

- Started Vulkan implementation
- Keep codebase simple, but easy to use.
- ADD: instance creation
- ADD: physical device and device properties
- ADD: The commentaries about ShellRenderInterfaceVulkan and trying to create Surface
- ADD: Destroying functions but get HWND from RMLUI
- ADD: obtaining HWND
- FIX: compilation
- ADD: standard way to initialize and shutdown
- ADD: Queues and Queues Indecies
- ADD: device creation
- ADD: swapchain
- ADD: OnResize method
- ADD: correct swapchain creation
- ADD: sync primitives
- ADD: presenting, but without resources
- ADD: start implementing resource management, creating descriptor set layout
- You must compile shaders by your own. So engine operates with SPV format only, not raw strings, not compiling files.
- ADD: creating shaders, but I need to implement that
- ADD: creating VkShaderModule
- ADD: remove not capable method in that arch
- ADD: Physical device wrapper, pipeline layout creation
- ADD: continue creating VkFramebuffer for swapchain
- FIX: compilation thing and waiting before destroying everything
- ADD: continue work
- FIX: swapchain creation
- FIX: formatting for commentary
- ADD: something new
- ADD: command list ring
- ADD: implemented command list ring
- ADD: added explanation commentary about using multiple logical frames for rendering
- ADD: added allocator for another allocator, but I need to implement it first
- ADD: added final allocator for dynamic buffer
- ADD: ring buffer pool implementation
- FIX: compilation fixes
- FIX: vma uses implementation in cpp
- ADD: successful creation and deletion
- ADD: started rendering begin and end scopes
- ADD: stable rendering
- ADD: correct rendering body
- ADD: clearing back buffer is working well
- ADD: something new
- ADD: texture data wrapper
- ADD: writing thing for uploading
- ADD: need to create separate queue for uploading resources
- ADD: continue work, added upload manager
- ADD: many stuff
- ADD: uploading textures is fine, but think about better memory handling, now it is just simple and trivial
- ADD: successful init/destroy state for app
- ADD: shaders for Vulkan, they are compiled with SPIR-V otherwise you can't load your shaders...
- ADD: successful init/destroy
- FIX: inserting data into descriptor set layout bindings
- FIX: shaders, binding must unique!
- ADD: continue at home
- ADD: Descriptors
- ADD: continue
- ADD: continue
- FIX: obtaining texture from handle
- ADD: continue work about pipeline creation, use VkDescriptorSetLayoutBinding info from CreateDescriptorSetLayout method.
- ADD: creating pipelines, continue testing later
- ADD: successful creation pipelines
- ADD: continue work, because for every compile geometry you need to have own descriptor set, so we cache all vkCmds after all CompileGeometry->RenderCompiledGeometry
- ADD: allocated more than one descriptor set, but still I need to test my thing
- ADD: well it seems drawing functions are recorded, but nothing to show on screen. It is strange. Have to fix it and analyze what is wrong with it.
- ADD: cached compiled geometry_handle_t
- FIX: data uploading was incorrect
- FIX: commentary
- FIX: correct format for color
- ADD: something, but geometry is discarded somehow...
- ADD: Now this renders the scene, but font textures are not valid
- ADD: something new
- ADD: FINAL
- ADD: commentary
- ADD: in order to test you have to uncomment those lines
- FIX: removed pointless commentary due to release of backends branch
- ADD: all necessary commentaries
- ADD: vulkan renderer
- ADD: continue work about releasing stuff
- ADD: continue work, use one large Descriptor with offsets
- ADD: updated out-dated VMA allocator version, deleted some todos, need to finish ring pool
- ADD: using virtual allocator
- ADD: FINAL, but I didn't test the other scenes. Reusing descriptors, Resizing is working
- FIX: message
- ADD: stuff, but WE REALLY need to solve the thing with Descriptors
- ADD: continue at home
- ADD: test at home
- FIX: if we have descriptors, but remove that functionality after tests
- FIX: descriptor set picking
- FIX: descriptor set creation
- ADD: continue testing
- ADD: continue at home
- ADD: one descriptor set for geometry and descriptors per texture
- ADD: something
- ADD: resizing works
- ADD: need for tests
- FIX: with allocation
- ADD: possibly final things

Development by @mikke89:

- Ported the Vulkan shell code to the new backend architecture for RmlUi 5.0.
- Made a script to compile the GLSL shaders to SPIR-V binary C character arrays. This allows directly including the shaders in the renderer source code.

Co-authored-by: wh1t3lord <git.matvey@yandex.ru>
@mikke89
Copy link
Owner

mikke89 commented Jun 9, 2022

Hey, thanks and good job!

As we discussed, I've ported the code over to the new backends architecture. See the vulkan branch (commit 531b2c9). There are still some rendering issues and warnings that need to be resolved before we can merge with master, but I'm happy a lot of things are rendering well. You can continue to work off of the new branch if you'd like, and make a new pull request against that one.

Currently, only the SDL platform is supported together with the Vulkan renderer. To use this backend, set the CMake configuration SAMPLES_BACKEND=SDL_Vulkan.

@wh1t3lord
Copy link
Contributor Author

@mikke89 okay I will create a new pull request based on new RmlUI with vulkan branch so I close this one.

@wh1t3lord wh1t3lord closed this Jun 10, 2022
@wh1t3lord wh1t3lord deleted the vk branch June 10, 2022 10:46
@mikke89 mikke89 mentioned this pull request Aug 17, 2022
9 tasks
mikke89 added a commit that referenced this pull request Aug 19, 2022
Currently, only the SDL platform is supported together with the Vulkan renderer. To use this backend, set the CMake configuration `SAMPLES_BACKEND=SDL_Vulkan`.

Development commits by @wh1t3lord (#236):

- Started Vulkan implementation
- Keep codebase simple, but easy to use.
- ADD: instance creation
- ADD: physical device and device properties
- ADD: The commentaries about ShellRenderInterfaceVulkan and trying to create Surface
- ADD: Destroying functions but get HWND from RMLUI
- ADD: obtaining HWND
- FIX: compilation
- ADD: standard way to initialize and shutdown
- ADD: Queues and Queues Indecies
- ADD: device creation
- ADD: swapchain
- ADD: OnResize method
- ADD: correct swapchain creation
- ADD: sync primitives
- ADD: presenting, but without resources
- ADD: start implementing resource management, creating descriptor set layout
- You must compile shaders by your own. So engine operates with SPV format only, not raw strings, not compiling files.
- ADD: creating shaders, but I need to implement that
- ADD: creating VkShaderModule
- ADD: remove not capable method in that arch
- ADD: Physical device wrapper, pipeline layout creation
- ADD: continue creating VkFramebuffer for swapchain
- FIX: compilation thing and waiting before destroying everything
- ADD: continue work
- FIX: swapchain creation
- FIX: formatting for commentary
- ADD: something new
- ADD: command list ring
- ADD: implemented command list ring
- ADD: added explanation commentary about using multiple logical frames for rendering
- ADD: added allocator for another allocator, but I need to implement it first
- ADD: added final allocator for dynamic buffer
- ADD: ring buffer pool implementation
- FIX: compilation fixes
- FIX: vma uses implementation in cpp
- ADD: successful creation and deletion
- ADD: started rendering begin and end scopes
- ADD: stable rendering
- ADD: correct rendering body
- ADD: clearing back buffer is working well
- ADD: something new
- ADD: texture data wrapper
- ADD: writing thing for uploading
- ADD: need to create separate queue for uploading resources
- ADD: continue work, added upload manager
- ADD: many stuff
- ADD: uploading textures is fine, but think about better memory handling, now it is just simple and trivial
- ADD: successful init/destroy state for app
- ADD: shaders for Vulkan, they are compiled with SPIR-V otherwise you can't load your shaders...
- ADD: successful init/destroy
- FIX: inserting data into descriptor set layout bindings
- FIX: shaders, binding must unique!
- ADD: continue at home
- ADD: Descriptors
- ADD: continue
- ADD: continue
- FIX: obtaining texture from handle
- ADD: continue work about pipeline creation, use VkDescriptorSetLayoutBinding info from CreateDescriptorSetLayout method.
- ADD: creating pipelines, continue testing later
- ADD: successful creation pipelines
- ADD: continue work, because for every compile geometry you need to have own descriptor set, so we cache all vkCmds after all CompileGeometry->RenderCompiledGeometry
- ADD: allocated more than one descriptor set, but still I need to test my thing
- ADD: well it seems drawing functions are recorded, but nothing to show on screen. It is strange. Have to fix it and analyze what is wrong with it.
- ADD: cached compiled geometry_handle_t
- FIX: data uploading was incorrect
- FIX: commentary
- FIX: correct format for color
- ADD: something, but geometry is discarded somehow...
- ADD: Now this renders the scene, but font textures are not valid
- ADD: something new
- ADD: FINAL
- ADD: commentary
- ADD: in order to test you have to uncomment those lines
- FIX: removed pointless commentary due to release of backends branch
- ADD: all necessary commentaries
- ADD: vulkan renderer
- ADD: continue work about releasing stuff
- ADD: continue work, use one large Descriptor with offsets
- ADD: updated out-dated VMA allocator version, deleted some todos, need to finish ring pool
- ADD: using virtual allocator
- ADD: FINAL, but I didn't test the other scenes. Reusing descriptors, Resizing is working
- FIX: message
- ADD: stuff, but WE REALLY need to solve the thing with Descriptors
- ADD: continue at home
- ADD: test at home
- FIX: if we have descriptors, but remove that functionality after tests
- FIX: descriptor set picking
- FIX: descriptor set creation
- ADD: continue testing
- ADD: continue at home
- ADD: one descriptor set for geometry and descriptors per texture
- ADD: something
- ADD: resizing works
- ADD: need for tests
- FIX: with allocation
- ADD: possibly final things

Development by @mikke89:

- Ported the Vulkan shell code to the new backend architecture for RmlUi 5.0.
- Made a script to compile the GLSL shaders to SPIR-V binary C character arrays. This allows directly including the shaders in the renderer source code.

Co-authored-by: wh1t3lord <git.matvey@yandex.ru>
mikke89 added a commit that referenced this pull request Sep 8, 2022
Adds a new RmlUi renderer for rendering with Vulkan. The new renderer comes with two backends so that it can be used together with one of the SDL or Win32 platforms.

To use one of these backends when compiling and running the samples, set the CMake configuration to either `SAMPLES_BACKEND=SDL_VK` or `SAMPLES_BACKEND=Win32_VK`.

Development commits:

@wh1t3lord
- Started Vulkan implementation
- Keep codebase simple, but easy to use.
- ADD: instance creation
- ADD: physical device and device properties
- ADD: The commentaries about ShellRenderInterfaceVulkan and trying to create Surface
- ADD: Destroying functions but get HWND from RMLUI
- ADD: obtaining HWND
- FIX: compilation
- ADD: standard way to initialize and shutdown
- ADD: Queues and Queues Indecies
- ADD: device creation
- ADD: swapchain
- ADD: OnResize method
- ADD: correct swapchain creation
- ADD: sync primitives
- ADD: presenting, but without resources
- ADD: start implementing resource management, creating descriptor set layout
- You must compile shaders by your own. So engine operates with SPV format only, not raw strings, not compiling files.
- ADD: creating shaders, but I need to implement that
- ADD: creating VkShaderModule
- ADD: remove not capable method in that arch
- ADD: Physical device wrapper, pipeline layout creation
- ADD: continue creating VkFramebuffer for swapchain
- FIX: compilation thing and waiting before destroying everything
- ADD: continue work
- FIX: swapchain creation
- FIX: formatting for commentary
- ADD: something new
- ADD: command list ring
- ADD: implemented command list ring
- ADD: added explanation commentary about using multiple logical frames for rendering
- ADD: added allocator for another allocator, but I need to implement it first
- ADD: added final allocator for dynamic buffer
- ADD: ring buffer pool implementation
- FIX: compilation fixes
- FIX: vma uses implementation in cpp
- ADD: successful creation and deletion
- ADD: started rendering begin and end scopes
- ADD: stable rendering
- ADD: correct rendering body
- ADD: clearing back buffer is working well
- ADD: something new
- ADD: texture data wrapper
- ADD: writing thing for uploading
- ADD: need to create separate queue for uploading resources
- ADD: continue work, added upload manager
- ADD: many stuff
- ADD: uploading textures is fine, but think about better memory handling, now it is just simple and trivial
- ADD: successful init/destroy state for app
- ADD: shaders for Vulkan, they are compiled with SPIR-V otherwise you can't load your shaders...
- ADD: successful init/destroy
- FIX: inserting data into descriptor set layout bindings
- FIX: shaders, binding must unique!
- ADD: continue at home
- ADD: Descriptors
- ADD: continue
- ADD: continue
- FIX: obtaining texture from handle
- ADD: continue work about pipeline creation, use VkDescriptorSetLayoutBinding info from CreateDescriptorSetLayout method.
- ADD: creating pipelines, continue testing later
- ADD: successful creation pipelines
- ADD: continue work, because for every compile geometry you need to have own descriptor set, so we cache all vkCmds after all CompileGeometry->RenderCompiledGeometry
- ADD: allocated more than one descriptor set, but still I need to test my thing
- ADD: well it seems drawing functions are recorded, but nothing to show on screen. It is strange. Have to fix it and analyze what is wrong with it.
- ADD: cached compiled geometry_handle_t
- FIX: data uploading was incorrect
- FIX: commentary
- FIX: correct format for color
- ADD: something, but geometry is discarded somehow...
- ADD: Now this renders the scene, but font textures are not valid
- ADD: something new
- ADD: FINAL
- ADD: commentary
- ADD: in order to test you have to uncomment those lines
- FIX: removed pointless commentary due to release of backends branch
- ADD: all necessary commentaries
- ADD: vulkan renderer
- ADD: continue work about releasing stuff
- ADD: continue work, use one large Descriptor with offsets
- ADD: updated out-dated VMA allocator version, deleted some todos, need to finish ring pool
- ADD: using virtual allocator
- ADD: FINAL, but I didn't test the other scenes. Reusing descriptors, Resizing is working
- FIX: message
- ADD: stuff, but WE REALLY need to solve the thing with Descriptors
- ADD: continue at home
- ADD: test at home
- FIX: if we have descriptors, but remove that functionality after tests
- FIX: descriptor set picking
- FIX: descriptor set creation
- ADD: continue testing
- ADD: continue at home
- ADD: one descriptor set for geometry and descriptors per texture
- ADD: something
- ADD: resizing works
- ADD: need for tests
- FIX: with allocation
- ADD: possibly final things

@mikke89
- Ported the Vulkan shell code to the new backend architecture for RmlUi 5.0.
- Made a script to compile the GLSL shaders to SPIR-V binary C character arrays. This allows directly including the shaders in the renderer source code.

@wh1t3lord
- FIX: in order to prevent the error with setting negative data in scissors
- FIX: possibly fixed scissor offset calculation, because OpenGL has a different coordinate system
- FIX: warnings
- ADD: commentary what you need to implement
- FIX: appropriate flag for messaging in log
- ADD: something
- ADD: todo
- ADD: tracy scopes for gl3 and vk
- ADD: releasing texture method
- ADD: re-using pre-allocated resources
- FIX: checking status for initialized
- ADD: stuff :/
- FIX: fast searching free element in texture
- ADD: commentary
- FIX: stuff
- FIX: animation works
- ADD: somethnig
- ADD: Found bug of invaders crushing
- FIX: working example invaders
- ADD: minimize the memory requirements
- ADD: restored original size
- ADD: dynamic allocation for resources (CPU), fixed warnings
- FIX: texture deletion
- FIX: we don't need for deep reporting
- FIX: deleted unused stuff
- FIX: clipping space and we don't need to set negative value to viewport
- FIX: removed todo
- FIX: minor improvemnets
- ADD: stencil, but some bug with scissors??
- ADD: not final, but really close
- FIX: correction matrix
- FIX: removed queues
- ADD: deletion
- FIX: replaced vector on array in some places
- ADD: assert
- ADD: preprocessor guard
- FIX: deletion

@mikke89
- Load Vulkan dynamically, Vulkan SDK no longer required
- CMake: Only include SDL image on required backends
- Add Windows and Vulkan to the GitHub Actions workflow

@wh1t3lord
- FIX: CI compilation
- FIX: project pre calculates before SetTransform
- FIX: deletion prolem
- FIX: sync moment for textures
- ADD: removed unused elemnts
- FIX: without vkDeviceWaitIdle
- FIX: invaders, deleting texture from Game.
- FIX: now works, texture deletion
- FIX: wrong argument was
- FIX: validation, resource deletion
- FIX: rational naming
- ADD: restored scissor operation for GL3, added depthstencil, but better to fix subpass dependencies
- FIX: style
- ADD: in order to resolve the mergening trouble
- ADD: implemented stencil
- FIX: subpass dependencies are specified, best performance
- ADD: cleanup
- ADD: implemented
- ADD: resizing API
- FIX: compiler warnings from CI
- FIX: compiler warnings from CI
- FIX: compiler warnings from CI
- FIX: compiler warnings from CI
- FIX: CI for GL2 build
- FIX: ignore warnings of external headers
- FIX: ignore warnings of external headers
- FIX: warning, for windows at least
- FIX: warning, for windows at least
- FIX: gl3
- FIX: tests
- FIX: gcc supress
- FIX: macos
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: macos
- FIX: possibly final fix of CI
- FIX: probably dl files

@mikke89
- GitHub actions: Compile the Vulkan backend with clang
- Add GCC debug build
- Fix alignas attribute

@wh1t3lord
- FIX: spirv_reflect
- FIX: formatting
- FIX: formatting and clang
- FIX: clang
- FIX: possible fix for clang, but gcc works fine with assert
- FIX: possible fix for clang
- FIX: clang and debug
- FIX: deleted unused variables
- FIX: GCC
- FIX: restored Config.h
- FIX: deleted virtual methods
- FIX: for Emscripten
- ADD: preprocessor for hidding the compilers implementation
- FIX: compilation fix, probably clang-format bug
- FIX: move out from Platform and re-write implementation file
- FIX: checkouted Game.cpp and Game.h
- FIX: Mike wanted to see this fix
- FIX: important fix in core library, because without it we will get UB
- ADD: new way for handling minimized state for window, all samples are updated
- ADD: revert files
- ADD: final feature about resizing without touching core files
- ADD: all events are handling
- FIX: removed from class vectors for keeping extension and layers
- FIX: removed device_extension_properties from class
- FIX: removed device_extension_properties from class
- FIX: removed instance_extension_properties from class
- FIX: removed instance_layer_properties from class
- FIX: deleted unused classes
- FIX: removed unused implementation

@mikke89
- Rename Vulkan files to VK for consistency with the other backends
- Rename vulkan render interface
- Update CI build
- Tidy up some macros
- Fix missing header
- Simplify assert macro
- Toggle for Vulkan debugging
- Move some utility functions to source file
- Move public interface to the top
- Clean up some class state
- Fix a possible copy bug with multiple available devices
- Align code style more closely to the RmlUi code base
- Remove some unused objects
- Update command buffer ring
- Create texture
- Reverse core texture resource change
- Handle any situation in which the swapchain may become lost, clean up and remove unused window state and functions
- Simplify texture
- Make geometry handle and buffer data aggregate types
- Make shader data aggregate type
- Simplify with type aliases
- Remove some unused objects, some cleanup
- Move waiting for swap chain so that it also works when SDL events change the viewport (e.g. resizing window to zero dimensions)
- Vector to array
- Update CI
- Remove spirv-reflect dependency
- Change header guard
- Add license for Vulkan Memory Allocator dependency
- Update vk_mem_alloc.h to 3.0.1
- Implement Win32_VK backend
- Update readme
- Move monitor layer to debug only

Co-authored-by: wh1t3lord <git.matvey@yandex.ru>
mikke89 added a commit that referenced this pull request Sep 9, 2022
Adds a new RmlUi renderer for rendering with Vulkan. The new renderer comes with two backends so that it can be used together with one of the SDL or Win32 platforms.

To use one of these backends when compiling and running the samples, set the CMake configuration to either `SAMPLES_BACKEND=SDL_VK` or `SAMPLES_BACKEND=Win32_VK`.

Development commits:

@wh1t3lord
- Started Vulkan implementation
- Keep codebase simple, but easy to use.
- ADD: instance creation
- ADD: physical device and device properties
- ADD: The commentaries about ShellRenderInterfaceVulkan and trying to create Surface
- ADD: Destroying functions but get HWND from RMLUI
- ADD: obtaining HWND
- FIX: compilation
- ADD: standard way to initialize and shutdown
- ADD: Queues and Queues Indecies
- ADD: device creation
- ADD: swapchain
- ADD: OnResize method
- ADD: correct swapchain creation
- ADD: sync primitives
- ADD: presenting, but without resources
- ADD: start implementing resource management, creating descriptor set layout
- You must compile shaders by your own. So engine operates with SPV format only, not raw strings, not compiling files.
- ADD: creating shaders, but I need to implement that
- ADD: creating VkShaderModule
- ADD: remove not capable method in that arch
- ADD: Physical device wrapper, pipeline layout creation
- ADD: continue creating VkFramebuffer for swapchain
- FIX: compilation thing and waiting before destroying everything
- ADD: continue work
- FIX: swapchain creation
- FIX: formatting for commentary
- ADD: something new
- ADD: command list ring
- ADD: implemented command list ring
- ADD: added explanation commentary about using multiple logical frames for rendering
- ADD: added allocator for another allocator, but I need to implement it first
- ADD: added final allocator for dynamic buffer
- ADD: ring buffer pool implementation
- FIX: compilation fixes
- FIX: vma uses implementation in cpp
- ADD: successful creation and deletion
- ADD: started rendering begin and end scopes
- ADD: stable rendering
- ADD: correct rendering body
- ADD: clearing back buffer is working well
- ADD: something new
- ADD: texture data wrapper
- ADD: writing thing for uploading
- ADD: need to create separate queue for uploading resources
- ADD: continue work, added upload manager
- ADD: many stuff
- ADD: uploading textures is fine, but think about better memory handling, now it is just simple and trivial
- ADD: successful init/destroy state for app
- ADD: shaders for Vulkan, they are compiled with SPIR-V otherwise you can't load your shaders...
- ADD: successful init/destroy
- FIX: inserting data into descriptor set layout bindings
- FIX: shaders, binding must unique!
- ADD: continue at home
- ADD: Descriptors
- ADD: continue
- ADD: continue
- FIX: obtaining texture from handle
- ADD: continue work about pipeline creation, use VkDescriptorSetLayoutBinding info from CreateDescriptorSetLayout method.
- ADD: creating pipelines, continue testing later
- ADD: successful creation pipelines
- ADD: continue work, because for every compile geometry you need to have own descriptor set, so we cache all vkCmds after all CompileGeometry->RenderCompiledGeometry
- ADD: allocated more than one descriptor set, but still I need to test my thing
- ADD: well it seems drawing functions are recorded, but nothing to show on screen. It is strange. Have to fix it and analyze what is wrong with it.
- ADD: cached compiled geometry_handle_t
- FIX: data uploading was incorrect
- FIX: commentary
- FIX: correct format for color
- ADD: something, but geometry is discarded somehow...
- ADD: Now this renders the scene, but font textures are not valid
- ADD: something new
- ADD: FINAL
- ADD: commentary
- ADD: in order to test you have to uncomment those lines
- FIX: removed pointless commentary due to release of backends branch
- ADD: all necessary commentaries
- ADD: vulkan renderer
- ADD: continue work about releasing stuff
- ADD: continue work, use one large Descriptor with offsets
- ADD: updated out-dated VMA allocator version, deleted some todos, need to finish ring pool
- ADD: using virtual allocator
- ADD: FINAL, but I didn't test the other scenes. Reusing descriptors, Resizing is working
- FIX: message
- ADD: stuff, but WE REALLY need to solve the thing with Descriptors
- ADD: continue at home
- ADD: test at home
- FIX: if we have descriptors, but remove that functionality after tests
- FIX: descriptor set picking
- FIX: descriptor set creation
- ADD: continue testing
- ADD: continue at home
- ADD: one descriptor set for geometry and descriptors per texture
- ADD: something
- ADD: resizing works
- ADD: need for tests
- FIX: with allocation
- ADD: possibly final things

@mikke89
- Ported the Vulkan shell code to the new backend architecture for RmlUi 5.0.
- Made a script to compile the GLSL shaders to SPIR-V binary C character arrays. This allows directly including the shaders in the renderer source code.

@wh1t3lord
- FIX: in order to prevent the error with setting negative data in scissors
- FIX: possibly fixed scissor offset calculation, because OpenGL has a different coordinate system
- FIX: warnings
- ADD: commentary what you need to implement
- FIX: appropriate flag for messaging in log
- ADD: something
- ADD: todo
- ADD: tracy scopes for gl3 and vk
- ADD: releasing texture method
- ADD: re-using pre-allocated resources
- FIX: checking status for initialized
- ADD: stuff :/
- FIX: fast searching free element in texture
- ADD: commentary
- FIX: stuff
- FIX: animation works
- ADD: somethnig
- ADD: Found bug of invaders crushing
- FIX: working example invaders
- ADD: minimize the memory requirements
- ADD: restored original size
- ADD: dynamic allocation for resources (CPU), fixed warnings
- FIX: texture deletion
- FIX: we don't need for deep reporting
- FIX: deleted unused stuff
- FIX: clipping space and we don't need to set negative value to viewport
- FIX: removed todo
- FIX: minor improvemnets
- ADD: stencil, but some bug with scissors??
- ADD: not final, but really close
- FIX: correction matrix
- FIX: removed queues
- ADD: deletion
- FIX: replaced vector on array in some places
- ADD: assert
- ADD: preprocessor guard
- FIX: deletion

@mikke89
- Load Vulkan dynamically, Vulkan SDK no longer required
- CMake: Only include SDL image on required backends
- Add Windows and Vulkan to the GitHub Actions workflow

@wh1t3lord
- FIX: CI compilation
- FIX: project pre calculates before SetTransform
- FIX: deletion prolem
- FIX: sync moment for textures
- ADD: removed unused elemnts
- FIX: without vkDeviceWaitIdle
- FIX: invaders, deleting texture from Game.
- FIX: now works, texture deletion
- FIX: wrong argument was
- FIX: validation, resource deletion
- FIX: rational naming
- ADD: restored scissor operation for GL3, added depthstencil, but better to fix subpass dependencies
- FIX: style
- ADD: in order to resolve the mergening trouble
- ADD: implemented stencil
- FIX: subpass dependencies are specified, best performance
- ADD: cleanup
- ADD: implemented
- ADD: resizing API
- FIX: compiler warnings from CI
- FIX: compiler warnings from CI
- FIX: compiler warnings from CI
- FIX: compiler warnings from CI
- FIX: CI for GL2 build
- FIX: ignore warnings of external headers
- FIX: ignore warnings of external headers
- FIX: warning, for windows at least
- FIX: warning, for windows at least
- FIX: gl3
- FIX: tests
- FIX: gcc supress
- FIX: macos
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: lul
- FIX: macos
- FIX: possibly final fix of CI
- FIX: probably dl files

@mikke89
- GitHub actions: Compile the Vulkan backend with clang
- Add GCC debug build
- Fix alignas attribute

@wh1t3lord
- FIX: spirv_reflect
- FIX: formatting
- FIX: formatting and clang
- FIX: clang
- FIX: possible fix for clang, but gcc works fine with assert
- FIX: possible fix for clang
- FIX: clang and debug
- FIX: deleted unused variables
- FIX: GCC
- FIX: restored Config.h
- FIX: deleted virtual methods
- FIX: for Emscripten
- ADD: preprocessor for hidding the compilers implementation
- FIX: compilation fix, probably clang-format bug
- FIX: move out from Platform and re-write implementation file
- FIX: checkouted Game.cpp and Game.h
- FIX: Mike wanted to see this fix
- FIX: important fix in core library, because without it we will get UB
- ADD: new way for handling minimized state for window, all samples are updated
- ADD: revert files
- ADD: final feature about resizing without touching core files
- ADD: all events are handling
- FIX: removed from class vectors for keeping extension and layers
- FIX: removed device_extension_properties from class
- FIX: removed device_extension_properties from class
- FIX: removed instance_extension_properties from class
- FIX: removed instance_layer_properties from class
- FIX: deleted unused classes
- FIX: removed unused implementation

@mikke89
- Rename Vulkan files to VK for consistency with the other backends
- Rename vulkan render interface
- Update CI build
- Tidy up some macros
- Fix missing header
- Simplify assert macro
- Toggle for Vulkan debugging
- Move some utility functions to source file
- Move public interface to the top
- Clean up some class state
- Fix a possible copy bug with multiple available devices
- Align code style more closely to the RmlUi code base
- Remove some unused objects
- Update command buffer ring
- Create texture
- Reverse core texture resource change
- Handle any situation in which the swapchain may become lost, clean up and remove unused window state and functions
- Simplify texture
- Make geometry handle and buffer data aggregate types
- Make shader data aggregate type
- Simplify with type aliases
- Remove some unused objects, some cleanup
- Move waiting for swap chain so that it also works when SDL events change the viewport (e.g. resizing window to zero dimensions)
- Vector to array
- Update CI
- Remove spirv-reflect dependency
- Change header guard
- Add license for Vulkan Memory Allocator dependency
- Update vk_mem_alloc.h to 3.0.1
- Implement Win32_VK backend
- Update readme
- Move monitor layer to debug only

Co-authored-by: wh1t3lord <git.matvey@yandex.ru>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backends Platforms and renderers samples
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants