Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
9089568
added sycl code
asrathore-ai Aug 13, 2025
dedfc2d
Resolve Windows compiler / linker errors.
ssheorey Sep 13, 2025
6f44999
Fix Windows linker errors
ssheorey Sep 13, 2025
a9eaf99
Loading kernels now works in Windows.
ssheorey Sep 15, 2025
2f28ba3
COrrected libtorch path issues
asrathore-ai Sep 23, 2025
3fff3de
Updated correct shape calculation
asrathore-ai Sep 24, 2025
10c0efd
Updated proj changes
asrathore-ai Sep 24, 2025
7b3bfb8
corrected isect code
asrathore-ai Sep 24, 2025
0d25c9e
Update fully fused projection kernels
asrathore-ai Sep 25, 2025
02a596b
wip packed kernel
asrathore-ai Sep 25, 2025
fc801e8
added fully fused projection packed
asrathore-ai Sep 25, 2025
f773859
Update kernel
asrathore-ai Sep 25, 2025
4dfea00
updated training code
asrathore-ai Sep 25, 2025
6624ec0
update steps for memory error
asrathore-ai Sep 25, 2025
6597d44
torch_acc uniform API for both cuda and xpu. Maybe replaced by torch.…
ssheorey Oct 7, 2025
0a472cf
Added forward pass for 2fgs fully fused projection
asrathore-ai Oct 17, 2025
417942e
added backward pass
asrathore-ai Oct 17, 2025
6763ada
update tests
asrathore-ai Oct 17, 2025
f4d0123
Working tests
asrathore-ai Oct 17, 2025
167d0b6
Added rasterize forward kernel
asrathore-ai Oct 17, 2025
a4f90ac
added backward kernel
asrathore-ai Oct 17, 2025
aa6ff08
Update rasterize_to_pixels_2dgs_bwd.cpp
asrathore-ai Nov 11, 2025
6542d4c
Update RasterizeToPixels2DGSBwdKernel.hpp
asrathore-ai Nov 11, 2025
cb5c72a
Update RasterizeToPixels2DGSBwdKernel.hpp
asrathore-ai Nov 11, 2025
4a5bde3
Update RasterizeToPixels2DGSFwdKernel.hpp
asrathore-ai Nov 11, 2025
11604f5
Update rasterize_to_pixels_2dgs_fwd.cpp for correct block size comput…
asrathore-ai Nov 15, 2025
b5c46a9
Update rasterize_to_pixels_2dgs_bwd.cpp for correct block size comput…
asrathore-ai Nov 15, 2025
eb2174c
relocation kernel for MCMC strategy
ssheorey Nov 15, 2025
390ffc2
Merge branch '2d_gaussian_splatting' of github.com:isl-org/gsplat int…
ssheorey Nov 15, 2025
6524660
CI tests and docs should pass now.
ssheorey Nov 16, 2025
e261c04
Use pytorch 2.6 for CI (docs and core_tests)
ssheorey Nov 16, 2025
d03c5f3
black v22 and clang-format
ssheorey Nov 16, 2025
ed7352a
Fix test_rasterization for packed, fix has_xpu check from previous co…
ssheorey Nov 17, 2025
b5bc4f0
#pragma once to follow gsplat convention
ssheorey Nov 17, 2025
b785b20
Merge pull request #2 from isl-org/2d_gaussian_splatting
ssheorey Nov 17, 2025
72fcd3a
Common _wrapper.py for cuda and sycl
ssheorey Nov 18, 2025
570de47
Merge branch 'main' into sycl_code_integration
ssheorey Nov 21, 2025
cabd342
contiguous() tensors to fused_ssim
ssheorey Nov 24, 2025
31c484e
Updated fused_ssim to latest including sycl bugfix.
ssheorey Nov 24, 2025
a70b2f5
empty xpu docs
ssheorey Nov 25, 2025
bc60098
Evaluation results on B580
ssheorey Jan 26, 2026
4f022e4
Windows MSVC fixes
ssheorey Jan 27, 2026
a9f1536
Do not install fused-bilagrid
ssheorey Feb 4, 2026
b315442
Update instructions.
ssheorey Feb 4, 2026
fa4cdd9
Simplify build process.
ssheorey Feb 7, 2026
3cb8262
Initial plan
Copilot Feb 23, 2026
02d094c
Add SYCL/XPU wheel build and publish GitHub Actions workflows
Copilot Feb 23, 2026
0305370
Address PR review comments on SYCL/XPU wheel workflows
Copilot Feb 23, 2026
a5c4e47
Add SYCL/XPU wheel build and publish GitHub Actions workflows
ssheorey Feb 23, 2026
2406dfb
Initial plan
Copilot Feb 23, 2026
a0025c6
Fix XPU workflow: truncate oneAPI version X.Y.Z to X.Y for apt packag…
Copilot Feb 23, 2026
1256a06
Windows wheel workflow
ssheorey Feb 27, 2026
1baa172
Fix
ssheorey Feb 27, 2026
3328824
Fix setup.py for source only wheel
ssheorey Feb 27, 2026
b3a8f5d
installer fix
ssheorey Feb 28, 2026
02b390b
fix
ssheorey Feb 28, 2026
54de18a
Separate Windows and Linux build steps.
ssheorey Feb 28, 2026
1442ff5
fix build type for windows
ssheorey Feb 28, 2026
21f1f85
Update docs
ssheorey Mar 12, 2026
711958b
SYCL CI - wheels and PyPI repo hosting on github pages.
ssheorey Mar 12, 2026
760d963
Add info about pre-built wheels.
ssheorey Mar 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions .github/workflows/building_xpu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
name: Build XPU Wheels

on: [workflow_call, workflow_dispatch]

permissions:
contents: read

jobs:
build_sdist:
name: Build source distribution and no binary wheel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Strip unsupported tags in README
run: |
sed -i '/<!-- pypi-strip -->/,/<!-- \/pypi-strip -->/d' README.md
- name: Build sdist
run: BUILD_NO_CUDA=1 pipx run build --sdist
- name: Build wheel with no binaries
run: BUILD_NO_CUDA=1 python setup.py bdist_wheel --dist-dir=dist
- uses: actions/upload-artifact@v4
with:
name: pypi_packages
path: dist/*.tar.gz

build_wheels:
runs-on: ${{ matrix.os }}
environment: production

strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, windows-2022]
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
torch-version: ['2.10.0']

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Free up disk space
if: ${{ runner.os == 'Linux' }}
run: |
echo "Disk space before cleanup:"
df -h
sudo rm -rf /usr/share/dotnet
echo "Disk space after cleanup:"
df -h
shell: bash

- name: Install PyTorch ${{ matrix.torch-version }}+xpu
run: |
pip install torch==${{ matrix.torch-version }} --index-url https://download.pytorch.org/whl/xpu
python -c "import torch; print('PyTorch:', torch.__version__)"
python -c "import torch; print('XPU Available:', torch.xpu.is_available() if hasattr(torch, 'xpu') else False)"
shell: bash

- name: Install Intel oneAPI C++ Essentials
run: |
ONEAPI_VERSION=$(pip show intel-sycl-rt 2>/dev/null | grep ^Version | awk '{print $2}')
if [ -z "${ONEAPI_VERSION}" ]; then
echo "Error: intel-sycl-rt not found. Ensure PyTorch XPU was installed successfully." >&2
exit 1
fi
echo "Detected intel-sycl-rt version: ${ONEAPI_VERSION}"
bash .github/workflows/xpu/${RUNNER_OS}.sh ${ONEAPI_VERSION}
shell: bash

- name: Set version
run: |
VERSION=`sed -n 's/^__version__ = "\(.*\)"/\1/p' gsplat/version.py`
TORCH_VERSION=`echo "pt${{ matrix.torch-version }}" | sed "s/..$//" | sed "s/\.//g"`
echo "New version name: $VERSION+${TORCH_VERSION}xpu"
sed -i "s/$VERSION/$VERSION+${TORCH_VERSION}xpu/" gsplat/version.py
shell: bash

- name: Upgrade pip
run: |
pip install --upgrade setuptools wheel
pip install ninja pybind11
shell: bash

- name: Build wheel (Windows)
if: ${{ runner.os == 'Windows' }}
shell: cmd
run: |
set MAX_JOBS=%NUMBER_OF_PROCESSORS%
set BUILD_SYCL=1
call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat"
python setup.py bdist_wheel --dist-dir=dist

- name: Build wheel (Linux)
if: ${{ runner.os == 'Linux' }}
shell: bash
run: |
export MAX_JOBS=$(nproc) BUILD_SYCL=1
source /opt/intel/oneapi/setvars.sh
python setup.py bdist_wheel --dist-dir=dist

- name: Test wheel
run: |
cd dist
ls -lah
pip install *.whl
python -c "import gsplat; print('gsplat:', gsplat.__version__)"
cd ..
shell: bash

- uses: actions/upload-artifact@v4
with:
# Include unique matrix values to avoid name collisions.
name: xpu_wheels_python${{ matrix.python-version }}-${{ matrix.os }}-${{ matrix.torch-version }}
path: dist/*.whl
8 changes: 4 additions & 4 deletions .github/workflows/core_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ jobs:
with:
submodules: 'recursive'

- name: Set up Python 3.8.12
- name: Set up Python 3.9
uses: actions/setup-python@v5
with:
python-version: "3.8.12"
python-version: "3.9"
- name: Install dependencies
run: |
pip install black[jupyter]==22.3.0 pytest
pip install torch==2.0.0 --index-url https://download.pytorch.org/whl/cpu
BUILD_NO_CUDA=1 pip install .
pip install torch==2.6.0 --index-url https://download.pytorch.org/whl/cpu
BUILD_NO_CUDA=1 pip install --no-build-isolation .
- name: Run Black Format Check
run: black . gsplat/ tests/ examples/ profiling/ --check
- name: Run Tests.
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/doc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ jobs:
- name: Install dependencies
run: |
pip install -r docs/requirements.txt
pip install torch==2.0.0 --index-url https://download.pytorch.org/whl/cpu
BUILD_NO_CUDA=1 pip install .
pip install torch==2.6.0 --index-url https://download.pytorch.org/whl/cpu
BUILD_NO_CUDA=1 pip install --no-build-isolation .

# Get version.
- name: Get version + subdirectory
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/generate_simple_index_pages.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# This workflows will upload a Python Package using twine when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
permissions:
contents: write

name: Update wheels index pages

Expand Down
88 changes: 88 additions & 0 deletions .github/workflows/publish_xpu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Build and Release XPU Wheels

name: Build and Release XPU Wheels

on:
release:
types: [created]
workflow_dispatch:

permissions:
contents: write

jobs:
# Build the XPU wheels using the reusable building workflow
build_xpu_wheels:
name: Call reusable XPU building workflow
uses: ./.github/workflows/building_xpu.yml

create_release_and_upload_packages:
name: Upload XPU Wheels to GitHub Release
needs: [build_xpu_wheels]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive

- name: Download packages
id: download_artifacts
uses: actions/download-artifact@v4
with:
# The unique artifact names from building_xpu.yml all start with
# "xpu_wheels_python${{ matrix.python-version }}" so this pattern
# will match them all and merge them into the 'dist' directory.
pattern: xpu_wheels_python${{ matrix.python-version }}*
path: dist
merge-multiple: true

- name: Upload packages to latest GitHub Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "Fetching latest release info..."
release_info=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
https://api.github.com/repos/isl-org/gsplat/releases/latest)

# Extract the "upload_url" field and strip the {?name,label} part
upload_url=$(echo "$release_info" | grep '"upload_url":' | cut -d '"' -f 4 | sed 's/{.*//')
echo "Upload URL: $upload_url"

for file in ./dist/*.*; do
echo "Uploading $file..."
filename=$(basename "$file")
encoded_filename=$(echo "$filename" | sed 's/+/%2B/g')
curl -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary @"$file" \
"$upload_url?name=$encoded_filename"
done
echo "Upload complete."

generate_simple_index_pages:
name: Generate Simple Index Pages
needs: [create_release_and_upload_packages]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Generate Simple Index Pages
run: python .github/workflows/generate_simple_index_pages.py --outdir ./whl
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./whl
destination_dir: whl
keep_files: false
cname: docs.gsplat.studio
26 changes: 26 additions & 0 deletions .github/workflows/xpu/Linux.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash

# Install Intel oneAPI C++ Essentials for SYCL builds.
# Usage: Linux.sh <VERSION>
# Example: Linux.sh 2025.3.1

VERSION=${1:?'Usage: Linux.sh <VERSION> (e.g. Linux.sh 2025.3.1)'}

# The apt package uses X.Y version format (e.g. 2025.3), while the pip package
# (intel-sycl-rt) may use X.Y.Z format (e.g. 2025.3.1). Truncate to X.Y.
APT_VERSION=$(echo "${VERSION}" | grep -oP '^\d+\.\d+')
if [ -z "${APT_VERSION}" ]; then
echo "Error: VERSION '${VERSION}' does not match expected X.Y or X.Y.Z format." >&2
exit 1
fi

wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
| gpg --dearmor \
| sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null

echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" \
| sudo tee /etc/apt/sources.list.d/oneAPI.list

sudo apt-get -qq update
sudo apt-get install -y intel-cpp-essentials-${APT_VERSION}
sudo apt clean
42 changes: 42 additions & 0 deletions .github/workflows/xpu/Windows.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/bash

# Install Intel oneAPI C++ Essentials for SYCL builds on Windows.
# Usage: Windows.sh <VERSION>
# Example: Windows.sh 2025.3.1

set -euo pipefail

VERSION=${1:?'Usage: Windows.sh <VERSION> (e.g. Windows.sh 2025.3.1)'}

# Lookup table of Intel C++ Essentials *online* installer URLs per oneAPI version.
# URLs are obtained from (select Windows / Online Installer):
# https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html?packages=cpp-essentials&cpp-essentials-os=windows&cpp-essentials-win=online
# To add a new version, append: ["X.Y.Z"]="https://registrationcenter-download.intel.com/..."
declare -A INSTALLER_URLS=(
["2025.1.0"]="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1e635719-29c5-4775-8252-268d2f87d529/intel-cpp-essentials-2025.1.0.570.exe"
["2025.1"]="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1e635719-29c5-4775-8252-268d2f87d529/intel-cpp-essentials-2025.1.0.570.exe"
["2025.2.0"]="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/5b271b39-0773-49a3-b78d-c73ec42d1621/intel-cpp-essentials-2025.2.0.533.exe"
["2025.2"]="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/5b271b39-0773-49a3-b78d-c73ec42d1621/intel-cpp-essentials-2025.2.0.533.exe"
["2025.3.1"]="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/c61634af-e4dd-4a14-8341-0b35a9ebc22e/intel-cpp-essentials-2025.3.1.25.exe"
["2025.3"]="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/c61634af-e4dd-4a14-8341-0b35a9ebc22e/intel-cpp-essentials-2025.3.1.25.exe"
)

INSTALLER_URL="${INSTALLER_URLS[${VERSION}]:-}"
if [[ -z "${INSTALLER_URL}" ]]; then
echo "Error: No installer URL found for oneAPI version '${VERSION}'." >&2
echo "Add it to the INSTALLER_URLS table in $(basename "${BASH_SOURCE[0]}")." >&2
echo "Download page: https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html?packages=cpp-essentials&cpp-essentials-os=windows&cpp-essentials-win=online" >&2
exit 1
fi

# Install only compiler + necessary libraries.
ONEAPI_WINDOWS_COMPONENTS="${ONEAPI_WINDOWS_COMPONENTS:-intel.oneapi.win.cpp-dpcpp-common}"
INSTALLER_FILE="w_cpp-essentials_p_${VERSION}.exe"
echo "Downloading Intel C++ Essentials online installer from: ${INSTALLER_URL}"
curl -fL "${INSTALLER_URL}" --output "${INSTALLER_FILE}"

#https://www.intel.com/content/www/us/en/docs/oneapi/installation-guide-windows/2025-2/base-command-line-options.html#BASE-COMMAND-LINE-OPTIONS
echo "Installing components: ${ONEAPI_WINDOWS_COMPONENTS}"
PowerShell -NoProfile -Command "\$p = Start-Process -FilePath '${INSTALLER_FILE}' -ArgumentList '--a -s --action install --eula accept --components ${ONEAPI_WINDOWS_COMPONENTS}' -Wait -PassThru -NoNewWindow; exit \$p.ExitCode"

rm "${INSTALLER_FILE}"
7 changes: 6 additions & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
recursive-include gsplat/cuda/csrc *
recursive-exclude gsplat/cuda/csrc/third_party/glm/doc *
recursive-exclude gsplat/cuda/csrc/third_party/glm/test *
recursive-include gsplat/cuda/include *
include gsplat/cuda/ext.cpp
include gsplat/cuda/ext.cpp
recursive-include gsplat/sycl/src *
recursive-include gsplat/sycl/include *
include gsplat/sycl/ext.cpp
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ pip install ninja numpy jaxtyping rich
pip install gsplat --index-url https://docs.gsplat.studio/whl/pt20cu118
```

For Intel XPU (integrated and discrete GPU) support, see [Intel XPU](docs/Intel_XPU.md).

To build gsplat from source on Windows, please check [this instruction](docs/INSTALL_WIN.md).

## Evaluation
Expand Down
Loading