forked from mirrors/gecko-dev
		
	This change vendors `wgpu` library in-tree and hooks up the initialization bits. It implements adapter and device initialization and adds a simple test. Complementary ecosystem tracker - https://github.com/gfx-rs/wgpu/issues/374 Current status: - [x] General - [x] figure out the IPC story - [ ] move wgpu crates into a dedicated folder (postponed as https://bugzilla.mozilla.org/show_bug.cgi?id=1594182) - [x] neko rebasing disaster - [x] Linux - [x] avoid depending on spirv_cross - [x] macOS - [x] due to cross-compiling shaders - [x] need the dependency update - [x] stop using gcc - [x] unexpected SSL header collision - https://phabricator.services.mozilla.com/D51148 - [x] undefined Metal symbols - [x] missing webrtc headers for IPDL magic - https://phabricator.services.mozilla.com/D51558 - [x] spirv-cross linking failure in ASAN - https://phabricator.services.mozilla.com/D52688 - [x] Windows - [x] due to "ipc-channel" not supporting Windows yet - [x] due to some exceptional stuff - [x] undefined symbol: `D3D12CreateDevice` - [x] d3d12.dll is not found, dxgi1_4 doesn't present - [x] d3d11.dll and dxgi.dll need to be explicitly loaded on win32 mingw - [x] libbacktrace fails to link on win32 mingw - [x] cc mislinking C++ standard library - [x] Android - [x] spirv-cross fails to build due to exceptions Update-1: We decided to go with IPDL mechanism instead of Rust based ipc-channel (or any alternatives), which unblocks Windows build. Update-2: It appears that WebGPUThreading isn't needed any more as the child thread (and its event loop) is now managed by IPDL infrastructure. This PR removes it 🎉 . Update-3: InstanceProvider is also removed. Update-4: All set, the try is green, waiting for dependent changes to go in. Differential Revision: https://phabricator.services.mozilla.com/D49458 --HG-- rename : dom/webgpu/Adapter.cpp => dom/webgpu/ipc/WebGPUTypes.h rename : third_party/rust/blake2b_simd/Cargo.toml => third_party/rust/ash/Cargo.toml rename : third_party/rust/uluru/Cargo.toml => third_party/rust/atom/Cargo.toml rename : third_party/rust/core-graphics/Cargo.toml => third_party/rust/cocoa/Cargo.toml rename : third_party/rust/crossbeam-deque/LICENSE-MIT => third_party/rust/cocoa/LICENSE-MIT rename : third_party/rust/core-graphics/src/lib.rs => third_party/rust/cocoa/src/lib.rs rename : third_party/rust/uluru/Cargo.toml => third_party/rust/colorful/Cargo.toml rename : third_party/rust/uluru/Cargo.toml => third_party/rust/copyless/Cargo.toml rename : third_party/rust/crossbeam-utils/.cargo-checksum.json => third_party/rust/crossbeam-utils-0.6.5/.cargo-checksum.json rename : third_party/rust/crossbeam-utils/CHANGELOG.md => third_party/rust/crossbeam-utils-0.6.5/CHANGELOG.md rename : third_party/rust/crossbeam-utils/Cargo.toml => third_party/rust/crossbeam-utils-0.6.5/Cargo.toml rename : third_party/rust/crossbeam-deque/LICENSE-MIT => third_party/rust/crossbeam-utils-0.6.5/LICENSE-MIT rename : third_party/rust/crossbeam-utils/README.md => third_party/rust/crossbeam-utils-0.6.5/README.md rename : third_party/rust/crossbeam-utils/benches/atomic_cell.rs => third_party/rust/crossbeam-utils-0.6.5/benches/atomic_cell.rs rename : third_party/rust/crossbeam-utils/src/atomic/atomic_cell.rs => third_party/rust/crossbeam-utils-0.6.5/src/atomic/atomic_cell.rs rename : third_party/rust/crossbeam-utils/src/atomic/mod.rs => third_party/rust/crossbeam-utils-0.6.5/src/atomic/mod.rs rename : third_party/rust/crossbeam-utils/src/backoff.rs => third_party/rust/crossbeam-utils-0.6.5/src/backoff.rs rename : third_party/rust/crossbeam-utils/src/cache_padded.rs => third_party/rust/crossbeam-utils-0.6.5/src/cache_padded.rs rename : third_party/rust/crossbeam-utils/src/lib.rs => third_party/rust/crossbeam-utils-0.6.5/src/lib.rs rename : third_party/rust/crossbeam-utils/src/thread.rs => third_party/rust/crossbeam-utils-0.6.5/src/thread.rs rename : third_party/rust/crossbeam-utils/tests/atomic_cell.rs => third_party/rust/crossbeam-utils-0.6.5/tests/atomic_cell.rs rename : third_party/rust/crossbeam-utils/tests/parker.rs => third_party/rust/crossbeam-utils-0.6.5/tests/parker.rs rename : third_party/rust/crossbeam-utils/tests/sharded_lock.rs => third_party/rust/crossbeam-utils-0.6.5/tests/sharded_lock.rs rename : third_party/rust/crossbeam-utils/tests/thread.rs => third_party/rust/crossbeam-utils-0.6.5/tests/thread.rs rename : third_party/rust/blake2b_simd/Cargo.toml => third_party/rust/gfx-auxil/Cargo.toml rename : third_party/rust/blake2b_simd/Cargo.toml => third_party/rust/gfx-backend-empty/Cargo.toml rename : third_party/rust/blake2b_simd/Cargo.toml => third_party/rust/hibitset/Cargo.toml rename : third_party/rust/crossbeam-deque/LICENSE-MIT => third_party/rust/hibitset/LICENSE-MIT rename : third_party/rust/crossbeam-deque/LICENSE-MIT => third_party/rust/metal/LICENSE-MIT rename : third_party/rust/uluru/Cargo.toml => third_party/rust/range-alloc/Cargo.toml rename : third_party/rust/blake2b_simd/Cargo.toml => third_party/rust/raw-window-handle/Cargo.toml rename : third_party/rust/blake2b_simd/Cargo.toml => third_party/rust/relevant/Cargo.toml rename : third_party/rust/crossbeam-deque/LICENSE-MIT => third_party/rust/relevant/LICENSE-MIT rename : third_party/rust/blake2b_simd/Cargo.toml => third_party/rust/rendy-descriptor/Cargo.toml rename : third_party/rust/uluru/Cargo.toml => third_party/rust/shared_library/Cargo.toml rename : third_party/rust/crossbeam-deque/LICENSE-MIT => third_party/rust/shared_library/LICENSE-MIT rename : third_party/rust/blake2b_simd/Cargo.toml => third_party/rust/storage-map/Cargo.toml rename : third_party/rust/core-graphics/Cargo.toml => third_party/rust/x11/Cargo.toml extra : moz-landing-system : lando
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
// Copyright 2016 GFX developers
 | 
						|
//
 | 
						|
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
 | 
						|
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
 | 
						|
// http://opensource.org/licenses/MIT>, at your option. This file may not be
 | 
						|
// copied, modified, or distributed except according to those terms.
 | 
						|
 | 
						|
#[macro_use]
 | 
						|
extern crate objc;
 | 
						|
 | 
						|
use metal::*;
 | 
						|
 | 
						|
use cocoa::foundation::NSAutoreleasePool;
 | 
						|
 | 
						|
const PROGRAM: &'static str = "
 | 
						|
    #include <metal_stdlib>\n\
 | 
						|
 | 
						|
    using namespace metal;\n\
 | 
						|
 | 
						|
    typedef struct {\n\
 | 
						|
        float2 position;\n\
 | 
						|
        float3 color;\n\
 | 
						|
    } vertex_t;\n\
 | 
						|
 | 
						|
    struct ColorInOut {\n\
 | 
						|
        float4 position [[position]];\n\
 | 
						|
        float4 color;\n\
 | 
						|
    };\n\
 | 
						|
 | 
						|
    vertex ColorInOut vs(device vertex_t* vertex_array [[ buffer(0) ]],\n\
 | 
						|
                                      unsigned int vid [[ vertex_id ]])\n\
 | 
						|
    {\n\
 | 
						|
        ColorInOut out;\n\
 | 
						|
 | 
						|
        out.position = float4(float2(vertex_array[vid].position), 0.0, 1.0);\n\
 | 
						|
        out.color = float4(float3(vertex_array[vid].color), 1.0);\n\
 | 
						|
 | 
						|
        return out;\n\
 | 
						|
    }\n\
 | 
						|
 | 
						|
    fragment float4 ps(ColorInOut in [[stage_in]])\n\
 | 
						|
    {\n\
 | 
						|
        return in.color;\n\
 | 
						|
    };\n\
 | 
						|
";
 | 
						|
 | 
						|
fn main() {
 | 
						|
    let pool = unsafe { NSAutoreleasePool::new(cocoa::base::nil) };
 | 
						|
 | 
						|
    let device = Device::system_default().expect("no device found");
 | 
						|
 | 
						|
    let options = CompileOptions::new();
 | 
						|
    let library = device.new_library_with_source(PROGRAM, &options).unwrap();
 | 
						|
    let (vs, ps) = (
 | 
						|
        library.get_function("vs", None).unwrap(),
 | 
						|
        library.get_function("ps", None).unwrap(),
 | 
						|
    );
 | 
						|
 | 
						|
    let vertex_desc = VertexDescriptor::new();
 | 
						|
 | 
						|
    let desc = RenderPipelineDescriptor::new();
 | 
						|
    desc.set_vertex_function(Some(&vs));
 | 
						|
    desc.set_fragment_function(Some(&ps));
 | 
						|
    desc.set_vertex_descriptor(Some(vertex_desc));
 | 
						|
 | 
						|
    println!("{:?}", desc);
 | 
						|
 | 
						|
    #[cfg(features = "private")]
 | 
						|
    let _reflection = unsafe {
 | 
						|
        RenderPipelineReflection::new(
 | 
						|
            desc.serialize_vertex_data(),
 | 
						|
            desc.serialize_fragment_data(),
 | 
						|
            vertex_desc.serialize_descriptor(),
 | 
						|
            &device,
 | 
						|
            0x8,
 | 
						|
            0x0,
 | 
						|
        )
 | 
						|
    };
 | 
						|
 | 
						|
    unsafe {
 | 
						|
        let () = msg_send![pool, release];
 | 
						|
    }
 | 
						|
}
 |