Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cleanup matrix and run tests in CI #323

Merged
merged 2 commits into from
Nov 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
113 changes: 58 additions & 55 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,74 +13,77 @@ env:

jobs:
Build:
runs-on: ${{ matrix.os }}
name: ${{ format('{0} {1}', matrix.platform.target, matrix.features)}}
runs-on: ${{ matrix.platform.os }}
env:
RUST_BACKTRACE: 1
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-22.04, windows-latest]
rust: [stable]
features: ["", "--features 'chains sm-raw-window-handle-06'", "--features 'chains sm-raw-window-handle-05'"]
target: ["default"]
platform:
- { target: aarch64-apple-darwin, os: macos-14, test: true }
- { target: x86_64-apple-darwin, os: macos-13, test: true }
- { target: x86_64-unknown-linux-gnu, os: ubuntu-24.04, test: true }
- { target: x86_64-pc-windows-msvc, os: windows-latest, test: true }
- { target: i686-pc-windows-msvc, os: windows-latest, test: false }
- { target: aarch64-pc-windows-msvc, os: windows-latest, test: false }
- {
target: aarch64-unknown-linux-ohos,
os: ubuntu-24.04,
test: false,
}
- { target: arm-linux-androideabi, os: ubuntu-24.04, test: false }
features:
[
"",
"chains sm-raw-window-handle-06",
"chains sm-raw-window-handle-05",
]
include:
# rust stable
- os: ubuntu-22.04
features: "--features 'sm-x11 sm-wayland-default'"
rust: stable
target: "default"
- os: ubuntu-22.04
target: "arm-linux-androideabi"
rust: stable
- os: windows-latest
features: "--features 'chains sm-angle-builtin'"
rust: stable
target: "default"
- os: windows-latest
features: "--features 'chains sm-no-wgl sm-angle-builtin'"
rust: stable
target: "default"
- os: windows-latest
target: "aarch64-pc-windows-msvc"
rust: stable
- os: ubuntu-22.04
target: "aarch64-unknown-linux-ohos"
rust: stable
- features: "sm-x11 sm-wayland-default"
platform:
{ target: x86_64-unknown-linux-gnu, os: ubuntu-24.04, test: true }
- features: "chains sm-angle-builtin"
platform:
{ target: x86_64-pc-windows-msvc, os: windows-latest, test: true }
- features: "chains sm-no-wgl sm-angle-builtin"
platform:
{ target: x86_64-pc-windows-msvc, os: windows-latest, test: true }
steps:
- uses: actions/checkout@v4
- name: Install dependencies (Linux)
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt update
sudo apt install gcc libxxf86vm-dev libosmesa6-dev libgles2-mesa-dev -y
- name: Install rust
id: toolchain
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.rust }}
- name: Build target
if: matrix.target != 'default' && startsWith(matrix.target, 'aarch64-uwp-windows-msvc') != true
run: |
rustup +${{steps.toolchain.outputs.name}} target add ${{ matrix.target }}
cargo +${{steps.toolchain.outputs.name}} build --verbose ${{ matrix.features }} --target=${{ matrix.target }}
- name: Build
if: matrix.target == 'default'
run: |
cargo +${{steps.toolchain.outputs.name}} build --verbose ${{ matrix.features }}
- name: Build Windows
if: startsWith(matrix.target, 'aarch64-uwp-windows-msvc')
shell: cmd
run: |
rustup +${{steps.toolchain.outputs.name}} component add rust-src --target=aarch64-uwp-windows-msvc
cargo +${{steps.toolchain.outputs.name}} build -Z build-std --verbose --target=aarch64-uwp-windows-msvc
- uses: actions/checkout@v4
- name: Install dependencies (Linux)
if: startsWith(matrix.platform.os, 'ubuntu')
run: |
sudo apt update
sudo apt install gcc libxxf86vm-dev libosmesa6-dev libgles2-mesa-dev xvfb weston -y
- name: Install rust
id: toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.platform.target }}
- name: Build
run: |
rustup target add ${{ matrix.platform.target }}
cargo build --features "${{ matrix.features }}" --target ${{ matrix.platform.target }}
- name: Test
if: ${{ matrix.platform.test && startsWith(matrix.platform.os, 'ubuntu') }}
run: |
weston --no-config --socket=wl-test-env --backend=headless &
WAYLAND_DISPLAY=wl-test-env xvfb-run cargo test --features "${{ matrix.features }}" --target ${{ matrix.platform.target }}
- name: Test
if: ${{ matrix.platform.test && !startsWith(matrix.platform.os, 'ubuntu') }}
run: |
cargo test --features "${{ matrix.features }}" --target ${{ matrix.platform.target }}
Format:
name: Run `rustfmt`
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: mkroening/rust-toolchain-toml@main
- run: cargo fmt --check
build_result:
name: Result
runs-on: ubuntu-latest
runs-on: ubuntu-24.04
needs: ["Build", "Format"]
if: always()
steps:
Expand Down
32 changes: 19 additions & 13 deletions examples/chaos_game.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
//
//! Demonstrates how to use `surfman` to draw to a window surface via the CPU.

use euclid::default::Point2D;
use euclid::default::{Point2D, Size2D};
use rand::{self, Rng};
use surfman::{SurfaceAccess, SurfaceType};
use winit::dpi::PhysicalSize;
use winit::event::WindowEvent::KeyboardInput;
use winit::event::{DeviceEvent, Event, WindowEvent};
use winit::event::{DeviceEvent, ElementState, Event, KeyEvent, RawKeyEvent, WindowEvent};
use winit::event_loop::{ControlFlow, EventLoop};
use winit::keyboard::{Key, NamedKey, PhysicalKey};
use winit::raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle, HasWindowHandle};
use winit::window::WindowBuilder;

#[cfg(target_os = "macos")]
Expand All @@ -29,18 +31,18 @@ static TRIANGLE_POINTS: [(f32, f32); 3] = [
(400.0 - 259.81, 300.0 + 75.0 - 300.0),
];

#[cfg(not(target_os = "macos"))]
#[cfg(not(all(target_os = "macos", feature = "sm-raw-window-handle-06")))]
fn main() {
println!("The `chaos_game` demo is not yet supported on this platform.");
}

#[cfg(target_os = "macos")]
#[cfg(all(target_os = "macos", feature = "sm-raw-window-handle-06"))]
fn main() {
let connection = SystemConnection::new().unwrap();
let adapter = connection.create_adapter().unwrap();
let mut device = connection.create_device(&adapter).unwrap();

let event_loop = EventLoop::new();
let event_loop = EventLoop::new().unwrap();
let physical_size = PhysicalSize::new(WINDOW_WIDTH, WINDOW_HEIGHT);
let window = WindowBuilder::new()
.with_title("Chaos game example")
Expand All @@ -54,7 +56,7 @@ fn main() {
let window_size = Size2D::new(window_size.width as i32, window_size.height as i32);
let handle = window.window_handle().unwrap();
let native_widget = connection
.create_native_widget_from_raw_window_handle(handle.as_raw(), window_size)
.create_native_widget_from_window_handle(handle, window_size)
.unwrap();

let surface_type = SurfaceType::Widget { native_widget };
Expand All @@ -66,20 +68,25 @@ fn main() {
let mut point = Point2D::new(WINDOW_WIDTH as f32 * 0.5, WINDOW_HEIGHT as f32 * 0.5);
let mut data = vec![0; WINDOW_WIDTH as usize * WINDOW_HEIGHT as usize * 4];

event_loop.run(move |event, _, control_flow| {
event_loop.run(move |event, event_loop| {
match event {
Event::WindowEvent {
event: WindowEvent::CloseRequested,
..
}
| Event::DeviceEvent {
| Event::WindowEvent {
event:
DeviceEvent::Key(KeyboardInput {
virtual_keycode: Some(VirtualKeyCode::Escape),
WindowEvent::KeyboardInput {
event:
KeyEvent {
state: ElementState::Pressed,
logical_key: Key::Named(NamedKey::Escape),
..
},
..
}),
},
..
} => *control_flow = ControlFlow::Exit,
} => event_loop.exit(),
_ => {
for _ in 0..ITERATIONS_PER_FRAME {
let (dest_x, dest_y) = TRIANGLE_POINTS[rng.gen_range(0..3)];
Expand All @@ -93,7 +100,6 @@ fn main() {
.data()
.copy_from_slice(&data);
device.present_surface(&mut surface).unwrap();
*control_flow = ControlFlow::Poll;
}
};
});
Expand Down
27 changes: 2 additions & 25 deletions examples/threads.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
//
// This example demonstrates how to create a multithreaded OpenGL application using `surfman`.

#![cfg(feature = "sm-raw-window-handle-06")]

use self::common::{ck, Buffer, Program, ResourceLoader, Shader, ShaderKind};

use euclid::default::{Point2D, Rect, Size2D, Vector2D};
Expand All @@ -24,9 +26,6 @@ use winit::{
window::WindowBuilder,
};

#[cfg(feature = "sm-raw-window-handle-05")]
use rwh_05::{HasRawDisplayHandle, HasRawWindowHandle};
#[cfg(not(feature = "sm-raw-window-handle-05"))]
use rwh_06::{HasDisplayHandle, HasWindowHandle};

pub mod common;
Expand Down Expand Up @@ -90,14 +89,6 @@ static BACKGROUND_COLOR: [f32; 4] = [
1.0,
];

#[cfg(feature = "sm-raw-window-handle-05")]
fn make_connection(window: &winit::window::Window) -> surfman::Connection {
let raw_display_handle = window.raw_display_handle();
let connection = Connection::from_raw_display_handle(raw_display_handle).unwrap();
connection
}

#[cfg(not(feature = "sm-raw-window-handle-05"))]
fn make_connection(window: &winit::window::Window) -> surfman::Connection {
let display_handle = window
.display_handle()
Expand All @@ -106,20 +97,6 @@ fn make_connection(window: &winit::window::Window) -> surfman::Connection {
connection
}

#[cfg(feature = "sm-raw-window-handle-05")]
fn make_native_widget(
window: &winit::window::Window,
connection: &surfman::Connection,
window_size: Size2D<i32>,
) -> surfman::NativeWidget {
let raw_window_handle = window.raw_window_handle();
let native_widget = connection
.create_native_widget_from_raw_window_handle(raw_window_handle, window_size)
.unwrap();
native_widget
}

#[cfg(not(feature = "sm-raw-window-handle-05"))]
fn make_native_widget(
window: &winit::window::Window,
connection: &surfman::Connection,
Expand Down
2 changes: 1 addition & 1 deletion src/platform/egl/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ impl Connection {
raw_handle: rwh_05::RawWindowHandle,
_size: Size2D<i32>,
) -> Result<NativeWidget, Error> {
create_native_widget_from_rwh_05_handle(raw_handle)
Self::create_native_widget_from_rwh_05_handle(raw_handle)
}

#[cfg(all(feature = "sm-raw-window-handle-06", android_platform))]
Expand Down
13 changes: 11 additions & 2 deletions src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,19 @@ pub fn test_context_creation() {
// requested GL version.
}
Err(error) => {
panic!(
let error = format!(
"Failed to create context ({:?}/{:?}): {:?}",
version, flags, error
)
);
// This fail on angle
if cfg!(all(feature = "sm-no-wgl", feature = "sm-angle"))
&& (flags.contains(ContextAttributeFlags::COMPATIBILITY_PROFILE)
|| version == *GL_ES_VERSIONS.last().unwrap())
{
println!("{error}");
} else {
panic!("{error}");
}
}
}
}
Expand Down