diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index e556fd1d..2382f249 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -17,13 +17,13 @@ jobs:
- id: buildConfig
uses: actions/github-script@v6
with:
- script: return "${{ matrix.config == 'debug' && 'Debug' || 'RelWithDebInfo' }}"
+ script: return "${{ matrix.config == 'debug' && 'Debug' || 'Release' }}"
result-encoding: string
- id: cmakeConfig
uses: actions/github-script@v6
with:
- script: return "${{ matrix.config == 'debug' && 'Debug' || 'Release' }}"
+ script: return "${{ matrix.config == 'debug' && 'Debug' || 'RelWithDebInfo' }}"
result-encoding: string
- name: Set up Java
@@ -35,7 +35,7 @@ jobs:
working-directory: ${{github.workspace}}
run: |
cd AE-Bin
- wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/VSzlOKILCG8UfA"
+ wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/J96d_RPphPyYBg"
unzip external.zip
rm external.zip
cd ../AE/android
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
index 56f44930..c8120ae0 100644
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -8,7 +8,6 @@ jobs:
matrix:
config: [Debug, Develop, Profile, Release]
- if: false
runs-on: ubuntu-24.04
name: Linux x64, GCC 13, ${{matrix.config}}
@@ -27,7 +26,7 @@ jobs:
run: |
mkdir _build
cd AE-Bin
- wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/m_u0aI_bssVzRA"
+ wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/ItFRNcXTSg8jJw"
unzip external.zip
- name: Configure CMake
@@ -41,36 +40,66 @@ jobs:
- name: Build
working-directory: ${{github.workspace}}
run: cmake --build "_build" --config ${{matrix.config}} -j 2
-
- - name: Test
- working-directory: ${{github.workspace}}/_build
- run: |
- ctest -R "Tests.Base" -C ${{matrix.config}}
- ctest -R "Tests.Serializing" -C ${{matrix.config}}
- ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}}
- ctest -R "Tests.Scripting" -C ${{matrix.config}}
- ctest -R "Tests.Threading" -C ${{matrix.config}}
- ctest -R "Tests.Networking" -C ${{matrix.config}}
- ctest -R "Tests.ECS-st" -C ${{matrix.config}}
- ctest -R "Tests.VFS" -C ${{matrix.config}}
- ctest -R "Tests.AtlasTools" -C ${{matrix.config}}
- ctest -R "Tests.GeometryTools" -C ${{matrix.config}}
- ctest -R "Tests.PipelineCompiler" -C ${{matrix.config}}
- uses: actions/upload-artifact@v4
with:
name: AsEn-ResourceEditor-linux-x64-gcc13-${{matrix.config}}
path: |
- ${{github.workspace}}/_build/bin/ResourceEditor.elf
+ ${{github.workspace}}/_build/bin/ResourceEditor
- uses: actions/upload-artifact@v4
with:
name: AsEn-Tools-linux-x64-gcc13-${{matrix.config}}
path: |
- ${{github.workspace}}/_build/bin/CICD.elf
+ ${{github.workspace}}/_build/bin/CICD
+ ${{github.workspace}}/_build/bin/OfflinePacker
+ ${{github.workspace}}/_build/bin/RemoteGraphicsDevice
${{github.workspace}}/_build/bin/GraphicsLib.so
- ${{github.workspace}}/_build/bin/OfflinePacker.elf
- ${{github.workspace}}/_build/bin/RemoteGraphicsDevice.elf
+
+ - name: Tests.Base
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Base" -C ${{matrix.config}} -V
+
+ - name: Tests.Serializing
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Serializing" -C ${{matrix.config}} -V
+
+ - name: Tests.Scripting
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Scripting" -C ${{matrix.config}} -V
+
+ - name: Tests.Threading
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Threading" -C ${{matrix.config}} -V
+
+ - name: Tests.Networking
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Networking" -C ${{matrix.config}} -V
+
+ - name: Tests.ECS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ECS-st" -C ${{matrix.config}} -V
+
+ - name: Tests.VFS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.VFS" -C ${{matrix.config}} -V
+
+ - name: Tests.AtlasTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.AtlasTools" -C ${{matrix.config}} -V
+
+ - name: Tests.GeometryTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.GeometryTools" -C ${{matrix.config}} -V
+
+ - name: Tests.ResourceLoaders
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}} -V
+
+ - name: Tests.PipelineCompiler
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.PipelineCompiler" -C ${{matrix.config}} -V
+
build-clang-16:
@@ -96,7 +125,7 @@ jobs:
run: |
mkdir _build
cd AE-Bin
- wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/yGUJ9v-Fug03aw"
+ wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/7FIqOv5RO-12oA"
unzip external.zip
- name: Configure CMake
@@ -112,36 +141,65 @@ jobs:
- name: Build
working-directory: ${{github.workspace}}
run: cmake --build "_build" --config ${{matrix.config}} -j 2
-
- - name: Test
- working-directory: ${{github.workspace}}/_build
- run: |
- ctest -R "Tests.Base" -C ${{matrix.config}}
- ctest -R "Tests.Serializing" -C ${{matrix.config}}
- ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}}
- ctest -R "Tests.Scripting" -C ${{matrix.config}}
- ctest -R "Tests.Threading" -C ${{matrix.config}}
- ctest -R "Tests.Networking" -C ${{matrix.config}}
- ctest -R "Tests.ECS-st" -C ${{matrix.config}}
- ctest -R "Tests.VFS" -C ${{matrix.config}}
- ctest -R "Tests.AtlasTools" -C ${{matrix.config}}
- ctest -R "Tests.GeometryTools" -C ${{matrix.config}}
- ctest -R "Tests.PipelineCompiler" -C ${{matrix.config}}
- uses: actions/upload-artifact@v4
with:
name: AsEn-ResourceEditor-linux-x64-clang16-${{matrix.config}}
path: |
- ${{github.workspace}}/_build/bin/ResourceEditor.elf
+ ${{github.workspace}}/_build/bin/ResourceEditor
- uses: actions/upload-artifact@v4
with:
name: AsEn-Tools-linux-x64-clang16-${{matrix.config}}
path: |
- ${{github.workspace}}/_build/bin/CICD.elf
+ ${{github.workspace}}/_build/bin/CICD
+ ${{github.workspace}}/_build/bin/OfflinePacker
+ ${{github.workspace}}/_build/bin/RemoteGraphicsDevice
${{github.workspace}}/_build/bin/GraphicsLib.so
- ${{github.workspace}}/_build/bin/OfflinePacker.elf
- ${{github.workspace}}/_build/bin/RemoteGraphicsDevice.elf
+
+ - name: Tests.Base
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Base" -C ${{matrix.config}} -V
+
+ - name: Tests.Serializing
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Serializing" -C ${{matrix.config}} -V
+
+ - name: Tests.Scripting
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Scripting" -C ${{matrix.config}} -V
+
+ - name: Tests.Threading
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Threading" -C ${{matrix.config}} -V
+
+ - name: Tests.Networking
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Networking" -C ${{matrix.config}} -V
+
+ - name: Tests.ECS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ECS-st" -C ${{matrix.config}} -V
+
+ - name: Tests.VFS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.VFS" -C ${{matrix.config}} -V
+
+ - name: Tests.AtlasTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.AtlasTools" -C ${{matrix.config}} -V
+
+ - name: Tests.GeometryTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.GeometryTools" -C ${{matrix.config}} -V
+
+ - name: Tests.ResourceLoaders
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}} -V
+
+ - name: Tests.PipelineCompiler
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.PipelineCompiler" -C ${{matrix.config}} -V
build-clang-16-rg:
@@ -167,7 +225,7 @@ jobs:
run: |
mkdir _build
cd AE-Bin
- wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/yGUJ9v-Fug03aw"
+ wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/7FIqOv5RO-12oA"
unzip external.zip
- name: Configure CMake
@@ -188,6 +246,6 @@ jobs:
with:
name: AsEn-ResourceEditor-linux-x64-clang16-${{matrix.config}}-RemoteGraphics
path: |
- ${{github.workspace}}/_build/bin/ResourceEditor.elf
+ ${{github.workspace}}/_build/bin/ResourceEditor
\ No newline at end of file
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
index 5951dedf..29a1be8d 100644
--- a/.github/workflows/macos.yml
+++ b/.github/workflows/macos.yml
@@ -19,7 +19,7 @@ jobs:
run: |
mkdir _build
cd AE-Bin
- wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/-izVl3vx1StfCQ"
+ wget -O external.zip "https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/d3yxp6smqL7wEg"
unzip external.zip
- name: Configure CMake
@@ -30,19 +30,6 @@ jobs:
working-directory: ${{github.workspace}}
run: cmake --build "_build" --config ${{matrix.config}} -j 2
- - name: Test
- working-directory: ${{github.workspace}}/_build
- run: |
- ctest -R "Tests.Base" -C ${{matrix.config}}
- ctest -R "Tests.Serializing" -C ${{matrix.config}}
- ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}}
- ctest -R "Tests.Threading" -C ${{matrix.config}}
- ctest -R "Tests.Networking" -C ${{matrix.config}}
- ctest -R "Tests.ECS-st" -C ${{matrix.config}}
- ctest -R "Tests.VFS" -C ${{matrix.config}}
- ctest -R "Tests.AtlasTools" -C ${{matrix.config}}
- ctest -R "Tests.GeometryTools" -C ${{matrix.config}}
-
- uses: actions/upload-artifact@v4
with:
name: AsEn-ResourceEditor-macos-arm64-${{matrix.config}}
@@ -57,5 +44,45 @@ jobs:
${{github.workspace}}/_build/bin/GraphicsLib.so
${{github.workspace}}/_build/bin/OfflinePacker.app
${{github.workspace}}/_build/bin/RemoteGraphicsDevice.app
-
+
+ - name: Tests.Base
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Base" -C ${{matrix.config}} -V
+
+ - name: Tests.Serializing
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Serializing" -C ${{matrix.config}} -V
+
+ - name: Tests.Scripting
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Scripting" -C ${{matrix.config}} -V
+
+ - name: Tests.Threading
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Threading" -C ${{matrix.config}} -V
+
+ - name: Tests.Networking
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Networking" -C ${{matrix.config}} -V
+
+ - name: Tests.ECS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ECS-st" -C ${{matrix.config}} -V
+
+ - name: Tests.VFS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.VFS" -C ${{matrix.config}} -V
+
+ - name: Tests.AtlasTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.AtlasTools" -C ${{matrix.config}} -V
+
+ - name: Tests.GeometryTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.GeometryTools" -C ${{matrix.config}} -V
+
+ - name: Tests.ResourceLoaders
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}} -V
+
\ No newline at end of file
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
index 71e1b6e8..d10d8f0e 100644
--- a/.github/workflows/windows.yml
+++ b/.github/workflows/windows.yml
@@ -19,7 +19,7 @@ jobs:
run: |
mkdir _build
cd AE-Bin
- powershell -Command "(New-Object Net.WebClient).DownloadFile('https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/m3tcIRTm6fSUWQ', 'external.zip' )"
+ powershell -Command "(New-Object Net.WebClient).DownloadFile('https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/jrEo9X0ToUJC0g', 'external.zip' )"
powershell Expand-Archive external.zip -DestinationPath "."
- name: Configure CMake
@@ -29,21 +29,6 @@ jobs:
- name: Build
working-directory: ${{github.workspace}}
run: cmake --build "_build" --config ${{matrix.config}}
-
- - name: Test
- working-directory: ${{github.workspace}}/_build
- run: |
- ctest -R "Tests.Base" -C ${{matrix.config}}
- ctest -R "Tests.Serializing" -C ${{matrix.config}}
- ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}}
- ctest -R "Tests.Scripting" -C ${{matrix.config}}
- ctest -R "Tests.Threading" -C ${{matrix.config}}
- ctest -R "Tests.Networking" -C ${{matrix.config}}
- ctest -R "Tests.ECS-st" -C ${{matrix.config}}
- ctest -R "Tests.VFS" -C ${{matrix.config}}
- ctest -R "Tests.AtlasTools" -C ${{matrix.config}}
- ctest -R "Tests.GeometryTools" -C ${{matrix.config}}
- ctest -R "Tests.PipelineCompiler" -C ${{matrix.config}}
- uses: actions/upload-artifact@v4
with:
@@ -59,6 +44,55 @@ jobs:
${{github.workspace}}/_build/bin/${{matrix.config}}/GraphicsLib.dll
${{github.workspace}}/_build/bin/${{matrix.config}}/OfflinePacker.exe
${{github.workspace}}/_build/bin/${{matrix.config}}/RemoteGraphicsDevice.exe
+
+ - name: Tests.Base
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Base" -C ${{matrix.config}} -V
+
+ - name: Tests.Serializing
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Serializing" -C ${{matrix.config}} -V
+
+ - name: Tests.Scripting
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Scripting" -C ${{matrix.config}} -V
+
+ - name: Tests.Threading
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Threading" -C ${{matrix.config}} -V
+
+ - name: Tests.Networking
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Networking" -C ${{matrix.config}} -V
+
+ - name: Tests.ECS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ECS-st" -C ${{matrix.config}} -V
+
+ - name: Tests.VFS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.VFS" -C ${{matrix.config}} -V
+
+ - name: Tests.Video
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Video" -C ${{matrix.config}} -V
+
+ - name: Tests.AtlasTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.AtlasTools" -C ${{matrix.config}} -V
+
+ - name: Tests.GeometryTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.GeometryTools" -C ${{matrix.config}} -V
+
+ - name: Tests.ResourceLoaders
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}} -V
+
+ - name: Tests.PipelineCompiler
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.PipelineCompiler" -C ${{matrix.config}} -V
+
build-vs17-x64-rg:
@@ -77,12 +111,12 @@ jobs:
run: |
mkdir _build
cd AE-Bin
- powershell -Command "(New-Object Net.WebClient).DownloadFile('https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/m3tcIRTm6fSUWQ', 'external.zip' )"
+ powershell -Command "(New-Object Net.WebClient).DownloadFile('https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/jrEo9X0ToUJC0g', 'external.zip' )"
powershell Expand-Archive external.zip -DestinationPath "."
- name: Configure CMake
working-directory: ${{github.workspace}}
- run: cmake -G "Visual Studio 17 2022" -A x64 -DAE_ENABLE_REMOTE_GRAPHICS=ON -DAE_RES_EDITOR_RELEASE=ON -DAE_GRAPHICS_STRONG_VALIDATION=ON -DAE_CI_BUILD_TEST=ON -DAE_ENABLE_LOGS=ON -S "AE" -B "_build"
+ run: cmake -G "Visual Studio 17 2022" -A x64 -DAE_ENABLE_REMOTE_GRAPHICS=ON -DAE_RES_EDITOR_RELEASE=ON -DAE_GRAPHICS_STRONG_VALIDATION=ON -DAE_ENABLE_OPENVR=OFF -DAE_CI_BUILD_TEST=ON -DAE_ENABLE_LOGS=ON -S "AE" -B "_build"
- name: Build
working-directory: ${{github.workspace}}
@@ -111,7 +145,7 @@ jobs:
run: |
mkdir _build
cd AE-Bin
- powershell -Command "(New-Object Net.WebClient).DownloadFile('https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/aymvb95paMmFFA', 'external.zip' )"
+ powershell -Command "(New-Object Net.WebClient).DownloadFile('https://getfile.dokpub.com/yandex/get/https://disk.yandex.ru/d/tzvkvWlNsKtxcA', 'external.zip' )"
powershell Expand-Archive external.zip -DestinationPath "."
- name: Configure CMake
@@ -121,21 +155,6 @@ jobs:
- name: Build
working-directory: ${{github.workspace}}
run: cmake --build "_build" --config ${{matrix.config}}
-
- - name: Test
- working-directory: ${{github.workspace}}/_build
- run: |
- ctest -R "Tests.Base" -C ${{matrix.config}}
- ctest -R "Tests.Serializing" -C ${{matrix.config}}
- ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}}
- ctest -R "Tests.Scripting" -C ${{matrix.config}}
- ctest -R "Tests.Threading" -C ${{matrix.config}}
- ctest -R "Tests.Networking" -C ${{matrix.config}}
- ctest -R "Tests.ECS-st" -C ${{matrix.config}}
- ctest -R "Tests.VFS" -C ${{matrix.config}}
- ctest -R "Tests.AtlasTools" -C ${{matrix.config}}
- ctest -R "Tests.GeometryTools" -C ${{matrix.config}}
- ctest -R "Tests.PipelineCompiler" -C ${{matrix.config}}
- uses: actions/upload-artifact@v4
if: false
@@ -152,5 +171,52 @@ jobs:
${{github.workspace}}/_build/bin/${{matrix.config}}/GraphicsLib.dll
${{github.workspace}}/_build/bin/${{matrix.config}}/OfflinePacker.exe
${{github.workspace}}/_build/bin/${{matrix.config}}/RemoteGraphicsDevice.exe
-
-
\ No newline at end of file
+
+ - name: Tests.Base
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Base" -C ${{matrix.config}} -V
+
+ - name: Tests.Serializing
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Serializing" -C ${{matrix.config}} -V
+
+ - name: Tests.Scripting
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Scripting" -C ${{matrix.config}} -V
+
+ - name: Tests.Threading
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Threading" -C ${{matrix.config}} -V
+
+ - name: Tests.Networking
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Networking" -C ${{matrix.config}} -V
+
+ - name: Tests.ECS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ECS-st" -C ${{matrix.config}} -V
+
+ - name: Tests.VFS
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.VFS" -C ${{matrix.config}} -V
+
+ - name: Tests.Video
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.Video" -C ${{matrix.config}} -V
+
+ - name: Tests.AtlasTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.AtlasTools" -C ${{matrix.config}} -V
+
+ - name: Tests.GeometryTools
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.GeometryTools" -C ${{matrix.config}} -V
+
+ - name: Tests.ResourceLoaders
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.ResourceLoaders" -C ${{matrix.config}} -V
+
+ - name: Tests.PipelineCompiler
+ working-directory: ${{github.workspace}}/_build
+ run: ctest -R "Tests.PipelineCompiler" -C ${{matrix.config}} -V
+
diff --git a/AE/.vscode/settings.json b/AE/.vscode/settings.json
index f2d3c0a0..220fbce1 100644
--- a/AE/.vscode/settings.json
+++ b/AE/.vscode/settings.json
@@ -1,7 +1,8 @@
{
"cmake.configureSettings": {
- "AE_SIMD_AVX": 2,
- "AE_ENABLE_VULKAN": "ON"
+ "AE_SIMD_AVX": 1,
+ "AE_ENABLE_VULKAN": "ON",
+ "AE_GRAPHICS_STRONG_VALIDATION": "OFF"
},
"files.associations": {
"array": "cpp",
diff --git a/AE/CMakeLists.txt b/AE/CMakeLists.txt
index 071941f5..3f3b4d6b 100644
--- a/AE/CMakeLists.txt
+++ b/AE/CMakeLists.txt
@@ -1,6 +1,6 @@
# Copyright (c) Zhirnov Andrey. For more information see 'LICENSE'
-cmake_minimum_required( VERSION 3.10 FATAL_ERROR )
+cmake_minimum_required( VERSION 3.18 FATAL_ERROR )
# CMAKE_BUILD_TYPE is not defined if used IDE
if (DEFINED CMAKE_BUILD_TYPE)
@@ -18,7 +18,7 @@ endif()
#----------------------------------------------------------
project( "AE"
- VERSION 24.08.253 # year, month, version
+ VERSION 24.8.254 # year, month, version
LANGUAGES C CXX
DESCRIPTION "async game engine"
)
diff --git a/AE/docs/engine/Build.md b/AE/docs/engine/Build.md
index a80b585a..a0bee5ef 100644
--- a/AE/docs/engine/Build.md
+++ b/AE/docs/engine/Build.md
@@ -34,7 +34,8 @@ Install XCode.
### Windows
Install [CMake](https://cmake.org/download/).
-Install [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/).
+Install [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/).
+Optional: install ClangCL in Visual Studio components.
## Download third party dependencies
@@ -60,7 +61,7 @@ Libraries and headers will be installed to the `AE/../AE-Bin/external` folder.
### Linux
`update-all-linux.sh` - to load header-only sources.
-`update-all-linux-x64-clang15.sh` or `update-all-linux-x64-gcc12.sh` - to compile static (.a) libs.
+`update-all-linux-x64-clang16.sh` or `update-all-linux-x64-gcc13.sh` - to compile static (.a) libs.
### MacOS
@@ -94,7 +95,7 @@ arch -x86_64 /usr/local/bin/brew install llvm
### Windows
`update-all-win.bat` - to load header-only sources.
-`update-all-win-x64-msvc143.bat` - to compile static (.lib) and dynamic (.dll) libs.
+`update-all-win-x64-msvc143.bat` or `update-all-win-x64-clang17.bat` - to compile static (.lib) and dynamic (.dll) libs.
To compile Metal shaders put [MetalTools for Windows](https://developer.apple.com/download/all/?q=metal%20developer%20tools%20for%20windows) into the folder `AE-Bin/external/win-x64/MetalTools`:
```
diff --git a/AE/docs/engine/VulkanFeatures.md b/AE/docs/engine/VulkanFeatures.md
index 1be6bd72..41d74a5f 100644
--- a/AE/docs/engine/VulkanFeatures.md
+++ b/AE/docs/engine/VulkanFeatures.md
@@ -124,6 +124,7 @@ Source folder: [Vulkan backend](https://github.com/azhirnov/as-en/blob/dev/AE/en
- [ ] VK_NV_ray_tracing_invocation_reorder, GL_NV_shader_invocation_reorder
- [ ] VK_NV_displacement_micromap, GL_NV_displacement_micromap
- [ ] VK_KHR_push_descriptor
+- [ ] VK_KHR_shader_integer_dot_product - ML
**Pending for debugging:**
- [ ] VK_EXT_device_fault
diff --git a/AE/docs/papers/GraphicsNotes-ru.md b/AE/docs/papers/GraphicsNotes-ru.md
index b39596f8..5f79031d 100644
--- a/AE/docs/papers/GraphicsNotes-ru.md
+++ b/AE/docs/papers/GraphicsNotes-ru.md
@@ -74,7 +74,6 @@ float3x3 ComputeTBNinFS (float2 uv, float3 worldPos)
* Хорошо работает для плоских поверхностей и небольших изгибов.
* Хорошо работает для карты высот, но только когда высоты в формате float32, для float16 точность теряется и результат хуже.
* Можно использовать как альтернативный способ расчета нормалей для проверки корректности трансформаций у предрасчитаных нормалей.
-* Сглаженные нормали через сабгруппы?
## Текстуры
@@ -123,7 +122,7 @@ float3x3 ComputeTBNinFS (float2 uv, float3 worldPos)
## Микрооптимизация шейдеров
* Компилятор заменяет повторяющиеся деления на одно переворачивание (1/x) и умножения.
-* Реализация `Sign` через `Step`, который возвращает -1 или 1, намного быстрее чем `SignOrZero` (`sign` из GLSL), `copysign` из MSL - быстрый.
+* Реализация `Sign` через `Step`, который возвращает -1 или 1, намного быстрее чем `SignOrZero` (`sign` из GLSL), а `copysign` из MSL - быстрее `Step`.
* `FMA` на мобильных работает через `fp32 FMA`, а на NV использует `fp16 FMA x2` что в 2 раза быстрее fp32 для half2, half4.
* `[[unroll]]` сильно замедляет компиляцию пайплайна, вплоть до повисания (PowerVR), на производительность влияет слабо.
* На NV mediump может работать медленнее чем highp, на мобильных аналогично fp16.
diff --git a/AE/engine/Changelog.md b/AE/engine/Changelog.md
index e51940a3..869776c1 100644
--- a/AE/engine/Changelog.md
+++ b/AE/engine/Changelog.md
@@ -6,6 +6,7 @@
- Vulkan: add VK_KHR_shader_quad_control, GL_EXT_shader_quad
- Vulkan: add VK_KHR_shader_maximal_reconvergence, GL_EXT_maximal_reconvergence
- Vulkan: add VK_NV_ray_tracing_validation
+- update to cmake 3.18
## 24.07.249
diff --git a/AE/engine/cmake/compilers.cmake b/AE/engine/cmake/compilers.cmake
index a3fb24dc..329992fa 100644
--- a/AE/engine/cmake/compilers.cmake
+++ b/AE/engine/cmake/compilers.cmake
@@ -356,7 +356,7 @@ if ( MSVC )
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CURRENT_EXE_LINKER_FLAGS} /LTCG /RELEASE " CACHE STRING "" FORCE )
set( CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CURRENT_STATIC_LINKER_FLAGS} /LTCG " CACHE STRING "" FORCE )
set( CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CURRENT_SHARED_LINKER_FLAGS} /LTCG /RELEASE " CACHE STRING "" FORCE )
- set( PROJECTS_SHARED_CXX_FLAGS_RELEASE ${MSVC_SHARED_OPTS} /Ob2 /Oi /Ot /Oy /GT /GL /GF /GS- /Ox /analyze- CACHE INTERNAL "" FORCE )
+ set( PROJECTS_SHARED_CXX_FLAGS_RELEASE ${MSVC_SHARED_OPTS} /MT /Ob2 /Oi /Ot /Oy /GT /GL /GF /GS- /Ox /analyze- CACHE INTERNAL "" FORCE )
set( PROJECTS_SHARED_LINKER_FLAGS_RELEASE " /OPT:REF /OPT:ICF /LTCG /RELEASE /DYNAMICBASE" CACHE INTERNAL "" FORCE )
# Profile
set( CMAKE_C_FLAGS_PROFILE "${CURRENT_C_FLAGS} /D_NDEBUG /DNDEBUG /MT /Ox /MP " CACHE STRING "" FORCE )
@@ -364,7 +364,7 @@ if ( MSVC )
set( CMAKE_EXE_LINKER_FLAGS_PROFILE "${CURRENT_EXE_LINKER_FLAGS} /LTCG /DEBUG /PROFILE " CACHE STRING "" FORCE )
set( CMAKE_STATIC_LINKER_FLAGS_PROFILE "${CURRENT_STATIC_LINKER_FLAGS} /LTCG " CACHE STRING "" FORCE )
set( CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CURRENT_SHARED_LINKER_FLAGS} /LTCG /DEBUG /PROFILE " CACHE STRING "" FORCE )
- set( PROJECTS_SHARED_CXX_FLAGS_PROFILE ${MSVC_SHARED_OPTS_DBG} /Ob2 /Oi /Ot /Oy /GT /GL /GF /GS- /Ox /analyze- /Zi CACHE INTERNAL "" FORCE )
+ set( PROJECTS_SHARED_CXX_FLAGS_PROFILE ${MSVC_SHARED_OPTS_DBG} /MT /Ob2 /Oi /Ot /Oy /GT /GL /GF /GS- /Ox /analyze- /Zi CACHE INTERNAL "" FORCE )
set( PROJECTS_SHARED_LINKER_FLAGS_PROFILE " /OPT:REF /OPT:ICF /LTCG /DEBUG /PROFILE" CACHE INTERNAL "" FORCE )
# Develop
set( CMAKE_C_FLAGS_DEVELOP "${CURRENT_C_FLAGS} /D_NDEBUG /DNDEBUG /D_ITERATOR_DEBUG_LEVEL=0 /MT /Od /MP " CACHE STRING "" FORCE )
@@ -372,7 +372,7 @@ if ( MSVC )
set( CMAKE_EXE_LINKER_FLAGS_DEVELOP "${CURRENT_EXE_LINKER_FLAGS} /LTCG /DEBUG " CACHE STRING "" FORCE )
set( CMAKE_STATIC_LINKER_FLAGS_DEVELOP "${CURRENT_STATIC_LINKER_FLAGS} /LTCG " CACHE STRING "" FORCE )
set( CMAKE_SHARED_LINKER_FLAGS_DEVELOP "${CURRENT_SHARED_LINKER_FLAGS} /LTCG /DEBUG " CACHE STRING "" FORCE )
- set( PROJECTS_SHARED_CXX_FLAGS_DEVELOP ${MSVC_SHARED_OPTS_DBG} /Ob2 /Oi /Ot /Oy /GT /GL /GF /GS- /Od /analyze- /Zi CACHE INTERNAL "" FORCE )
+ set( PROJECTS_SHARED_CXX_FLAGS_DEVELOP ${MSVC_SHARED_OPTS_DBG} /MT /Ob2 /Oi /Ot /Oy /GT /GL /GF /GS- /Od /analyze- /Zi CACHE INTERNAL "" FORCE )
set( PROJECTS_SHARED_LINKER_FLAGS_DEVELOP " /OPT:REF /OPT:ICF /LTCG /DEBUG" CACHE INTERNAL "" FORCE )
# Debug
set( CMAKE_C_FLAGS_DEBUG "${CURRENT_C_FLAGS} /D_DEBUG /D_ITERATOR_DEBUG_LEVEL=${AE_ITERATOR_DEBUG_LEVEL} /MTd /Od /MP " CACHE STRING "" FORCE )
@@ -380,7 +380,7 @@ if ( MSVC )
set( CMAKE_EXE_LINKER_FLAGS_DEBUG "${CURRENT_EXE_LINKER_FLAGS} /DEBUG:FULL " CACHE STRING "" FORCE )
set( CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CURRENT_STATIC_LINKER_FLAGS} " CACHE STRING "" FORCE )
set( CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CURRENT_SHARED_LINKER_FLAGS} /DEBUG:FULL " CACHE STRING "" FORCE )
- set( PROJECTS_SHARED_CXX_FLAGS_DEBUG ${MSVC_SHARED_OPTS_DBG} /sdl /Od /Ob0 /Oy- /GF- /GS /analyze- /Zi /RTC1 CACHE INTERNAL "" FORCE )
+ set( PROJECTS_SHARED_CXX_FLAGS_DEBUG ${MSVC_SHARED_OPTS_DBG} /MTd /sdl /Od /Ob0 /Oy- /GF- /GS /analyze- /Zi /RTC1 CACHE INTERNAL "" FORCE )
set( PROJECTS_SHARED_LINKER_FLAGS_DEBUG " /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUG:FULL" CACHE INTERNAL "" FORCE )
endif()
@@ -391,7 +391,7 @@ endif()
# local - only for AE projects
#==================================================================================================
set( GCC_CLANG_SHARED_GLOBAL_WARNING_LIST_C_CXX "-Wno-unused -Wno-switch -Wno-undef -Wno-comment -fPIC -Wno-missing-braces" )
-set( GCC_CLANG_SHARED_LOCAL_WARNING_LIST_CXX -Wdouble-promotion -Wchar-subscripts -Wformat -Wmain -Wno-missing-braces -Werror=uninitialized -Wmissing-include-dirs -Wunknown-pragmas -Wpragmas -Wstrict-overflow -Wstrict-aliasing -Wendif-labels -Wpointer-arith -Wwrite-strings -Wconversion-null -Wenum-compare -Wsign-compare -Wno-unused -Wsizeof-pointer-memaccess -Wno-zero-as-null-pointer-constant -Wundef -Werror=init-self -Werror=parentheses -Werror=return-type -Warray-bounds -Werror=div-by-zero -Werror=missing-field-initializers -Werror=cast-qual -Werror=cast-align -Wno-switch -Werror=invalid-pch -Wformat-security -fvisibility-inlines-hidden -fvisibility=hidden -fPIC -Wno-constant-evaluated )
+set( GCC_CLANG_SHARED_LOCAL_WARNING_LIST_CXX -Wdouble-promotion -Wchar-subscripts -Wformat -Wmain -Wno-missing-braces -Werror=uninitialized -Wmissing-include-dirs -Wunknown-pragmas -Wpragmas -Wstrict-overflow -Wstrict-aliasing -Wendif-labels -Wpointer-arith -Wwrite-strings -Wconversion-null -Wenum-compare -Wsign-compare -Wno-unused -Wsizeof-pointer-memaccess -Wno-zero-as-null-pointer-constant -Wundef -Werror=init-self -Werror=parentheses -Werror=return-type -Warray-bounds -Werror=div-by-zero -Werror=missing-field-initializers -Werror=cast-qual -Werror=cast-align -Wno-switch -Werror=invalid-pch -Wformat-security -fvisibility-inlines-hidden -fvisibility=hidden -fPIC )
if (${AE_ENABLE_EXCEPTIONS})
set( GCC_CLANG_SHARED_GLOBAL_WARNING_LIST_CXX "${GCC_CLANG_SHARED_GLOBAL_WARNING_LIST_C_CXX} -frtti -fexceptions" )
@@ -475,7 +475,7 @@ endif()
# https://clang.llvm.org/docs/DiagnosticsReference.html
#==================================================================================================
set( CLANG_SHARED_GLOBAL_WARNING_LIST_C_CXX "${GCC_CLANG_SHARED_GLOBAL_WARNING_LIST_C_CXX} -Wnarrowing -stdlib=libc++" ) # -Wno-deprecated-builtins
-set( CLANG_SHARED_LOCAL_WARNING_LIST_CXX ${GCC_CLANG_SHARED_LOCAL_WARNING_LIST_CXX} -Wnarrowing -Wlogical-op-parentheses -Wunused -Werror=conditional-uninitialized -Wloop-analysis -Wincrement-bool -Wno-undefined-inline -Wc++14-extensions -Wc++17-extensions -Wno-comment -Wunused-private-field -Werror=return-stack-address -Werror=address -Werror=unsupported-friend -Werror=unknown-warning-option -Werror=user-defined-literals -Werror=instantiation-after-specialization -Werror=keyword-macro -Werror=large-by-value-copy -Werror=method-signatures -Werror=self-assign -Werror=self-move -Werror=infinite-recursion -Werror=pessimizing-move -Werror=dangling-else -Werror=return-std-move -Werror=deprecated-increment-bool -Werror=abstract-final-class -Wno-ambiguous-reversed-operator -Wno-unneeded-internal-declaration -Wno-unused-function -Wno-unused-const-variable -Wno-unused-local-typedef -Wdelete-non-virtual-dtor -Wrange-loop-analysis -Wundefined-bool-conversion -Winconsistent-missing-override -Wincrement-bool -Wunused-lambda-capture -fno-short-enums -Werror=implicit-exception-spec-mismatch -Werror=range-loop-bind-reference -Wno-assume )
+set( CLANG_SHARED_LOCAL_WARNING_LIST_CXX ${GCC_CLANG_SHARED_LOCAL_WARNING_LIST_CXX} -Wnarrowing -Wlogical-op-parentheses -Wunused -Werror=conditional-uninitialized -Wloop-analysis -Wincrement-bool -Wno-undefined-inline -Wc++14-extensions -Wc++17-extensions -Wno-comment -Wunused-private-field -Werror=return-stack-address -Werror=address -Werror=unsupported-friend -Werror=unknown-warning-option -Werror=user-defined-literals -Werror=instantiation-after-specialization -Werror=keyword-macro -Werror=large-by-value-copy -Werror=method-signatures -Werror=self-assign -Werror=self-move -Werror=infinite-recursion -Werror=pessimizing-move -Werror=dangling-else -Werror=return-std-move -Werror=deprecated-increment-bool -Werror=abstract-final-class -Wno-ambiguous-reversed-operator -Wno-unneeded-internal-declaration -Wno-unused-function -Wno-unused-const-variable -Wno-unused-local-typedef -Wdelete-non-virtual-dtor -Wrange-loop-analysis -Wundefined-bool-conversion -Winconsistent-missing-override -Wincrement-bool -Wunused-lambda-capture -fno-short-enums -Werror=implicit-exception-spec-mismatch -Werror=range-loop-bind-reference -Wno-assume -Wno-constant-evaluated )
#==================================================================================================
# Clang Compilation settings
diff --git a/AE/engine/external/win-x64-clang17/CMakeLists.txt b/AE/engine/external/win-x64-clang17/CMakeLists.txt
index bf711fba..bee9ac9e 100644
--- a/AE/engine/external/win-x64-clang17/CMakeLists.txt
+++ b/AE/engine/external/win-x64-clang17/CMakeLists.txt
@@ -6,4 +6,10 @@ set( CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE INTERNAL "i
set( AE_DST_PATH "${AE_EXTERNAL_BIN_PATH}/external/win-x64-clang17" CACHE INTERNAL "" FORCE )
set( AE_DST_SHARED_PATH "${AE_EXTERNAL_BIN_PATH}/external/win-x64" CACHE INTERNAL "" FORCE )
+# not compiled with Clang
+string( FIND "${CMAKE_CXX_COMPILER_ID}" "Clang" outPos )
+if ( (outPos GREATER -1) )
+ set( AE_ENABLE_COMPRESSONATOR OFF CACHE INTERNAL "" FORCE )
+endif()
+
add_subdirectory( "../windows" "windows" )
diff --git a/AE/engine/shared_data/feature_set/apple_metal/apple6.as b/AE/engine/shared_data/feature_set/apple_metal/apple6.as
index 57927cbf..cbfd64b5 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/apple6.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/apple6.as
@@ -88,6 +88,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/apple_metal/apple6_metal3.as b/AE/engine/shared_data/feature_set/apple_metal/apple6_metal3.as
index 5120b050..dfba2cb6 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/apple6_metal3.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/apple6_metal3.as
@@ -92,6 +92,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/apple_metal/apple7.as b/AE/engine/shared_data/feature_set/apple_metal/apple7.as
index 917b83ab..37d07491 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/apple7.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/apple7.as
@@ -88,6 +88,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/apple_metal/apple7_mac_metal3.as b/AE/engine/shared_data/feature_set/apple_metal/apple7_mac_metal3.as
index 85ec6d38..e8d63e3c 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/apple7_mac_metal3.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/apple7_mac_metal3.as
@@ -97,6 +97,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/apple_metal/apple7_metal3.as b/AE/engine/shared_data/feature_set/apple_metal/apple7_metal3.as
index 49dfd163..f5859ce7 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/apple7_metal3.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/apple7_metal3.as
@@ -97,6 +97,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/apple_metal/apple8.as b/AE/engine/shared_data/feature_set/apple_metal/apple8.as
index 49c83139..6002704d 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/apple8.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/apple8.as
@@ -97,6 +97,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/apple_metal/apple8_mac.as b/AE/engine/shared_data/feature_set/apple_metal/apple8_mac.as
index eb24ba3f..009dcae7 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/apple8_mac.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/apple8_mac.as
@@ -97,6 +97,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/apple_metal/apple9.as b/AE/engine/shared_data/feature_set/apple_metal/apple9.as
index 9b452cb3..54251b09 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/apple9.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/apple9.as
@@ -97,6 +97,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/apple_metal/mac2.as b/AE/engine/shared_data/feature_set/apple_metal/mac2.as
index 93784c83..ff926f04 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/mac2.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/mac2.as
@@ -84,6 +84,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.rayQuery (True);
fset.rayQueryStages(EShaderStages(
EShaderStages::Compute
diff --git a/AE/engine/shared_data/feature_set/apple_metal/mac_metal3.as b/AE/engine/shared_data/feature_set/apple_metal/mac_metal3.as
index 5d775250..d9c75efe 100644
--- a/AE/engine/shared_data/feature_set/apple_metal/mac_metal3.as
+++ b/AE/engine/shared_data/feature_set/apple_metal/mac_metal3.as
@@ -96,6 +96,8 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.shaderIntegerDotProduct (True);
fset.fragmentShaderSampleInterlock (True);
fset.fragmentShaderPixelInterlock (True);
fset.rayQuery (True);
diff --git a/AE/engine/shared_data/feature_set/min_apple.as b/AE/engine/shared_data/feature_set/min_apple.as
index c322f2ef..a900c855 100644
--- a/AE/engine/shared_data/feature_set/min_apple.as
+++ b/AE/engine/shared_data/feature_set/min_apple.as
@@ -4,10 +4,10 @@
void ASmain ()
{
// include:
- // Apple M1 driver 0.2.1914 on Osx 12.0
- // Apple A12 GPU driver 0.2.1915 on Ios 15.3
- // Apple A15 GPU driver 0.2.1914 on Ios 15.3
- // Apple A17 Pro GPU driver 0.2.2014 on Ios 17.1
+ // Apple M1 driver 0.2.2017 on Osx 14.1
+ // Apple A12 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A15 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A17 Pro GPU driver 0.2.2018 on Ios 17.5
// Apple M3 Max driver 0.2.2014 on Osx 14.2
// Apple9
// Apple8
@@ -60,16 +60,24 @@ void ASmain ()
fset.minSubgroupSize (4);
fset.maxSubgroupSize (4);
fset.subgroup (True);
+ fset.subgroupBroadcastDynamicId (True);
fset.subgroupSizeControl (True);
fset.shaderInt8 (True);
fset.shaderInt16 (True);
fset.shaderFloat16 (True);
+ fset.storageBuffer16BitAccess (True);
+ fset.uniformAndStorageBuffer16BitAccess (True);
+ fset.storageInputOutput16 (True);
fset.storageBuffer8BitAccess (True);
fset.uniformAndStorageBuffer8BitAccess (True);
fset.uniformBufferStandardLayout (True);
fset.scalarBlockLayout (True);
+ fset.bufferDeviceAddress (True);
fset.storagePushConstant8 (True);
+ fset.shaderOutputViewportIndex (True);
+ fset.shaderOutputLayer (True);
fset.shaderClipDistance (True);
+ fset.shaderDrawParameters (True);
fset.runtimeDescriptorArray (True);
fset.shaderSampleRateInterpolationFunctions (True);
fset.shaderStencilExport (True);
@@ -89,8 +97,9 @@ void ASmain ()
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
- fset.maxSpirvVersion (130);
- fset.maxMetalVersion (220);
+ fset.shaderDemoteToHelperInvocation (True);
+ fset.maxSpirvVersion (140);
+ fset.maxMetalVersion (230);
fset.drawIndirectFirstInstance (True);
fset.multiViewport (True);
fset.maxViewports (16);
@@ -105,7 +114,7 @@ void ASmain ()
fset.perDescrSet_maxStorageBuffers (155);
fset.perDescrSet_maxStorageImages (40);
fset.perDescrSet_maxUniformBuffers (155);
- fset.perDescrSet_maxTotalResources (512);
+ fset.perDescrSet_maxTotalResources (700);
fset.perStage_maxInputAttachments (96);
fset.perStage_maxSampledImages (96);
fset.perStage_maxSamplers (16);
@@ -184,17 +193,21 @@ void ASmain ()
fset.imageViewFormatList (True);
fset.imageViewExtendedUsage (True);
fset.maxImageArrayLayers (2 << 10);
+ fset.AddTexelFormats( EFormatFeature::StorageImageAtomic, {
+ EPixelFormat::R32I, EPixelFormat::R32U
+ });
fset.AddTexelFormats( EFormatFeature::StorageImage, {
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
EPixelFormat::R16_SNorm, EPixelFormat::R8_SNorm, EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm,
EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm, EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm,
- EPixelFormat::RGB10_A2_UNorm, EPixelFormat::BGRA8_UNorm, EPixelFormat::R8I, EPixelFormat::RG8I,
- EPixelFormat::RGBA8I, EPixelFormat::R16I, EPixelFormat::RG16I, EPixelFormat::RGBA16I,
- EPixelFormat::R32I, EPixelFormat::RG32I, EPixelFormat::RGBA32I, EPixelFormat::R8U,
- EPixelFormat::RG8U, EPixelFormat::RGBA8U, EPixelFormat::R16U, EPixelFormat::RG16U,
- EPixelFormat::RGBA16U, EPixelFormat::R32U, EPixelFormat::RG32U, EPixelFormat::RGBA32U,
- EPixelFormat::RGB10_A2U, EPixelFormat::R16F, EPixelFormat::RG16F, EPixelFormat::RGBA16F,
- EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
+ EPixelFormat::RGB10_A2_UNorm, EPixelFormat::BGRA8_UNorm, EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8,
+ EPixelFormat::R8I, EPixelFormat::RG8I, EPixelFormat::RGBA8I, EPixelFormat::R16I,
+ EPixelFormat::RG16I, EPixelFormat::RGBA16I, EPixelFormat::R32I, EPixelFormat::RG32I,
+ EPixelFormat::RGBA32I, EPixelFormat::R8U, EPixelFormat::RG8U, EPixelFormat::RGBA8U,
+ EPixelFormat::R16U, EPixelFormat::RG16U, EPixelFormat::RGBA16U, EPixelFormat::R32U,
+ EPixelFormat::RG32U, EPixelFormat::RGBA32U, EPixelFormat::RGB10_A2U, EPixelFormat::R16F,
+ EPixelFormat::RG16F, EPixelFormat::RGBA16F, EPixelFormat::R32F, EPixelFormat::RG32F,
+ EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::AttachmentBlend, {
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
diff --git a/AE/engine/shared_data/feature_set/min_desktop.as b/AE/engine/shared_data/feature_set/min_desktop.as
index 7a0f9446..930913ca 100644
--- a/AE/engine/shared_data/feature_set/min_desktop.as
+++ b/AE/engine/shared_data/feature_set/min_desktop.as
@@ -16,11 +16,12 @@ void ASmain ()
// AMD Radeon RX 7800 XT (RADV NAVI32) driver 24.0.99 on Arch unknown
// AMD Radeon RX 7900 XTX (RADV GFX1100) driver 23.2.1 on Arch unknown
// AMD Radeon RX Vega driver 2.0.213 on Ubuntu 22.01
- // Apple M1 driver 0.2.1914 on Osx 12.0
+ // Apple M1 driver 0.2.2017 on Osx 14.1
// Intel(R) Arc(tm) A380 Graphics (DG2) driver 22.2.99 on Rocky 9.0
// Intel(R) Arc(tm) A770 Graphics (DG2) driver 23.3.3 on Arch unknown
// Intel(R) HD Graphics 620 driver 0.404.1960 on Windows 10
// Intel(R) Xe Graphics (TGL GT2) driver 21.99.99 on Linuxmint 20.2
+ // llvmpipe (LLVM 18.1.8, 256 bits) driver 0.0.1 on Arch unknown
// NVIDIA GeForce GTX 1070 driver 511.65.0.0 on Windows 10
// NVIDIA GeForce GTX 750 driver 535.113.1.0 on Linuxmint 21.2
// NVIDIA GeForce GTX 980 Ti driver 516.94.0.0 on Windows 10
@@ -65,20 +66,24 @@ void ASmain ()
EShaderStages::Compute
));
fset.subgroupQuadStages(EShaderStages(
- EShaderStages::Vertex |
EShaderStages::Fragment |
EShaderStages::Compute
));
fset.minSubgroupSize (4);
fset.maxSubgroupSize (4);
fset.subgroup (True);
+ fset.subgroupBroadcastDynamicId (True);
fset.shaderInt8 (True);
+ fset.storageBuffer16BitAccess (True);
+ fset.uniformAndStorageBuffer16BitAccess (True);
fset.storageBuffer8BitAccess (True);
fset.uniformAndStorageBuffer8BitAccess (True);
fset.uniformBufferStandardLayout (True);
+ fset.bufferDeviceAddress (True);
fset.fragmentStoresAndAtomics (True);
fset.vertexPipelineStoresAndAtomics (True);
fset.shaderClipDistance (True);
+ fset.shaderDrawParameters (True);
fset.runtimeDescriptorArray (True);
fset.shaderSampleRateInterpolationFunctions (True);
fset.shaderSampledImageArrayDynamicIndexing (True);
@@ -90,8 +95,8 @@ void ASmain ()
fset.shaderSampledImageArrayNonUniformIndexing (True);
fset.shaderUniformTexelBufferArrayNonUniformIndexing (True);
fset.shaderStorageImageWriteWithoutFormat (True);
- fset.maxSpirvVersion (130);
- fset.maxMetalVersion (220);
+ fset.maxSpirvVersion (140);
+ fset.maxMetalVersion (230);
fset.drawIndirectFirstInstance (True);
fset.multiViewport (True);
fset.maxViewports (16);
@@ -106,7 +111,7 @@ void ASmain ()
fset.perDescrSet_maxStorageBuffers (155);
fset.perDescrSet_maxStorageImages (40);
fset.perDescrSet_maxUniformBuffers (90);
- fset.perDescrSet_maxTotalResources (512);
+ fset.perDescrSet_maxTotalResources (1024);
fset.perStage_maxInputAttachments (8);
fset.perStage_maxSampledImages (128);
fset.perStage_maxSamplers (16);
@@ -177,6 +182,9 @@ void ASmain ()
fset.imageViewFormatList (True);
fset.imageViewExtendedUsage (True);
fset.maxImageArrayLayers (2 << 10);
+ fset.AddTexelFormats( EFormatFeature::StorageImageAtomic, {
+ EPixelFormat::R32I, EPixelFormat::R32U
+ });
fset.AddTexelFormats( EFormatFeature::StorageImage, {
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
EPixelFormat::R16_SNorm, EPixelFormat::R8_SNorm, EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm,
@@ -190,12 +198,11 @@ void ASmain ()
EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::AttachmentBlend, {
- EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
- EPixelFormat::R16_SNorm, EPixelFormat::R8_SNorm, EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm,
- EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm, EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm,
- EPixelFormat::RGB10_A2_UNorm, EPixelFormat::BGRA8_UNorm, EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8,
- EPixelFormat::R16F, EPixelFormat::RG16F, EPixelFormat::RGBA16F, EPixelFormat::R32F,
- EPixelFormat::RG32F, EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
+ EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm, EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm,
+ EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm, EPixelFormat::RGB10_A2_UNorm, EPixelFormat::BGRA8_UNorm,
+ EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8, EPixelFormat::R16F, EPixelFormat::RG16F,
+ EPixelFormat::RGBA16F, EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGBA32F,
+ EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::Attachment, {
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
@@ -225,10 +232,11 @@ void ASmain ()
EPixelFormat::BC6H_RGB16UF, EPixelFormat::BC7_RGBA8_UNorm, EPixelFormat::BC7_sRGB8_A8
});
fset.samplerAnisotropy (True);
+ fset.samplerMirrorClampToEdge (True);
fset.maxSamplerAnisotropy (16.00);
fset.maxSamplerLodBias (4.00);
- fset.framebufferColorSampleCounts({ 1, 2, 4 });
- fset.framebufferDepthSampleCounts({ 1, 2, 4 });
+ fset.framebufferColorSampleCounts({ 1, 4 });
+ fset.framebufferDepthSampleCounts({ 1, 4 });
fset.maxFramebufferLayers (1 << 10);
fset.supportedQueues(EQueueMask( EQueueMask::Graphics ));
}
diff --git a/AE/engine/shared_data/feature_set/min_desktop_nv.as b/AE/engine/shared_data/feature_set/min_desktop_nv.as
index 6f6ba4dc..2bfbbd39 100644
--- a/AE/engine/shared_data/feature_set/min_desktop_nv.as
+++ b/AE/engine/shared_data/feature_set/min_desktop_nv.as
@@ -115,6 +115,7 @@ void ASmain ()
fset.shaderStorageBufferArrayNonUniformIndexingNative (True);
fset.shaderStorageImageArrayNonUniformIndexingNative (True);
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
+ fset.quadDivergentImplicitLod (True);
fset.shaderStorageImageMultisample (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
diff --git a/AE/engine/shared_data/feature_set/min_inline_rt.as b/AE/engine/shared_data/feature_set/min_inline_rt.as
index a5067e31..45d6a2ec 100644
--- a/AE/engine/shared_data/feature_set/min_inline_rt.as
+++ b/AE/engine/shared_data/feature_set/min_inline_rt.as
@@ -12,6 +12,7 @@ void ASmain ()
// AMD Radeon RX 7800 XT (RADV NAVI32) driver 24.0.99 on Arch unknown
// AMD Radeon RX 7900 XTX (RADV GFX1100) driver 23.2.1 on Arch unknown
// Intel(R) Arc(tm) A770 Graphics (DG2) driver 23.3.3 on Arch unknown
+ // llvmpipe (LLVM 18.1.8, 256 bits) driver 0.0.1 on Arch unknown
// NVIDIA GeForce RTX 2080 driver 473.11.0.0 on Windows 10
// NVIDIA GeForce RTX 3090 driver 473.11.0.0 on Windows 10
// NVIDIA GeForce RTX 4090 driver 526.98.0.0 on Windows 10
@@ -19,6 +20,7 @@ void ASmain ()
// samsung SM-S901B driver 2.0.0 on Android 14.0
// Samsung Xclipse 920 driver 2.0.0 on Android 12.0
// samsung SM-S926B driver 2.0.0 on Android 14.0
+ // Snapdragon(R) X Elite - X1E80100 - Qualcomm(R) Adreno(TM) GPU driver 512.780.0 on Windows 11
// vivo V2324A driver 44.1.0 on Android 14.0
// Apple9
// Apple8
@@ -66,14 +68,13 @@ void ASmain ()
EShaderStages::Compute
));
fset.minSubgroupSize (4);
- fset.maxSubgroupSize (16);
+ fset.maxSubgroupSize (8);
fset.subgroup (True);
fset.subgroupSizeControl (True);
fset.shaderInt8 (True);
fset.shaderInt16 (True);
fset.shaderFloat16 (True);
fset.storageBuffer8BitAccess (True);
- fset.uniformAndStorageBuffer8BitAccess (True);
fset.uniformBufferStandardLayout (True);
fset.scalarBlockLayout (True);
fset.bufferDeviceAddress (True);
@@ -92,6 +93,7 @@ void ASmain ()
fset.shaderStorageTexelBufferArrayNonUniformIndexing (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
fset.rayQuery (True);
fset.rayQueryStages(EShaderStages(
EShaderStages::Compute
@@ -105,27 +107,27 @@ void ASmain ()
fset.maxStorageBufferSize (64 << 10);
fset.perDescrSet_maxUniformBuffersDynamic (8);
fset.perDescrSet_maxStorageBuffersDynamic (4);
- fset.perDescrSet_maxInputAttachments (9);
+ fset.perDescrSet_maxInputAttachments (8);
fset.perDescrSet_maxSampledImages (393210);
fset.perDescrSet_maxSamplers (1024);
fset.perDescrSet_maxStorageBuffers (393210);
fset.perDescrSet_maxStorageImages (393210);
fset.perDescrSet_maxUniformBuffers (216);
- fset.perDescrSet_maxAccelStructures (65535);
+ fset.perDescrSet_maxAccelStructures (16);
fset.perDescrSet_maxTotalResources (512);
- fset.perStage_maxInputAttachments (9);
+ fset.perStage_maxInputAttachments (8);
fset.perStage_maxSampledImages (65535);
fset.perStage_maxSamplers (8192);
fset.perStage_maxStorageBuffers (65535);
fset.perStage_maxStorageImages (65535);
fset.perStage_maxUniformBuffers (36);
- fset.perStage_maxAccelStructures (65535);
+ fset.perStage_maxAccelStructures (16);
fset.perStage_maxTotalResources (500000);
fset.maxDescriptorSets (7);
fset.maxTexelOffset (7);
fset.maxTexelGatherOffset (7);
fset.maxFragmentOutputAttachments (8);
- fset.maxFragmentCombinedOutputResources (131078);
+ fset.maxFragmentCombinedOutputResources (104);
fset.maxPushConstantsSize (128);
fset.maxComputeSharedMemorySize (32 << 10);
fset.maxComputeWorkGroupInvocations (1 << 10);
@@ -147,11 +149,7 @@ void ASmain ()
EVertexType::Byte4_Norm, EVertexType::UByte_Norm, EVertexType::UByte2_Norm, EVertexType::UByte3_Norm,
EVertexType::UByte4_Norm, EVertexType::Short_Norm, EVertexType::Short2_Norm, EVertexType::Short3_Norm,
EVertexType::Short4_Norm, EVertexType::UShort_Norm, EVertexType::UShort2_Norm, EVertexType::UShort3_Norm,
- EVertexType::UShort4_Norm, EVertexType::UInt_2_10_10_10_Norm, EVertexType::Byte_Scaled, EVertexType::Byte2_Scaled,
- EVertexType::Byte3_Scaled, EVertexType::Byte4_Scaled, EVertexType::UByte_Scaled, EVertexType::UByte2_Scaled,
- EVertexType::UByte3_Scaled, EVertexType::UByte4_Scaled, EVertexType::Short_Scaled, EVertexType::Short2_Scaled,
- EVertexType::Short3_Scaled, EVertexType::Short4_Scaled, EVertexType::UShort_Scaled, EVertexType::UShort2_Scaled,
- EVertexType::UShort3_Scaled, EVertexType::UShort4_Scaled
+ EVertexType::UShort4_Norm, EVertexType::UInt_2_10_10_10_Norm
});
fset.AddTexelFormats( EFormatFeature::UniformTexelBuffer, {
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
@@ -204,11 +202,10 @@ void ASmain ()
EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::AttachmentBlend, {
- EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
- EPixelFormat::R16_SNorm, EPixelFormat::R8_SNorm, EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm,
- EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm, EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm,
- EPixelFormat::RGB10_A2_UNorm, EPixelFormat::BGRA8_UNorm, EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8,
- EPixelFormat::R16F, EPixelFormat::RG16F, EPixelFormat::RGBA16F, EPixelFormat::RGB_11_11_10F
+ EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm, EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm,
+ EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm, EPixelFormat::RGB10_A2_UNorm, EPixelFormat::BGRA8_UNorm,
+ EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8, EPixelFormat::R16F, EPixelFormat::RG16F,
+ EPixelFormat::RGBA16F, EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::Attachment, {
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
@@ -233,8 +230,8 @@ void ASmain ()
fset.samplerAnisotropy (True);
fset.maxSamplerAnisotropy (16.00);
fset.maxSamplerLodBias (4.00);
- fset.framebufferColorSampleCounts({ 1, 2, 4 });
- fset.framebufferDepthSampleCounts({ 1, 2, 4 });
+ fset.framebufferColorSampleCounts({ 1, 4 });
+ fset.framebufferDepthSampleCounts({ 1, 4 });
fset.maxFramebufferLayers (256);
fset.supportedQueues(EQueueMask( EQueueMask::Graphics ));
}
diff --git a/AE/engine/shared_data/feature_set/min_mesh_shader.as b/AE/engine/shared_data/feature_set/min_mesh_shader.as
index 572bd72f..819a9e15 100644
--- a/AE/engine/shared_data/feature_set/min_mesh_shader.as
+++ b/AE/engine/shared_data/feature_set/min_mesh_shader.as
@@ -10,6 +10,7 @@ void ASmain ()
// AMD Radeon RX 7800 XT (RADV NAVI32) driver 24.0.99 on Arch unknown
// AMD Radeon RX 7900 XTX (RADV GFX1100) driver 23.2.1 on Arch unknown
// Intel(R) Arc(tm) A770 Graphics (DG2) driver 23.3.3 on Arch unknown
+ // llvmpipe (LLVM 18.1.8, 256 bits) driver 0.0.1 on Arch unknown
// NVIDIA GeForce RTX 2080 driver 473.11.0.0 on Windows 10
// NVIDIA GeForce RTX 3090 driver 473.11.0.0 on Windows 10
// NVIDIA GeForce RTX 4090 driver 526.98.0.0 on Windows 10
@@ -58,14 +59,11 @@ void ASmain ()
EShaderStages::Mesh
));
fset.subgroupQuadStages(EShaderStages(
- EShaderStages::Vertex |
EShaderStages::Fragment |
- EShaderStages::Compute |
- EShaderStages::MeshTask |
- EShaderStages::Mesh
+ EShaderStages::Compute
));
fset.minSubgroupSize (4);
- fset.maxSubgroupSize (32);
+ fset.maxSubgroupSize (8);
fset.subgroup (True);
fset.subgroupBroadcastDynamicId (True);
fset.subgroupSizeControl (True);
@@ -101,6 +99,7 @@ void ASmain ()
fset.shaderStorageTexelBufferArrayNonUniformIndexing (True);
fset.shaderStorageImageReadWithoutFormat (True);
fset.shaderStorageImageWriteWithoutFormat (True);
+ fset.shaderDemoteToHelperInvocation (True);
fset.maxSpirvVersion (140);
fset.maxMetalVersion (300);
fset.drawIndirectFirstInstance (True);
@@ -126,13 +125,13 @@ void ASmain ()
fset.perStage_maxStorageImages (65535);
fset.perStage_maxUniformBuffers (64);
fset.perStage_maxAccelStructures (65535);
- fset.perStage_maxTotalResources (8008184);
+ fset.perStage_maxTotalResources (1000000);
fset.maxDescriptorSets (8);
fset.maxTexelOffset (7);
fset.maxTexelGatherOffset (7);
fset.maxFragmentOutputAttachments (8);
fset.maxFragmentDualSrcAttachments (1);
- fset.maxFragmentCombinedOutputResources (131078);
+ fset.maxFragmentCombinedOutputResources (104);
fset.maxPushConstantsSize (128);
fset.maxComputeSharedMemorySize (32 << 10);
fset.maxComputeWorkGroupInvocations (1 << 10);
@@ -145,8 +144,8 @@ void ASmain ()
fset.maxMeshWorkGroupSize (32);
fset.maxMeshOutputVertices (128);
fset.maxMeshOutputPrimitives (128);
- fset.maxMeshOutputPerVertexGranularity (32);
- fset.maxMeshOutputPerPrimitiveGranularity (32);
+ fset.maxMeshOutputPerVertexGranularity (1);
+ fset.maxMeshOutputPerPrimitiveGranularity (1);
fset.maxTaskPayloadSize (16 << 10);
fset.maxTaskSharedMemorySize (16 << 10);
fset.maxTaskPayloadAndSharedMemorySize (16 << 10);
@@ -228,12 +227,10 @@ void ASmain ()
EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::AttachmentBlend, {
- EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
- EPixelFormat::R16_SNorm, EPixelFormat::R8_SNorm, EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm,
- EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm, EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm,
- EPixelFormat::RGB10_A2_UNorm, EPixelFormat::BGRA8_UNorm, EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8,
- EPixelFormat::R16F, EPixelFormat::RG16F, EPixelFormat::RGBA16F, EPixelFormat::R32F,
- EPixelFormat::RG32F, EPixelFormat::RGB_11_11_10F
+ EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm, EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm,
+ EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm, EPixelFormat::RGB10_A2_UNorm, EPixelFormat::BGRA8_UNorm,
+ EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8, EPixelFormat::R16F, EPixelFormat::RG16F,
+ EPixelFormat::RGBA16F, EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::Attachment, {
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
@@ -260,8 +257,8 @@ void ASmain ()
fset.samplerAnisotropy (True);
fset.maxSamplerAnisotropy (16.00);
fset.maxSamplerLodBias (4.00);
- fset.framebufferColorSampleCounts({ 1, 2, 4 });
- fset.framebufferDepthSampleCounts({ 1, 2, 4 });
+ fset.framebufferColorSampleCounts({ 1, 4 });
+ fset.framebufferDepthSampleCounts({ 1, 4 });
fset.maxFramebufferLayers (1 << 10);
fset.supportedQueues(EQueueMask( EQueueMask::Graphics ));
}
diff --git a/AE/engine/shared_data/feature_set/min_mobile.as b/AE/engine/shared_data/feature_set/min_mobile.as
index a1456b5f..d3790a55 100644
--- a/AE/engine/shared_data/feature_set/min_mobile.as
+++ b/AE/engine/shared_data/feature_set/min_mobile.as
@@ -4,9 +4,9 @@
void ASmain ()
{
// include:
- // Apple A12 GPU driver 0.2.1915 on Ios 15.3
- // Apple A15 GPU driver 0.2.1914 on Ios 15.3
- // Apple A17 Pro GPU driver 0.2.2014 on Ios 17.1
+ // Apple A12 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A15 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A17 Pro GPU driver 0.2.2018 on Ios 17.5
// Apple M3 Max driver 0.2.2014 on Osx 14.2
// asus ASUS_AI2203_D driver 32.1.0 on Android 13.0
// Adreno (TM) 660 driver 512.530.0 on Android 11.0
@@ -44,6 +44,7 @@ void ASmain ()
// samsung SM-S901E driver 512.744.6 on Android 13.0
// Samsung Xclipse 920 driver 2.0.0 on Android 12.0
// samsung SM-S926B driver 2.0.0 on Android 14.0
+ // Snapdragon(R) X Elite - X1E80100 - Qualcomm(R) Adreno(TM) GPU driver 512.780.0 on Windows 11
// PowerVR Rogue GE8320 driver 1.386.1368 on Android 11.0
// Adreno (TM) 610 driver 512.502.0 on Android 11.0
// PowerVR Rogue GE8300 driver 1.322.3448 on Android 10.0
@@ -137,6 +138,9 @@ void ASmain ()
fset.textureCompressionETC2 (True);
fset.multisampleArrayImage (True);
fset.maxImageArrayLayers (256);
+ fset.AddTexelFormats( EFormatFeature::StorageImageAtomic, {
+ EPixelFormat::R32I, EPixelFormat::R32U
+ });
fset.AddTexelFormats( EFormatFeature::StorageImage, {
EPixelFormat::RGBA8_SNorm, EPixelFormat::RGBA8_UNorm, EPixelFormat::RGBA8I, EPixelFormat::RGBA16I,
EPixelFormat::R32I, EPixelFormat::RG32I, EPixelFormat::RGBA32I, EPixelFormat::RGBA8U,
diff --git a/AE/engine/shared_data/feature_set/min_mobile_adreno.as b/AE/engine/shared_data/feature_set/min_mobile_adreno.as
index af1ce9a0..0ba3bbe2 100644
--- a/AE/engine/shared_data/feature_set/min_mobile_adreno.as
+++ b/AE/engine/shared_data/feature_set/min_mobile_adreno.as
@@ -10,6 +10,7 @@ void ASmain ()
// Oculus Quest 3 driver 512.746.0 on Android 12.0
// Adreno (TM) 730 driver 512.615.0 on Android 12.0
// samsung SM-S901E driver 512.744.6 on Android 13.0
+ // Snapdragon(R) X Elite - X1E80100 - Qualcomm(R) Adreno(TM) GPU driver 512.780.0 on Windows 11
// Adreno (TM) 610 driver 512.502.0 on Android 11.0
// Xiaomi 22081212G driver 512.744.1 on Android 14.0
// Adreno (TM) 612 driver 512.502.0 on Android 12.0
diff --git a/AE/engine/shared_data/feature_set/min_recursive_rt.as b/AE/engine/shared_data/feature_set/min_recursive_rt.as
index 63e9cc8f..7308af2e 100644
--- a/AE/engine/shared_data/feature_set/min_recursive_rt.as
+++ b/AE/engine/shared_data/feature_set/min_recursive_rt.as
@@ -10,6 +10,7 @@ void ASmain ()
// AMD Radeon RX 7800 XT (RADV NAVI32) driver 24.0.99 on Arch unknown
// AMD Radeon RX 7900 XTX (RADV GFX1100) driver 23.2.1 on Arch unknown
// Intel(R) Arc(tm) A770 Graphics (DG2) driver 23.3.3 on Arch unknown
+ // llvmpipe (LLVM 18.1.8, 256 bits) driver 0.0.1 on Arch unknown
// NVIDIA GeForce GTX 1070 driver 511.65.0.0 on Windows 10
// NVIDIA GeForce RTX 2080 driver 473.11.0.0 on Windows 10
// NVIDIA GeForce RTX 3090 driver 473.11.0.0 on Windows 10
@@ -21,7 +22,6 @@ void ASmain ()
RC fset = FeatureSet( "MinRecursiveRayTracing" );
fset.depthBiasClamp (True);
- fset.depthBounds (True);
fset.depthClamp (True);
fset.dualSrcBlend (True);
fset.fillModeNonSolid (True);
@@ -37,7 +37,6 @@ void ASmain ()
fset.AddSubgroupOperationRange( ESubgroupOperation::_Ballot_Begin, ESubgroupOperation::_Ballot_End );
fset.AddSubgroupOperationRange( ESubgroupOperation::_Shuffle_Begin, ESubgroupOperation::_Shuffle_End );
fset.AddSubgroupOperationRange( ESubgroupOperation::_ShuffleRelative_Begin, ESubgroupOperation::_ShuffleRelative_End );
- fset.AddSubgroupOperationRange( ESubgroupOperation::_Clustered_Begin, ESubgroupOperation::_Clustered_End );
fset.AddSubgroupOperationRange( ESubgroupOperation::_Quad_Begin, ESubgroupOperation::_Quad_End );
fset.subgroupTypes(ESubgroupTypes(
ESubgroupTypes::Float32 |
@@ -56,11 +55,6 @@ void ASmain ()
EShaderStages::Compute
));
fset.subgroupQuadStages(EShaderStages(
- EShaderStages::AllRayTracing |
- EShaderStages::Vertex |
- EShaderStages::TessControl |
- EShaderStages::TessEvaluation |
- EShaderStages::Geometry |
EShaderStages::Fragment |
EShaderStages::Compute
));
@@ -91,7 +85,6 @@ void ASmain ()
fset.shaderSubgroupClock (True);
fset.shaderClipDistance (True);
fset.shaderCullDistance (True);
- fset.shaderResourceMinLod (True);
fset.shaderDrawParameters (True);
fset.runtimeDescriptorArray (True);
fset.shaderSampleRateInterpolationFunctions (True);
@@ -121,14 +114,14 @@ void ASmain ()
fset.multiview (True);
fset.multiviewGeometryShader (True);
fset.multiviewTessellationShader (True);
- fset.maxMultiviewViewCount (8);
+ fset.maxMultiviewViewCount (6);
fset.multiViewport (True);
fset.maxViewports (16);
fset.tessellationIsolines (True);
fset.tessellationPointMode (True);
fset.maxTexelBufferElements (128 << 20);
fset.maxUniformBufferSize (64 << 10);
- fset.maxStorageBufferSize (4294967295);
+ fset.maxStorageBufferSize (128 << 20);
fset.perDescrSet_maxUniformBuffersDynamic (8);
fset.perDescrSet_maxStorageBuffersDynamic (8);
fset.perDescrSet_maxInputAttachments (256);
@@ -146,15 +139,15 @@ void ASmain ()
fset.perStage_maxStorageImages (65535);
fset.perStage_maxUniformBuffers (15);
fset.perStage_maxAccelStructures (65535);
- fset.perStage_maxTotalResources (8388606);
+ fset.perStage_maxTotalResources (1000000);
fset.maxDescriptorSets (8);
fset.maxTexelOffset (7);
fset.maxTexelGatherOffset (31);
fset.maxFragmentOutputAttachments (8);
fset.maxFragmentDualSrcAttachments (1);
- fset.maxFragmentCombinedOutputResources (131078);
+ fset.maxFragmentCombinedOutputResources (104);
fset.maxPushConstantsSize (128);
- fset.maxComputeSharedMemorySize (49152);
+ fset.maxComputeSharedMemorySize (32 << 10);
fset.maxComputeWorkGroupInvocations (1 << 10);
fset.maxComputeWorkGroupSizeX (1 << 10);
fset.maxComputeWorkGroupSizeY (1 << 10);
@@ -177,7 +170,6 @@ void ASmain ()
EVertexType::ULong, EVertexType::ULong2, EVertexType::ULong3, EVertexType::ULong4,
EVertexType::Half, EVertexType::Half2, EVertexType::Half3, EVertexType::Half4,
EVertexType::Float, EVertexType::Float2, EVertexType::Float3, EVertexType::Float4,
- EVertexType::Double, EVertexType::Double2, EVertexType::Double3, EVertexType::Double4,
EVertexType::UInt_2_10_10_10, EVertexType::Byte_Norm, EVertexType::Byte2_Norm, EVertexType::Byte3_Norm,
EVertexType::Byte4_Norm, EVertexType::UByte_Norm, EVertexType::UByte2_Norm, EVertexType::UByte3_Norm,
EVertexType::UByte4_Norm, EVertexType::Short_Norm, EVertexType::Short2_Norm, EVertexType::Short3_Norm,
@@ -241,12 +233,11 @@ void ASmain ()
EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::AttachmentBlend, {
- EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
- EPixelFormat::R16_SNorm, EPixelFormat::R8_SNorm, EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm,
- EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm, EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm,
- EPixelFormat::RGB10_A2_UNorm, EPixelFormat::RGB_5_6_5_UNorm, EPixelFormat::BGRA8_UNorm, EPixelFormat::sRGB8_A8,
- EPixelFormat::sBGR8_A8, EPixelFormat::R16F, EPixelFormat::RG16F, EPixelFormat::RGBA16F,
- EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
+ EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm, EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm,
+ EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm, EPixelFormat::RGB10_A2_UNorm, EPixelFormat::RGB_5_6_5_UNorm,
+ EPixelFormat::BGRA8_UNorm, EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8, EPixelFormat::R16F,
+ EPixelFormat::RG16F, EPixelFormat::RGBA16F, EPixelFormat::R32F, EPixelFormat::RG32F,
+ EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F
});
fset.AddTexelFormats( EFormatFeature::Attachment, {
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
@@ -266,15 +257,15 @@ void ASmain ()
EPixelFormat::RGBA16_SNorm, EPixelFormat::RGBA8_SNorm, EPixelFormat::RG16_SNorm, EPixelFormat::RG8_SNorm,
EPixelFormat::R16_SNorm, EPixelFormat::R8_SNorm, EPixelFormat::RGBA16_UNorm, EPixelFormat::RGBA8_UNorm,
EPixelFormat::RG16_UNorm, EPixelFormat::RG8_UNorm, EPixelFormat::R16_UNorm, EPixelFormat::R8_UNorm,
- EPixelFormat::RGB10_A2_UNorm, EPixelFormat::RGBA4_UNorm, EPixelFormat::RGB5_A1_UNorm, EPixelFormat::RGB_5_6_5_UNorm,
- EPixelFormat::BGRA8_UNorm, EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8, EPixelFormat::R16F,
- EPixelFormat::RG16F, EPixelFormat::RGBA16F, EPixelFormat::R32F, EPixelFormat::RG32F,
- EPixelFormat::RGBA32F, EPixelFormat::RGB_11_11_10F, EPixelFormat::RGB9F_E5, EPixelFormat::Depth16,
- EPixelFormat::Depth32F, EPixelFormat::Depth32F_Stencil8, EPixelFormat::BC1_RGB8_UNorm, EPixelFormat::BC1_sRGB8,
- EPixelFormat::BC1_RGB8_A1_UNorm, EPixelFormat::BC1_sRGB8_A1, EPixelFormat::BC2_RGBA8_UNorm, EPixelFormat::BC2_sRGB8,
- EPixelFormat::BC3_RGBA8_UNorm, EPixelFormat::BC3_sRGB8, EPixelFormat::BC4_R8_SNorm, EPixelFormat::BC4_R8_UNorm,
- EPixelFormat::BC5_RG8_SNorm, EPixelFormat::BC5_RG8_UNorm, EPixelFormat::BC6H_RGB16F, EPixelFormat::BC6H_RGB16UF,
- EPixelFormat::BC7_RGBA8_UNorm, EPixelFormat::BC7_sRGB8_A8
+ EPixelFormat::RGB10_A2_UNorm, EPixelFormat::RGB5_A1_UNorm, EPixelFormat::RGB_5_6_5_UNorm, EPixelFormat::BGRA8_UNorm,
+ EPixelFormat::sRGB8_A8, EPixelFormat::sBGR8_A8, EPixelFormat::R16F, EPixelFormat::RG16F,
+ EPixelFormat::RGBA16F, EPixelFormat::R32F, EPixelFormat::RG32F, EPixelFormat::RGBA32F,
+ EPixelFormat::RGB_11_11_10F, EPixelFormat::RGB9F_E5, EPixelFormat::Depth16, EPixelFormat::Depth32F,
+ EPixelFormat::Depth32F_Stencil8, EPixelFormat::BC1_RGB8_UNorm, EPixelFormat::BC1_sRGB8, EPixelFormat::BC1_RGB8_A1_UNorm,
+ EPixelFormat::BC1_sRGB8_A1, EPixelFormat::BC2_RGBA8_UNorm, EPixelFormat::BC2_sRGB8, EPixelFormat::BC3_RGBA8_UNorm,
+ EPixelFormat::BC3_sRGB8, EPixelFormat::BC4_R8_SNorm, EPixelFormat::BC4_R8_UNorm, EPixelFormat::BC5_RG8_SNorm,
+ EPixelFormat::BC5_RG8_UNorm, EPixelFormat::BC6H_RGB16F, EPixelFormat::BC6H_RGB16UF, EPixelFormat::BC7_RGBA8_UNorm,
+ EPixelFormat::BC7_sRGB8_A8
});
fset.samplerAnisotropy (True);
fset.samplerMirrorClampToEdge (True);
@@ -284,9 +275,8 @@ void ASmain ()
fset.samplerYcbcrConversion (True);
fset.maxSamplerAnisotropy (16.00);
fset.maxSamplerLodBias (15.00);
- fset.framebufferColorSampleCounts({ 1, 2, 4, 8 });
- fset.framebufferDepthSampleCounts({ 1, 2, 4, 8 });
+ fset.framebufferColorSampleCounts({ 1, 4 });
+ fset.framebufferDepthSampleCounts({ 1, 4 });
fset.maxFramebufferLayers (1 << 10);
- fset.variableMultisampleRate (True);
fset.supportedQueues(EQueueMask( EQueueMask::Graphics ));
}
diff --git a/AE/engine/shared_data/feature_set/minimal.as b/AE/engine/shared_data/feature_set/minimal.as
index 847d357b..e881e2d6 100644
--- a/AE/engine/shared_data/feature_set/minimal.as
+++ b/AE/engine/shared_data/feature_set/minimal.as
@@ -81,6 +81,9 @@ void ASmain ()
fset.imageCubeArray (True);
fset.multisampleArrayImage (True);
fset.maxImageArrayLayers (256);
+ fset.AddTexelFormats( EFormatFeature::StorageImageAtomic, {
+ EPixelFormat::R32I, EPixelFormat::R32U
+ });
fset.AddTexelFormats( EFormatFeature::StorageImage, {
EPixelFormat::RGBA8_SNorm, EPixelFormat::RGBA8_UNorm, EPixelFormat::RGBA8I, EPixelFormat::RGBA16I,
EPixelFormat::R32I, EPixelFormat::RG32I, EPixelFormat::RGBA32I, EPixelFormat::RGBA8U,
diff --git a/AE/engine/shared_data/feature_set/parts/min_desc_indexing.as b/AE/engine/shared_data/feature_set/parts/min_desc_indexing.as
index 8e8d6724..9d4c3aa8 100644
--- a/AE/engine/shared_data/feature_set/parts/min_desc_indexing.as
+++ b/AE/engine/shared_data/feature_set/parts/min_desc_indexing.as
@@ -16,11 +16,12 @@ void ASmain ()
// AMD Radeon RX 7800 XT (RADV NAVI32) driver 24.0.99 on Arch unknown
// AMD Radeon RX 7900 XTX (RADV GFX1100) driver 23.2.1 on Arch unknown
// AMD Radeon RX Vega driver 2.0.213 on Ubuntu 22.01
- // Apple M1 driver 0.2.1914 on Osx 12.0
+ // Apple M1 driver 0.2.2017 on Osx 14.1
// Intel(R) Arc(tm) A380 Graphics (DG2) driver 22.2.99 on Rocky 9.0
// Intel(R) Arc(tm) A770 Graphics (DG2) driver 23.3.3 on Arch unknown
// Intel(R) HD Graphics 620 driver 0.404.1960 on Windows 10
// Intel(R) Xe Graphics (TGL GT2) driver 21.99.99 on Linuxmint 20.2
+ // llvmpipe (LLVM 18.1.8, 256 bits) driver 0.0.1 on Arch unknown
// NVIDIA GeForce GTX 1070 driver 511.65.0.0 on Windows 10
// NVIDIA GeForce GTX 750 driver 535.113.1.0 on Linuxmint 21.2
// NVIDIA GeForce GTX 980 Ti driver 516.94.0.0 on Windows 10
@@ -30,9 +31,11 @@ void ASmain ()
// NVIDIA GeForce RTX 4090 driver 526.98.0.0 on Windows 10
// NVIDIA Tegra Orin (nvgpu) driver 540.2.0.0 on Ubuntu 22.04
// Radeon RX 580 Series driver 2.0.207 on Ubuntu 20.04
- // Apple A12 GPU driver 0.2.1915 on Ios 15.3
- // Apple A15 GPU driver 0.2.1914 on Ios 15.3
- // Apple A17 Pro GPU driver 0.2.2014 on Ios 17.1
+ // Microsoft Direct3D12 (Qualcomm(R) Adreno(TM) 8cx Gen 3) driver 24.1.99 on Windows 11
+ // Microsoft Direct3D12 (Snapdragon(R) X Elite - X1E78100 - Qualcom driver 24.1.99 on Windows 11
+ // Apple A12 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A15 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A17 Pro GPU driver 0.2.2018 on Ios 17.5
// Apple M3 Max driver 0.2.2014 on Osx 14.2
// asus ASUS_AI2203_D driver 32.1.0 on Android 13.0
// Adreno (TM) 660 driver 512.530.0 on Android 11.0
@@ -67,6 +70,7 @@ void ASmain ()
// samsung SM-S901E driver 512.744.6 on Android 13.0
// Samsung Xclipse 920 driver 2.0.0 on Android 12.0
// samsung SM-S926B driver 2.0.0 on Android 14.0
+ // Snapdragon(R) X Elite - X1E80100 - Qualcomm(R) Adreno(TM) GPU driver 512.780.0 on Windows 11
// PowerVR Rogue GE8320 driver 1.386.1368 on Android 11.0
// Adreno (TM) 610 driver 512.502.0 on Android 11.0
// PowerVR Rogue GE8300 driver 1.322.3448 on Android 10.0
diff --git a/AE/engine/shared_data/feature_set/parts/min_native_nonuniform_desc_idx.as b/AE/engine/shared_data/feature_set/parts/min_native_nonuniform_desc_idx.as
index 0cd12bab..e12e4ea1 100644
--- a/AE/engine/shared_data/feature_set/parts/min_native_nonuniform_desc_idx.as
+++ b/AE/engine/shared_data/feature_set/parts/min_native_nonuniform_desc_idx.as
@@ -5,7 +5,8 @@ void ASmain ()
{
// include:
// NVIDIA GeForce RTX 2080.json
- // Apple M1 driver 0.2.1914 on Osx 12.0
+ // Apple M1 driver 0.2.2017 on Osx 14.1
+ // llvmpipe (LLVM 18.1.8, 256 bits) driver 0.0.1 on Arch unknown
// NVIDIA GeForce GTX 1070 driver 511.65.0.0 on Windows 10
// NVIDIA GeForce GTX 750 driver 535.113.1.0 on Linuxmint 21.2
// NVIDIA GeForce GTX 980 Ti driver 516.94.0.0 on Windows 10
@@ -14,9 +15,11 @@ void ASmain ()
// NVIDIA GeForce RTX 3090 driver 473.11.0.0 on Windows 10
// NVIDIA GeForce RTX 4090 driver 526.98.0.0 on Windows 10
// NVIDIA Tegra Orin (nvgpu) driver 540.2.0.0 on Ubuntu 22.04
- // Apple A12 GPU driver 0.2.1915 on Ios 15.3
- // Apple A15 GPU driver 0.2.1914 on Ios 15.3
- // Apple A17 Pro GPU driver 0.2.2014 on Ios 17.1
+ // Microsoft Direct3D12 (Qualcomm(R) Adreno(TM) 8cx Gen 3) driver 24.1.99 on Windows 11
+ // Microsoft Direct3D12 (Snapdragon(R) X Elite - X1E78100 - Qualcom driver 24.1.99 on Windows 11
+ // Apple A12 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A15 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A17 Pro GPU driver 0.2.2018 on Ios 17.5
// Apple M3 Max driver 0.2.2014 on Osx 14.2
// asus ASUS_AI2203_D driver 32.1.0 on Android 13.0
// Adreno (TM) 660 driver 512.530.0 on Android 11.0
@@ -34,6 +37,7 @@ void ASmain ()
// samsung SM-G780F driver 38.1.0 on Android 13.0
// samsung SM-S901E driver 512.744.6 on Android 13.0
// Samsung Xclipse 920 driver 2.0.0 on Android 12.0
+ // Snapdragon(R) X Elite - X1E80100 - Qualcomm(R) Adreno(TM) GPU driver 512.780.0 on Windows 11
// Xiaomi 22081212G driver 512.744.1 on Android 14.0
// Apple9
// Apple8
@@ -50,23 +54,20 @@ void ASmain ()
RC fset = FeatureSet( "part.MinNativeNonUniformDescriptorIndexing" );
- fset.runtimeDescriptorArray (True);
-
fset.shaderSampledImageArrayDynamicIndexing (True);
fset.shaderStorageBufferArrayDynamicIndexing (True);
fset.shaderUniformBufferArrayDynamicIndexing (True);
fset.shaderUniformTexelBufferArrayDynamicIndexing (True);
fset.shaderStorageTexelBufferArrayDynamicIndexing (True);
-
+
fset.shaderSampledImageArrayNonUniformIndexing (True);
fset.shaderStorageImageArrayNonUniformIndexing (True);
- fset.shaderUniformTexelBufferArrayNonUniformIndexing (True);
- fset.shaderStorageTexelBufferArrayNonUniformIndexing (True);
-
+ fset.shaderInputAttachmentArrayNonUniformIndexing (True);
+
fset.shaderSampledImageArrayNonUniformIndexingNative (True);
fset.shaderStorageImageArrayNonUniformIndexingNative (True);
fset.shaderInputAttachmentArrayNonUniformIndexingNative (True);
-
+
fset.maxUniformBufferSize (64 << 10);
fset.maxStorageBufferSize (64 << 10);
diff --git a/AE/engine/shared_data/feature_set/parts/min_nonuniform_desc_idx.as b/AE/engine/shared_data/feature_set/parts/min_nonuniform_desc_idx.as
index a5ba82ef..83cd605e 100644
--- a/AE/engine/shared_data/feature_set/parts/min_nonuniform_desc_idx.as
+++ b/AE/engine/shared_data/feature_set/parts/min_nonuniform_desc_idx.as
@@ -16,11 +16,12 @@ void ASmain ()
// AMD Radeon RX 7800 XT (RADV NAVI32) driver 24.0.99 on Arch unknown
// AMD Radeon RX 7900 XTX (RADV GFX1100) driver 23.2.1 on Arch unknown
// AMD Radeon RX Vega driver 2.0.213 on Ubuntu 22.01
- // Apple M1 driver 0.2.1914 on Osx 12.0
+ // Apple M1 driver 0.2.2017 on Osx 14.1
// Intel(R) Arc(tm) A380 Graphics (DG2) driver 22.2.99 on Rocky 9.0
// Intel(R) Arc(tm) A770 Graphics (DG2) driver 23.3.3 on Arch unknown
// Intel(R) HD Graphics 620 driver 0.404.1960 on Windows 10
// Intel(R) Xe Graphics (TGL GT2) driver 21.99.99 on Linuxmint 20.2
+ // llvmpipe (LLVM 18.1.8, 256 bits) driver 0.0.1 on Arch unknown
// NVIDIA GeForce GTX 1070 driver 511.65.0.0 on Windows 10
// NVIDIA GeForce GTX 750 driver 535.113.1.0 on Linuxmint 21.2
// NVIDIA GeForce GTX 980 Ti driver 516.94.0.0 on Windows 10
@@ -30,9 +31,11 @@ void ASmain ()
// NVIDIA GeForce RTX 4090 driver 526.98.0.0 on Windows 10
// NVIDIA Tegra Orin (nvgpu) driver 540.2.0.0 on Ubuntu 22.04
// Radeon RX 580 Series driver 2.0.207 on Ubuntu 20.04
- // Apple A12 GPU driver 0.2.1915 on Ios 15.3
- // Apple A15 GPU driver 0.2.1914 on Ios 15.3
- // Apple A17 Pro GPU driver 0.2.2014 on Ios 17.1
+ // Microsoft Direct3D12 (Qualcomm(R) Adreno(TM) 8cx Gen 3) driver 24.1.99 on Windows 11
+ // Microsoft Direct3D12 (Snapdragon(R) X Elite - X1E78100 - Qualcom driver 24.1.99 on Windows 11
+ // Apple A12 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A15 GPU driver 0.2.2018 on Ios 17.5
+ // Apple A17 Pro GPU driver 0.2.2018 on Ios 17.5
// Apple M3 Max driver 0.2.2014 on Osx 14.2
// asus ASUS_AI2203_D driver 32.1.0 on Android 13.0
// Adreno (TM) 660 driver 512.530.0 on Android 11.0
@@ -55,6 +58,7 @@ void ASmain ()
// samsung SM-S901E driver 512.744.6 on Android 13.0
// Samsung Xclipse 920 driver 2.0.0 on Android 12.0
// samsung SM-S926B driver 2.0.0 on Android 14.0
+ // Snapdragon(R) X Elite - X1E80100 - Qualcomm(R) Adreno(TM) GPU driver 512.780.0 on Windows 11
// vivo V2324A driver 44.1.0 on Android 14.0
// Xiaomi 22081212G driver 512.744.1 on Android 14.0
// Apple9
@@ -72,15 +76,13 @@ void ASmain ()
RC fset = FeatureSet( "part.MinNonUniformDescriptorIndexing" );
- fset.runtimeDescriptorArray (True);
-
fset.shaderSampledImageArrayDynamicIndexing (True);
fset.shaderStorageBufferArrayDynamicIndexing (True);
fset.shaderUniformBufferArrayDynamicIndexing (True);
fset.shaderUniformTexelBufferArrayDynamicIndexing (True);
fset.shaderStorageTexelBufferArrayDynamicIndexing (True);
+
fset.shaderSampledImageArrayNonUniformIndexing (True);
- fset.shaderUniformTexelBufferArrayNonUniformIndexing (True);
fset.maxUniformBufferSize (64 << 10);
fset.maxStorageBufferSize (64 << 10);
diff --git a/AE/engine/shared_data/scripts/pipeline_compiler.as b/AE/engine/shared_data/scripts/pipeline_compiler.as
index 21fcf566..6eeae5d4 100644
--- a/AE/engine/shared_data/scripts/pipeline_compiler.as
+++ b/AE/engine/shared_data/scripts/pipeline_compiler.as
@@ -1,4 +1,4 @@
-//449db7a1
+//20d3f215
#include
#include
@@ -22,146 +22,146 @@ struct RC;
template
using array = std::vector;
-struct EShader;
-struct RenderState_DepthBufferState;
-struct EShaderStages;
-struct uint3;
-struct uint2;
-struct EMutableRenderState;
-struct ShaderIO;
-struct uint4;
-struct ECompareOp;
-struct RenderState_StencilFaceState;
-struct EGPUVendor;
-struct RGBA8u;
-struct VertexBufferInput;
-struct EMipmapFilter;
-struct Attachment;
-struct RGBA32u;
-struct EStructLayout;
-struct Sampler;
-struct EImageOpt;
-struct EFeature;
-struct EShaderOpt;
-struct CallableIndex;
-struct GraphicsPipeline;
-struct MeshPipelineSpec;
-struct FeatureSet;
-struct EBufferUsage;
-struct NamedRenderState;
-struct EResourceState;
-struct EBufferOpt;
-struct ComputePass;
-struct MeshPipeline;
-struct EImageType;
-struct EAttachmentStoreOp;
-struct EBorderColor;
-struct VertexDivisor;
-struct EReductionMode;
-struct EShaderVersion;
-struct MipmapLevel;
-struct EShadingRateCombinerOp;
-struct ESurfaceFormat;
-struct DepthStencil;
-struct RenderState;
-struct AttachmentSpec;
-struct RayTracingPipelineSpec;
-struct RenderState_ColorBuffersState;
-struct EPixelFormatExternal;
-struct GraphicsPipelineSpec;
-struct FS_RecursiveDirectoryIter;
-struct int2;
-struct int3;
-struct ArraySize;
-struct PipelineLayout;
-struct int4;
-struct ImageLayer;
-struct RenderPass;
-struct RenderState_ColorBuffer;
-struct ushort2;
-struct ushort3;
-struct sbyte2;
-struct EPixelFormat;
-struct short4;
-struct ETessSpacing;
-struct EValueType;
-struct EPolygonMode;
-struct EAttachmentLoadOp;
-struct TilePipelineSpec;
-struct TilePipeline;
-struct EAccessType;
-struct ComputePipeline;
-struct EIndex;
-struct float4;
-struct short3;
-struct GraphicsPass;
-struct short2;
-struct ushort4;
+struct EShaderIO;
+struct EImageAspect;
+struct EPipelineOpt;
+struct InstanceIndex;
+struct float3;
+struct float2;
+struct EDescSetUsage;
+struct EVertexInputRate;
+struct DescriptorSetLayout;
+struct ESamplerChromaLocation;
+struct RenderState_StencilBufferState;
+struct EFilter;
+struct EPipelineDynamicState;
+struct RayTracingShaderBinding;
+struct MultiSamples;
+struct RenderTechnique;
+struct RayTracingPipeline;
struct sbyte3;
+struct EAttachment;
struct sbyte4;
struct ESamplerYcbcrModelConversion;
-struct EAttachment;
-struct EImageUsage;
-struct ESubgroupTypes;
+struct short3;
+struct ushort4;
+struct GraphicsPass;
struct ESamplerOpt;
+struct ESubgroupTypes;
+struct EImageUsage;
struct Align;
-struct ESamplerChromaLocation;
-struct DescriptorSetLayout;
-struct RenderTechnique;
-struct RayTracingPipeline;
-struct RayTracingShaderBinding;
-struct MultiSamples;
-struct EFilter;
-struct EPipelineDynamicState;
-struct RenderState_StencilBufferState;
-struct float3;
-struct float2;
-struct EPipelineOpt;
-struct InstanceIndex;
-struct EImageAspect;
-struct EShaderIO;
-struct EVertexInputRate;
-struct EDescSetUsage;
-struct CompatibleRenderPass;
-struct ubyte4;
-struct ESamplerYcbcrRange;
-struct EShadingRate;
-struct GlobalConfig;
-struct EPrimitive;
-struct ComputePipelineSpec;
-struct EFormatFeature;
-struct RenderState_RasterizationState;
-struct RenderState_InputAssemblyState;
-struct ubyte3;
-struct EGraphicsDeviceID;
-struct ESubgroupOperation;
-struct ubyte2;
-struct bool4;
-struct EVertexType;
-struct RGBA32i;
+struct short2;
+struct EIndex;
+struct ComputePipeline;
+struct EAccessType;
+struct float4;
+struct ShaderStructType;
+struct EBlendFactor;
+struct Shader;
+struct EStencilOp;
+struct ERTInstanceOpt;
+struct EAddressMode;
+struct ECompilationTarget;
+struct FS_DirectoryIterator;
+struct RenderState_MultisampleState;
+struct RayIndex;
struct bool3;
-struct bool2;
struct EImage;
-struct EShaderPreprocessor;
-struct ShaderStructTypeUsage;
+struct bool2;
+struct RGBA32i;
+struct bool4;
+struct EVertexType;
+struct ELogicOp;
+struct ETessPatch;
+struct ECullMode;
struct HSVColor;
-struct RGBA32f;
+struct ShaderStructTypeUsage;
+struct EBlendOp;
struct EQueueMask;
+struct EShaderPreprocessor;
struct RenderState_ColorBuffer_ColorMask;
-struct ECullMode;
-struct ELogicOp;
-struct EBlendOp;
-struct ETessPatch;
-struct EStencilOp;
-struct Shader;
-struct ShaderStructType;
-struct ERTInstanceOpt;
-struct EBlendFactor;
-struct RenderState_MultisampleState;
-struct FS_DirectoryIterator;
-struct RayIndex;
-struct ECompilationTarget;
-struct EAddressMode;
+struct RGBA32f;
+struct ComputePipelineSpec;
+struct EPrimitive;
+struct ESubgroupOperation;
+struct ubyte2;
+struct ubyte3;
+struct EFormatFeature;
+struct RenderState_InputAssemblyState;
+struct EGraphicsDeviceID;
+struct RenderState_RasterizationState;
+struct ESamplerYcbcrRange;
+struct ubyte4;
+struct CompatibleRenderPass;
+struct EShadingRate;
+struct GlobalConfig;
+struct MeshPipeline;
+struct NamedRenderState;
+struct EBufferUsage;
+struct FeatureSet;
+struct ComputePass;
+struct EBufferOpt;
+struct EResourceState;
+struct EBorderColor;
+struct VertexDivisor;
+struct EImageType;
+struct EAttachmentStoreOp;
+struct Sampler;
+struct CallableIndex;
+struct MeshPipelineSpec;
+struct EShaderOpt;
+struct GraphicsPipeline;
+struct EImageOpt;
+struct EFeature;
+struct EMipmapFilter;
+struct VertexBufferInput;
+struct RGBA8u;
+struct EStructLayout;
+struct RGBA32u;
+struct Attachment;
+struct uint2;
+struct ShaderIO;
+struct EShaderStages;
+struct EMutableRenderState;
+struct uint3;
+struct EShader;
+struct RenderState_DepthBufferState;
+struct RenderState_StencilFaceState;
+struct ECompareOp;
+struct uint4;
+struct EGPUVendor;
+struct EValueType;
+struct ETessSpacing;
+struct TilePipelineSpec;
+struct TilePipeline;
+struct EPolygonMode;
+struct EAttachmentLoadOp;
+struct int2;
+struct int4;
+struct ImageLayer;
+struct GraphicsPipelineSpec;
+struct ArraySize;
+struct int3;
+struct FS_RecursiveDirectoryIter;
+struct EPixelFormat;
+struct short4;
+struct PipelineLayout;
+struct ushort3;
+struct ushort2;
+struct sbyte2;
+struct RenderPass;
+struct RenderState_ColorBuffer;
+struct RenderState;
+struct AttachmentSpec;
+struct DepthStencil;
+struct EPixelFormatExternal;
+struct RenderState_ColorBuffersState;
+struct EReductionMode;
+struct RayTracingPipelineSpec;
+struct ESurfaceFormat;
+struct EShadingRateCombinerOp;
+struct MipmapLevel;
+struct EShaderVersion;
using sbyte = int8;
using ubyte = uint8;
@@ -3158,6 +3158,8 @@ struct FeatureSet
bool hasShaderStorageImageArrayNonUniformIndexingNative ();
void shaderInputAttachmentArrayNonUniformIndexingNative (EFeature);
bool hasShaderInputAttachmentArrayNonUniformIndexingNative ();
+ void quadDivergentImplicitLod (EFeature);
+ bool hasQuadDivergentImplicitLod ();
void shaderStorageImageMultisample (EFeature);
bool hasShaderStorageImageMultisample ();
void shaderStorageImageReadWithoutFormat (EFeature);
@@ -4636,158 +4638,158 @@ const string Sampler_Anisotropy16Repeat;
const string Sampler_Anisotropy16MirrorRepeat;
const string Sampler_Anisotropy16Clamp;
template <>
-struct RC : VertexBufferInput
+struct RC : DescriptorSetLayout
{
- RC (const VertexBufferInput &);
+ RC (const DescriptorSetLayout &);
};
template <>
-struct RC : Attachment
+struct RC : RayTracingShaderBinding
{
- RC (const Attachment &);
+ RC (const RayTracingShaderBinding &);
};
template <>
-struct RC : Sampler
+struct RC : RenderTechnique
{
- RC (const Sampler &);
+ RC (const RenderTechnique &);
};
template <>
-struct RC : GraphicsPipeline
+struct RC : RayTracingPipeline
{
- RC (const GraphicsPipeline &);
+ RC (const RayTracingPipeline &);
};
template <>
-struct RC : MeshPipelineSpec
+struct RC : GraphicsPass
{
- RC (const MeshPipelineSpec &);
+ RC (const GraphicsPass &);
};
template <>
-struct RC : FeatureSet
+struct RC : ComputePipeline
{
- RC (const FeatureSet &);
+ RC (const ComputePipeline &);
};
template <>
-struct RC : NamedRenderState
+struct RC : ShaderStructType
{
- RC (const NamedRenderState &);
+ RC (const ShaderStructType &);
};
template <>
-struct RC : ComputePass
+struct RC : Shader
{
- RC (const ComputePass &);
+ RC (const Shader &);
};
template <>
-struct RC : MeshPipeline
+struct RC : ComputePipelineSpec
{
- RC (const MeshPipeline &);
+ RC (const ComputePipelineSpec &);
};
template <>
-struct RC : AttachmentSpec
+struct RC : CompatibleRenderPass
{
- RC (const AttachmentSpec &);
+ RC (const CompatibleRenderPass &);
};
template <>
-struct RC : RayTracingPipelineSpec
+struct RC : MeshPipeline
{
- RC (const RayTracingPipelineSpec &);
+ RC (const MeshPipeline &);
};
template <>
-struct RC : GraphicsPipelineSpec
+struct RC : NamedRenderState
{
- RC (const GraphicsPipelineSpec &);
+ RC (const NamedRenderState &);
};
template <>
-struct RC : PipelineLayout
+struct RC : FeatureSet
{
- RC (const PipelineLayout &);
+ RC (const FeatureSet &);
};
template <>
-struct RC : RenderPass
+struct RC : ComputePass
{
- RC (const RenderPass &);
+ RC (const ComputePass &);
};
template <>
-struct RC : TilePipelineSpec
+struct RC : Sampler
{
- RC (const TilePipelineSpec &);
+ RC (const Sampler &);
};
template <>
-struct RC : TilePipeline
+struct RC : MeshPipelineSpec
{
- RC (const TilePipeline &);
+ RC (const MeshPipelineSpec &);
};
template <>
-struct RC : ComputePipeline
+struct RC : GraphicsPipeline
{
- RC (const ComputePipeline &);
+ RC (const GraphicsPipeline &);
};
template <>
-struct RC : GraphicsPass
+struct RC : VertexBufferInput
{
- RC (const GraphicsPass &);
+ RC (const VertexBufferInput &);
};
template <>
-struct RC : DescriptorSetLayout
+struct RC : Attachment
{
- RC (const DescriptorSetLayout &);
+ RC (const Attachment &);
};
template <>
-struct RC : RenderTechnique
+struct RC : TilePipelineSpec
{
- RC (const RenderTechnique &);
+ RC (const TilePipelineSpec &);
};
template <>
-struct RC : RayTracingPipeline
+struct RC : TilePipeline
{
- RC (const RayTracingPipeline &);
+ RC (const TilePipeline &);
};
template <>
-struct RC : RayTracingShaderBinding
+struct RC : GraphicsPipelineSpec
{
- RC (const RayTracingShaderBinding &);
+ RC (const GraphicsPipelineSpec &);
};
template <>
-struct RC : CompatibleRenderPass
+struct RC : PipelineLayout
{
- RC (const CompatibleRenderPass &);
+ RC (const PipelineLayout &);
};
template <>
-struct RC : ComputePipelineSpec
+struct RC : RenderPass
{
- RC (const ComputePipelineSpec &);
+ RC (const RenderPass &);
};
template <>
-struct RC : Shader
+struct RC : AttachmentSpec
{
- RC (const Shader &);
+ RC (const AttachmentSpec &);
};
template <>
-struct RC : ShaderStructType
+struct RC : RayTracingPipelineSpec
{
- RC (const ShaderStructType &);
+ RC (const RayTracingPipelineSpec &);
};
diff --git a/AE/engine/shared_data/scripts/res_editor.as b/AE/engine/shared_data/scripts/res_editor.as
index 58887732..c0da83a7 100644
--- a/AE/engine/shared_data/scripts/res_editor.as
+++ b/AE/engine/shared_data/scripts/res_editor.as
@@ -1,4 +1,4 @@
-//400c1546
+//5757ea0c
#include
#include
@@ -22,169 +22,169 @@ struct RC;
template
using array = std::vector;
-struct RectU;
-struct EBlendFactor;
-struct ERTInstanceOpt;
-struct EStencilOp;
-struct EAddressMode;
-struct DbgViewFlags;
-struct RayIndex;
-struct RTScene;
-struct Collection;
-struct EPassFlags;
-struct EImage;
-struct DynamicULong;
-struct bool3;
-struct bool2;
-struct EVertexType;
-struct RGBA32i;
-struct SceneGraphicsPass;
-struct bool4;
-struct EBlendOp;
-struct ELogicOp;
-struct ECullMode;
-struct HSVColor;
-struct RGBA32f;
-struct EQueueMask;
-struct Random_Normal1;
-struct UnifiedGeometry_Draw;
-struct Random_Normal2;
-struct Random_Normal3;
-struct EPrimitive;
-struct ESubgroupOperation;
-struct FPVCamera;
-struct VideoImage;
-struct ubyte2;
-struct ubyte3;
-struct EGraphicsDeviceID;
-struct Random_Normal4;
-struct ubyte4;
-struct RTInstanceCustomIndex;
-struct ESamplerYcbcrRange;
-struct RemoteCamera;
-struct RTInstanceSBTOffset;
-struct EShadingRate;
struct EShaderIO;
-struct RTInstanceTransform;
struct EImageAspect;
-struct EPipelineOpt;
-struct ERenderLayer;
struct InstanceIndex;
+struct RTInstanceTransform;
struct float3;
+struct EPipelineOpt;
struct float2;
+struct ERenderLayer;
struct DynamicInt;
-struct EDescSetUsage;
struct EVertexInputRate;
-struct ESamplerChromaLocation;
-struct float2x4;
+struct EDescSetUsage;
struct UnifiedGeometry_DrawIndexedIndirect;
+struct ESamplerChromaLocation;
struct float2x2;
struct float2x3;
+struct float2x4;
struct EPipelineDynamicState;
struct Random_Binomial4;
struct EFilter;
-struct IPass;
struct Random_Binomial2;
struct MultiSamples;
struct Random_Binomial3;
struct Random_Binomial1;
+struct IPass;
struct ESamplerYcbcrModelConversion;
-struct sbyte3;
struct sbyte4;
-struct short3;
+struct UnifiedGeometry_DrawIndexed;
struct Random;
struct short2;
-struct UnifiedGeometry_DrawIndexed;
-struct ushort4;
+struct sbyte3;
struct ESamplerOpt;
struct ESubgroupTypes;
+struct short3;
+struct ushort4;
struct EImageUsage;
struct UnifiedGeometry_DrawIndexedIndirectCount;
-struct Image;
struct ScriptFlags;
-struct EIndex;
-struct DynamicInt4;
-struct DynamicInt3;
+struct Image;
struct DynamicInt2;
+struct DynamicInt4;
+struct EIndex;
struct UnifiedGeometry_DrawIndirect;
+struct DynamicInt3;
struct GeomSource;
+struct float4;
struct DynamicFloat2;
struct DynamicFloat3;
-struct float4;
struct ImageLoadOpFlags;
-struct RTGeometry;
-struct DynamicUInt4;
-struct DynamicFloat4;
struct EPostprocess;
-struct RTShader;
struct DynamicUInt2;
+struct RTShader;
+struct DynamicUInt4;
+struct RTGeometry;
+struct DynamicFloat4;
+struct EBlendFactor;
struct DynamicUInt3;
-struct float3x2;
-struct float3x3;
-struct Model;
-struct float3x4;
-struct float4x2;
-struct float4x4;
-struct DynamicUInt;
-struct EPolygonMode;
-struct float4x3;
-struct int4;
-struct int2;
-struct int3;
-struct ImageLayer;
-struct EPixelFormat;
-struct short4;
-struct ushort2;
-struct ushort3;
-struct sbyte2;
-struct Scene;
-struct DepthStencil;
-struct EPixelFormatExternal;
-struct EReductionMode;
-struct ScaleBiasCamera;
-struct TopDownCamera;
-struct ESurfaceFormat;
-struct FlightCamera;
-struct MipmapLevel;
-struct EShadingRateCombinerOp;
-struct BaseController;
+struct EStencilOp;
+struct ERTInstanceOpt;
+struct DbgViewFlags;
+struct EAddressMode;
+struct EPassFlags;
+struct RayIndex;
+struct Collection;
+struct RTScene;
+struct DynamicULong;
+struct bool3;
+struct EImage;
+struct bool2;
+struct RGBA32i;
+struct SceneGraphicsPass;
+struct EVertexType;
+struct EBlendOp;
+struct bool4;
+struct HSVColor;
+struct ECullMode;
+struct ELogicOp;
+struct RGBA32f;
+struct EQueueMask;
+struct Random_Normal1;
+struct UnifiedGeometry_Draw;
+struct EPrimitive;
+struct Random_Normal2;
+struct Random_Normal3;
+struct VideoImage;
+struct FPVCamera;
+struct ubyte3;
+struct EGraphicsDeviceID;
+struct ESubgroupOperation;
+struct Random_Normal4;
+struct ubyte2;
+struct ESamplerYcbcrRange;
+struct RTInstanceCustomIndex;
+struct ubyte4;
+struct RemoteCamera;
+struct RTInstanceSBTOffset;
+struct EShadingRate;
struct SceneRayTracingPass;
struct Postprocess;
struct EResourceState;
+struct EBufferUsage;
struct EBufferOpt;
struct UnifiedGeometry_DrawMeshTasksIndirect;
struct ComputePass;
-struct EBufferUsage;
struct EBorderColor;
struct EImageType;
-struct UnifiedGeometry;
struct UnifiedGeometry_DrawIndirectCount;
+struct UnifiedGeometry;
struct CallableIndex;
struct Buffer;
+struct UnifiedGeometry_DrawMeshTasksIndirectCount;
struct EImageOpt;
struct EFeature;
-struct OrbitalCamera;
-struct UnifiedGeometry_DrawMeshTasksIndirectCount;
struct EMipmapFilter;
+struct OrbitalCamera;
struct RGBA8u;
struct RectF;
struct SphericalCube;
-struct RGBA32u;
struct UnifiedGeometry_DrawMeshTasks;
-struct uint3;
+struct RGBA32u;
struct uint2;
+struct uint3;
+struct RTInstanceMask;
+struct DynamicFloat;
struct RectI;
struct EShader;
struct EShaderStages;
-struct DynamicFloat;
-struct RTInstanceMask;
+struct DynamicDim;
struct EGPUVendor;
-struct ECompareOp;
+struct RayTracingPass;
struct FPSCamera;
-struct DynamicDim;
-struct EColorSpace;
+struct ECompareOp;
struct uint4;
-struct RayTracingPass;
+struct EColorSpace;
+struct float3x2;
+struct RectU;
+struct float3x3;
+struct Model;
+struct float3x4;
+struct DynamicUInt;
+struct float4x2;
+struct float4x4;
+struct EPolygonMode;
+struct int2;
+struct float4x3;
+struct int3;
+struct int4;
+struct ImageLayer;
+struct ushort2;
+struct sbyte2;
+struct EPixelFormat;
+struct short4;
+struct ushort3;
+struct Scene;
+struct DepthStencil;
+struct EPixelFormatExternal;
+struct ScaleBiasCamera;
+struct EReductionMode;
+struct TopDownCamera;
+struct ESurfaceFormat;
+struct FlightCamera;
+struct EShadingRateCombinerOp;
+struct MipmapLevel;
+struct BaseController;
struct EImageType
{
@@ -4880,12 +4880,15 @@ void Slider (const RC & dyn, const string & name, const float4 &
void WhiteColorSpectrum3 (array & wavelengthToRGB);
// Returns array with 7 elements, where x - wavelength in nm, yzw - RGB color.
+// normalized - sum of colors will be 1.
void WhiteColorSpectrum7 (array & wavelengthToRGB, bool normalized);
-// Returns array with visible light spectrum with step 100nm, where x - wavelength in nm, yzw - RGB color.
+// Returns array 4 elements with visible light spectrum with step 100nm, where x - wavelength in nm, yzw - RGB color.
+// normalized - sum of colors will be 1.
void WhiteColorSpectrumStep100nm (array & wavelengthToRGB, bool normalized);
-// Returns array with visible light spectrum with step 50nm, where x - wavelength in nm, yzw - RGB color.
+// Returns array 7 elements with visible light spectrum with step 50nm, where x - wavelength in nm, yzw - RGB color.
+// normalized - sum of colors will be 1.
void WhiteColorSpectrumStep50nm (array & wavelengthToRGB, bool normalized);
// Convert 2D regular grid on cube face to 3D position on cube.
@@ -4907,48 +4910,6 @@ EPixelFormat Supported_DepthStencilFormat ();
bool Supports_Format (EPixelFormat);
#define SCRIPT
-template <>
-struct RC : RTScene
-{
- RC (const RTScene &);
-};
-
-template <>
-struct RC : Collection
-{
- RC (const Collection &);
-};
-
-template <>
-struct RC : DynamicULong
-{
- RC (const DynamicULong &);
-};
-
-template <>
-struct RC : SceneGraphicsPass
-{
- RC (const SceneGraphicsPass &);
-};
-
-template <>
-struct RC : FPVCamera
-{
- RC (const FPVCamera &);
-};
-
-template <>
-struct RC : VideoImage
-{
- RC (const VideoImage &);
-};
-
-template <>
-struct RC : RemoteCamera
-{
- RC (const RemoteCamera &);
-};
-
template <>
struct RC : DynamicInt
{
@@ -4968,21 +4929,21 @@ struct RC : Image
};
template <>
-struct RC : DynamicInt4
+struct RC : DynamicInt2
{
- RC (const DynamicInt4 &);
+ RC (const DynamicInt2 &);
};
template <>
-struct RC : DynamicInt3
+struct RC : DynamicInt4
{
- RC (const DynamicInt3 &);
+ RC (const DynamicInt4 &);
};
template <>
-struct RC : DynamicInt2
+struct RC : DynamicInt3
{
- RC (const DynamicInt2 &);
+ RC (const DynamicInt3 &);
};
template <>
@@ -5004,9 +4965,9 @@ struct RC : DynamicFloat3
};
template <>
-struct RC : RTGeometry
+struct RC : DynamicUInt2
{
- RC (const RTGeometry &);
+ RC (const DynamicUInt2 &);
};
template <>
@@ -5016,15 +4977,15 @@ struct RC : DynamicUInt4
};
template <>
-struct RC : DynamicFloat4
+struct RC : RTGeometry
{
- RC (const DynamicFloat4 &);
+ RC (const RTGeometry &);
};
template <>
-struct RC : DynamicUInt2
+struct RC : DynamicFloat4
{
- RC (const DynamicUInt2 &);
+ RC (const DynamicFloat4 &);
};
template <>
@@ -5034,45 +4995,45 @@ struct RC : DynamicUInt3
};
template <>
-struct RC : Model
+struct RC : Collection
{
- RC (const Model &);
+ RC (const Collection &);
};
template <>
-struct RC : DynamicUInt
+struct RC : RTScene
{
- RC (const DynamicUInt &);
+ RC (const RTScene &);
};
template <>
-struct RC : Scene
+struct RC : DynamicULong
{
- RC (const Scene &);
+ RC (const DynamicULong &);
};
template <>
-struct RC : ScaleBiasCamera
+struct RC : SceneGraphicsPass
{
- RC (const ScaleBiasCamera &);
+ RC (const SceneGraphicsPass &);
};
template <>
-struct RC : TopDownCamera
+struct RC : VideoImage
{
- RC (const TopDownCamera &);
+ RC (const VideoImage &);
};
template <>
-struct RC : FlightCamera
+struct RC : FPVCamera
{
- RC (const FlightCamera &);
+ RC (const FPVCamera &);
};
template <>
-struct RC : BaseController
+struct RC : RemoteCamera
{
- RC (const BaseController &);
+ RC (const RemoteCamera &);
};
template <>
@@ -5123,6 +5084,18 @@ struct RC : DynamicFloat
RC (const DynamicFloat &);
};
+template <>
+struct RC : DynamicDim
+{
+ RC (const DynamicDim &);
+};
+
+template <>
+struct RC : RayTracingPass
+{
+ RC (const RayTracingPass &);
+};
+
template <>
struct RC : FPSCamera
{
@@ -5130,14 +5103,44 @@ struct RC : FPSCamera
};
template <>
-struct RC : DynamicDim
+struct RC : Model
{
- RC (const DynamicDim &);
+ RC (const Model &);
};
template <>
-struct RC : RayTracingPass
+struct RC : DynamicUInt
{
- RC (const RayTracingPass &);
+ RC (const DynamicUInt &);
+};
+
+template <>
+struct RC : Scene
+{
+ RC (const Scene &);
+};
+
+template <>
+struct RC : ScaleBiasCamera
+{
+ RC (const ScaleBiasCamera &);
+};
+
+template <>
+struct RC : TopDownCamera
+{
+ RC (const TopDownCamera &);
+};
+
+template <>
+struct RC : FlightCamera
+{
+ RC (const FlightCamera &);
+};
+
+template <>
+struct RC : BaseController
+{
+ RC (const BaseController &);
};
diff --git a/AE/engine/src/base/Algorithms/Cast.h b/AE/engine/src/base/Algorithms/Cast.h
index 4578356f..d4610840 100644
--- a/AE/engine/src/base/Algorithms/Cast.h
+++ b/AE/engine/src/base/Algorithms/Cast.h
@@ -12,7 +12,7 @@ namespace AE::Base
CheckPointerAlignment
=================================================
*/
- ND_ constexpr inline bool CheckPointerAlignment (void const* ptr, usize align) __NE___
+ ND_ inline bool CheckPointerAlignment (void const* ptr, usize align) __NE___
{
DBG_CHECK_MSG( ((align & (align - 1)) == 0), "Align must be power of 2" );
diff --git a/AE/engine/src/base/Defines/Attribs.h b/AE/engine/src/base/Defines/Attribs.h
index dc1dc6a2..a4ec8288 100644
--- a/AE/engine/src/base/Defines/Attribs.h
+++ b/AE/engine/src/base/Defines/Attribs.h
@@ -201,10 +201,17 @@
// field placement optimization
-#if __has_cpp_attribute( no_unique_address )
+#if defined(AE_COMPILER_MSVC) and not defined(AE_COMPILER_CLANG_CL)
+# if _MSC_VER >= 1929
+# define NO_UNIQUE_ADDRESS [[msvc::no_unique_address]]
+# endif
+#endif
+#ifndef NO_UNIQUE_ADDRESS
+# if __has_cpp_attribute( no_unique_address )
# define NO_UNIQUE_ADDRESS [[no_unique_address]]
-#else
+# else
# define NO_UNIQUE_ADDRESS
+# endif
#endif
diff --git a/AE/engine/src/base/Memory/MemUtils.h b/AE/engine/src/base/Memory/MemUtils.h
index 6d6e20a4..d2d7c1c6 100644
--- a/AE/engine/src/base/Memory/MemUtils.h
+++ b/AE/engine/src/base/Memory/MemUtils.h
@@ -162,7 +162,7 @@ namespace AE::Base
*/
namespace _hidden_
{
- inline void MemCopyChecks (const void* dst, const void* src, Bytes size, uint align = 0)
+ forceinline void MemCopyChecks (const void* dst, const void* src, Bytes size, uint align = 0)
{
// spec: "If either dest or src is an invalid or null pointer, the behavior is undefined, even if count is zero."
NonNull( dst );
@@ -176,6 +176,8 @@ namespace _hidden_
ASSERT( CheckPointerAlignment( dst, align ));
ASSERT( CheckPointerAlignment( src, align ));
}
+
+ Unused( dst, src, size, align );
}
}
@@ -205,7 +207,7 @@ namespace _hidden_
}
template
- inline void MemCopy (OUT T* dst, const T* src, const usize count) __NE___
+ void MemCopy (OUT T* dst, const T* src, const usize count) __NE___
{
StaticAssert( IsMemCopyAvailable );
Base::_hidden_::MemCopyChecks( dst, src, SizeOf*count );
@@ -221,7 +223,7 @@ namespace _hidden_
null pointers are allowed
=================================================
*/
- inline void MemCopy_NullCheck (OUT void* dst, const void* src, const Bytes size) __NE___
+ forceinline void MemCopy_NullCheck (OUT void* dst, const void* src, const Bytes size) __NE___
{
// spec: "If the objects overlap, the behavior is undefined."
ASSERT( not IsIntersects( dst, dst + size, src, src + size ));
@@ -234,7 +236,7 @@ namespace _hidden_
}
template
- inline void MemCopy_NullCheck (OUT T* dst, const T* src, const usize count) __NE___
+ void MemCopy_NullCheck (OUT T* dst, const T* src, const usize count) __NE___
{
StaticAssert( IsMemCopyAvailable );
@@ -284,7 +286,7 @@ namespace _hidden_
*/
namespace _hidden_
{
- inline void MemMoveChecks (const void* dst, const void* src, uint align = 0)
+ forceinline void MemMoveChecks (const void* dst, const void* src, uint align = 0)
{
// spec: "If either dest or src is an invalid or null pointer, the behavior is undefined, even if count is zero."
NonNull( dst );
@@ -298,6 +300,8 @@ namespace _hidden_
ASSERT( CheckPointerAlignment( dst, align ));
ASSERT( CheckPointerAlignment( src, align ));
}
+
+ Unused( dst, src, align );
}
}
inline void MemMove (OUT void* dst, const void* src, Bytes size) __NE___
@@ -314,7 +318,7 @@ namespace _hidden_
}
template
- inline void MemMove (OUT T* dst, const T* src, const usize count) __NE___
+ void MemMove (OUT T* dst, const T* src, const usize count) __NE___
{
StaticAssert( IsMemCopyAvailable );
Base::_hidden_::MemMoveChecks( dst, src );
@@ -340,7 +344,7 @@ namespace _hidden_
}
template
- inline void MemMove_NullCheck (OUT T* dst, const T* src, const usize count) __NE___
+ void MemMove_NullCheck (OUT T* dst, const T* src, const usize count) __NE___
{
StaticAssert( IsMemCopyAvailable );
diff --git a/AE/engine/src/base/Platforms/CPUInfo_Apple.cpp b/AE/engine/src/base/Platforms/CPUInfo_Apple.cpp
index 21ad7c62..b36cbfad 100644
--- a/AE/engine/src/base/Platforms/CPUInfo_Apple.cpp
+++ b/AE/engine/src/base/Platforms/CPUInfo_Apple.cpp
@@ -193,7 +193,7 @@ namespace AE::Base
*/
bool CpuPerformance::GetPerfCounters (OUT PerProcessCounters &, OUT PerThreadCounters &) __NE___
{
- return true;
+ return false;
}
diff --git a/AE/engine/src/graphics/CMakeLists.txt b/AE/engine/src/graphics/CMakeLists.txt
index 22de20a1..850d0cbd 100644
--- a/AE/engine/src/graphics/CMakeLists.txt
+++ b/AE/engine/src/graphics/CMakeLists.txt
@@ -119,12 +119,12 @@ if (${AE_ENABLE_VULKAN} OR ${AE_ENABLE_METAL} OR ${AE_ENABLE_REMOTE_GRAPHICS})
endif()
if (APPLE)
- if (NOT EXISTS "/usr/local/lib/libMoltenVK.dylib")
- message( FATAL_ERROR "'/usr/local/lib/libMoltenVK.dylib' is not exists, instal VulkanSDK with MoltenVk and try again" )
- endif()
- if (NOT EXISTS "/usr/local/lib/libvulkan.dylib")
- message( FATAL_ERROR "'/usr/local/lib/libvulkan.dylib' is not exists, instal VulkanSDK with MoltenVk and try again" )
- endif()
+ #if (NOT EXISTS "/usr/local/lib/libMoltenVK.dylib")
+ # message( FATAL_ERROR "'/usr/local/lib/libMoltenVK.dylib' is not exists, instal VulkanSDK with MoltenVk and try again" )
+ #endif()
+ #if (NOT EXISTS "/usr/local/lib/libvulkan.dylib")
+ # message( FATAL_ERROR "'/usr/local/lib/libvulkan.dylib' is not exists, instal VulkanSDK with MoltenVk and try again" )
+ #endif()
# TODO: static linking
#target_link_libraries( "Graphics" PUBLIC "AE-Bin/external/macos-arm64/MoltenVK/static/MoltenVK.xcframework/macos-arm64_x86_64/libMoltenVK.a" )
diff --git a/AE/engine/src/graphics/Metal/MFeatureSet.cpp b/AE/engine/src/graphics/Metal/MFeatureSet.cpp
index 7a19cefe..359b7d26 100644
--- a/AE/engine/src/graphics/Metal/MFeatureSet.cpp
+++ b/AE/engine/src/graphics/Metal/MFeatureSet.cpp
@@ -503,6 +503,7 @@ namespace
outFeatureSet.shaderStorageBufferArrayNonUniformIndexingNative = outFeatureSet.shaderStorageBufferArrayNonUniformIndexing;
outFeatureSet.shaderStorageImageArrayNonUniformIndexingNative = outFeatureSet.shaderStorageImageArrayNonUniformIndexing;
outFeatureSet.shaderInputAttachmentArrayNonUniformIndexingNative= outFeatureSet.shaderInputAttachmentArrayNonUniformIndexing;
+ outFeatureSet.quadDivergentImplicitLod = False;
// storage image format
//outFeatureSet.shaderStorageImageMultisample // TODO
@@ -515,10 +516,10 @@ namespace
outFeatureSet.vulkanMemoryModelAvailabilityVisibilityChains = False;
//
- //outFeatureSet.shaderDemoteToHelperInvocation
- //outFeatureSet.shaderTerminateInvocation
- //outFeatureSet.shaderZeroInitializeWorkgroupMemory
- //outFeatureSet.shaderIntegerDotProduct
+ outFeatureSet.shaderDemoteToHelperInvocation = True;
+ outFeatureSet.shaderTerminateInvocation = False;
+ outFeatureSet.shaderZeroInitializeWorkgroupMemory = False;
+ outFeatureSet.shaderIntegerDotProduct = True;
// fragment shader interlock
outFeatureSet.fragmentShaderSampleInterlock = features.rasterOrderGroups ? True : False;
@@ -545,7 +546,7 @@ namespace
outFeatureSet.rayQueryStages &= all_stages;
// ray tracing
- outFeatureSet.rayTracingPipeline = False;
+ outFeatureSet.rayTracingPipeline = False; // TODO
outFeatureSet.rayTraversalPrimitiveCulling = False;
outFeatureSet.maxRayRecursionDepth = 0;
diff --git a/AE/engine/src/graphics/Private/ContextValidation.cpp b/AE/engine/src/graphics/Private/ContextValidation.cpp
index ee709df9..c2db88fa 100644
--- a/AE/engine/src/graphics/Private/ContextValidation.cpp
+++ b/AE/engine/src/graphics/Private/ContextValidation.cpp
@@ -1287,7 +1287,7 @@ namespace
Unused( primitiveOp, textureOp ); // TODO
GCTX_CHECK( FragmentShadingRateSupported() );
- GCTX_CHECK( AllBits( dynState, EPipelineDynamicState::FragmentShadingRate ));
+ // GCTX_CHECK( AllBits( dynState, EPipelineDynamicState::FragmentShadingRate ));
GCTX_CHECK( not AnyBits( rate, ~uint(EShadingRate::_SizeMask) )); // only size
}
diff --git a/AE/engine/src/graphics/Private/EnumUtils.cpp b/AE/engine/src/graphics/Private/EnumUtils.cpp
index b9cc4989..cc71fb34 100644
--- a/AE/engine/src/graphics/Private/EnumUtils.cpp
+++ b/AE/engine/src/graphics/Private/EnumUtils.cpp
@@ -1248,19 +1248,20 @@ namespace AE::Graphics
{
switch ( id )
{
- case 0x01002 : return EGPUVendor::AMD;
- case 0x010DE : return EGPUVendor::NVidia;
- case 0x08086 : return EGPUVendor::Intel;
- case 0x013B5 : return EGPUVendor::ARM;
- case 0x05143 : return EGPUVendor::Qualcomm;
- case 0x01010 : return EGPUVendor::ImgTech;
- case 0x01414 : return EGPUVendor::Microsoft;
- case 0x0106B : return EGPUVendor::Apple;
- case 0x10005 : return EGPUVendor::Mesa;
- case 0x014e4 : return EGPUVendor::Broadcom;
- case 0x0144d : return EGPUVendor::Samsung;
- case 0x10002 : return EGPUVendor::VeriSilicon;
- case 0x019E5 : return EGPUVendor::Huawei;
+ case 0x01002 : return EGPUVendor::AMD;
+ case 0x010DE : return EGPUVendor::NVidia;
+ case 0x08086 : return EGPUVendor::Intel;
+ case 0x013B5 : return EGPUVendor::ARM;
+ case 0x05143 : return EGPUVendor::Qualcomm;
+ case 0x01010 : return EGPUVendor::ImgTech;
+ case 0x01414 : return EGPUVendor::Microsoft;
+ case 0x0106B : return EGPUVendor::Apple;
+ case 0x10005 : return EGPUVendor::Mesa;
+ case 0x014e4 : return EGPUVendor::Broadcom;
+ case 0x0144d : return EGPUVendor::Samsung;
+ case 0x10002 : return EGPUVendor::VeriSilicon;
+ case 0x019E5 : return EGPUVendor::Huawei;
+ case 0x4d4f4351 : return EGPUVendor::Qualcomm; // emulator?
}
return Default;
}
diff --git a/AE/engine/src/graphics/Private/FeatureSet.cpp b/AE/engine/src/graphics/Private/FeatureSet.cpp
index 2b70a2e8..081201ad 100644
--- a/AE/engine/src/graphics/Private/FeatureSet.cpp
+++ b/AE/engine/src/graphics/Private/FeatureSet.cpp
@@ -749,26 +749,27 @@ namespace
CHECK_ERR( A(_lhs_) >= A(_ref_) ); \
}}
- #define chEqual( _lhs_, _ref_ ) chEqual2( (_lhs_), (_ref_), (_lhs_) = (_ref_) )
- #define chNotEqual( _lhs_, _ref_ ) chNotEqual2( (_lhs_), (_ref_), (_ref_) )
- #define chLessEq( _lhs_, _ref_ ) chLessEq2( (_lhs_), (_ref_), (_ref_) )
- #define chGreaterEq( _lhs_, _ref_ ) chGreaterEq2( (_lhs_), (_ref_), (_ref_) )
+ #define chEqual( _lhs_, _ref_ ) chEqual2( (_lhs_), (_ref_), (_lhs_) = (_ref_) ) // if lhs != ref then lhs = ref
+ #define chNotEqual( _lhs_, _ref_ ) chNotEqual2( (_lhs_), (_ref_), (_ref_) ) // TODO: check
+ #define chLessEq( _lhs_, _ref_ ) chLessEq2( (_lhs_), (_ref_), (_ref_) ) // if lhs > ref then lhs = ref
+ #define chGreaterEq( _lhs_, _ref_ ) chGreaterEq2( (_lhs_), (_ref_), (_ref_) ) // if lhs < ref then lhs = ref
#define fEqual( _lhs_, _rhs_ ) (EFeature(_lhs_) == (_rhs_))
#define fNotEq( _lhs_, _rhs_ ) (EFeature(_lhs_) != (_rhs_))
- EShaderStages all_stages = EShaderStages::All;
- if ( fNotEq( computeShader, EFeature::RequireTrue )) all_stages &= ~EShaderStages::Compute;
- if ( fNotEq( geometryShader, EFeature::RequireTrue )) all_stages &= ~EShaderStages::Geometry;
- if ( fNotEq( tessellationShader, EFeature::RequireTrue )) all_stages &= ~(EShaderStages::TessControl | EShaderStages::TessEvaluation);
- if ( fNotEq( tileShader, EFeature::RequireTrue )) all_stages &= ~EShaderStages::Tile;
- if ( fNotEq( taskShader, EFeature::RequireTrue )) all_stages &= ~EShaderStages::MeshTask;
- if ( fNotEq( meshShader, EFeature::RequireTrue )) all_stages &= ~EShaderStages::Mesh;
- if ( fNotEq( rayTracingPipeline, EFeature::RequireTrue )) all_stages &= ~EShaderStages::AllRayTracing;
-
+ const auto True = EFeature::RequireTrue;
const auto neg_feat = EFeature::Ignore;
- if ( fEqual( subgroup, EFeature::RequireTrue ))
+ EShaderStages all_stages = EShaderStages::All;
+ if ( fNotEq( computeShader, True )) all_stages &= ~EShaderStages::Compute;
+ if ( fNotEq( geometryShader, True )) all_stages &= ~EShaderStages::Geometry;
+ if ( fNotEq( tessellationShader, True )) all_stages &= ~(EShaderStages::TessControl | EShaderStages::TessEvaluation);
+ if ( fNotEq( tileShader, True )) all_stages &= ~EShaderStages::Tile;
+ if ( fNotEq( taskShader, True )) all_stages &= ~EShaderStages::MeshTask;
+ if ( fNotEq( meshShader, True )) all_stages &= ~EShaderStages::Mesh;
+ if ( fNotEq( rayTracingPipeline, True )) all_stages &= ~EShaderStages::AllRayTracing;
+
+ if ( fEqual( subgroup, True ))
{
chNotEqual2( subgroupOperations, SubgroupOperationBits{}, SubgroupOperationBits{}.InsertRange( ESubgroupOperation::_Basic_Begin, ESubgroupOperation::_Basic_End ));
chNotEqual2( subgroupTypes, ESubgroupTypes::Unknown, ESubgroupTypes::Float32 );
@@ -778,10 +779,10 @@ namespace
chEqual2( AllBits( subgroupStages, EShaderStages::Compute ), true, subgroupStages |= EShaderStages::Compute );
chEqual2( AnyBits( subgroupStages, ~all_stages ), false, subgroupStages &= all_stages );
- if ( fNotEq( shaderInt8, EFeature::RequireTrue )) chEqual2( AllBits( subgroupTypes, ESubgroupTypes::Int8 ), false, subgroupTypes &= ~ESubgroupTypes::Int8 );
- if ( fNotEq( shaderInt16, EFeature::RequireTrue )) chEqual2( AllBits( subgroupTypes, ESubgroupTypes::Int16 ), false, subgroupTypes &= ~ESubgroupTypes::Int16 );
- if ( fNotEq( shaderInt64, EFeature::RequireTrue )) chEqual2( AllBits( subgroupTypes, ESubgroupTypes::Int64 ), false, subgroupTypes &= ~ESubgroupTypes::Int64 );
- if ( fNotEq( shaderFloat16, EFeature::RequireTrue )) chEqual2( AllBits( subgroupTypes, ESubgroupTypes::Float16 ), false, subgroupTypes &= ~ESubgroupTypes::Float16 );
+ if ( fNotEq( shaderInt8, True )) chEqual2( AllBits( subgroupTypes, ESubgroupTypes::Int8 ), false, subgroupTypes &= ~ESubgroupTypes::Int8 );
+ if ( fNotEq( shaderInt16, True )) chEqual2( AllBits( subgroupTypes, ESubgroupTypes::Int16 ), false, subgroupTypes &= ~ESubgroupTypes::Int16 );
+ if ( fNotEq( shaderInt64, True )) chEqual2( AllBits( subgroupTypes, ESubgroupTypes::Int64 ), false, subgroupTypes &= ~ESubgroupTypes::Int64 );
+ if ( fNotEq( shaderFloat16, True )) chEqual2( AllBits( subgroupTypes, ESubgroupTypes::Float16 ), false, subgroupTypes &= ~ESubgroupTypes::Float16 );
chGreaterEq( minSubgroupSize, 1 );
chEqual2( IsPowerOfTwo( minSubgroupSize ), true, minSubgroupSize = CeilPOT( minSubgroupSize ));
@@ -804,9 +805,9 @@ namespace
chEqual( maxSubgroupSize, 0 );
}
- if ( fEqual( subgroupSizeControl, EFeature::RequireTrue ))
+ if ( fEqual( subgroupSizeControl, True ))
{
- chEqual( subgroup, EFeature::RequireTrue );
+ chEqual( subgroup, True );
// requiredSubgroupSizeStages can be 0
chEqual2( AnyBits( requiredSubgroupSizeStages, ~all_stages ), false, requiredSubgroupSizeStages &= all_stages );
}
@@ -816,7 +817,7 @@ namespace
chEqual( requiredSubgroupSizeStages, EShaderStages::Unknown );
}
- if ( fEqual( attachmentFragmentShadingRate, EFeature::RequireTrue )) {
+ if ( fEqual( attachmentFragmentShadingRate, True )) {
if constexpr( Mutable ) {
if (not fragmentShadingRateTexelSize)
attachmentFragmentShadingRate = EFeature::Ignore;
@@ -829,9 +830,9 @@ namespace
CHECK_ERR( not fragmentShadingRateTexelSize );
}
- if ( fEqual( pipelineFragmentShadingRate, EFeature::RequireTrue ) or
- fEqual( primitiveFragmentShadingRate, EFeature::RequireTrue ) or
- fEqual( attachmentFragmentShadingRate, EFeature::RequireTrue ))
+ if ( fEqual( pipelineFragmentShadingRate, True ) or
+ fEqual( primitiveFragmentShadingRate, True ) or
+ fEqual( attachmentFragmentShadingRate, True ))
{
if constexpr( Mutable ){
if ( fragmentShadingRates.empty() )
@@ -842,16 +843,16 @@ namespace
}
else
{
- chNotEqual2( primitiveFragmentShadingRateWithMultipleViewports, EFeature::RequireTrue, neg_feat );
- chNotEqual2( layeredShadingRateAttachments, EFeature::RequireTrue, neg_feat );
- chNotEqual2( fragmentShadingRateWithShaderDepthStencilWrites, EFeature::RequireTrue, neg_feat );
- chNotEqual2( fragmentShadingRateWithSampleMask, EFeature::RequireTrue, neg_feat );
- chNotEqual2( fragmentShadingRateWithShaderSampleMask, EFeature::RequireTrue, neg_feat );
- chNotEqual2( fragmentShadingRateWithFragmentShaderInterlock, EFeature::RequireTrue, neg_feat );
- chNotEqual2( fragmentShadingRateWithCustomSampleLocations, EFeature::RequireTrue, neg_feat );
+ chNotEqual2( primitiveFragmentShadingRateWithMultipleViewports, True, neg_feat );
+ chNotEqual2( layeredShadingRateAttachments, True, neg_feat );
+ chNotEqual2( fragmentShadingRateWithShaderDepthStencilWrites, True, neg_feat );
+ chNotEqual2( fragmentShadingRateWithSampleMask, True, neg_feat );
+ chNotEqual2( fragmentShadingRateWithShaderSampleMask, True, neg_feat );
+ chNotEqual2( fragmentShadingRateWithFragmentShaderInterlock, True, neg_feat );
+ chNotEqual2( fragmentShadingRateWithCustomSampleLocations, True, neg_feat );
}
- if ( fNotEq( bufferDeviceAddress, EFeature::RequireTrue ))
+ if ( fNotEq( bufferDeviceAddress, True ))
{
if constexpr( Mutable ){
rayTracingPipeline = neg_feat;
@@ -859,18 +860,18 @@ namespace
}
}
- if ( fEqual( rayTracingPipeline, EFeature::RequireTrue ))
+ if ( fEqual( rayTracingPipeline, True ))
{
chGreaterEq( maxShaderVersion.spirv, 140 );
- if constexpr( not Mutable ) { CHECK( fEqual( bufferDeviceAddress, EFeature::RequireTrue )); }
+ if constexpr( not Mutable ) { CHECK( fEqual( bufferDeviceAddress, True )); }
}
else
{
- chNotEqual2( rayTraversalPrimitiveCulling, EFeature::RequireTrue, neg_feat );
+ chNotEqual2( rayTraversalPrimitiveCulling, True, neg_feat );
chEqual( maxRayRecursionDepth, 0 );
}
- if ( fEqual( rayQuery, EFeature::RequireTrue ))
+ if ( fEqual( rayQuery, True ))
{
chNotEqual2( rayQueryStages, EShaderStages::Unknown, EShaderStages::Fragment | EShaderStages::Compute );
chEqual2( AnyBits( rayQueryStages, ~all_stages ), false, rayQueryStages &= all_stages );
@@ -883,8 +884,8 @@ namespace
chEqual( rayQueryStages, EShaderStages::Unknown );
}
- if ( fEqual( rayTracingPipeline, EFeature::RequireTrue ) or
- fEqual( rayQuery, EFeature::RequireTrue ))
+ if ( fEqual( rayTracingPipeline, True ) or
+ fEqual( rayQuery, True ))
{
chNotEqual2( accelStructVertexFormats, VertexFormatSet_t{}, VertexFormatSet_t{}.insert( EVertexType::Float3 ));
}
@@ -904,18 +905,18 @@ namespace
chLessEq( maxShaderVersion.metal, MaxMetalVersion );
}
- if ( fEqual( multiview, EFeature::RequireTrue ))
+ if ( fEqual( multiview, True ))
{
chGreaterEq( maxMultiviewViewCount, 1 );
}
else
{
- chNotEqual2( multiviewGeometryShader, EFeature::RequireTrue, neg_feat );
- chNotEqual2( multiviewTessellationShader, EFeature::RequireTrue, neg_feat );
+ chNotEqual2( multiviewGeometryShader, True, neg_feat );
+ chNotEqual2( multiviewTessellationShader, True, neg_feat );
chLessEq( maxMultiviewViewCount, 1 );
}
- if ( fNotEq( multiViewport, EFeature::RequireTrue ))
+ if ( fNotEq( multiViewport, True ))
{
chEqual( maxViewports, 1 );
}
@@ -938,7 +939,7 @@ namespace
// maxFragmentDualSrcAttachments can be 0
chGreaterEq( maxPushConstantsSize, 16 );
- if ( fEqual( computeShader, EFeature::RequireTrue ))
+ if ( fEqual( computeShader, True ))
{
chGreaterEq( maxComputeSharedMemorySize, 16 );
chGreaterEq( maxComputeWorkGroupInvocations, 1 );
@@ -961,14 +962,14 @@ namespace
chEqual( maxComputeWorkGroupSizeZ, 0 );
}
- if ( fEqual( taskShader, EFeature::RequireTrue ))
+ if ( fEqual( taskShader, True ))
{
chGreaterEq( maxTaskWorkGroupSize, 32 );
chGreaterEq( maxTaskPayloadSize, (16<<10) );
chGreaterEq( maxTaskSharedMemorySize, (16<<10) );
chGreaterEq( maxTaskPayloadAndSharedMemorySize, (16<<10) );
chGreaterEq( maxPreferredTaskWorkGroupInvocations, 32 );
- chEqual( meshShader, EFeature::RequireTrue );
+ chEqual( meshShader, True );
if ( maxShaderVersion.spirv != 0 ) { chGreaterEq( maxShaderVersion.spirv, 140 ); }
if ( maxShaderVersion.metal != 0 ) { chGreaterEq( maxShaderVersion.metal, 300 ); }
}
@@ -981,13 +982,13 @@ namespace
chEqual( maxPreferredTaskWorkGroupInvocations, 0 );
}
- if ( fEqual( meshShader, EFeature::RequireTrue ))
+ if ( fEqual( meshShader, True ))
{
chGreaterEq( maxMeshWorkGroupSize, 32 );
chGreaterEq( maxMeshOutputVertices, 128 );
chGreaterEq( maxMeshOutputPrimitives, 128 );
- chGreaterEq( maxMeshOutputPerVertexGranularity, 32 );
- chGreaterEq( maxMeshOutputPerPrimitiveGranularity, 32 );
+ chGreaterEq( maxMeshOutputPerVertexGranularity, 1 );
+ chGreaterEq( maxMeshOutputPerPrimitiveGranularity, 1 );
chGreaterEq( maxMeshSharedMemorySize, (16<<10) );
chGreaterEq( maxMeshPayloadAndSharedMemorySize, (16<<10) );
chGreaterEq( maxMeshOutputMemorySize, (16<<10) );
@@ -1015,51 +1016,81 @@ namespace
chGreaterEq( maxImageArrayLayers, 1 );
chGreaterEq( maxFramebufferLayers, 1 );
- //CHECK_ERR( surfaceFormats.Any() ); // can be empty
- //CHECK_ERR( attachmentBlendFormats.Any() ); // can be empty
- chNotEqual2( attachmentFormats, PixelFormatSet_t{}, PixelFormatSet_t{}.insert( EPixelFormat::RGBA8_UNorm ));
- chNotEqual2( vertexFormats, VertexFormatSet_t{}, VertexFormatSet_t{}.insert( EVertexType::Float4 ));
+ // must be at least one depth format
+ /*if ( attachmentFormats.Any() )
+ {
+ CHECK_ERR( attachmentFormats.contains( EPixelFormat::Depth16 ) or
+ attachmentFormats.contains( EPixelFormat::Depth16_Stencil8 ) or
+ attachmentFormats.contains( EPixelFormat::Depth24 ) or
+ attachmentFormats.contains( EPixelFormat::Depth24_Stencil8 ) or
+ attachmentFormats.contains( EPixelFormat::Depth32F ) or
+ attachmentFormats.contains( EPixelFormat::Depth32F_Stencil8 ));
+ }*/
+
+ if ( fEqual( dualSrcBlend, True ) or fEqual( independentBlend, True ) or fEqual( constantAlphaColorBlendFactors, True ))
+ CHECK_ERR( attachmentBlendFormats.Any() );
+
+ if ( attachmentBlendFormats.Any() )
+ {
+ CHECK_ERR( attachmentFormats.Any() );
+ CHECK_ERR( (attachmentFormats & attachmentBlendFormats) == attachmentBlendFormats );
+ }
CHECK_ERR( (VertexTypeBits & vertexFormats) == vertexFormats );
- if ( fNotEq( vulkanMemoryModel, EFeature::RequireTrue ))
+ if ( fNotEq( vulkanMemoryModel, True ))
{
- chNotEqual2( vulkanMemoryModelDeviceScope, EFeature::RequireTrue, neg_feat );
- chNotEqual2( vulkanMemoryModelAvailabilityVisibilityChains, EFeature::RequireTrue, neg_feat );
+ chNotEqual2( vulkanMemoryModelDeviceScope, True, neg_feat );
+ chNotEqual2( vulkanMemoryModelAvailabilityVisibilityChains, True, neg_feat );
}
- if ( fEqual( variableSampleLocations, EFeature::RequireTrue )) {
- chEqual( sampleLocations, EFeature::RequireTrue );
+ if ( fEqual( variableSampleLocations, True )) {
+ chEqual( sampleLocations, True );
}
- if ( fEqual( shaderSampleRateInterpolationFunctions, EFeature::RequireTrue )) {
- chEqual( sampleRateShading, EFeature::RequireTrue );
+ if ( fEqual( shaderSampleRateInterpolationFunctions, True )) {
+ chEqual( sampleRateShading, True );
}
if ( maxShaderVersion.metal != 0 and maxShaderVersion.metal < 230 ) {
- chNotEqual( shaderInt64, EFeature::RequireTrue );
+ chNotEqual( shaderInt64, True );
}
// not supported in Metal
if ( maxShaderVersion.spirv == 0 and maxShaderVersion.metal != 0 )
{
- chNotEqual( shaderFloat64, EFeature::RequireTrue );
- chNotEqual( shaderSubgroupClock, EFeature::RequireTrue );
- chNotEqual( shaderDeviceClock, EFeature::RequireTrue );
- chNotEqual( rayTracingPipeline, EFeature::RequireTrue );
+ chNotEqual( shaderFloat64, True );
+ chNotEqual( shaderSubgroupClock, True );
+ chNotEqual( shaderDeviceClock, True );
+ chNotEqual( rayTracingPipeline, True );
// TODO
}
- if ( fEqual( cooperativeMatrix, EFeature::RequireTrue )) {
+ if ( fEqual( cooperativeMatrix, True )) {
chNotEqual2( cooperativeMatrixStages, EShaderStages::Unknown, EShaderStages::Compute );
}else{
chEqual( cooperativeMatrixStages, EShaderStages::Unknown );
}
- if ( fEqual( externalFormatAndroid, EFeature::RequireTrue )) {
- chEqual( samplerYcbcrConversion, EFeature::RequireTrue );
+ if ( fEqual( externalFormatAndroid, True )) {
+ chEqual( samplerYcbcrConversion, True );
}
chNotEqual2( queues.supported, EQueueMask::Unknown, EQueueMask::Graphics );
chEqual2( AnyBits( queues.required, ~queues.supported ), false, queues.required &= queues.supported );
+ if ( fEqual( shaderUniformBufferArrayNonUniformIndexingNative, True ))
+ chEqual( shaderUniformBufferArrayNonUniformIndexing, True );
+
+ if ( fEqual( shaderSampledImageArrayNonUniformIndexingNative, True ))
+ chEqual( shaderSampledImageArrayNonUniformIndexing, True );
+
+ if ( fEqual( shaderStorageBufferArrayNonUniformIndexingNative, True ))
+ chEqual( shaderStorageBufferArrayNonUniformIndexing, True );
+
+ if ( fEqual( shaderStorageImageArrayNonUniformIndexingNative, True ))
+ chEqual( shaderStorageImageArrayNonUniformIndexing, True );
+
+ if ( fEqual( shaderInputAttachmentArrayNonUniformIndexingNative, True ))
+ chEqual( shaderInputAttachmentArrayNonUniformIndexing, True );
+
return true;
#undef chEqual
@@ -1581,7 +1612,7 @@ namespace {
*/
HashVal64 FeatureSet::GetHashOfFS_Precalculated () __NE___
{
- return HashVal64{0xd7baaa85cc5124fbull};
+ return HashVal64{0x0040013f2f731cb2ull};
}
/*
diff --git a/AE/engine/src/graphics/Public/DeviceProperties.h b/AE/engine/src/graphics/Public/DeviceProperties.h
index e2e684eb..7b32fa75 100644
--- a/AE/engine/src/graphics/Public/DeviceProperties.h
+++ b/AE/engine/src/graphics/Public/DeviceProperties.h
@@ -216,7 +216,7 @@ namespace AE::Graphics
rayTracing.maxGeometries = 16777215;
rayTracing.maxInstances = 16777215;
- rayTracing.maxPrimitives = 536870911;
+ rayTracing.maxPrimitives = 16777215;
rayTracing.maxRecursion = 1; // nvidia/intel - 31, amd/samsung - 1, apple - ???
rayTracing.maxDispatchInvocations = 67108864; // amd/samsung/nvidia - 1073741824, amd - 67108864, intel - 4294967295, apple - ???
diff --git a/AE/engine/src/graphics/Public/FeatureSet.h b/AE/engine/src/graphics/Public/FeatureSet.h
index 2a6d675a..9d075790 100644
--- a/AE/engine/src/graphics/Public/FeatureSet.h
+++ b/AE/engine/src/graphics/Public/FeatureSet.h
@@ -253,6 +253,7 @@ namespace AE::Graphics
_visitor_( EFeature, shaderStorageBufferArrayNonUniformIndexingNative, : 2 ) /*-|-|-- without native support branching will be used */\
_visitor_( EFeature, shaderStorageImageArrayNonUniformIndexingNative, : 2 ) /*-|-| */\
_visitor_( EFeature, shaderInputAttachmentArrayNonUniformIndexingNative, : 2 ) /*/-/ */\
+ _visitor_( EFeature, quadDivergentImplicitLod, : 2 ) /* derivative calculation for non-uniform image */\
/* storage image format */\
_visitor_( EFeature, shaderStorageImageMultisample, : 2 )\
_visitor_( EFeature, shaderStorageImageReadWithoutFormat, : 2 )\
@@ -401,8 +402,8 @@ namespace AE::Graphics
/*_visitor_( PixelFormatSet_t, minmaxFilterFormats, ) / * VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT */\
/*_visitor_( PixelFormatSet_t, sparseImageFormats, )*/\
/*_visitor_( PixelFormatSet_t, multisampleImageFormats, )*/\
- _visitor_( PixelFormatSet_t, hwCompressedAttachmentFormats, ) /* formats which is compatible with hardware compression */\
- _visitor_( PixelFormatSet_t, lossyCompressedAttachmentFormats, )\
+ _visitor_( PixelFormatSet_t, hwCompressedAttachmentFormats, ) /* formats which is compatible with lossless hardware compression */\
+ _visitor_( PixelFormatSet_t, lossyCompressedAttachmentFormats, ) /* formats which is compatible with lossy hardware compression */\
\
\
/*---- sampler ----*/\
diff --git a/AE/engine/src/graphics/Remote/Allocators/RGfxMemAllocator.h b/AE/engine/src/graphics/Remote/Allocators/RGfxMemAllocator.h
index 1ab12e3a..0d964fa0 100644
--- a/AE/engine/src/graphics/Remote/Allocators/RGfxMemAllocator.h
+++ b/AE/engine/src/graphics/Remote/Allocators/RGfxMemAllocator.h
@@ -23,7 +23,7 @@ namespace AE::Graphics
// methods
public:
- RGfxMemAllocator () __NE___ {}
+ RGfxMemAllocator () __NE___ : _gfxAllocId{} {}
RGfxMemAllocator (RmGfxMemAllocatorID id, Bytes minAlign, Bytes maxSize) __NE___ : _gfxAllocId{id}, _minAlign{minAlign}, _maxSize{maxSize} {}
~RGfxMemAllocator () __NE_OV;
diff --git a/AE/engine/src/graphics/Remote/Commands/RDrawBarrierManager.cpp b/AE/engine/src/graphics/Remote/Commands/RDrawBarrierManager.cpp
index e646bedb..90e22233 100644
--- a/AE/engine/src/graphics/Remote/Commands/RDrawBarrierManager.cpp
+++ b/AE/engine/src/graphics/Remote/Commands/RDrawBarrierManager.cpp
@@ -12,7 +12,7 @@ namespace AE::Graphics::_hidden_
constructor
=================================================
*/
- RDrawBarrierManager::RDrawBarrierManager (Ptr batch, uint drawIdx) __NE___ :
+ RDrawBarrierManager::RDrawBarrierManager (Ptr batch, uint drawIdx) __Th___ :
_primaryState{ batch->GetPrimaryCtxState() },
_batch{ batch }, _drawIndex{ drawIdx },
_resMngr{ GraphicsScheduler().GetResourceManager() }
@@ -22,7 +22,7 @@ namespace AE::Graphics::_hidden_
GCTX_CHECK( _primaryState.useSecondaryCmdbuf != 0 );
}
- RDrawBarrierManager::RDrawBarrierManager (const RPrimaryCmdBufState &primaryState) __NE___ :
+ RDrawBarrierManager::RDrawBarrierManager (const RPrimaryCmdBufState &primaryState) __Th___ :
_primaryState{ primaryState },
_resMngr{ GraphicsScheduler().GetResourceManager() }
{
diff --git a/AE/engine/src/graphics/Remote/Commands/RDrawBarrierManager.h b/AE/engine/src/graphics/Remote/Commands/RDrawBarrierManager.h
index feb4ac15..960aa726 100644
--- a/AE/engine/src/graphics/Remote/Commands/RDrawBarrierManager.h
+++ b/AE/engine/src/graphics/Remote/Commands/RDrawBarrierManager.h
@@ -30,8 +30,8 @@ namespace AE::Graphics::_hidden_
// methods
public:
- RDrawBarrierManager (Ptr batch, uint drawIdx) __NE___;
- explicit RDrawBarrierManager (const RPrimaryCmdBufState &primaryState) __NE___;
+ RDrawBarrierManager (Ptr batch, uint drawIdx) __Th___;
+ explicit RDrawBarrierManager (const RPrimaryCmdBufState &primaryState) __Th___;
template
ND_ decltype(auto) Get (IDs ...ids) __Th___ { return _resMngr.GetResourcesOrThrow( ids... ); }
diff --git a/AE/engine/src/graphics/Remote/Commands/RDrawContext.h b/AE/engine/src/graphics/Remote/Commands/RDrawContext.h
index 035d58ba..dc21564d 100644
--- a/AE/engine/src/graphics/Remote/Commands/RDrawContext.h
+++ b/AE/engine/src/graphics/Remote/Commands/RDrawContext.h
@@ -56,10 +56,10 @@ namespace AE::Graphics
void SetScissor (const RectI &scissors) __Th_OV { SetScissors( ArrayView{ &scissors, 1 }); }
void SetScissors (ArrayView scissors) __Th_OV;
void SetDepthBias (float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor) __Th_OV;
- void SetStencilCompareMask (uint compareMask) __Th___ { SetStencilCompareMask( compareMask, compareMask ); }
- void SetStencilCompareMask (uint frontCompareMask, uint backCompareMask) __Th___;
- void SetStencilWriteMask (uint writeMask) __Th___ { SetStencilWriteMask( writeMask, writeMask ); }
- void SetStencilWriteMask (uint frontWriteMask, uint backWriteMask) __Th___;
+ void SetStencilCompareMask (uint compareMask) __Th_OV { SetStencilCompareMask( compareMask, compareMask ); }
+ void SetStencilCompareMask (uint frontCompareMask, uint backCompareMask) __Th_OV;
+ void SetStencilWriteMask (uint writeMask) __Th_OV { SetStencilWriteMask( writeMask, writeMask ); }
+ void SetStencilWriteMask (uint frontWriteMask, uint backWriteMask) __Th_OV;
void SetStencilReference (uint reference) __Th_OV { SetStencilReference( reference, reference ); }
void SetStencilReference (uint frontReference, uint backReference) __Th_OV;
void SetBlendConstants (const RGBA32f &color) __Th_OV;
diff --git a/AE/engine/src/graphics/Remote/Commands/RTransferContext.h b/AE/engine/src/graphics/Remote/Commands/RTransferContext.h
index 18cb03c4..9ce5caea 100644
--- a/AE/engine/src/graphics/Remote/Commands/RTransferContext.h
+++ b/AE/engine/src/graphics/Remote/Commands/RTransferContext.h
@@ -35,10 +35,10 @@ namespace AE::Graphics
void ClearColorImage (RmImageID image, const RGBA32u &color, ArrayView ranges) __Th___;
void ClearDepthStencilImage (RmImageID image, const DepthStencil &, ArrayView) __Th___;
- void ClearColorImage (ImageID image, const RGBA32f &color, ArrayView ranges) __Th___;
- void ClearColorImage (ImageID image, const RGBA32i &color, ArrayView ranges) __Th___;
- void ClearColorImage (ImageID image, const RGBA32u &color, ArrayView ranges) __Th___;
- void ClearDepthStencilImage (ImageID image, const DepthStencil &, ArrayView) __Th___;
+ void ClearColorImage (ImageID image, const RGBA32f &color, ArrayView ranges) __Th_OV;
+ void ClearColorImage (ImageID image, const RGBA32i &color, ArrayView ranges) __Th_OV;
+ void ClearColorImage (ImageID image, const RGBA32u &color, ArrayView ranges) __Th_OV;
+ void ClearDepthStencilImage (ImageID image, const DepthStencil &, ArrayView) __Th_OV;
void UpdateBuffer (RmBufferID buffer, Bytes offset, Bytes size, const void* data) __Th___;
void UpdateBuffer (BufferID buffer, Bytes offset, Bytes size, const void* data) __Th_OV;
@@ -68,7 +68,7 @@ namespace AE::Graphics
void BlitImage (ImageID srcImage, ImageID dstImage, EBlitFilter filter, ArrayView regions) __Th_OV;
void ResolveImage (RmImageID srcImage, RmImageID dstImage, ArrayView regions) __Th___;
- void ResolveImage (ImageID srcImage, ImageID dstImage, ArrayView regions) __Th___;
+ void ResolveImage (ImageID srcImage, ImageID dstImage, ArrayView regions) __Th_OV;
void UploadBuffer (BufferID buffer, const UploadBufferDesc &desc, OUT BufferMemView &memView) __Th_OV;
void UploadImage (ImageID image, const UploadImageDesc &desc, OUT ImageMemView &memView) __Th_OV { _UploadImage( image, desc, OUT memView ); }
diff --git a/AE/engine/src/graphics/Remote/Resources/RImage.h b/AE/engine/src/graphics/Remote/Resources/RImage.h
index 3ea2823d..5a99fa42 100644
--- a/AE/engine/src/graphics/Remote/Resources/RImage.h
+++ b/AE/engine/src/graphics/Remote/Resources/RImage.h
@@ -46,13 +46,13 @@ namespace AE::Graphics
ND_ MemoryID MemoryId () C_NE___ { return Default; }
ND_ uint3 const Dimension () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.dimension; }
- ND_ uint const Width () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.dimension.x; }
- ND_ uint const Height () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.dimension.y; }
- ND_ uint const Depth () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.dimension.z; }
- ND_ uint const ArrayLayers () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.arrayLayers.Get(); }
- ND_ uint const MipmapLevels () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.mipLevels.Get(); }
+ ND_ uint Width () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.dimension.x; }
+ ND_ uint Height () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.dimension.y; }
+ ND_ uint Depth () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.dimension.z; }
+ ND_ uint ArrayLayers () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.arrayLayers.Get(); }
+ ND_ uint MipmapLevels () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.mipLevels.Get(); }
ND_ EPixelFormat PixelFormat () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.format; }
- ND_ uint const Samples () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.samples.Get(); }
+ ND_ uint Samples () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.samples.Get(); }
ND_ bool IsExclusiveSharing () C_NE___ { DRC_SHAREDLOCK( _drCheck ); return _desc.queues == Default; }
diff --git a/AE/engine/src/graphics/Vulkan/Allocators/VBlockMemAllocator.cpp b/AE/engine/src/graphics/Vulkan/Allocators/VBlockMemAllocator.cpp
index 7091014e..f3e293ea 100644
--- a/AE/engine/src/graphics/Vulkan/Allocators/VBlockMemAllocator.cpp
+++ b/AE/engine/src/graphics/Vulkan/Allocators/VBlockMemAllocator.cpp
@@ -151,7 +151,7 @@ namespace AE::Graphics
for (uint type_idx : BitIndexIterate( memBits ))
{
- const Key key{ type_idx, shaderAddress, isImage };
+ const Key key{ type_idx, shaderAddress, isImage, mapMem };
auto iter = _pageMap.find( key );
if ( iter == _pageMap.end() )
@@ -190,7 +190,7 @@ namespace AE::Graphics
VK_CHECK_ERR( dev.vkMapMemory( dev.GetVkDevice(), memory.Get(), 0, mem_alloc.allocationSize, 0, OUT &mapped_ptr ));
- const Key key{ mem_alloc.memoryTypeIndex, shaderAddress, isImage };
+ const Key key{ mem_alloc.memoryTypeIndex, shaderAddress, isImage, mapMem };
PageArr* page_arr;
{
EXLOCK( _pageMapGuard );
diff --git a/AE/engine/src/graphics/Vulkan/Allocators/VGfxMemAllocatorUtils.h b/AE/engine/src/graphics/Vulkan/Allocators/VGfxMemAllocatorUtils.h
index 21ed5165..db2fcd71 100644
--- a/AE/engine/src/graphics/Vulkan/Allocators/VGfxMemAllocatorUtils.h
+++ b/AE/engine/src/graphics/Vulkan/Allocators/VGfxMemAllocatorUtils.h
@@ -17,15 +17,18 @@ namespace AE::Graphics
struct Key
{
static constexpr ushort _IndexMask = 0xFF;
- static constexpr ushort _ShaderAddrBit = 1 << 8;
- static constexpr ushort _IsImageBit = 1 << 9;
+ static constexpr ubyte _ShaderAddrBit = 8;
+ static constexpr ubyte _IsImageBit = 9;
+ static constexpr ubyte _MappedMemBit = 10;
ushort value = UMax;
- Key () __NE___ {}
-
- Key (uint idx, bool shaderAddr, bool isImage) __NE___ :
- value{ushort( (idx & _IndexMask) | (shaderAddr ? _ShaderAddrBit : 0) | (isImage ? _IsImageBit : 0) )}
+ Key () __NE___ {}
+ Key (uint idx, bool shaderAddr, bool isImage, bool mapMem) __NE___ :
+ value{ushort( (idx & _IndexMask) |
+ (uint(shaderAddr) << _ShaderAddrBit) |
+ (uint(isImage) << _IsImageBit) |
+ (uint(mapMem) << _MappedMemBit) )}
{}
ND_ bool operator == (const Key &rhs) C_NE___ { return value == rhs.value; }
@@ -33,8 +36,9 @@ namespace AE::Graphics
ND_ bool operator > (const Key &rhs) C_NE___ { return value > rhs.value; }
ND_ uint TypeIndex () C_NE___ { return value & _IndexMask; }
- ND_ bool IsShaderAddress () C_NE___ { return value & _ShaderAddrBit; }
- ND_ bool IsImage () C_NE___ { return value & _IsImageBit; }
+ ND_ bool IsShaderAddress () C_NE___ { return HasBit( value, _ShaderAddrBit ); }
+ ND_ bool IsImage () C_NE___ { return HasBit( value, _IsImageBit ); }
+ ND_ bool IsMappedMemory () C_NE___ { return HasBit( value, _MappedMemBit ); }
};
};
diff --git a/AE/engine/src/graphics/Vulkan/Allocators/VLinearMemAllocator.cpp b/AE/engine/src/graphics/Vulkan/Allocators/VLinearMemAllocator.cpp
index d6ab0d88..67cd7423 100644
--- a/AE/engine/src/graphics/Vulkan/Allocators/VLinearMemAllocator.cpp
+++ b/AE/engine/src/graphics/Vulkan/Allocators/VLinearMemAllocator.cpp
@@ -104,7 +104,7 @@ namespace
for (uint type_idx : BitIndexIterate( memBits ))
{
- const Key key{ type_idx, shaderAddress, isImage };
+ const Key key{ type_idx, shaderAddress, isImage, mapMem };
auto iter = _pages.find( key );
if ( iter == _pages.end() )
@@ -122,6 +122,7 @@ namespace
outData.page = &page;
outData.offset = offset;
outData.size = memSize;
+
return true;
}
}
@@ -153,12 +154,15 @@ namespace
// map memory
void* mapped_ptr = null;
if ( mapMem )
+ {
VK_CHECK_ERR( dev.vkMapMemory( dev.GetVkDevice(), memory.Get(), 0, mem_alloc.allocationSize, 0, OUT &mapped_ptr ));
+ CHECK_ERR( mapped_ptr != null );
+ }
EXLOCK( _pageGuard );
- const Key key{ mem_alloc.memoryTypeIndex, shaderAddress, isImage };
+ const Key key{ mem_alloc.memoryTypeIndex, shaderAddress, isImage, mapMem };
auto& page_arr = _pages( key );
CHECK_ERR_MSG( not page_arr.IsFull(), "overflow!" );
diff --git a/AE/engine/src/graphics/Vulkan/Resources/VPipelinePack.cpp b/AE/engine/src/graphics/Vulkan/Resources/VPipelinePack.cpp
index ae3f09ea..928adb7d 100644
--- a/AE/engine/src/graphics/Vulkan/Resources/VPipelinePack.cpp
+++ b/AE/engine/src/graphics/Vulkan/Resources/VPipelinePack.cpp
@@ -7,7 +7,6 @@
# include "graphics/Vulkan/Allocators/VLinearMemAllocator.h"
# include "graphics/Vulkan/Resources/VPipelinePack.h"
-# include "graphics/Private/PipelinePack.cpp.h"
# ifdef AE_ENABLE_GLSL_TRACE
# include "ShaderTrace.h"
@@ -15,6 +14,8 @@
# include "Packer/ShaderTraceDummy.h"
# endif
+# include "graphics/Private/PipelinePack.cpp.h"
+
namespace AE::Graphics
{
/*
diff --git a/AE/engine/src/graphics/Vulkan/Utils/VAMDPerfProfiler.cpp b/AE/engine/src/graphics/Vulkan/Utils/VAMDPerfProfiler.cpp
index 7578deb0..e5e71d12 100644
--- a/AE/engine/src/graphics/Vulkan/Utils/VAMDPerfProfiler.cpp
+++ b/AE/engine/src/graphics/Vulkan/Utils/VAMDPerfProfiler.cpp
@@ -8,6 +8,7 @@
# pragma warning (disable: 4668)
# endif
+# define DISABLE_GPA 0
# include "gpu_performance_api/gpu_perf_api.h"
# ifdef AE_COMPILER_MSVC
diff --git a/AE/engine/src/graphics/Vulkan/VDevice.cpp b/AE/engine/src/graphics/Vulkan/VDevice.cpp
index 9506af51..c90de14e 100644
--- a/AE/engine/src/graphics/Vulkan/VDevice.cpp
+++ b/AE/engine/src/graphics/Vulkan/VDevice.cpp
@@ -1810,6 +1810,29 @@ namespace {
#endif
}
+/*
+=================================================
+ _LogMemoryTypes
+=================================================
+*/
+ void VDeviceInitializer::_LogMemoryTypes () C_Th___
+ {
+ #ifdef AE_ENABLE_LOGS
+ String str;
+ str << "Memory types:";
+
+ for (const auto [type, bits] : _memTypeToBits)
+ {
+ str << "\n " << ToString( type ) << ':';
+ for (uint bit : BitIndexIterate( bits )) {
+ str << ' ' << ToString( bit );
+ }
+ }
+
+ AE_LOGI( str );
+ #endif
+ }
+
/*
=================================================
_ValidateSpirvVersion
@@ -1995,14 +2018,14 @@ namespace {
CreateLogicalDevice
=================================================
*/
- bool VDeviceInitializer::CreateLogicalDevice (ArrayView extensions, const FeatureSet* fsToDeviceFeatures, EDeviceFlags devFlags) __NE___
+ bool VDeviceInitializer::CreateLogicalDevice (const DeviceCreateInfo &ci) __NE___
{
NOTHROW_ERR(
- return _CreateLogicalDevice( extensions, fsToDeviceFeatures, devFlags );
+ return _CreateLogicalDevice( ci );
)
}
- bool VDeviceInitializer::_CreateLogicalDevice (ArrayView extensions, const FeatureSet* fsToDeviceFeatures, EDeviceFlags devFlags) __Th___
+ bool VDeviceInitializer::_CreateLogicalDevice (const DeviceCreateInfo &devCI) __Th___
{
DRC_EXLOCK( _drCheck );
CHECK_ERR( _vkPhysicalDevice != Default );
@@ -2015,8 +2038,8 @@ namespace {
// setup extensions
- Array device_extensions = _GetDeviceExtensions( _vkDeviceVersion ); // throw
- device_extensions.insert( device_extensions.end(), extensions.begin(), extensions.end() ); // throw
+ Array device_extensions = _GetDeviceExtensions( _vkDeviceVersion ); // throw
+ device_extensions.insert( device_extensions.end(), devCI.extensions.begin(), devCI.extensions.end() ); // throw
#ifndef AE_CFG_RELEASE
if ( _nvPerf.IsLoaded() )
@@ -2025,7 +2048,6 @@ namespace {
if ( _amdPerf.IsLoaded() )
_amdPerf.GetDeviceExtensions( *this, INOUT device_extensions );
#endif
- Unused( devFlags );
_ValidateDeviceExtensions( _vkPhysicalDevice, INOUT device_extensions ); // throw
@@ -2122,8 +2144,8 @@ namespace {
void* dev_info_pnext = null;
_InitFeaturesAndProperties( INOUT &dev_info_pnext );
- if ( fsToDeviceFeatures != null )
- CHECK_ERR( _InitFeaturesAndPropertiesByFeatureSet( *fsToDeviceFeatures ));
+ if ( devCI.fsToDeviceFeatures != null )
+ CHECK_ERR( _InitFeaturesAndPropertiesByFeatureSet( *devCI.fsToDeviceFeatures ));
// disable some features
{
@@ -2147,6 +2169,9 @@ namespace {
_properties.rayTracingValidationFeats.rayTracingValidation = VK_FALSE;
}
+ if ( devCI.disableFeatures != null )
+ devCI.disableFeatures( devCI.userData, INOUT _properties );
+
device_info.pEnabledFeatures = &_properties.features;
device_info.pNext = dev_info_pnext;
}
@@ -2177,6 +2202,7 @@ namespace {
_resFlags.Print();
_LogLogicalDevice(); // throw
_devProps.Print();
+ _LogMemoryTypes();
_LogExternalTools(); // throw
}
@@ -2184,10 +2210,10 @@ namespace {
if ( not (_nvPerf.IsLoaded() and _nvPerf.Initialize( *this )) )
_nvPerf.Deinitialize();
- if ( AllBits( devFlags, EDeviceFlags::SetStableClock ) and _nvPerf.IsInitialized() )
+ if ( AllBits( devCI.devFlags, EDeviceFlags::SetStableClock ) and _nvPerf.IsInitialized() )
_nvPerf.SetStableClockState( true );
- if ( not (_amdPerf.IsLoaded() and _amdPerf.Initialize( *this, devFlags )) )
+ if ( not (_amdPerf.IsLoaded() and _amdPerf.Initialize( *this, devCI.devFlags )) )
_amdPerf.Deinitialize();
#endif
@@ -3231,7 +3257,10 @@ namespace {
CHECK_ERR( ChooseHighPerformanceDevice() );
CHECK_ERR( CreateDefaultQueues( ci.device.requiredQueues, ci.device.optionalQueues ));
- CHECK_ERR( CreateLogicalDevice( Default, null, ci.device.devFlags ));
+
+ DeviceCreateInfo dev_ci;
+ dev_ci.devFlags = ci.device.devFlags;
+ CHECK_ERR( CreateLogicalDevice( dev_ci ));
}
return true;
diff --git a/AE/engine/src/graphics/Vulkan/VDevice.h b/AE/engine/src/graphics/Vulkan/VDevice.h
index e99442b5..00cd672f 100644
--- a/AE/engine/src/graphics/Vulkan/VDevice.h
+++ b/AE/engine/src/graphics/Vulkan/VDevice.h
@@ -195,6 +195,21 @@ namespace AE::Graphics
ArrayView enableValidations;
ArrayView disableValidations;
EDeviceFlags devFlags = Default; // pass the same flags to 'CreateLogicalDevice()'
+
+ InstanceCreateInfo () __NE___ {}
+ };
+
+ using DisableFeaturesFn_t = void (*) (void* userData, VProperties &);
+
+ struct DeviceCreateInfo
+ {
+ ArrayView extensions;
+ FeatureSet const* fsToDeviceFeatures = null;
+ EDeviceFlags devFlags = Default;
+ DisableFeaturesFn_t disableFeatures = null;
+ void* userData = null;
+
+ DeviceCreateInfo () __NE___ {}
};
struct QueueCreateInfo
@@ -289,9 +304,7 @@ namespace AE::Graphics
ND_ bool CreateDefaultQueues (EQueueMask required, EQueueMask optional = Default) __NE___;
ND_ bool CreateQueues (ArrayView queues) __NE___;
- ND_ bool CreateLogicalDevice (ArrayView extensions = {},
- const FeatureSet* fsToDeviceFeatures = null,
- EDeviceFlags devFlags = Default) __NE___;
+ ND_ bool CreateLogicalDevice (const DeviceCreateInfo &ci = Default) __NE___;
// bool SetLogicalDevice (VkDevice value, ArrayView extensions = {}) __NE___;
bool DestroyLogicalDevice () __NE___;
@@ -321,7 +334,7 @@ namespace AE::Graphics
void _ValidateInstanceLayers (INOUT Array &layers, Bool silent) C_Th___;
void _ValidateInstanceExtensions (Array layers, INOUT Array &ext, Bool silent) C_Th___;
bool _ChooseHighPerformanceDevice () __Th___;
- bool _CreateLogicalDevice (ArrayView, const FeatureSet*, EDeviceFlags) __Th___;
+ bool _CreateLogicalDevice (const DeviceCreateInfo &ci) __Th___;
void _ValidateDeviceExtensions (VkPhysicalDevice physDev, INOUT Array &ext) C_Th___;
void _ValidateSpirvVersion (OUT SpirvVersion &ver) C_NE___;
void _UpdateDeviceVersion (VkPhysicalDevice physicalDevice, OUT DeviceVersion &devVersion) C_NE___;
@@ -334,6 +347,7 @@ namespace AE::Graphics
void _LogPhysicalDevices () C_NE___;
void _LogLogicalDevice () C_Th___;
void _LogExternalTools () C_Th___;
+ void _LogMemoryTypes () C_Th___;
void _InitQueues (ArrayView props, INOUT Queues_t &queues, INOUT QueueTypes_t &qtypes)C_NE___;
void _ValidateQueueStages (INOUT Queues_t &queues) C_NE___;
diff --git a/AE/engine/src/graphics/Vulkan/VDeviceFS.cpp b/AE/engine/src/graphics/Vulkan/VDeviceFS.cpp
index 9d36b386..f7c48533 100644
--- a/AE/engine/src/graphics/Vulkan/VDeviceFS.cpp
+++ b/AE/engine/src/graphics/Vulkan/VDeviceFS.cpp
@@ -257,6 +257,7 @@ namespace
SET_FEAT2( shaderStorageBufferArrayNonUniformIndexingNative, _properties.descriptorIndexingProps );
SET_FEAT2( shaderStorageImageArrayNonUniformIndexingNative, _properties.descriptorIndexingProps );
SET_FEAT2( shaderInputAttachmentArrayNonUniformIndexingNative, _properties.descriptorIndexingProps );
+ SET_FEAT2( quadDivergentImplicitLod, _properties.descriptorIndexingProps );
}
SET_FEAT( shaderStorageImageMultisample );
@@ -869,17 +870,23 @@ namespace
SET_FEAT( shaderStorageBufferArrayDynamicIndexing );
SET_FEAT( shaderStorageImageArrayDynamicIndexing );
- SET_FEAT2( shaderInputAttachmentArrayDynamicIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderUniformTexelBufferArrayDynamicIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderStorageTexelBufferArrayDynamicIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderUniformBufferArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderSampledImageArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderStorageBufferArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderStorageImageArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderInputAttachmentArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderUniformTexelBufferArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( shaderStorageTexelBufferArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
- SET_FEAT2( runtimeDescriptorArray, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderInputAttachmentArrayDynamicIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderUniformTexelBufferArrayDynamicIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderStorageTexelBufferArrayDynamicIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderUniformBufferArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderSampledImageArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderStorageBufferArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderStorageImageArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderInputAttachmentArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderUniformTexelBufferArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderStorageTexelBufferArrayNonUniformIndexing, _properties.descriptorIndexingFeats );
+ SET_FEAT2( runtimeDescriptorArray, _properties.descriptorIndexingFeats );
+ SET_FEAT2( shaderUniformBufferArrayNonUniformIndexingNative, _properties.descriptorIndexingProps );
+ SET_FEAT2( shaderSampledImageArrayNonUniformIndexingNative, _properties.descriptorIndexingProps );
+ SET_FEAT2( shaderStorageBufferArrayNonUniformIndexingNative, _properties.descriptorIndexingProps );
+ SET_FEAT2( shaderStorageImageArrayNonUniformIndexingNative, _properties.descriptorIndexingProps );
+ SET_FEAT2( shaderInputAttachmentArrayNonUniformIndexingNative, _properties.descriptorIndexingProps );
+ SET_FEAT2( quadDivergentImplicitLod, _properties.descriptorIndexingProps );
SET_FEAT( shaderStorageImageMultisample );
SET_FEAT( shaderStorageImageReadWithoutFormat );
diff --git a/AE/engine/src/profiler/Utils/AdrenoProfiler.cpp b/AE/engine/src/profiler/Utils/AdrenoProfiler.cpp
index 7e414de4..91e7c6ce 100644
--- a/AE/engine/src/profiler/Utils/AdrenoProfiler.cpp
+++ b/AE/engine/src/profiler/Utils/AdrenoProfiler.cpp
@@ -1,6 +1,7 @@
// Copyright (c) Zhirnov Andrey. For more information see 'LICENSE'
#ifdef AE_ENABLE_REMOTE_GRAPHICS
+# include "profiler/Profiler.pch.h"
# include "profiler/Utils/AdrenoProfiler.h"
namespace AE::Profiler
diff --git a/AE/engine/src/profiler/Utils/ArmProfiler.cpp b/AE/engine/src/profiler/Utils/ArmProfiler.cpp
index 54e7b47a..143470e2 100644
--- a/AE/engine/src/profiler/Utils/ArmProfiler.cpp
+++ b/AE/engine/src/profiler/Utils/ArmProfiler.cpp
@@ -1,6 +1,7 @@
// Copyright (c) Zhirnov Andrey. For more information see 'LICENSE'
#ifdef AE_ENABLE_REMOTE_GRAPHICS
+# include "profiler/Profiler.pch.h"
# include "profiler/Utils/ArmProfiler.h"
namespace AE::Profiler
diff --git a/AE/engine/src/profiler/Utils/MaliProfiler.cpp b/AE/engine/src/profiler/Utils/MaliProfiler.cpp
index 09e0088e..85c37978 100644
--- a/AE/engine/src/profiler/Utils/MaliProfiler.cpp
+++ b/AE/engine/src/profiler/Utils/MaliProfiler.cpp
@@ -1,6 +1,7 @@
// Copyright (c) Zhirnov Andrey. For more information see 'LICENSE'
#ifdef AE_ENABLE_REMOTE_GRAPHICS
+# include "profiler/Profiler.pch.h"
# include "profiler/Utils/MaliProfiler.h"
namespace AE::Profiler
diff --git a/AE/engine/src/profiler/Utils/NVidiaProfiler.cpp b/AE/engine/src/profiler/Utils/NVidiaProfiler.cpp
index 958299a3..b0777ae5 100644
--- a/AE/engine/src/profiler/Utils/NVidiaProfiler.cpp
+++ b/AE/engine/src/profiler/Utils/NVidiaProfiler.cpp
@@ -6,6 +6,7 @@
*/
#ifdef AE_ENABLE_REMOTE_GRAPHICS
+# include "profiler/Profiler.pch.h"
# include "profiler/Utils/NVidiaProfiler.h"
namespace AE::Profiler
@@ -83,6 +84,7 @@ namespace AE::Profiler
#elif defined(AE_ENABLE_NVML)
# include "nvml.h"
+# include "profiler/Profiler.pch.h"
# include "profiler/Utils/NVidiaProfiler.h"
namespace AE::Profiler
diff --git a/AE/engine/src/profiler/Utils/PowerVRProfiler.cpp b/AE/engine/src/profiler/Utils/PowerVRProfiler.cpp
index 6dee27f0..24521415 100644
--- a/AE/engine/src/profiler/Utils/PowerVRProfiler.cpp
+++ b/AE/engine/src/profiler/Utils/PowerVRProfiler.cpp
@@ -1,6 +1,7 @@
// Copyright (c) Zhirnov Andrey. For more information see 'LICENSE'
#ifdef AE_ENABLE_REMOTE_GRAPHICS
+# include "profiler/Profiler.pch.h"
# include "profiler/Utils/PowerVRProfiler.h"
namespace AE::Profiler
diff --git a/AE/engine/src/scripting/Impl/ClassBinder.h b/AE/engine/src/scripting/Impl/ClassBinder.h
index 65254b9f..219a1f37 100644
--- a/AE/engine/src/scripting/Impl/ClassBinder.h
+++ b/AE/engine/src/scripting/Impl/ClassBinder.h
@@ -57,6 +57,8 @@ namespace AE::Scripting
template
struct ClassBinder final
{
+ StaticAssert( sizeof(T) > 0, "type is not implemented" );
+
// types
public:
using Self = ClassBinder;
diff --git a/AE/engine/src/scripting/Impl/EnumBinder.h b/AE/engine/src/scripting/Impl/EnumBinder.h
index 61682737..9f9eeaa5 100644
--- a/AE/engine/src/scripting/Impl/EnumBinder.h
+++ b/AE/engine/src/scripting/Impl/EnumBinder.h
@@ -13,6 +13,8 @@ namespace AE::Scripting
template
class EnumBinder final
{
+ StaticAssert( sizeof(T) > 0, "type is not implemented" );
+
// types
public:
using Self = EnumBinder;
diff --git a/AE/engine/tests/base/UnitTest_CPUInfo.cpp b/AE/engine/tests/base/UnitTest_CPUInfo.cpp
index bf72baf4..49671d69 100644
--- a/AE/engine/tests/base/UnitTest_CPUInfo.cpp
+++ b/AE/engine/tests/base/UnitTest_CPUInfo.cpp
@@ -16,10 +16,9 @@ namespace
{
const uint core_count = CpuArchInfo::Get().cpu.logicalCoreCount;
- #if not defined(AE_PLATFORM_WINDOWS) and \
- not defined(AE_PLATFORM_APPLE)
+ #ifndef AE_PLATFORM_WINDOWS
const auto core0_freq = CpuPerformance::GetFrequency( 0 );
- TEST( core0_freq > 0 );
+ //TEST( core0_freq > 0 );
Array all_core_freq;
all_core_freq.resize( core_count );
@@ -44,7 +43,10 @@ namespace
extern void UnitTest_CPUInfo ()
{
Test_CpuArchInfo();
+
+ #ifndef AE_PLATFORM_APPLE
Test_CpuPerformance();
+ #endif
TEST_PASSED();
}
diff --git a/AE/engine/tests/graphics/CMakeLists.txt b/AE/engine/tests/graphics/CMakeLists.txt
index d75c5091..5c929c14 100644
--- a/AE/engine/tests/graphics/CMakeLists.txt
+++ b/AE/engine/tests/graphics/CMakeLists.txt
@@ -23,6 +23,9 @@ if (TARGET "Graphics")
target_include_directories( ${TEST_NAME} PUBLIC "." )
target_include_directories( ${TEST_NAME} PUBLIC "${AE_ENGINE_SHARED_DATA}/scripts" "${AE_ENGINE_SHARED_DATA}/shaders" )
+
+ # disable if pipelines are compiled on linux
+ # enable on all platforms if pipelines are precompiled
target_compile_definitions( ${TEST_NAME} PRIVATE AE_TEST_SHADER_DEBUGGER )
target_compile_definitions( ${TEST_NAME} PRIVATE
diff --git a/AE/engine/tools/cicd/BuildMachine.cpp b/AE/engine/tools/cicd/BuildMachine.cpp
index 93de6d6d..2c2d0fc4 100644
--- a/AE/engine/tools/cicd/BuildMachine.cpp
+++ b/AE/engine/tools/cicd/BuildMachine.cpp
@@ -65,7 +65,7 @@ namespace AE::CICD
=================================================
_RegisterCommands
----
- same as [_InitBuildClient line:312](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/Server.cpp)
+ same as [_InitBuildClient](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/Server.cpp#L312)
=================================================
*/
bool BuildMachine::_RegisterCommands ()
diff --git a/AE/engine/tools/cicd/CMakeLists.txt b/AE/engine/tools/cicd/CMakeLists.txt
index 8953d8d4..136b749b 100644
--- a/AE/engine/tools/cicd/CMakeLists.txt
+++ b/AE/engine/tools/cicd/CMakeLists.txt
@@ -39,12 +39,12 @@ if (${AE_ENABLE_VULKAN})
target_link_libraries( "CICD" PUBLIC "Vulkan-lib" )
if (APPLE)
- if (NOT EXISTS "/usr/local/lib/libMoltenVK.dylib")
- message( FATAL_ERROR "'/usr/local/lib/libMoltenVK.dylib' is not exists, instal VulkanSDK with MoltenVk and try again" )
- endif()
- if (NOT EXISTS "/usr/local/lib/libvulkan.dylib")
- message( FATAL_ERROR "'/usr/local/lib/libvulkan.dylib' is not exists, instal VulkanSDK with MoltenVk and try again" )
- endif()
+ #if (NOT EXISTS "/usr/local/lib/libMoltenVK.dylib")
+ # message( FATAL_ERROR "'/usr/local/lib/libMoltenVK.dylib' is not exists, instal VulkanSDK with MoltenVk and try again" )
+ #endif()
+ #if (NOT EXISTS "/usr/local/lib/libvulkan.dylib")
+ # message( FATAL_ERROR "'/usr/local/lib/libvulkan.dylib' is not exists, instal VulkanSDK with MoltenVk and try again" )
+ #endif()
endif()
endif()
diff --git a/AE/engine/tools/cicd/Client.cpp b/AE/engine/tools/cicd/Client.cpp
index 54f25b51..9271d296 100644
--- a/AE/engine/tools/cicd/Client.cpp
+++ b/AE/engine/tools/cicd/Client.cpp
@@ -63,7 +63,7 @@ namespace AE::CICD
=================================================
_RegisterCommands
----
- same as [_InitUserClient line:360](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/Server.cpp)
+ same as [_InitUserClient](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/Server.cpp#L360)
=================================================
*/
bool Client::_RegisterCommands ()
diff --git a/AE/engine/tools/cicd/Server.cpp b/AE/engine/tools/cicd/Server.cpp
index 65dc9819..a82e2f75 100644
--- a/AE/engine/tools/cicd/Server.cpp
+++ b/AE/engine/tools/cicd/Server.cpp
@@ -327,7 +327,7 @@ namespace AE::CICD
=================================================
_InitBuildClient
----
- same as [BuildMachine line:71](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/BuildMachine.cpp)
+ same as [BuildMachine](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/BuildMachine.cpp#L71)
=================================================
*/
bool Server::_ServerClient::_InitBuildClient ()
@@ -368,7 +368,7 @@ namespace AE::CICD
=================================================
_InitTestClient
----
- same as [TestMachine line:70](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/TestMachine.cpp)
+ same as [TestMachine](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/TestMachine.cpp#L70)
=================================================
*/
bool Server::_ServerClient::_InitTestClient ()
@@ -406,7 +406,7 @@ namespace AE::CICD
=================================================
_InitUserClient
----
- same as [Client line:56](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/Client.cpp)
+ same as [Client](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/Client.cpp#L56)
=================================================
*/
bool Server::_ServerClient::_InitUserClient ()
diff --git a/AE/engine/tools/cicd/TestMachine.cpp b/AE/engine/tools/cicd/TestMachine.cpp
index 8d30aa62..95081538 100644
--- a/AE/engine/tools/cicd/TestMachine.cpp
+++ b/AE/engine/tools/cicd/TestMachine.cpp
@@ -64,7 +64,7 @@ namespace AE::CICD
=================================================
_RegisterCommands
----
- same as [_InitTestClient line:337](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/Server.cpp)
+ same as [_InitTestClient](https://github.com/azhirnov/as-en/blob/dev/AE/engine/tools/cicd/Server.cpp#L337)
=================================================
*/
bool TestMachine::_RegisterCommands ()
diff --git a/AE/engine/tools/feature_set_gen/FeatureSetUtils.cpp b/AE/engine/tools/feature_set_gen/FeatureSetUtils.cpp
index a31c8e5e..6dcb23de 100644
--- a/AE/engine/tools/feature_set_gen/FeatureSetUtils.cpp
+++ b/AE/engine/tools/feature_set_gen/FeatureSetUtils.cpp
@@ -28,7 +28,7 @@ namespace
usize pos = json.find( name );
if ( name.empty() or pos == String::npos )
{
- AE_LOGI( "Not found: "s << name );
+ //AE_LOGI( "Not found: "s << name );
return {};
}
@@ -1191,20 +1191,6 @@ namespace
}
}
- // non uniform
- /*{
- #define NONUNIFORM( _name_ ) \
- if ( outFeatureSet._name_ == EFeature::RequireTrue ) \
- outFeatureSet._name_ = FS_ParseJSON( EFeature::Ignore, json, AE_TOSTRING(_name_) "Native" )
-
- NONUNIFORM( shaderUniformBufferArrayNonUniformIndexing );
- NONUNIFORM( shaderSampledImageArrayNonUniformIndexing );
- NONUNIFORM( shaderStorageBufferArrayNonUniformIndexing );
- NONUNIFORM( shaderStorageImageArrayNonUniformIndexing );
- NONUNIFORM( shaderInputAttachmentArrayNonUniformIndexing );
- #undef NONUNIFORM
- }*/
-
// validate shader stages
{
EShaderStages all_stages = EShaderStages::All;
diff --git a/AE/engine/tools/feature_set_gen/main.cpp b/AE/engine/tools/feature_set_gen/main.cpp
index be82654d..ef5f66b5 100644
--- a/AE/engine/tools/feature_set_gen/main.cpp
+++ b/AE/engine/tools/feature_set_gen/main.cpp
@@ -136,6 +136,24 @@ static void ValidateAppleFS (INOUT FeatureSet &fs)
}
}
+/*
+=================================================
+ IsValidFS
+=================================================
+*/
+static void IsValidFS (const FeatureSet &fs)
+{
+ CHECK( fs.IsValid() );
+
+ CHECK( fs.vertexFormats.Any() );
+ CHECK( fs.attachmentFormats.Any() );
+ CHECK( fs.attachmentBlendFormats.Any() );
+ CHECK( fs.storageImageFormats.Any() );
+ CHECK( fs.linearSampledFormats.Any() );
+
+ CHECK( fs.surfaceFormats.None() );
+}
+
/*
=================================================
GenMinimalFS
@@ -161,7 +179,7 @@ static bool GenMinimalFS (ArrayView fsInfo)
ValidateAppleFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
for (auto& info : fsInfo)
{
@@ -192,6 +210,7 @@ static bool GenMinDescriptorIndexing (ArrayView fsInfo)
_visitor_( shaderStorageTexelBufferArrayDynamicIndexing )
#define FS_LIST2( _visitor_ ) \
+ _visitor_( quadDivergentImplicitLod )\
_visitor_( runtimeDescriptorArray )\
_visitor_( perDescrSet )\
_visitor_( perStage )\
@@ -264,6 +283,7 @@ static bool GenMinNonUniformDescIndexing (ArrayView fsInfo)
_visitor_( shaderInputAttachmentArrayNonUniformIndexing )\
#define FS_LIST2( _visitor_ ) \
+ _visitor_( quadDivergentImplicitLod )\
_visitor_( runtimeDescriptorArray )\
_visitor_( shaderUniformTexelBufferArrayNonUniformIndexing )\
_visitor_( shaderStorageTexelBufferArrayNonUniformIndexing )\
@@ -353,6 +373,7 @@ static bool GenMinNativeNonUniformDescIndexing (ArrayView fsInf
_visitor_( shaderInputAttachmentArrayNonUniformIndexingNative )\
#define FS_LIST2( _visitor_ ) \
+ _visitor_( quadDivergentImplicitLod )\
_visitor_( runtimeDescriptorArray )\
_visitor_( shaderUniformTexelBufferArrayNonUniformIndexing )\
_visitor_( shaderStorageTexelBufferArrayNonUniformIndexing )\
@@ -380,6 +401,7 @@ static bool GenMinNativeNonUniformDescIndexing (ArrayView fsInf
FeatureSet min_fs;
String comment;
bool init = false;
+ const auto True = FeatureSet::EFeature::RequireTrue;
comment << "\t// include:\n";
@@ -390,7 +412,7 @@ static bool GenMinNativeNonUniformDescIndexing (ArrayView fsInf
if ( not (FS_LIST( FS_ANY_TRUE ) false) )
continue;
- if ( fs.shaderSampledImageArrayNonUniformIndexingNative != EFeature::RequireTrue )
+ if ( fs.shaderSampledImageArrayNonUniformIndexingNative != True )
continue;
if ( init )
@@ -466,7 +488,7 @@ static bool GenMinRecursiveRayTracing (ArrayView fsInfo)
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -516,7 +538,7 @@ static bool GenMinInlineRayTracing (ArrayView fsInfo)
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -569,7 +591,7 @@ static bool GenMinMeshShader (ArrayView fsInfo)
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -627,7 +649,9 @@ static bool GenMinMobile (ArrayView fsInfo)
ValidateAppleFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
+
+ CHECK( min_fs.textureCompressionETC2 == EFeature::RequireTrue );
comment << "\n";
@@ -684,7 +708,7 @@ static bool GenMinMobileMali (ArrayView fsInfo)
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -731,10 +755,11 @@ static bool GenMinMobileAdreno (ArrayView fsInfo)
CHECK_ERR( init );
min_fs.maxShaderVersion.metal = 0;
+ min_fs.maxComputeWorkGroupSizeZ = 64; // fix
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -784,7 +809,7 @@ static bool GenMinMobilePowerVR (ArrayView fsInfo)
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -836,7 +861,9 @@ static bool GenMinDesktop (ArrayView fsInfo)
ValidateAppleFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
+
+ CHECK( min_fs.textureCompressionBC == EFeature::RequireTrue );
comment << "\n";
@@ -886,7 +913,7 @@ static bool GenMinDesktopAMD (ArrayView fsInfo)
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -936,7 +963,7 @@ static bool GenMinDesktopNV (ArrayView fsInfo)
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -986,7 +1013,7 @@ static bool GenMinDesktopIntel (ArrayView fsInfo)
ValidateFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -1041,7 +1068,7 @@ static bool GenMinApple (ArrayView fsInfo)
ValidateAppleFS( INOUT min_fs );
min_fs.Validate();
- CHECK( min_fs.IsValid() );
+ IsValidFS( min_fs );
comment << "\n";
@@ -1078,8 +1105,8 @@ static bool GenAppleFamily (INOUT Array &fsInfo)
ValidateFS( INOUT fs );
- CHECK( fs.IsValid() );
fs.Validate();
+ IsValidFS( fs );
}};
const auto InitFeatureSet = [&FixAndValidate] (const MFeatureSet &mfs, const MGPUFamilies &f, OUT FeatureSet &fs)
@@ -1525,14 +1552,16 @@ int main ()
CHECK_LE( limit.rayTracing.maxGeometries, info.fs.ext.maxGeometryCount );
CHECK_LE( limit.rayTracing.maxInstances, info.fs.ext.maxInstanceCount );
CHECK_LE( limit.rayTracing.maxPrimitives, info.fs.ext.maxPrimitiveCount );
- CHECK_LE( limit.rayTracing.maxRecursion, info.fs.ext.maxRayRecursionDepth );
}
+
+ if ( info.fs.rayTracingPipeline == EFeature::RequireTrue )
+ CHECK_LE( limit.rayTracing.maxRecursion, info.fs.ext.maxRayRecursionDepth );
}
// not supported
info.fs.shaderSubgroupUniformControlFlow = EFeature::Ignore;
- CHECK( info.fs.IsValid() );
+ IsValidFS( info.fs );
}
CHECK_ERR( GenAppleFamily( INOUT fs_infos ), -9 );
diff --git a/AE/engine/tools/res_pack/pipeline_compiler/Packer/FeatureSetPack.cpp b/AE/engine/tools/res_pack/pipeline_compiler/Packer/FeatureSetPack.cpp
index a7a8eea7..55149431 100644
--- a/AE/engine/tools/res_pack/pipeline_compiler/Packer/FeatureSetPack.cpp
+++ b/AE/engine/tools/res_pack/pipeline_compiler/Packer/FeatureSetPack.cpp
@@ -18,11 +18,10 @@ namespace AE::PipelineCompiler
#ifdef AE_BUILD_PIPELINE_COMPILER
bool FeatureSetSerializer::Create (const ScriptFeatureSet &fs)
{
- //CHECK_ERR( fs.fs.IsValid() );
-
_fs = fs.fs;
_fs.Validate();
+ CHECK_ERR( _fs.IsValid() );
return true;
}
#endif
diff --git a/AE/engine/tools/res_pack/pipeline_compiler/ScriptObjects/ObjectStorage_GLSL.cpp b/AE/engine/tools/res_pack/pipeline_compiler/ScriptObjects/ObjectStorage_GLSL.cpp
index 31c4241c..25d44b02 100644
--- a/AE/engine/tools/res_pack/pipeline_compiler/ScriptObjects/ObjectStorage_GLSL.cpp
+++ b/AE/engine/tools/res_pack/pipeline_compiler/ScriptObjects/ObjectStorage_GLSL.cpp
@@ -291,25 +291,25 @@ namespace AE::PipelineCompiler
{
// not supported by glslang
ext << "#ifdef GL_EXT_subgroupuniform_qualifier\n"
- << "# extension GL_EXT_subgroupuniform_qualifier : require\n"
+ << "# extension GL_EXT_subgroupuniform_qualifier : require\n"
<< "#endif\n";
def << "#ifdef GL_EXT_subgroupuniform_qualifier\n"
- << "#define AE_subgroup_uniform_qualifier 1\n"
+ << "# define AE_subgroup_uniform_qualifier 1\n"
<< "#endif\n";
- ext << "#extension GL_EXT_subgroup_uniform_control_flow : require\n";
+ ext << "#extension GL_EXT_subgroup_uniform_control_flow : require\n";
def << "#define AE_subgroup_uniform_control_flow 1\n";
}
if ( max_reconv.IsTrue() )
{
- ext << "#extension GL_EXT_maximal_reconvergence : require\n";
+ ext << "#extension GL_EXT_maximal_reconvergence : require\n";
def << "#define AE_maximal_reconvergence 1\n";
}
if ( quad_ctrl.IsTrue() )
{
- ext << "#extension GL_EXT_shader_quad_control : require\n";
+ ext << "#extension GL_EXT_shader_quad_control : require\n";
def << "#define AE_shader_quad_control 1\n";
}
@@ -741,6 +741,62 @@ namespace AE::PipelineCompiler
def << "#define AE_shader_draw_parameters 1\n"; // allow gl_BaseInstanceARB, gl_BaseVertexARB, gl_DrawIDARB
}
+ // vendor
+ {
+ EnumSet include_ids;
+ EnumSet exclude_ids;
+ for (auto& ptr : features) {
+ include_ids |= ptr->fs.vendorIds.include;
+ exclude_ids |= ptr->fs.vendorIds.exclude;
+ }
+ include_ids &= ~exclude_ids;
+
+ for (auto id : include_ids)
+ {
+ switch_enum( id )
+ {
+ case EGPUVendor::AMD : def << "#define AE_AMD_GPU 1\n"; break;
+ case EGPUVendor::NVidia : def << "#define AE_NVidia_GPU 1\n"; break;
+ case EGPUVendor::Intel : def << "#define AE_Intel_GPU 1\n"; break;
+ case EGPUVendor::ARM : def << "#define AE_ARM_Mali_GPU 1\n"; break;
+ case EGPUVendor::Qualcomm : def << "#define AE_Qualcomm_Adreno_GPU 1\n"; break;
+ case EGPUVendor::ImgTech : def << "#define AE_IMG_PowerVR_GPU 1\n"; break;
+ case EGPUVendor::Microsoft : def << "#define AE_Microsoft_GPU 1\n"; break;
+ case EGPUVendor::Apple : def << "#define AE_Apple_GPU 1\n"; break;
+ case EGPUVendor::Mesa : def << "#define AE_Mesa_GPU_driver 1\n"; break;
+ case EGPUVendor::Broadcom : def << "#define AE_Broadcom_GPU 1\n"; break;
+ case EGPUVendor::Samsung : def << "#define AE_Samsung_GPU 1\n"; break;
+ case EGPUVendor::VeriSilicon : def << "#define AE_VeriSilicon_GPU 1\n"; break;
+ case EGPUVendor::Huawei : def << "#define AE_Huawei_GPU 1\n"; break;
+ case EGPUVendor::_Count : break;
+ }
+ switch_end
+ }
+ }
+
+ // device family
+ {
+ EnumSet include_ids;
+ EnumSet exclude_ids;
+ for (auto& ptr : features) {
+ include_ids |= ptr->fs.devicesIds.include;
+ exclude_ids |= ptr->fs.devicesIds.exclude;
+ }
+ include_ids &= ~exclude_ids;
+
+ for (auto id : include_ids)
+ {
+ switch_enum( id )
+ {
+ #define VISITOR( _name_ ) case EGraphicsDeviceID::_name_ : def << "#define AE_device_family_" << #_name_ << " 1\n"; break;
+ AE_GRAPHICS_DEVICE_LIST( VISITOR )
+ #undef VISITOR
+ case EGraphicsDeviceID::_Count : break;
+ }
+ switch_end
+ }
+ }
+
ext << '\n' << def << '\n';
return ext;
}
diff --git a/AE/engine/tools/res_pack/pipeline_compiler/ScriptObjects/ScriptFeatureSet.h b/AE/engine/tools/res_pack/pipeline_compiler/ScriptObjects/ScriptFeatureSet.h
index 9f80b1f5..44a96940 100644
--- a/AE/engine/tools/res_pack/pipeline_compiler/ScriptObjects/ScriptFeatureSet.h
+++ b/AE/engine/tools/res_pack/pipeline_compiler/ScriptObjects/ScriptFeatureSet.h
@@ -47,6 +47,7 @@ namespace AE::PipelineCompiler
ND_ StringView Name () const { return _name; }
ND_ auto Hash () const { return _hash; }
+ ND_ bool IsIncomplete () const { return StartsWith( _name, "part." ); }
static void Minimize (INOUT Array &feats);
diff --git a/AE/samples/res_editor/CMakeLists.txt b/AE/samples/res_editor/CMakeLists.txt
index 70911a7f..966c73b9 100644
--- a/AE/samples/res_editor/CMakeLists.txt
+++ b/AE/samples/res_editor/CMakeLists.txt
@@ -3,15 +3,9 @@
if ((TARGET "Scripting") AND (TARGET "PipelineCompiler") AND (TARGET "ResourceLoaders") AND AE_HAS_CXX_COROUTINE)
file( GLOB_RECURSE LIB_SOURCES "*.h" "*.cpp" "*.md" )
- file( GLOB_RECURSE DATA_FILES "*.as" "*.glsl" "*.msl" )
+ file( GLOB_RECURSE DATA_FILES "_ui_data/*.*" )
- file( GLOB_RECURSE SHADERS_SHARED "${AE_ENGINE_SHARED_DATA}/shaders/*.glsl" )
- file( GLOB_RECURSE SHADERS_3PARTY "${AE_ENGINE_SHARED_DATA}/3party_shaders/*.glsl" "${AE_ENGINE_SHARED_DATA}/experimental/*.glsl" )
-
- if (MSVC)
- file( GLOB_RECURSE CONFIGS "${MAIN_BINARY_DIR}/*/res_editor_cfg.as" )
- endif()
- set( SOURCES ${LIB_SOURCES} ${DATA_FILES} ${SHADERS_SHARED} ${SHADERS_3PARTY} ${CONFIGS} )
+ set( SOURCES ${LIB_SOURCES} ${DATA_FILES} )
if (APPLE)
add_executable( "ResourceEditor" MACOSX_BUNDLE ${SOURCES} )
@@ -19,20 +13,12 @@ if ((TARGET "Scripting") AND (TARGET "PipelineCompiler") AND (TARGET "ResourceLo
add_executable( "ResourceEditor" ${SOURCES} )
endif()
- source_group( TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${LIB_SOURCES} ${DATA_FILES} )
- source_group( "_data/shaders/shared" FILES ${SHADERS_SHARED} )
- source_group( "_data/shaders/3party" FILES ${SHADERS_3PARTY} )
- source_group( "_data/config" FILES ${CONFIGS} )
+ source_group( TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${SOURCES} )
set_property( TARGET "ResourceEditor" PROPERTY FOLDER "Samples" )
target_include_directories( "ResourceEditor" PUBLIC
".."
"${MAIN_SOURCE_DIR}/engine/tools/res_pack/asset_packer/Utils"
- "${AE_ENGINE_SHARED_DATA}/scripts"
- "${AE_ENGINE_SHARED_DATA}/shaders"
- "${CMAKE_CURRENT_SOURCE_DIR}/_data/shaders"
- "${CMAKE_CURRENT_SOURCE_DIR}/_data/script_inc"
- "${CMAKE_CURRENT_SOURCE_DIR}/_data/pipeline_inc"
)
EnablePCH( "ResourceEditor" )
@@ -58,7 +44,7 @@ if ((TARGET "Scripting") AND (TARGET "PipelineCompiler") AND (TARGET "ResourceLo
AE_LOCAL_DATA_FOLDER="${CMAKE_CURRENT_SOURCE_DIR}/_data"
)
- if (DEFINED AE_RES_EDITOR_RELEASE)
+ if (${AE_RES_EDITOR_RELEASE})
target_compile_definitions( "ResourceEditor" PUBLIC "AE_PUBLIC_VERSION=true" )
else()
target_compile_definitions( "ResourceEditor" PUBLIC "AE_PUBLIC_VERSION=false" )
@@ -80,4 +66,5 @@ if ((TARGET "Scripting") AND (TARGET "PipelineCompiler") AND (TARGET "ResourceLo
add_dependencies( "PACK_RES" "ResourceEditor.PackRes" )
endif()
+ add_subdirectory( "_data" )
endif()
diff --git a/AE/samples/res_editor/Core/EditorCore.cpp b/AE/samples/res_editor/Core/EditorCore.cpp
index fdac1304..e68262cb 100644
--- a/AE/samples/res_editor/Core/EditorCore.cpp
+++ b/AE/samples/res_editor/Core/EditorCore.cpp
@@ -545,15 +545,17 @@ void main (Config &out cfg)
str << R"(
// tests //
- //cfg.TestOutput( vfs_path + "/samples/res_editor/ref" );
- //cfg.TestFolder( "callable" );
- //cfg.TestFolder( "games" );
- //cfg.TestFolder( "samples-2d" );
- //cfg.TestFolder( "samples-3d" );
- //cfg.TestFolder( "samples-rt" );
- //cfg.TestFolder( "sphere" );
- //cfg.TestFolder( "tests" );
- //cfg.TestFolder( "tools" );
+ /*
+ cfg.TestOutput( vfs_path + "/samples/res_editor/ref" );
+ cfg.TestFolder( "callable" );
+ cfg.TestFolder( "games" );
+ cfg.TestFolder( "samples-2d" );
+ cfg.TestFolder( "samples-3d" );
+ cfg.TestFolder( "samples-rt" );
+ cfg.TestFolder( "sphere" );
+ cfg.TestFolder( "tests" );
+ cfg.TestFolder( "tools" );
+ //*/
}
)";
diff --git a/AE/samples/res_editor/Resources/Image.cpp b/AE/samples/res_editor/Resources/Image.cpp
index bba0ceb3..5113c378 100644
--- a/AE/samples/res_editor/Resources/Image.cpp
+++ b/AE/samples/res_editor/Resources/Image.cpp
@@ -738,6 +738,8 @@ namespace {
desc.mipLevels = MipmapLevel::Max();
view_desc.mipmapCount = UMax;
}
+ if ( _isDummy.load() )
+ view_desc.format = desc.format;
desc.Validate();
view_desc.Validate( desc );
diff --git a/AE/samples/res_editor/Scripting/ScriptExe.h b/AE/samples/res_editor/Scripting/ScriptExe.h
index 577af917..d2841691 100644
--- a/AE/samples/res_editor/Scripting/ScriptExe.h
+++ b/AE/samples/res_editor/Scripting/ScriptExe.h
@@ -417,7 +417,6 @@ namespace AE::ResEditor
friend class ScriptRTGeometry;
friend class ScriptRTScene;
friend class ScriptModelGeometrySrc;
- friend class ScriptChunkedTerrain;
ND_ static Renderer& GetRenderer () __Th___;
ND_ static bool IsPassGroup (const ScriptBasePassPtr &pass) __NE___;
@@ -466,7 +465,6 @@ AE_DECL_SCRIPT_OBJ_RC( AE::ResEditor::ScriptGeomSource, "GeomSource" );
AE_DECL_SCRIPT_OBJ_RC( AE::ResEditor::ScriptSphericalCube, "SphericalCube" );
AE_DECL_SCRIPT_OBJ_RC( AE::ResEditor::ScriptUniGeometry, "UnifiedGeometry" );
AE_DECL_SCRIPT_OBJ_RC( AE::ResEditor::ScriptModelGeometrySrc, "Model" );
-AE_DECL_SCRIPT_OBJ_RC( AE::ResEditor::ScriptChunkedTerrain, "ChunkedTerrain" );
AE_DECL_SCRIPT_OBJ( AE::ResEditor::ScriptUniGeometry::DrawCmd3, "UnifiedGeometry_Draw" );
AE_DECL_SCRIPT_OBJ( AE::ResEditor::ScriptUniGeometry::DrawIndexedCmd3, "UnifiedGeometry_DrawIndexed" );
diff --git a/AE/samples/res_editor/_data/CMakeLists.txt b/AE/samples/res_editor/_data/CMakeLists.txt
new file mode 100644
index 00000000..c0cf51ea
--- /dev/null
+++ b/AE/samples/res_editor/_data/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright (c) Zhirnov Andrey. For more information see 'LICENSE'
+
+cmake_minimum_required( VERSION 3.18 FATAL_ERROR )
+project( "ResourceEditor" )
+
+file( GLOB_RECURSE DATA_FILES "*.as" "*.glsl" "*.msl" )
+
+file( GLOB_RECURSE SHADERS_SHARED "${AE_ENGINE_SHARED_DATA}/shaders/*.glsl" )
+file( GLOB_RECURSE SHADERS_3PARTY "${AE_ENGINE_SHARED_DATA}/3party_shaders/*.glsl" "${AE_ENGINE_SHARED_DATA}/experimental/*.glsl" )
+
+if (WIN32)
+ file( GLOB CONFIGS "${MAIN_BINARY_DIR}/*/res_editor_cfg.as" )
+else()
+ file( GLOB CONFIGS "${MAIN_BINARY_DIR}/res_editor_cfg.as" )
+endif()
+set( SOURCES ${DATA_FILES} ${SHADERS_SHARED} ${SHADERS_3PARTY} ${CONFIGS} )
+
+add_library( "ResourceEditor.Data" STATIC EXCLUDE_FROM_ALL ${SOURCES} ${PREBUILD_CPP_FILE} )
+set_property( TARGET "ResourceEditor.Data" PROPERTY LINKER_LANGUAGE CXX )
+
+if (TARGET "ResourceEditor")
+ set_property( TARGET "ResourceEditor.Data" PROPERTY FOLDER "Samples" )
+else()
+ if (WIN32)
+ add_custom_target( "ResourceEditor"
+ COMMAND "../ResourceEditor.exe"
+ )
+ else()
+ add_custom_target( "ResourceEditor"
+ COMMAND "../ResourceEditor"
+ )
+ endif()
+endif()
+
+source_group( TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${DATA_FILES} )
+source_group( "shaders/shared" FILES ${SHADERS_SHARED} )
+source_group( "shaders/3party" FILES ${SHADERS_3PARTY} )
+source_group( "config" FILES ${CONFIGS} )
+
+target_include_directories( "ResourceEditor.Data" PUBLIC
+ "${CMAKE_CURRENT_SOURCE_DIR}/shaders"
+ "${CMAKE_CURRENT_SOURCE_DIR}/script_inc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/pipeline_inc"
+ "${AE_ENGINE_SHARED_DATA}/scripts"
+ "${AE_ENGINE_SHARED_DATA}/shaders"
+)
diff --git a/AE/samples/res_editor/_data/scripts/callable/GenParallaxCubemap.as b/AE/samples/res_editor/_data/scripts/callable/GenParallaxCubemap.as
index 3ab4c35e..ae78dd07 100644
--- a/AE/samples/res_editor/_data/scripts/callable/GenParallaxCubemap.as
+++ b/AE/samples/res_editor/_data/scripts/callable/GenParallaxCubemap.as
@@ -62,7 +62,7 @@
{
float2 ncoord = float2(coord + offset) / float2(GetGlobalSize().xy);
float3 sphere_pos = CM_TangentialSC_Forward( ToSNorm(ncoord), FaceIdx() );
- float dist = Voronoi( sphere_pos * 8.0, float2(3.9672) ).minDist;
+ float dist = Voronoi( sphere_pos * 8.0, float3(3.9672, 0.0, 1.0) ).minDist;
dist = Saturate( 0.5 - dist );
return float4( sphere_pos * (1.0 + dist * iHeightScale), dist );
}
diff --git a/AE/samples/res_editor/_data/scripts/callable/GenPlanet.as b/AE/samples/res_editor/_data/scripts/callable/GenPlanet.as
index 93298800..e249723d 100644
--- a/AE/samples/res_editor/_data/scripts/callable/GenPlanet.as
+++ b/AE/samples/res_editor/_data/scripts/callable/GenPlanet.as
@@ -211,7 +211,7 @@
sphere_pos *= 8.0;
sphere_pos += Turbulence_PerlinNoiseFBM( sphere_pos, 2.0, 0.6, 7 ) * 2.0;
- float biom = DHash13( Voronoi( sphere_pos, float2(3.9672) ).icenter );
+ float biom = DHash13( Voronoi( sphere_pos, float3(3.9672, 0.0, 1.0) ).icenter );
int mtr_id = int(biom * 255.0f) & 0xF;
albedo = HSVtoRGB( float3( biom, 1.0, 1.0 ));
diff --git a/AE/samples/res_editor/_data/scripts/samples-3d/Cubemap-2.as b/AE/samples/res_editor/_data/scripts/samples-3d/Cubemap-2.as
index 31b2e11e..034e4de9 100644
--- a/AE/samples/res_editor/_data/scripts/samples-3d/Cubemap-2.as
+++ b/AE/samples/res_editor/_data/scripts/samples-3d/Cubemap-2.as
@@ -115,7 +115,7 @@
pos *= 8.0;
pos += Turbulence_PerlinNoiseFBM( pos, 2.0, 0.6, 7 );
- float hash = DHash13( Voronoi( pos, float2(3.9672) ).icenter );
+ float hash = DHash13( Voronoi( pos, float3(3.9672, 0.0, 1.0) ).icenter );
gl.image.Store( un_OutImage, coord, Rainbow(hash) );
}
diff --git a/AE/samples/res_editor/_data/scripts/samples-3d/RenderToCubemap.as b/AE/samples/res_editor/_data/scripts/samples-3d/RenderToCubemap.as
index 78a9c18a..690c0e33 100644
--- a/AE/samples/res_editor/_data/scripts/samples-3d/RenderToCubemap.as
+++ b/AE/samples/res_editor/_data/scripts/samples-3d/RenderToCubemap.as
@@ -23,11 +23,13 @@
camera.ClipPlanes( 0.1f, 100.f );
camera.FovY( 60.f );
- const float s = 1.0f;
+ const float s = 2.0f;
camera.ForwardBackwardScale( s*2.0f, s );
camera.UpDownScale( s );
camera.SideMovementScale( s );
+ camera.RotationScale( 2.0, 1.0 );
+
camera.Dimension( rt.Dimension() );
scene.Set( camera );
diff --git a/AE/samples/res_editor/_data/scripts/tests/ImageExport-CubeMap.as b/AE/samples/res_editor/_data/scripts/tests/ImageExport-CubeMap.as
index c1beb9e3..462b31d6 100644
--- a/AE/samples/res_editor/_data/scripts/tests/ImageExport-CubeMap.as
+++ b/AE/samples/res_editor/_data/scripts/tests/ImageExport-CubeMap.as
@@ -114,7 +114,7 @@
pos *= 8.0;
pos += Turbulence_PerlinNoiseFBM( pos, 2.0, 0.6, 7 );
- float hash = DHash13( Voronoi( pos, float2(3.9672) ).icenter );
+ float hash = DHash13( Voronoi( pos, float3(3.9672, 0.0, 1.0) ).icenter );
gl.image.Store( un_OutImage, coord, Rainbow(hash) );
}
diff --git a/AE/samples/res_editor/_data/scripts/tests/sRGB-Upscale.as b/AE/samples/res_editor/_data/scripts/tests/sRGB-Upscale.as
index d3726af1..648d7f65 100644
--- a/AE/samples/res_editor/_data/scripts/tests/sRGB-Upscale.as
+++ b/AE/samples/res_editor/_data/scripts/tests/sRGB-Upscale.as
@@ -62,7 +62,7 @@
{
int2 coord = GetGlobalCoord().xy / 4;
float4 srgb_col = Rainbow( DHash12( float2(coord) )); // sRGB color space
- float4 linear_col = RemoveSRGBCurve( col ); // linear color space
+ float4 linear_col = RemoveSRGBCurve( srgb_col ); // linear color space
out_Color0 = srgb_col; // store in sRGB
out_Color1 = linear_col; // write in linear space, store in sRGB
diff --git a/AE/samples/res_editor/_data/scripts/tools/noise/Circle.as b/AE/samples/res_editor/_data/scripts/tools/noise/Circle.as
index 5b720167..2d3302f9 100644
--- a/AE/samples/res_editor/_data/scripts/tools/noise/Circle.as
+++ b/AE/samples/res_editor/_data/scripts/tools/noise/Circle.as
@@ -28,7 +28,7 @@
RC pass = Postprocess();
pass.Output( "out_Color", rt );
- pass.Slider( "iNoise", 0, 21, int(params[0]) );
+ pass.Slider( "iNoise", 0, 16, int(params[0]) );
pass.Slider( "iOctaves", 1, 10, int(params[1]) );
pass.Slider( "iPScale", 0.1f, 100.f, params[2] );
@@ -46,18 +46,79 @@
//-----------------------------------------------------------------------------
#ifdef SH_FRAG
#include "SDF.glsl"
+ #include "Noise.glsl"
#include "GlobalIndex.glsl"
- #define NOISE_3D_FBM iNoise_max
- #define CIRCLE_NOISE
- #include "Tools-Noise.glsl"
+ FBM_NOISE_Hash( GradientNoise )
+ FBM_NOISE_Hash( ValueNoise )
+ FBM_NOISE_Hash( PerlinNoise )
+ FBM_NOISE_Hash( SimplexNoise )
+ FBM_NOISE_Hash( IQNoise )
+ FBM_NOISE_Hash( WarleyNoise )
+ FBM_NOISE_Hash( VoronoiContour )
- float Noise (float a)
+ FBM_NOISE_A1_Hash( IQNoise, float2, uv )
+ FBM_NOISE_A1_Hash( WarleyNoise, float3, seedScaleBias_offsetScale )
+ FBM_NOISE_A1_Hash( VoronoiContour, float3, seedScaleBias_offsetScale )
+ FBM_NOISE_A2_Hash( VoronoiContour3, float3, seedScaleBias_offsetScale, float3, hashScaleBiasOff )
+
+
+ ND_ float Noise (float a)
{
- float2 uv = float2( iU.x * iU.y, iVV.x * iVV.y );
- float lac = iLacunarity.x * iLacunarity.y;
- float pers = iPersistence.x * iPersistence.y;
- return Noise2( float3(a, 0.f, 0.f), iPScale, iPBias, iNoise, uv, iVScaleBias, lac, pers, iOctaves );
+ float3 pos = (float3(a, 0.f, 0.f) * iPScale) + (iPBias * iPScale * float3(0.25, 0.25, 0.1));
+
+ float n = 0.f;
+ float c = 0.f;
+
+ const float lac = iLacunarity.x * iLacunarity.y;
+ const float pers = iPersistence.x * iPersistence.y;
+ const float3 uv = float3( iU.x * iU.y, iVV.x * iVV.y, 0.f );
+ const float vcos = 0.75; // scale for voronoi cell offset
+ const float3 uv2 = float3( uv.xy, vcos );
+
+ #if iNoise_max != 16
+ # error iNoise max value must be 16
+ #endif
+ #define CastUNorm c = n * iVScaleBias.x + iVScaleBias.y;
+ #define CastSNorm c = ToUNorm( n * iVScaleBias.x + iVScaleBias.y );
+
+ switch ( iNoise )
+ {
+ case 0 : n = GradientNoise( pos ); CastSNorm; break;
+ case 1 : n = ValueNoise( pos ); CastSNorm; break;
+ case 2 : n = PerlinNoise( pos ); CastSNorm; break;
+ case 3 : n = SimplexNoise( pos * 0.5 ); CastSNorm; break;
+ case 4 : n = IQNoise( pos * 2.0, uv.xy ); CastSNorm; break;
+ case 5 : n = Voronoi( pos, uv2 ).minDist; CastUNorm; break;
+ case 6 : n = VoronoiContour( pos, uv2 ); CastUNorm; break;
+ case 7 : n = WarleyNoise( pos, uv2 ); CastUNorm; break;
+ case 8 : n = VoronoiContour3( pos, float3(1.0,0.0,vcos), uv.xzy ); CastSNorm; break;
+
+ // FBM
+ case 9 : n = GradientNoiseFBM( pos, lac, pers, iOctaves ); CastSNorm; break;
+ case 10 : n = ValueNoiseFBM( pos, lac, pers, iOctaves ); CastSNorm; break;
+ case 11 : n = PerlinNoiseFBM( pos, lac, pers, iOctaves ); CastSNorm; break;
+ case 12 : n = SimplexNoiseFBM( pos * 0.5, lac, pers, iOctaves ); CastSNorm; break;
+ case 13 : n = WarleyNoiseFBM( pos, uv2, lac, pers, iOctaves ); CastUNorm; break;
+ case 14 : n = IQNoiseFBM( pos * 2.0, uv.xy, lac, pers, iOctaves ); CastUNorm; break;
+ case 15 : n = VoronoiContourFBM( pos, uv2, lac, pers, iOctaves ); CastUNorm; break;
+ case 16 : n = VoronoiContour3FBM( pos, float3(1.0,0.0,vcos), uv.xzy, lac, pers, iOctaves ); CastSNorm; break;
+ }
+ return c;
+ }
+
+ ND_ float CircleNoise (const float2 uv)
+ {
+ float a = ATan( -uv.y, -uv.x );
+
+ float n0 = Noise( a );
+ float n1 = (n0 + Noise( -a )) * 0.5;
+
+ const float start_blend = 0.8f;
+ float b = Abs( a ) * float_InvPi;
+ b = RemapSmooth( float2(start_blend, 1.0), float2(0.0, 1.0), b );
+
+ return Lerp( n0, n1, b );
}
void Main ()
diff --git a/AE/samples/res_editor/docs/Samples.md b/AE/samples/res_editor/docs/Samples.md
index 5509f0b6..23669e94 100644
--- a/AE/samples/res_editor/docs/Samples.md
+++ b/AE/samples/res_editor/docs/Samples.md
@@ -21,7 +21,7 @@ Content:
* [Material Depth Buffer](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-2d/MaterialDepthBuffer.as)
* [Anti aliased grid](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-2d/AA-Grid.as)
* [Gravity lens simulation](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-2d/GravityLens.as)
-* ![](img/GravityLens.jpg)
+![](img/GravityLens.jpg)
**Extensions:**
* [Subgroups](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-2d/Subgroups.as)
@@ -68,7 +68,8 @@ Supported precalculated TBN and screen-space TBN calculation. Debug drawing for
* [glTF scene rendering](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-3d/Model-1.as)
* [glTF scene rendering with deferred texturing](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-3d/DeferredTexturing.as)
* [SDF and MSDF font on 3D plane](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-3d/SdfFont.as)
-* [Render scene to the cubemap and apply fisheye projection](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-3d/RenderToCubemap.as)
+* [Frustum culling](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-3d/FrustumCulling.as)
+* [Render scene to the cubemap and apply different projections](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/samples-3d/RenderToCubemap.as)
![](img/RenderToCubemap.jpg)
**Extensions:**
@@ -186,6 +187,6 @@ ResEditor allows to create game prototypes.
**sRGB**
* [gamma-correct blending](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/tests/sRGB-Blend.as), [v2](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/tests/sRGB-Blend2.as)
-* [gamma-correct upscale](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/testssRGB-Upscale.as)
+* [gamma-correct upscale](https://github.com/azhirnov/as-en/blob/dev/AE/samples/res_editor/_data/scripts/tests/sRGB-Upscale.as)
![](img/sRGB-Upscale.png)
diff --git a/Readme.md b/Readme.md
index 261c675d..93b04576 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,7 +1,7 @@
-![](https://github.com/azhirnov/as-en/actions/workflows/windows.yml/badge.svg)
-![](https://github.com/azhirnov/as-en/actions/workflows/linux.yml/badge.svg)
-![](https://github.com/azhirnov/as-en/actions/workflows/android.yml/badge.svg)
-![](https://github.com/azhirnov/as-en/actions/workflows/macos.yml/badge.svg)
+[![](https://github.com/azhirnov/as-en/actions/workflows/windows.yml/badge.svg)](https://github.com/azhirnov/as-en/actions/workflows/windows.yml)
+[![](https://github.com/azhirnov/as-en/actions/workflows/linux.yml/badge.svg)](https://github.com/azhirnov/as-en/actions/workflows/linux.yml)
+[![](https://github.com/azhirnov/as-en/actions/workflows/android.yml/badge.svg)](https://github.com/azhirnov/as-en/actions/workflows/android.yml)
+[![](https://github.com/azhirnov/as-en/actions/workflows/macos.yml/badge.svg)](https://github.com/azhirnov/as-en/actions/workflows/macos.yml)
## Async Game Engine