diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8302aec5ce..8940b6ae39 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -1,194 +1,194 @@ name: build Community Shaders and addons on: - push: - tags: - - "v*" - workflow_dispatch: - inputs: - cache-key-suffix: - description: "Optional suffix to invalidate the build cache" - required: false - pull_request_target: - paths: - - "**.cpp" - - "**.h" - - "**.hpp" - - "**.c" - - "CMakeLists.txt" - - "CMakePresets.json" - - "vcpkg.json" - - "vcpkg-configuration.json" - - ".gitmodules" - - "extern/**" + push: + tags: + - "v*" + workflow_dispatch: + inputs: + cache-key-suffix: + description: "Optional suffix to invalidate the build cache" + required: false + pull_request_target: + paths: + - "**.cpp" + - "**.h" + - "**.hpp" + - "**.c" + - "CMakeLists.txt" + - "CMakePresets.json" + - "vcpkg.json" + - "vcpkg-configuration.json" + - ".gitmodules" + - "extern/**" permissions: - contents: read - pull-requests: read + contents: read + pull-requests: read jobs: - build: - if: > - github.event_name != 'pull_request_target' || - github.event.pull_request.draft == false || - contains(github.event.pull_request.labels.*.name, 'force-build') - name: Build plugin and addons - runs-on: windows-latest - permissions: - contents: read - outputs: - version: ${{ steps.get_version.outputs.version }} - steps: - - name: Checkout PR code - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.ref }} - repository: ${{ github.event.pull_request.head.repo.full_name }} - submodules: recursive - - - uses: ilammy/msvc-dev-cmd@v1.10.0 - - - uses: lukka/run-vcpkg@v11.5 - with: - vcpkgJsonGlob: vcpkg.json - - - name: Cache CMake build output - uses: actions/cache@v4 - with: - path: build/ALL - key: ${{ runner.os }}-build-${{ inputs.cache-key-suffix || 'default' }}-${{ hashFiles('.gitmodules', 'extern/**', 'CMakePresets.json', 'vcpkg.json', 'vcpkg-configuration.json') }} - restore-keys: | - ${{ runner.os }}-build-${{ inputs.cache-key-suffix || 'default' }}- - ${{ runner.os }}-build- - - - name: Build using run-cmake with ALL preset - uses: lukka/run-cmake@v10 - with: - configurePreset: ALL - buildPreset: ALL - - - name: Extract version from CMake - id: get_version - shell: bash - run: | - VERSION=$(grep 'CMAKE_PROJECT_VERSION:STATIC' build/ALL/CMakeCache.txt | cut -d= -f2) - echo "version=$VERSION" >> $GITHUB_OUTPUT - - - name: Upload dist artifacts - if: success() - uses: actions/upload-artifact@v4 - with: - name: dist-artifacts - path: dist/ - - prerelease: - if: github.event_name == 'pull_request_target' - needs: build - runs-on: windows-latest - permissions: - contents: write - pull-requests: write - steps: - - name: Download dist artifacts - uses: actions/download-artifact@v4 - with: - name: dist-artifacts - path: dist/ - - - name: Generate release notes comparing against base version tag - id: gen_notes - continue-on-error: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - shell: bash - run: | - TAG="v${{ needs.build.outputs.version }}-pr${{ github.event.pull_request.number }}" - BASE_TAG="v${{ needs.build.outputs.version }}" - REPO="${{ github.repository }}" - BASE_SHA="${{ github.event.pull_request.base.sha }}" - HEAD_SHA="${{ github.event.pull_request.head.sha }}" - PR_NUMBER="${{ github.event.pull_request.number }}" - PR_URL="https://github.com/$REPO/pull/$PR_NUMBER" - - # Get PR author with fallback - if PR_AUTHOR=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json author -q '.author.login' 2>/dev/null); then - echo "✅ Found PR author: $PR_AUTHOR" - else - PR_AUTHOR="${{ github.event.pull_request.user.login }}" - echo "⚠️ Using fallback PR author: $PR_AUTHOR" - fi - - echo "🔍 Comparing $BASE_SHA...$HEAD_SHA" - - # Generate commit-based release notes - if NOTES=$(gh api repos/$REPO/compare/$BASE_SHA...$HEAD_SHA 2>/dev/null | jq -r --arg author "$PR_AUTHOR" ' - .commits[] - | "- \(.commit.message | split("\n")[0]) by @\(.author.login // $author)" - ' 2>/dev/null) && [[ -n "$NOTES" ]]; then - echo "$NOTES" > release-notes.md - echo -e "\n[View Pull Request]($PR_URL)" >> release-notes.md - echo "notes_generated=true" >> "$GITHUB_OUTPUT" - echo "✅ Generated custom release notes" - else - echo "⚠️ Failed to generate notes from commit diff. Will use GitHub autogeneration." >&2 - echo "notes_generated=false" >> "$GITHUB_OUTPUT" - fi - - - name: Upload prerelease (custom notes) - if: steps.gen_notes.outputs.notes_generated == 'true' - uses: ncipollo/release-action@v1 - with: - name: "Community Shaders ${{ needs.build.outputs.version }} PR #${{ github.event.pull_request.number }}" - tag: v${{ needs.build.outputs.version }}-pr${{ github.event.pull_request.number }} - prerelease: true - artifacts: "${{ github.workspace }}/dist/CommunityShaders_AIO-*.7z" - bodyFile: release-notes.md - allowUpdates: true - replacesArtifacts: true - removeArtifacts: true - - - name: Upload prerelease (auto-generated notes) - if: steps.gen_notes.outputs.notes_generated != 'true' - uses: ncipollo/release-action@v1 - with: - name: "Community Shaders ${{ needs.build.outputs.version }} PR #${{ github.event.pull_request.number }}" - tag: v${{ needs.build.outputs.version }}-pr${{ github.event.pull_request.number }} - prerelease: true - artifacts: "${{ github.workspace }}/dist/CommunityShaders_AIO-*.7z" - generateReleaseNotes: true - allowUpdates: true - replacesArtifacts: true - removeArtifacts: true - - - name: Comment on PR - if: success() - uses: thollander/actions-comment-pull-request@v3 - with: - mode: upsert - message: | - ✅ A pre-release build is available for this PR: - [Download](https://github.com/${{ github.repository }}/releases/tag/v${{ needs.build.outputs.version }}-pr${{ github.event.pull_request.number }}) - - release: - needs: build - if: github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/v') - runs-on: windows-latest - permissions: - contents: write - steps: - - name: Download dist artifacts - uses: actions/download-artifact@v4 - with: - name: dist-artifacts - path: dist/ - - - name: Create tagged release - uses: ncipollo/release-action@v1 - with: - name: "Community Shaders ${{ github.ref_name }}" - draft: true - tag: ${{ github.ref_name }} - artifacts: "${{ github.workspace }}/dist/*.7z" - generateReleaseNotes: true - replacesArtifacts: true - removeArtifacts: true + build: + if: > + github.event_name != 'pull_request_target' || + github.event.pull_request.draft == false || + contains(github.event.pull_request.labels.*.name, 'force-build') + name: Build plugin and addons + runs-on: windows-latest + permissions: + contents: read + outputs: + version: ${{ steps.get_version.outputs.version }} + steps: + - name: Checkout PR code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + submodules: recursive + + - uses: ilammy/msvc-dev-cmd@v1.10.0 + + - uses: lukka/run-vcpkg@v11.5 + with: + vcpkgJsonGlob: vcpkg.json + + - name: Cache CMake build output + uses: actions/cache@v4 + with: + path: build/ALL + key: ${{ runner.os }}-build-${{ inputs.cache-key-suffix || 'default' }}-${{ hashFiles('.gitmodules', 'extern/**', 'CMakePresets.json', 'vcpkg.json', 'vcpkg-configuration.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ inputs.cache-key-suffix || 'default' }}- + ${{ runner.os }}-build- + + - name: Build using run-cmake with ALL preset + uses: lukka/run-cmake@v10 + with: + configurePreset: ALL + buildPreset: ALL + + - name: Extract version from CMake + id: get_version + shell: bash + run: | + VERSION=$(grep 'CMAKE_PROJECT_VERSION:STATIC' build/ALL/CMakeCache.txt | cut -d= -f2) + echo "version=$VERSION" >> $GITHUB_OUTPUT + + - name: Upload dist artifacts + if: success() + uses: actions/upload-artifact@v4 + with: + name: dist-artifacts + path: dist/ + + prerelease: + if: github.event_name == 'pull_request_target' + needs: build + runs-on: windows-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Download dist artifacts + uses: actions/download-artifact@v4 + with: + name: dist-artifacts + path: dist/ + + - name: Generate release notes comparing against base version tag + id: gen_notes + continue-on-error: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + TAG="v${{ needs.build.outputs.version }}-pr${{ github.event.pull_request.number }}" + BASE_TAG="v${{ needs.build.outputs.version }}" + REPO="${{ github.repository }}" + BASE_SHA="${{ github.event.pull_request.base.sha }}" + HEAD_SHA="${{ github.event.pull_request.head.sha }}" + PR_NUMBER="${{ github.event.pull_request.number }}" + PR_URL="https://github.com/$REPO/pull/$PR_NUMBER" + + # Get PR author with fallback + if PR_AUTHOR=$(gh pr view "$PR_NUMBER" --repo "$REPO" --json author -q '.author.login' 2>/dev/null); then + echo "✅ Found PR author: $PR_AUTHOR" + else + PR_AUTHOR="${{ github.event.pull_request.user.login }}" + echo "⚠️ Using fallback PR author: $PR_AUTHOR" + fi + + echo "🔍 Comparing $BASE_SHA...$HEAD_SHA" + + # Generate commit-based release notes + if NOTES=$(gh api repos/$REPO/compare/$BASE_SHA...$HEAD_SHA 2>/dev/null | jq -r --arg author "$PR_AUTHOR" ' + .commits[] + | "- \(.commit.message | split("\n")[0]) by @\(.author.login // $author)" + ' 2>/dev/null) && [[ -n "$NOTES" ]]; then + echo "$NOTES" > release-notes.md + echo -e "\n[View Pull Request]($PR_URL)" >> release-notes.md + echo "notes_generated=true" >> "$GITHUB_OUTPUT" + echo "✅ Generated custom release notes" + else + echo "⚠️ Failed to generate notes from commit diff. Will use GitHub autogeneration." >&2 + echo "notes_generated=false" >> "$GITHUB_OUTPUT" + fi + + - name: Upload prerelease (custom notes) + if: steps.gen_notes.outputs.notes_generated == 'true' + uses: ncipollo/release-action@v1 + with: + name: "Community Shaders ${{ needs.build.outputs.version }} PR #${{ github.event.pull_request.number }}" + tag: v${{ needs.build.outputs.version }}-pr${{ github.event.pull_request.number }} + prerelease: true + artifacts: "${{ github.workspace }}/dist/CommunityShaders_AIO-*.7z" + bodyFile: release-notes.md + allowUpdates: true + replacesArtifacts: true + removeArtifacts: true + + - name: Upload prerelease (auto-generated notes) + if: steps.gen_notes.outputs.notes_generated != 'true' + uses: ncipollo/release-action@v1 + with: + name: "Community Shaders ${{ needs.build.outputs.version }} PR #${{ github.event.pull_request.number }}" + tag: v${{ needs.build.outputs.version }}-pr${{ github.event.pull_request.number }} + prerelease: true + artifacts: "${{ github.workspace }}/dist/CommunityShaders_AIO-*.7z" + generateReleaseNotes: true + allowUpdates: true + replacesArtifacts: true + removeArtifacts: true + + - name: Comment on PR + if: success() + uses: thollander/actions-comment-pull-request@v3 + with: + mode: upsert + message: | + ✅ A pre-release build is available for this PR: + [Download](https://github.com/${{ github.repository }}/releases/tag/v${{ needs.build.outputs.version }}-pr${{ github.event.pull_request.number }}) + + release: + needs: build + if: github.event_name == 'workflow_dispatch' || startsWith(github.ref, 'refs/tags/v') + runs-on: windows-latest + permissions: + contents: write + steps: + - name: Download dist artifacts + uses: actions/download-artifact@v4 + with: + name: dist-artifacts + path: dist/ + + - name: Create tagged release + uses: ncipollo/release-action@v1 + with: + name: "Community Shaders ${{ github.ref_name }}" + draft: true + tag: ${{ github.ref_name }} + artifacts: "${{ github.workspace }}/dist/*.7z" + generateReleaseNotes: true + replacesArtifacts: true + removeArtifacts: true diff --git a/.github/workflows/cleanup-pr-releases.yaml b/.github/workflows/cleanup-pr-releases.yaml index 85ce3d10e6..32294d5a69 100644 --- a/.github/workflows/cleanup-pr-releases.yaml +++ b/.github/workflows/cleanup-pr-releases.yaml @@ -1,54 +1,54 @@ name: Cleanup Closed PR Releases on: - workflow_dispatch: - schedule: - - cron: '0 2 * * *' # Optional: runs daily at 2am UTC - pull_request_target: - types: [closed] + workflow_dispatch: + schedule: + - cron: "0 2 * * *" # Optional: runs daily at 2am UTC + pull_request_target: + types: [closed] permissions: - contents: write - pull-requests: read + contents: write + pull-requests: read jobs: - cleanup-prereleases: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - ref: ${{ github.event.repository.default_branch }} - - - name: Delete closed PR prereleases - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - echo "Fetching all prereleases..." - releases=$(gh release list --limit 1000 --json tagName,isPrerelease --jq '.[] | select(.isPrerelease) | .tagName') - - for tag in $releases; do - if [[ "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-pr([0-9]+)$ ]]; then - pr_number="${BASH_REMATCH[1]}" - echo "Checking PR #$pr_number for tag $tag" - - pr_info=$(gh pr view "$pr_number" --json state,isDraft 2>/dev/null || echo "NOT_FOUND") - if [[ "$pr_info" == "NOT_FOUND" ]]; then - echo "PR #$pr_number not found. Deleting prerelease tag $tag" - gh release delete "$tag" --yes --cleanup-tag - continue - fi - - pr_state=$(echo "$pr_info" | jq -r '.state') - pr_draft=$(echo "$pr_info" | jq -r '.isDraft') - - if [[ "$pr_state" != "OPEN" || "$pr_draft" == "true" ]]; then - echo "PR #$pr_number is $pr_state${pr_draft:+ (draft)}. Deleting prerelease tag $tag" - gh release delete "$tag" --yes --cleanup-tag - else - echo "PR #$pr_number is open and not draft. Keeping tag $tag" - fi - else - echo "Skipping non-PR tag $tag" - fi - done \ No newline at end of file + cleanup-prereleases: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + ref: ${{ github.event.repository.default_branch }} + + - name: Delete closed PR prereleases + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "Fetching all prereleases..." + releases=$(gh release list --limit 1000 --json tagName,isPrerelease --jq '.[] | select(.isPrerelease) | .tagName') + + for tag in $releases; do + if [[ "$tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+-pr([0-9]+)$ ]]; then + pr_number="${BASH_REMATCH[1]}" + echo "Checking PR #$pr_number for tag $tag" + + pr_info=$(gh pr view "$pr_number" --json state,isDraft 2>/dev/null || echo "NOT_FOUND") + if [[ "$pr_info" == "NOT_FOUND" ]]; then + echo "PR #$pr_number not found. Deleting prerelease tag $tag" + gh release delete "$tag" --yes --cleanup-tag + continue + fi + + pr_state=$(echo "$pr_info" | jq -r '.state') + pr_draft=$(echo "$pr_info" | jq -r '.isDraft') + + if [[ "$pr_state" != "OPEN" || "$pr_draft" == "true" ]]; then + echo "PR #$pr_number is $pr_state${pr_draft:+ (draft)}. Deleting prerelease tag $tag" + gh release delete "$tag" --yes --cleanup-tag + else + echo "PR #$pr_number is open and not draft. Keeping tag $tag" + fi + else + echo "Skipping non-PR tag $tag" + fi + done diff --git a/.github/workflows/lintpr.yaml b/.github/workflows/lintpr.yaml index d54e174965..cce81663cb 100644 --- a/.github/workflows/lintpr.yaml +++ b/.github/workflows/lintpr.yaml @@ -1,20 +1,20 @@ name: "Lint PR" on: - pull_request_target: - types: - - opened - - edited - - synchronize + pull_request_target: + types: + - opened + - edited + - synchronize permissions: - pull-requests: read + pull-requests: read jobs: - main: - name: Validate PR title - runs-on: ubuntu-latest - steps: - - uses: amannn/action-semantic-pull-request@v5 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/wip.yaml b/.github/workflows/wip.yaml index 12e16b98d7..4480029a5c 100644 --- a/.github/workflows/wip.yaml +++ b/.github/workflows/wip.yaml @@ -1,12 +1,12 @@ name: WIP on: - pull_request: - types: [opened, synchronize, reopened, edited] + pull_request: + types: [opened, synchronize, reopened, edited] jobs: - wip: - runs-on: ubuntu-latest - steps: - - uses: wip/action@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + wip: + runs-on: ubuntu-latest + steps: + - uses: wip/action@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/CMakePresets.json b/CMakePresets.json index 0c4fdb135b..d1f88649e9 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -1,128 +1,123 @@ { - "version": 3, - "cmakeMinimumRequired": { - "major": 3, - "minor": 21, - "patch": 0 - }, - "configurePresets": [ - { - "name": "common", - "hidden": true, - "cacheVariables": { - "SKSE_SUPPORT_XBYAK": "ON" - }, - "binaryDir": "${sourceDir}/build/${presetName}" - }, - { - "name": "vcpkg", - "hidden": true, - "cacheVariables": { - "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", - "VCPKG_OVERLAY_PORTS": "${sourceDir}/cmake/ports/", - "VCPKG_TARGET_TRIPLET": "x64-windows-static-md" - } - }, - { - "name": "win64", - "hidden": true, - "architecture": "x64", - "cacheVariables": { - "CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded$<$:Debug>DLL" - } - }, - { - "name": "msvc", - "hidden": true, - "cacheVariables": { - "CMAKE_CXX_FLAGS": "/EHsc /MP /W4 /WX $penv{CXXFLAGS}" - }, - "generator": "Visual Studio 17 2022", - "vendor": { - "microsoft.com/VisualStudioSettings/CMake/1.0": { - "intelliSenseMode": "windows-msvc-x64", - "enableMicrosoftCodeAnalysis": true, - "enableClangTidyCodeAnalysis": true - } - } - }, - { - "name": "skyrim", - "hidden": true, - "inherits": [ - "common", - "vcpkg", - "win64", - "msvc" - ] - }, - { - "name": "AE", - "cacheVariables": { - "ENABLE_SKYRIM_AE": "ON", - "ENABLE_SKYRIM_SE": "OFF", - "ENABLE_SKYRIM_VR": "OFF" - }, - "inherits": "skyrim" - }, - { - "name": "SE", - "cacheVariables": { - "ENABLE_SKYRIM_AE": "OFF", - "ENABLE_SKYRIM_SE": "ON", - "ENABLE_SKYRIM_VR": "OFF" - }, - "inherits": "skyrim" - }, - { - "name": "VR", - "cacheVariables": { - "ENABLE_SKYRIM_AE": "OFF", - "ENABLE_SKYRIM_SE": "OFF", - "ENABLE_SKYRIM_VR": "ON" - }, - "inherits": "skyrim" - }, - { - "name": "ALL", - "cacheVariables": { - "ENABLE_SKYRIM_AE": "ON", - "ENABLE_SKYRIM_SE": "ON", - "ENABLE_SKYRIM_VR": "ON" - }, - "inherits": "skyrim" - }, - { - "name": "PRE-AE", - "cacheVariables": { - "ENABLE_SKYRIM_AE": "OFF", - "ENABLE_SKYRIM_SE": "ON", - "ENABLE_SKYRIM_VR": "ON" - }, - "inherits": "skyrim" - }, - { - "name": "FLATRIM", - "cacheVariables": { - "ENABLE_SKYRIM_AE": "ON", - "ENABLE_SKYRIM_SE": "ON", - "ENABLE_SKYRIM_VR": "OFF" - }, - "inherits": "skyrim" - }, - { - "name": "ALL-TRACY", - "cacheVariables": { - "TRACY_SUPPORT": "ON" - }, - "inherits": "ALL" - } - ], - "buildPresets": [ - { - "name": "ALL", - "configurePreset": "ALL", - "configuration": "Release" - } - ] -} \ No newline at end of file + "version": 3, + "cmakeMinimumRequired": { + "major": 3, + "minor": 21, + "patch": 0 + }, + "configurePresets": [ + { + "name": "common", + "hidden": true, + "cacheVariables": { + "SKSE_SUPPORT_XBYAK": "ON" + }, + "binaryDir": "${sourceDir}/build/${presetName}" + }, + { + "name": "vcpkg", + "hidden": true, + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake", + "VCPKG_OVERLAY_PORTS": "${sourceDir}/cmake/ports/", + "VCPKG_TARGET_TRIPLET": "x64-windows-static-md" + } + }, + { + "name": "win64", + "hidden": true, + "architecture": "x64", + "cacheVariables": { + "CMAKE_MSVC_RUNTIME_LIBRARY": "MultiThreaded$<$:Debug>DLL" + } + }, + { + "name": "msvc", + "hidden": true, + "cacheVariables": { + "CMAKE_CXX_FLAGS": "/EHsc /MP /W4 /WX $penv{CXXFLAGS}" + }, + "generator": "Visual Studio 17 2022", + "vendor": { + "microsoft.com/VisualStudioSettings/CMake/1.0": { + "intelliSenseMode": "windows-msvc-x64", + "enableMicrosoftCodeAnalysis": true, + "enableClangTidyCodeAnalysis": true + } + } + }, + { + "name": "skyrim", + "hidden": true, + "inherits": ["common", "vcpkg", "win64", "msvc"] + }, + { + "name": "AE", + "cacheVariables": { + "ENABLE_SKYRIM_AE": "ON", + "ENABLE_SKYRIM_SE": "OFF", + "ENABLE_SKYRIM_VR": "OFF" + }, + "inherits": "skyrim" + }, + { + "name": "SE", + "cacheVariables": { + "ENABLE_SKYRIM_AE": "OFF", + "ENABLE_SKYRIM_SE": "ON", + "ENABLE_SKYRIM_VR": "OFF" + }, + "inherits": "skyrim" + }, + { + "name": "VR", + "cacheVariables": { + "ENABLE_SKYRIM_AE": "OFF", + "ENABLE_SKYRIM_SE": "OFF", + "ENABLE_SKYRIM_VR": "ON" + }, + "inherits": "skyrim" + }, + { + "name": "ALL", + "cacheVariables": { + "ENABLE_SKYRIM_AE": "ON", + "ENABLE_SKYRIM_SE": "ON", + "ENABLE_SKYRIM_VR": "ON" + }, + "inherits": "skyrim" + }, + { + "name": "PRE-AE", + "cacheVariables": { + "ENABLE_SKYRIM_AE": "OFF", + "ENABLE_SKYRIM_SE": "ON", + "ENABLE_SKYRIM_VR": "ON" + }, + "inherits": "skyrim" + }, + { + "name": "FLATRIM", + "cacheVariables": { + "ENABLE_SKYRIM_AE": "ON", + "ENABLE_SKYRIM_SE": "ON", + "ENABLE_SKYRIM_VR": "OFF" + }, + "inherits": "skyrim" + }, + { + "name": "ALL-TRACY", + "cacheVariables": { + "TRACY_SUPPORT": "ON" + }, + "inherits": "ALL" + } + ], + "buildPresets": [ + { + "name": "ALL", + "configurePreset": "ALL", + "configuration": "Release" + } + ] +} diff --git a/README.md b/README.md index e9f82691d7..3fbc0ad5b9 100644 --- a/README.md +++ b/README.md @@ -8,23 +8,23 @@ SKSE core plugin for community-driven advanced graphics modifications. - Any terminal of your choice (e.g., PowerShell) - [Visual Studio Community 2022](https://visualstudio.microsoft.com/) - - Desktop development with C++ + - Desktop development with C++ - [CMake](https://cmake.org/) - - Edit the `PATH` environment variable and add the cmake.exe install path as a new value - - Instructions for finding and editing the `PATH` environment variable can be found [here](https://www.java.com/en/download/help/path.html) + - Edit the `PATH` environment variable and add the cmake.exe install path as a new value + - Instructions for finding and editing the `PATH` environment variable can be found [here](https://www.java.com/en/download/help/path.html) - [Git](https://git-scm.com/downloads) - - Edit the `PATH` environment variable and add the Git.exe install path as a new value + - Edit the `PATH` environment variable and add the Git.exe install path as a new value - [Vcpkg](https://github.com/microsoft/vcpkg) - - Install vcpkg using the directions in vcpkg's [Quick Start Guide](https://github.com/microsoft/vcpkg#quick-start-windows) - - After install, add a new environment variable named `VCPKG_ROOT` with the value as the path to the folder containing vcpkg - - Make sure your local vcpkg repo matches the commit id specified in `builtin-baseline` in `vcpkg.json` otherwise you might get another version of a non pinned vcpkg dependency causing undefined behaviour + - Install vcpkg using the directions in vcpkg's [Quick Start Guide](https://github.com/microsoft/vcpkg#quick-start-windows) + - After install, add a new environment variable named `VCPKG_ROOT` with the value as the path to the folder containing vcpkg + - Make sure your local vcpkg repo matches the commit id specified in `builtin-baseline` in `vcpkg.json` otherwise you might get another version of a non pinned vcpkg dependency causing undefined behaviour ## User Requirements - [Address Library for SKSE](https://www.nexusmods.com/skyrimspecialedition/mods/32444) - - Needed for SSE/AE + - Needed for SSE/AE - [VR Address Library for SKSEVR](https://www.nexusmods.com/skyrimspecialedition/mods/58101) - - Needed for VR + - Needed for VR ## Register Visual Studio as a Generator @@ -33,11 +33,13 @@ SKSE core plugin for community-driven advanced graphics modifications. - Close the cmd window Or, in powershell run: + ```pwsh & "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64 ``` ## Clone and Build + Open terminal (e.g., PowerShell) and run the following commands: ``` @@ -47,24 +49,32 @@ cd skyrim-community-shaders ``` ### CMAKE Options (optional) + If you want an example CMakeUserPreset to start off with you can copy the `CMakeUserPresets.json.template` -> `CMakeUserPresets.json` + #### AUTO_PLUGIN_DEPLOYMENT -* This option is default `"OFF"` -* Make sure `"AUTO_PLUGIN_DEPLOYMENT"` is set to `"ON"` in `CMakeUserPresets.json` -* Change the `"CommunityShadersOutputDir"` value to match your desired outputs, if you want multiple folders you can separate them by `;` is shown in the template example + +- This option is default `"OFF"` +- Make sure `"AUTO_PLUGIN_DEPLOYMENT"` is set to `"ON"` in `CMakeUserPresets.json` +- Change the `"CommunityShadersOutputDir"` value to match your desired outputs, if you want multiple folders you can separate them by `;` is shown in the template example + #### AIO_ZIP_TO_DIST -* This option is default `"ON"` -* Make sure `"AIO_ZIP_TO_DIST"` is set to `"ON"` in `CMakeUserPresets.json` -* This will create a `CommunityShaders_AIO.7z` archive in /dist containing all features and base mod + +- This option is default `"ON"` +- Make sure `"AIO_ZIP_TO_DIST"` is set to `"ON"` in `CMakeUserPresets.json` +- This will create a `CommunityShaders_AIO.7z` archive in /dist containing all features and base mod + #### ZIP_TO_DIST -* This option is default `"ON"` -* Make sure `"ZIP_TO_DIST"` is set to `"ON"` in `CMakeUserPresets.json` -* This will create a zip for each feature and one for the base Community shaders in /dist -* If having a file with name `CORE` in the root of the features folder it will instead be merged into the core zip + +- This option is default `"ON"` +- Make sure `"ZIP_TO_DIST"` is set to `"ON"` in `CMakeUserPresets.json` +- This will create a zip for each feature and one for the base Community shaders in /dist +- If having a file with name `CORE` in the root of the features folder it will instead be merged into the core zip + #### TRACY_SUPPORT -* This option is default `"OFF"` -* This will enable tracy support, might need to delete build folder when this option is changed +- This option is default `"OFF"` +- This will enable tracy support, might need to delete build folder when this option is changed When using custom preset you can call BuildRelease.bat with an parameter to specify which preset to configure eg: `.\BuildRelease.bat ALL-WITH-AUTO-DEPLOYMENT` @@ -72,22 +82,30 @@ When using custom preset you can call BuildRelease.bat with an parameter to spec When switching between different presets you might need to remove the build folder ### Build with Docker -For those who prefer to not install Visual Studio or other build dependencies on their machine, this encapsulates it. This uses Windows Containers, so no WSL for now. -1. Install [Docker](https://www.docker.com/products/docker-desktop/) first if not already there. + +For those who prefer to not install Visual Studio or other build dependencies on their machine, this encapsulates it. This uses Windows Containers, so no WSL for now. + +1. Install [Docker](https://www.docker.com/products/docker-desktop/) first if not already there. 2. In a shell of your choice run to switch to Windows containers and create the build container: + ```pwsh & 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchWindowsEngine; ` docker build -t skyrim-community-shaders . ``` -3. Then run the build: + +3. Then run the build: + ```pwsh docker run -it --rm -v .:C:/skyrim-community-shaders skyrim-community-shaders:latest ``` + 4. Retrieve the generated build files from the `build/aio` folder. 5. In subsequent builds only run the build step (3.) #### Troubleshooting Build with Docker + If you run into `Access violation` build errors during step 3, you can try adding [`--isolation=process`](https://learn.microsoft.com/en-us/virtualization/windowscontainers/manage-containers/hyperv-container): + ```pwsh docker run -it --rm --isolation=process -v .:C:/skyrim-community-shaders skyrim-community-shaders:latest ``` @@ -97,13 +115,15 @@ docker run -it --rm --isolation=process -v .:C:/skyrim-community-shaders skyrim- ### Default [GPL-3.0-or-later](COPYING) WITH [Modding Exception AND GPL-3.0 Linking Exception (with Corresponding Source)](EXCEPTIONS.md). -Specifically, the Modded Code includes: -* Skyrim (and its variants) -* Hardware drivers to enable additional functionality provided via proprietary SDKs, such as [Nvidia DLSS](https://developer.nvidia.com/rtx/dlss/get-started), [AMD FidelityFX FSR3](https://gpuopen.com/fidelityfx-super-resolution-3/), and [Intel XeSS](https://github.com/intel/xess) +Specifically, the Modded Code includes: + +- Skyrim (and its variants) +- Hardware drivers to enable additional functionality provided via proprietary SDKs, such as [Nvidia DLSS](https://developer.nvidia.com/rtx/dlss/get-started), [AMD FidelityFX FSR3](https://gpuopen.com/fidelityfx-super-resolution-3/), and [Intel XeSS](https://github.com/intel/xess) + +The Modding Libraries include: -The Modding Libraries include: -* [SKSE](https://skse.silverlock.org/) -* Commonlib (and variants). +- [SKSE](https://skse.silverlock.org/) +- Commonlib (and variants). ### Shaders diff --git a/cmake/ports/clib-util/vcpkg.json b/cmake/ports/clib-util/vcpkg.json index 5317495b5b..f02b73c50f 100644 --- a/cmake/ports/clib-util/vcpkg.json +++ b/cmake/ports/clib-util/vcpkg.json @@ -1,7 +1,7 @@ { - "name": "clib-util", - "version-string": "1.3.7", - "port-version": 1, - "description": "", - "homepage": "https://github.com/powerof3/CLibUtil" + "name": "clib-util", + "version-string": "1.3.7", + "port-version": 1, + "description": "", + "homepage": "https://github.com/powerof3/CLibUtil" } diff --git a/features/IBL/Shaders/IBL/DiffuseIBLCS.hlsl b/features/IBL/Shaders/IBL/DiffuseIBLCS.hlsl index 4c832ed1db..bc1b3bf0bf 100644 --- a/features/IBL/Shaders/IBL/DiffuseIBLCS.hlsl +++ b/features/IBL/Shaders/IBL/DiffuseIBLCS.hlsl @@ -13,8 +13,7 @@ TextureCube EnvReflectionsTexture : register(t2); SamplerState LinearSampler : register(s0); -[numthreads(1, 1, 1)] void main(uint3 dispatchID - : SV_DispatchThreadID) { +[numthreads(1, 1, 1)] void main(uint3 dispatchID : SV_DispatchThreadID) { // Initialise sh to 0 sh2 shR = SphericalHarmonics::Zero(); sh2 shG = SphericalHarmonics::Zero(); diff --git a/features/Skylighting/Shaders/Skylighting/UpdateProbesCS.hlsl b/features/Skylighting/Shaders/Skylighting/UpdateProbesCS.hlsl index 62fc60e1d6..fa8e4758cf 100644 --- a/features/Skylighting/Shaders/Skylighting/UpdateProbesCS.hlsl +++ b/features/Skylighting/Shaders/Skylighting/UpdateProbesCS.hlsl @@ -8,8 +8,7 @@ RWTexture3D outAccumFramesArray : register(u1); SamplerComparisonState comparisonSampler : register(s0); -[numthreads(8, 8, 1)] void main(uint3 dtid - : SV_DispatchThreadID) { +[numthreads(8, 8, 1)] void main(uint3 dtid : SV_DispatchThreadID) { const float fadeInThreshold = 15; const static sh2 unitSH = float4(sqrt(4.0 * Math::PI), 0, 0, 0); const SharedData::SkylightingSettings settings = SharedData::skylightingSettings; diff --git a/package/Shaders/AmbientCompositeCS.hlsl b/package/Shaders/AmbientCompositeCS.hlsl index 9fa07257c6..53e4cf6176 100644 --- a/package/Shaders/AmbientCompositeCS.hlsl +++ b/package/Shaders/AmbientCompositeCS.hlsl @@ -44,8 +44,7 @@ void SampleSSGI(uint2 pixCoord, float3 normalWS, out float ao, out float3 il) } #endif -[numthreads(8, 8, 1)] void main(uint3 dispatchID - : SV_DispatchThreadID) { +[numthreads(8, 8, 1)] void main(uint3 dispatchID : SV_DispatchThreadID) { float2 uv = float2(dispatchID.xy + 0.5) * SharedData::BufferDim.zw; uint eyeIndex = Stereo::GetEyeIndexFromTexCoord(uv); uv *= FrameBuffer::DynamicResolutionParams2.xy; // adjust for dynamic res diff --git a/package/Shaders/Common/Glints/noisegen.cs.hlsl b/package/Shaders/Common/Glints/noisegen.cs.hlsl index 31f9ad9409..b4f4067b4f 100644 --- a/package/Shaders/Common/Glints/noisegen.cs.hlsl +++ b/package/Shaders/Common/Glints/noisegen.cs.hlsl @@ -98,8 +98,7 @@ float InvCDF(float U, float mu, float sigma) return x; } -[numthreads(32, 32, 1)] void main(const uint2 tid - : SV_DispatchThreadID) { +[numthreads(32, 32, 1)] void main(const uint2 tid : SV_DispatchThreadID) { uint2 size; tex_noise.GetDimensions(size.x, size.y); int offset = size.x * size.y * 0x69420; diff --git a/package/Shaders/CopyShadowDataCS.hlsl b/package/Shaders/CopyShadowDataCS.hlsl index b6253c1107..9b2bc44f8d 100644 --- a/package/Shaders/CopyShadowDataCS.hlsl +++ b/package/Shaders/CopyShadowDataCS.hlsl @@ -85,7 +85,7 @@ cbuffer PerFrame3 : register(b2) float4x3 FocusShadowMapProj[4] : packoffset(c4); float4x3 ShadowMapProj[1][3] : packoffset(c16); // 16, 19, 22 #else - float4 VRUnknown : packoffset(c4); /* used to multiply by identity matrix, see e.g., 4202499.ps.bin.hlsl + float4 VRUnknown : packoffset(c4); /* used to multiply by identity matrix, see e.g., 4202499.ps.bin.hlsl r1.x = dot(cb2[4].xz, icb[r0.w+0].xz); r1.x = r0.x * cb12[86].x + -r1.x; r0.w = (int)r0.w + 1; diff --git a/package/Shaders/DeferredCompositeCS.hlsl b/package/Shaders/DeferredCompositeCS.hlsl index 0864a73c9c..f447c9635d 100644 --- a/package/Shaders/DeferredCompositeCS.hlsl +++ b/package/Shaders/DeferredCompositeCS.hlsl @@ -67,8 +67,7 @@ void SampleSSGISpecular(uint2 pixCoord, sh2 lobe, out float ao, out float3 il, i } #endif -[numthreads(8, 8, 1)] void main(uint3 dispatchID - : SV_DispatchThreadID) { +[numthreads(8, 8, 1)] void main(uint3 dispatchID : SV_DispatchThreadID) { float2 uv = float2(dispatchID.xy + 0.5) * SharedData::BufferDim.zw; uint eyeIndex = Stereo::GetEyeIndexFromTexCoord(uv); uv *= FrameBuffer::DynamicResolutionParams2.xy; // Adjust for dynamic res diff --git a/package/Shaders/ISVolumetricLightingGenerateCS.hlsl b/package/Shaders/ISVolumetricLightingGenerateCS.hlsl index 41859f72db..63b0659790 100644 --- a/package/Shaders/ISVolumetricLightingGenerateCS.hlsl +++ b/package/Shaders/ISVolumetricLightingGenerateCS.hlsl @@ -68,8 +68,7 @@ cbuffer PerTechnique : register(b0) # endif } -[numthreads(32, 32, 1)] void main(uint3 dispatchID - : SV_DispatchThreadID) { +[numthreads(32, 32, 1)] void main(uint3 dispatchID : SV_DispatchThreadID) { const float3 StepCoefficients[] = { { 0, 0, 0 }, { 0, 0, 1.000000 }, { 0, 1.000000, 0 }, diff --git a/package/Shaders/ISVolumetricLightingRaymarchCS.hlsl b/package/Shaders/ISVolumetricLightingRaymarchCS.hlsl index 4faef9a150..b41e68eba0 100644 --- a/package/Shaders/ISVolumetricLightingRaymarchCS.hlsl +++ b/package/Shaders/ISVolumetricLightingRaymarchCS.hlsl @@ -11,8 +11,7 @@ cbuffer PerTechnique : register(b0) int StepIndex : packoffset(c1); } -[numthreads(32, 32, 1)] void main(uint3 dispatchID - : SV_DispatchThreadID) { +[numthreads(32, 32, 1)] void main(uint3 dispatchID : SV_DispatchThreadID) { float3 previousPosition = (0.5 + float3(dispatchID.xy, StepIndex - 1)) / TextureDimensions.xyz; float previousDensity = DensityTex.SampleLevel(DensitySampler, previousPosition, 0).x; DensityRW[uint3(dispatchID.xy, StepIndex - 1)] = previousDensity; diff --git a/package/Shaders/Lighting.hlsl b/package/Shaders/Lighting.hlsl index 4910966193..d7feca2f01 100644 --- a/package/Shaders/Lighting.hlsl +++ b/package/Shaders/Lighting.hlsl @@ -1032,8 +1032,7 @@ float GetSnowParameterY(float texProjTmp, float alpha) # include "IBL/IBL.hlsli" # endif -PS_OUTPUT main(PS_INPUT input, bool frontFace - : SV_IsFrontFace) +PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) { PS_OUTPUT psout; uint eyeIndex = Stereo::GetEyeIndexPS(input.Position, VPOSOffset); diff --git a/package/Shaders/RunGrass.hlsl b/package/Shaders/RunGrass.hlsl index 25634d702c..793299d174 100644 --- a/package/Shaders/RunGrass.hlsl +++ b/package/Shaders/RunGrass.hlsl @@ -446,8 +446,7 @@ cbuffer PerMaterial : register(b1) # include "GrassLighting/GrassLighting.hlsli" -PS_OUTPUT main(PS_INPUT input, bool frontFace - : SV_IsFrontFace) +PS_OUTPUT main(PS_INPUT input, bool frontFace : SV_IsFrontFace) { PS_OUTPUT psout; diff --git a/package/Shaders/Upscaling/EncodeTexturesCS.hlsl b/package/Shaders/Upscaling/EncodeTexturesCS.hlsl index 30c2aaa7b9..b69f9689c0 100644 --- a/package/Shaders/Upscaling/EncodeTexturesCS.hlsl +++ b/package/Shaders/Upscaling/EncodeTexturesCS.hlsl @@ -2,8 +2,7 @@ Texture2D TAAMask : register(t0); RWTexture2D AlphaMask : register(u0); -[numthreads(8, 8, 1)] void main(uint3 dispatchID - : SV_DispatchThreadID) { +[numthreads(8, 8, 1)] void main(uint3 dispatchID : SV_DispatchThreadID) { float2 taaMask = TAAMask[dispatchID.xy]; float alphaMask = taaMask.x * 0.25; diff --git a/package/Shaders/Upscaling/RCAS/RCAS.hlsl b/package/Shaders/Upscaling/RCAS/RCAS.hlsl index 6b91b07136..375a64df40 100644 --- a/package/Shaders/Upscaling/RCAS/RCAS.hlsl +++ b/package/Shaders/Upscaling/RCAS/RCAS.hlsl @@ -42,8 +42,7 @@ float getRCASLuma(float3 rgb) return dot(rgb, float3(0.5, 1.0, 0.5)); } -[numthreads(8, 8, 1)] void main(uint3 DTid - : SV_DispatchThreadID) { +[numthreads(8, 8, 1)] void main(uint3 DTid : SV_DispatchThreadID) { float3 e = Source.Load(int3(DTid.x, DTid.y, 0)).rgb; float3 b = Source.Load(int3(DTid.x, DTid.y - 1, 0)).rgb; diff --git a/src/Feature.h b/src/Feature.h index efb8c57cfa..8e3f2727b0 100644 --- a/src/Feature.h +++ b/src/Feature.h @@ -44,7 +44,7 @@ struct Feature virtual void DrawSettings() {} virtual void DrawUnloadedUI() {} - virtual void ReflectionsPrepass(){}; + virtual void ReflectionsPrepass() {}; virtual void Prepass() {} virtual void EarlyPrepass() {} diff --git a/src/FrameAnnotations.cpp b/src/FrameAnnotations.cpp index 8ba8fe6c81..613caa9718 100644 --- a/src/FrameAnnotations.cpp +++ b/src/FrameAnnotations.cpp @@ -930,7 +930,7 @@ namespace FrameAnnotations auto renderer = globals::game::renderer; for (size_t renderTargetIndex = 0; - renderTargetIndex < (!REL::Module::IsVR() ? RE::RENDER_TARGETS::kTOTAL : RE::RENDER_TARGETS::kVRTOTAL); ++renderTargetIndex) { + renderTargetIndex < (!REL::Module::IsVR() ? RE::RENDER_TARGETS::kTOTAL : RE::RENDER_TARGETS::kVRTOTAL); ++renderTargetIndex) { const auto renderTargetName = magic_enum::enum_name( static_cast(renderTargetIndex)); if (auto texture = renderer->GetRuntimeData().renderTargets[renderTargetIndex].texture) { @@ -940,8 +940,8 @@ namespace FrameAnnotations } for (size_t renderTargetIndex = 0; - renderTargetIndex < RE::RENDER_TARGETS_CUBEMAP::kTOTAL; - ++renderTargetIndex) { + renderTargetIndex < RE::RENDER_TARGETS_CUBEMAP::kTOTAL; + ++renderTargetIndex) { const auto renderTargetName = magic_enum::enum_name( static_cast(renderTargetIndex)); if (auto texture = renderer->GetRendererData().cubemapRenderTargets[renderTargetIndex].texture) { @@ -951,8 +951,8 @@ namespace FrameAnnotations } for (size_t renderTargetIndex = 0; - renderTargetIndex < (!REL::Module::IsVR() ? RE::RENDER_TARGETS_DEPTHSTENCIL::kTOTAL : RE::RENDER_TARGETS_DEPTHSTENCIL::kVRTOTAL); - ++renderTargetIndex) { + renderTargetIndex < (!REL::Module::IsVR() ? RE::RENDER_TARGETS_DEPTHSTENCIL::kTOTAL : RE::RENDER_TARGETS_DEPTHSTENCIL::kVRTOTAL); + ++renderTargetIndex) { const auto renderTargetName = magic_enum::enum_name( static_cast( renderTargetIndex)); diff --git a/src/Hooks.cpp b/src/Hooks.cpp index 33516d788e..20c2c677f1 100644 --- a/src/Hooks.cpp +++ b/src/Hooks.cpp @@ -61,7 +61,7 @@ void DumpShader(const REX::BSShader* thisClass, const ShaderType* shader, const } } - if (FILE * file; fopen_s(&file, dumpDir.c_str(), "wb") == 0) { + if (FILE* file; fopen_s(&file, dumpDir.c_str(), "wb") == 0) { fwrite(dxbcData, 1, dxbcLen, file); fclose(file); } diff --git a/src/ShaderCache.cpp b/src/ShaderCache.cpp index 544ace6234..e829e48d65 100644 --- a/src/ShaderCache.cpp +++ b/src/ShaderCache.cpp @@ -998,7 +998,7 @@ namespace SIE if (shaderClass == ShaderClass::Vertex) { for (size_t nameIndex = 0; nameIndex < imagespaceShader.vsConstantNames.size(); - ++nameIndex) { + ++nameIndex) { if (std::string_view(imagespaceShader.vsConstantNames[static_cast(nameIndex)].c_str()) == name) { return static_cast(nameIndex); @@ -1186,7 +1186,7 @@ namespace SIE } else { const auto elementSize = varDesc.Size / varTypeDesc.Elements; for (uint32_t arrayIndex = 1; arrayIndex < varTypeDesc.Elements; - ++arrayIndex) { + ++arrayIndex) { const std::string varName = std::format("{}[{}]", varDesc.Name, arrayIndex); const auto variableArrayElementIndex = diff --git a/vcpkg.json b/vcpkg.json index 15abc580f7..aaef2c7c4a 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,50 +1,50 @@ { - "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", - "name": "communityshaders", - "license": "GPL-3.0", - "features": { - "commonlibsse-ng": { - "description": "Dependencies of clib-ng", - "dependencies": ["catch2", "fmt", "directxtk", "rapidcsv", "spdlog"] - } - }, - "default-features": ["commonlibsse-ng"], - "dependencies": [ - "bshoshany-thread-pool", - "clib-util", - "cppwinrt", - "directxtex", - "eastl", - "efsw", - { - "name": "imgui", - "features": ["dx11-binding", "win32-binding", "docking-experimental"] + "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", + "name": "communityshaders", + "license": "GPL-3.0", + "features": { + "commonlibsse-ng": { + "description": "Dependencies of clib-ng", + "dependencies": ["catch2", "fmt", "directxtk", "rapidcsv", "spdlog"] + } }, - "magic-enum", - "nlohmann-json", - "pystring", - "tracy", - "unordered-dense", - "xbyak" - ], - "overrides": [ - { - "name": "bshoshany-thread-pool", - "version": "3.5.0" - }, - { - "name": "imgui", - "version": "1.90" - }, - { - "name": "tracy", - "version": "0.11.0" - }, - { - "name": "magic-enum", - "version": "0.9.6", - "port-version": 1 - } - ], - "builtin-baseline": "98aa6396292d57e737a6ef999d4225ca488859d5" + "default-features": ["commonlibsse-ng"], + "dependencies": [ + "bshoshany-thread-pool", + "clib-util", + "cppwinrt", + "directxtex", + "eastl", + "efsw", + { + "name": "imgui", + "features": ["dx11-binding", "win32-binding", "docking-experimental"] + }, + "magic-enum", + "nlohmann-json", + "pystring", + "tracy", + "unordered-dense", + "xbyak" + ], + "overrides": [ + { + "name": "bshoshany-thread-pool", + "version": "3.5.0" + }, + { + "name": "imgui", + "version": "1.90" + }, + { + "name": "tracy", + "version": "0.11.0" + }, + { + "name": "magic-enum", + "version": "0.9.6", + "port-version": 1 + } + ], + "builtin-baseline": "98aa6396292d57e737a6ef999d4225ca488859d5" }