/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef WGPU_h
#define WGPU_h
// We have to include nsString.h before wgpu_ffi_generated.h because the
// latter is wrapped in an extern "C" declaration but ends up including
// nsString.h (See bug 1784086)
#include "nsString.h"
// Prelude of types necessary before including wgpu_ffi_generated.h
namespace mozilla {
namespace ipc {
class ByteBuf;
}
// namespace ipc
namespace webgpu {
namespace ffi {
#define WGPU_INLINE
#define WGPU_FUNC
extern "C" {
#include "mozilla/webgpu/ffi/wgpu_ffi_generated.h"
}
#undef WGPU_INLINE
#undef WGPU_FUNC
}
// namespace ffi
inline ffi::WGPUByteBuf* ToFFI(mozilla::ipc::ByteBuf* x) {
return reinterpret_cast<ffi::WGPUByteBuf*>(x);
}
inline const ffi::WGPUByteBuf* ToFFI(
const mozilla::ipc::ByteBuf* x) {
return reinterpret_cast<
const ffi::WGPUByteBuf*>(x);
}
inline mozilla::ipc::ByteBuf* FromFFI(ffi::WGPUByteBuf* x) {
return reinterpret_cast<mozilla::ipc::ByteBuf*>(x);
}
inline const mozilla::ipc::ByteBuf* FromFFI(
const ffi::WGPUByteBuf* x) {
return reinterpret_cast<
const mozilla::ipc::ByteBuf*>(x);
}
}
// namespace webgpu
}
// namespace mozilla
namespace std {
template <>
struct default_delete<mozilla::webgpu::ffi::WGPUClient> {
public:
void operator()(mozilla::webgpu::ffi::WGPUClient* aPtr)
const {
mozilla::webgpu::ffi::wgpu_client_delete(aPtr);
}
};
template <>
struct default_delete<mozilla::webgpu::ffi::WGPUGlobal> {
public:
void operator()(mozilla::webgpu::ffi::WGPUGlobal* aPtr)
const {
mozilla::webgpu::ffi::wgpu_server_delete(aPtr);
}
};
template <>
struct default_delete<mozilla::webgpu::ffi::WGPUMetalSharedEventHandle> {
public:
void operator()(
mozilla::webgpu::ffi::WGPUMetalSharedEventHandle* aPtr)
const {
mozilla::webgpu::ffi::wgpu_server_delete_metal_shared_event(aPtr);
}
};
}
// namespace std
#endif // WGPU_h