1
0
forked from mirrors/0ad

50 Commits

Author SHA1 Message Date
phosit df18e22277 Remove Script::CreateArray
It's better to construct a js-array from a `JS::RootedValueVector`.
Because it is more strongly typed and the index doesn't has to be
specified when appending an element.
Some usages are replaced with `JS::RootedValueArray`.

Fixes: #8702
2026-02-08 19:27:50 +01:00
Vladislav Belov c0ea17f06e Replaces choosedDeviceIt by chosenDeviceIt 2025-11-11 01:51:16 +01:00
Vladislav Belov 485200342d Disables Vulkan devices sorting by default
Currently we always choose the best device. But it's not always
desirable. A more safe approach is to use the default device (with
index 0). The only downside of that is if a user didn't adjust
settings then the game might run on an integrated GPU instead of a
discrete one. In the future it'll be solved by selecting GPU in
options: #8529

Fixes #8455
2025-11-11 01:50:58 +01:00
Vladislav Belov c4bc6c9627 Adds an option to destroy Vulkan old swapchain before
Now it's possible to destroy the old swapchain before creating a new
one. It might make the swapchain creation a bit slower but with a
lower memory peak.
2025-11-10 00:06:52 +01:00
Vladislav Belov 8a64182ca2 Waits Vulkan device idle also on window resize
Fixes the case when a swapchain was recreated on resize rather than
by VK_ERROR_OUT_OF_DATE_KHR.
2025-11-10 00:06:51 +01:00
Vladislav Belov de36c75023 Deletes Vulkan resources on swapchain recreation
The change tries to minimize a memory peak during a window resizing.

Refs #6864
2025-11-10 00:06:41 +01:00
Vladislav Belov 8b1b1d28f8 Fixes missing Vulkan application version
Missing after dc830ccf55.
2025-11-09 12:58:16 +01:00
Vladislav Belov f2752f7230 Removes ARBShader capability 2025-10-14 13:04:16 +02:00
Vladislav Belov e2d9450d0d Revert "Font: make atlas uploads queue-aware on Vulkan"
This reverts commit 256dff7fd4.
2025-09-17 12:32:08 +02:00
Ralph Sennhauser 2cedb48de2 Remove custom span and use std::span
With C++20 the custom container PS:span, which was a backport of
std::span is no longer needed.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-08-24 11:09:57 +02:00
Ralph Sennhauser 5b5f678e3f Fix some includes all over the place
Make include-what-you-use happy with some files in source and fix what
needs to be fixed.

Add markers to precompiled.h header includes to avoid
include-what-you-use wanting them to be removed.

Ref: #8086
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-08-14 20:15:30 +02:00
Ralph Sennhauser f9e1e742bf Fix includes in source/renderer
Make include-what-you-use happy with files in source/renderer and
fix what needs to be fixed.

Ref: #8086
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-07-27 16:07:14 +02:00
trompetin17 256dff7fd4 Font: make atlas uploads queue-aware on Vulkan
Goal
----
Avoid corrupting the dynamic font-atlas on Vulkan by blocking any
re-uploads until the command buffer that created / last updated the
texture has actually been submitted.

What changed
------------
* **Queue-aware textures**
  * Added `queueSubmitAware` flag to `IDevice::CreateTexture*` APIs.
  * `Vulkan::CTexture` now stores two booleans:
      - `m_QueueSubmitAware` – opt-in per texture.
      - `m_PendingQueueSubmit` – set to *true* the moment an upload
        is recorded, cleared once the submit scheduler has flushed.
  * `CRingCommandContext::ScheduleUpload` marks the texture as
    pending (`SetPendingQueueSubmit(true)`).

* **Device-side watcher**
  * `Vulkan::CDevice` keeps a
    `m_TextureUploadWatcherQueue`. Each frame it checks textures that
    were uploaded ≥ `NUMBER_OF_FRAMES_IN_FLIGHT` frames ago and
    clears their pending flag.
  * New helpers
    `ScheduleTextureUploadWatch `,
    `ProcessTextureUploadWatchQueue()`.

* **Font code**
  * Atlas texture is now created with
    `queueSubmitAware = true`.
  * `CFont::UploadTextureAtlasToGPU()` early-outs when
    `IsPendingQueueSubmit()` returns *true*, instead of tracking a
    submit-handle or the manual `m_IsLoadingTextureToGPU` flag
    (removed).

Why this is better
------------------
The logic to wait for a flush is localised inside the rendering
backend, so `CFont` only needs to ask *“is my texture busy?”*.
This removes the fragile submit-handle bookkeeping and works even if
the scheduler issues multiple submits per frame in future.

Result
------
Atlas uploads are deferred until the previous submit completes,
eliminating the intermittent glyph corruption on the Vulkan backend
while leaving GL and the dummy backend unchanged.
2025-07-09 13:09:46 -05:00
phosit 891908b801 Remove UNUSED
The `UNUSED` macro is used to mark a variable as unused but with a name.
Those usages are replaced with comments so that `UNUSED` can be removed.

https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-unused
2025-06-26 17:25:05 +02:00
Vladislav Belov 6ef6a87287 Adds queries implementation to renderer backends. 2025-04-16 22:38:32 +02:00
Vladislav Belov 9c560c36af Removes ARBShadersShadow IDevice capability.
According to our stats `GL_ARB_fragment_program_shadow` is supported
by all our GL users. Also we're going to remove OpenGL ARB in A29. So
I remove ARBShadersShadow completely.
2025-04-12 23:14:28 +02:00
phosit 1a8757660f Get config values without using return parameters
Many temporaries can be removed.
2025-04-09 12:51:21 +02:00
phosit 473f8ca72e Remove FALLTHROUGH on empty cases
`#include "lib/code_annotation.h"` can be removed in some places.
2025-01-29 19:34:12 +01:00
Vladislav Belov 0467d27b07 Fixes slow-path texture conversion on RPI4.
RPI4 returns `false` for `textureCompressionBC` because it doesn't
support formats above BC3. As the Vulkan specification requires to
support all BC formats to have `true` for `textureCompressionBC`.
2025-01-05 00:27:02 +01:00
Vladislav Belov 9e371824c2 Adds storage buffer support to Vulkan and GL.
The idea is similar to the storage images but we need a separate
descriptor set in Vulkan and a program interface to gather used buffer
in GL.

For Vulkan we also need to track buffers to free used descriptor sets.
2024-12-09 22:47:15 +01:00
Vladislav Belov 60b4072b29 Avoids assertions on Vulkan backend device creation in case of driver bugs. 2024-12-05 18:32:15 +01:00
Vladislav Belov 0a6703762d Removes hardcoded Vulkan uniform descriptor set ranges. 2024-11-06 23:24:22 +01:00
vladislavbelov b9fd6f18f0 Adds proper IBuffer usage instead of dynamic flag.
Comments By: phosit
Differential Revision: https://code.wildfiregames.com/D5281
This was SVN commit r28107.
2024-06-10 19:31:41 +00:00
vladislavbelov e3f46bb809 Adds compute shaders support and scaling with FSR.
Fixes #6842

Comments By: phosit, Stan
Differential Revision: https://code.wildfiregames.com/D5218
This was SVN commit r28010.
2024-01-17 19:40:27 +00:00
vladislavbelov ffc4a56b9f Revert non-ASCII characters from source and configuration files introduced in 157c6af18e.
Fixes #6846

Differential Revision: https://code.wildfiregames.com/D5185
This was SVN commit r27965.
2023-12-03 00:30:12 +00:00
vladislavbelov 6ef27d2ffe Merges UID from different Vulkan device objects and unifies single type descriptor set creation.
Differential Revision: https://code.wildfiregames.com/D5140
This was SVN commit r27879.
2023-10-09 18:34:50 +00:00
vladislavbelov af13be489e Adds printing error names to Vulkan backend.
Differential Revision: https://code.wildfiregames.com/D5121
This was SVN commit r27839.
2023-09-13 17:36:52 +00:00
bb 157c6af18e Make the space in 0 A.D. non-breaking throughout the codebase.
Avoid cases of filenames
Update years in terms and other legal(ish) documents
Don't update years in license headers, since change is not meaningful

Will add linter rule in seperate commit

Happy recompiling everyone!

Original Patch By: Nescio
Comment By: Gallaecio
Differential Revision: D2620
This was SVN commit r27786.
2023-07-27 20:54:46 +00:00
vladislavbelov cd1dccd59f Fixes the property name of available devices in a Vulkan report.
This was SVN commit r27579.
2023-03-14 20:21:53 +00:00
vladislavbelov 05c77b1819 Switches VMA to Vulkan 1.1.
Tested By: Langbart
Differential Revision: https://code.wildfiregames.com/D4947
This was SVN commit r27573.
2023-03-11 19:12:54 +00:00
vladislavbelov 4355c8675b Implements framebuffer readback for Vulkan to allow screenshots.
Differential Revision: https://code.wildfiregames.com/D4940
This was SVN commit r27552.
2023-02-17 17:36:10 +00:00
vladislavbelov c17bffff1e Extends logs for Vulkan available device.
Differential Revision: https://code.wildfiregames.com/D4917
This was SVN commit r27510.
2023-01-30 21:16:47 +00:00
vladislavbelov cb5a0b6342 Prevents using R8G8B8_UNORM format for Vulkan textures as it can be supported as a native format only by workarounds.
This was SVN commit r27496.
2023-01-26 21:44:50 +00:00
vladislavbelov 6648b1b53c Enables non-solid fill for Vulkan to allow wireframe drawing.
This was SVN commit r27494.
2023-01-26 17:23:56 +00:00
vladislavbelov 18b2f6e184 Disables descriptor indexing on macOS.
This was SVN commit r27477.
2023-01-21 22:53:16 +00:00
vladislavbelov ec704d8179 Recreates Vulkan swapchain on window resize.
Tested By: hyperion
Differential Revision: https://code.wildfiregames.com/D4879
This was SVN commit r27422.
2023-01-12 06:35:59 +00:00
vladislavbelov ccda54a662 Ands new depth stencil format to support all combinations on Vulkan.
Tested By: hyperion, nwtour
Differential Revision: https://code.wildfiregames.com/D4878
This was SVN commit r27421.
2023-01-12 06:32:52 +00:00
vladislavbelov 7c84c23114 Adds Vulkan backend.
Comments By: phosit, Stan
Differential Revision: https://code.wildfiregames.com/D4876
This was SVN commit r27412.
2023-01-10 20:22:20 +00:00
vladislavbelov 7dca5d23ad Adds preferred depth stencil format to renderer backend.
This was SVN commit r27379.
2023-01-06 23:07:50 +00:00
vladislavbelov 90f064ff03 Switches from per draw vertex attribute format to precompiled vertex input layout.
Comments By: phosit, Stan
Differential Revision: https://code.wildfiregames.com/D4852
This was SVN commit r27363.
2023-01-06 00:39:25 +00:00
vladislavbelov 4ed41d4a9a Switches from pipeline state descriptions to pipeline states.
Tested By: phosit, Stan
Differential Revision: https://code.wildfiregames.com/D4850
This was SVN commit r27328.
2022-12-31 18:29:44 +00:00
vladislavbelov c0e888e2af Removes SetViewport from CRenderer.
Differential Revision: https://code.wildfiregames.com/D4849
This was SVN commit r27313.
2022-12-29 06:53:06 +00:00
vladislavbelov 29368cf776 Adds framebuffer attachment load and store operations.
Comments By: phosit, Stan
Differential Revision: https://code.wildfiregames.com/D4830
This was SVN commit r27256.
2022-11-26 21:55:17 +00:00
vladislavbelov 3a4c8342a0 Makes AcquireNextBackbuffer returns true in case of successful backbuffer acquirement.
This was SVN commit r27184.
2022-10-30 00:38:45 +00:00
vladislavbelov 968fd50fb0 Moves Backend enum from CVideoMode to backends.
Comments By: phosit, Stan
Differential Revision: https://code.wildfiregames.com/D4809
This was SVN commit r27173.
2022-10-25 22:45:54 +00:00
vladislavbelov 64bd81ae6b Adds usage flags to backend textures.
This was SVN commit r27152.
2022-10-12 23:19:27 +00:00
vladislavbelov 8ae3a2bfd6 Adds AcquireNextBackbuffer to CDevice to have something to present.
This was SVN commit r27148.
2022-10-11 22:48:07 +00:00
vladislavbelov 095838da0a Fixes A8 framebuffer format used for LOS interpolation and enables smooth LOS by default.
Tested By: Langbart, mastoras
Differential Revision: https://code.wildfiregames.com/D4654
This was SVN commit r26906.
2022-05-26 16:36:57 +00:00
vladislavbelov 62e589ab76 Adds renderer backend interface and dummy backend.
Comments By: phosit, Stan
Tested By: Langbart, phosit
Differential Revision: https://code.wildfiregames.com/D4636
This was SVN commit r26858.
2022-05-08 22:02:46 +00:00
vladislavbelov e6dd9f944e Moves Vulkan report code to its device to prevent crashing when a GL device is created. Fixes #6270
Differential Revision: https://code.wildfiregames.com/D4577
This was SVN commit r26779.
2022-04-12 06:39:14 +00:00