Skip to content

Commit

Permalink
[WebXR] Helpers for working with simd types
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=264910
rdar://118482297

Reviewed by Tim Horton.

PlatformXRPose is a helper for working with transforms as simd4_float4x4.

* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/xr/cocoa/PlatformXRPose.cpp: Added.
(PlatformXRPose::position const):
(PlatformXRPose::orientation const):
(PlatformXRPose::pose const):
(PlatformXRPose::distanceToPose const):
(PlatformXRPose::verticalTransformPose const):
(PlatformXRPose::PlatformXRPose):
* Source/WebCore/platform/xr/cocoa/PlatformXRPose.h: Added.

Canonical link: https://commits.webkit.org/270803@main
  • Loading branch information
djg committed Nov 16, 2023
1 parent ec96d3d commit 44e258d
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 0 deletions.
1 change: 1 addition & 0 deletions Source/WebCore/SourcesCocoa.txt
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,7 @@ platform/text/cocoa/LocalizedDateCache.mm
platform/text/mac/TextBoundaries.mm
platform/text/mac/TextCheckingMac.mm
platform/xr/cocoa/PlatformXRCocoa.mm
platform/xr/cocoa/PlatformXRPose.cpp
platform/text/mac/CoreTextChineseCompositionEngine.cpp
platform/text/mac/CoreTextCompositionEngine.cpp
rendering/AttachmentLayout.mm
Expand Down
6 changes: 6 additions & 0 deletions Source/WebCore/WebCore.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1247,6 +1247,7 @@
38F23AB51E8E83D000CE46F5 /* JSWebGPUComputePipelineState.h in Headers */ = {isa = PBXBuildFile; fileRef = 38F23AB21E8E83D000CE46F5 /* JSWebGPUComputePipelineState.h */; };
3A18A2ED2AFEAA7C00DB976C /* MarkupExclusionRule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A18A2EC2AFEAA7C00DB976C /* MarkupExclusionRule.h */; settings = {ATTRIBUTES = (Private, ); }; };
3A2FE8CF2978CC7800BA1D92 /* GCGLSpan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A2FE8CE2978CC7800BA1D92 /* GCGLSpan.h */; settings = {ATTRIBUTES = (Private, ); }; };
3A3A05812B04973800017309 /* PlatformXRPose.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A3A05802B04971B00017309 /* PlatformXRPose.h */; settings = {ATTRIBUTES = (Private, ); }; };
3A7D62DA29D49EC900D57DAC /* SWRegistrationDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A7D62D829D49EC800D57DAC /* SWRegistrationDatabase.h */; settings = {ATTRIBUTES = (Private, ); }; };
3ABD156A297A289300AF9D76 /* GraphicsContextGLEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ABD1569297A289200AF9D76 /* GraphicsContextGLEnums.h */; settings = {ATTRIBUTES = (Private, ); }; };
3ABD156C297A340100AF9D76 /* GraphicsContextGLActiveInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ABD156B297A340000AF9D76 /* GraphicsContextGLActiveInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
Expand Down Expand Up @@ -9588,6 +9589,8 @@
38F23AB21E8E83D000CE46F5 /* JSWebGPUComputePipelineState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGPUComputePipelineState.h; sourceTree = "<group>"; };
3A18A2EC2AFEAA7C00DB976C /* MarkupExclusionRule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkupExclusionRule.h; sourceTree = "<group>"; };
3A2FE8CE2978CC7800BA1D92 /* GCGLSpan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCGLSpan.h; sourceTree = "<group>"; };
3A3A057F2B04971B00017309 /* PlatformXRPose.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlatformXRPose.cpp; sourceTree = "<group>"; };
3A3A05802B04971B00017309 /* PlatformXRPose.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformXRPose.h; sourceTree = "<group>"; };
3A7D62D729D49EC800D57DAC /* SWRegistrationDatabase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWRegistrationDatabase.cpp; sourceTree = "<group>"; };
3A7D62D829D49EC800D57DAC /* SWRegistrationDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWRegistrationDatabase.h; sourceTree = "<group>"; };
3ABD1569297A289200AF9D76 /* GraphicsContextGLEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsContextGLEnums.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -25432,6 +25435,8 @@
children = (
5273CC75256103CF00850007 /* PlatformXRCocoa.h */,
5273CC74256103CF00850007 /* PlatformXRCocoa.mm */,
3A3A057F2B04971B00017309 /* PlatformXRPose.cpp */,
3A3A05802B04971B00017309 /* PlatformXRPose.h */,
);
path = cocoa;
sourceTree = "<group>";
Expand Down Expand Up @@ -40869,6 +40874,7 @@
E1EE8B722412B2A800E794D6 /* PlatformXR.h in Headers */,
5273CC77256103CF00850007 /* PlatformXRCocoa.h in Headers */,
E1C1A39E2480080800E0AF66 /* PlatformXROpenXR.h in Headers */,
3A3A05812B04973800017309 /* PlatformXRPose.h in Headers */,
712BE4801FE864A7002031CC /* PlaybackDirection.h in Headers */,
CDA29A321CC01A9500901CCF /* PlaybackSessionInterfaceAVKit.h in Headers */,
CDA29A171CBDA56C00901CCF /* PlaybackSessionInterfaceMac.h in Headers */,
Expand Down
55 changes: 55 additions & 0 deletions Source/WebCore/platform/xr/cocoa/PlatformXRPose.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/*
* Copyright (C) 2021 Apple Inc. All rights reserved.
*/

#include "config.h"
#include "PlatformXRPose.h"

#if ENABLE(WEBXR) && PLATFORM(COCOA)

WebCore::FloatPoint3D PlatformXRPose::position() const
{
simd_float3 simdPosition = this->simdPosition();
return { static_cast<float>(simdPosition.x), static_cast<float>(simdPosition.y), static_cast<float>(simdPosition.z) };
}

PlatformXR::Device::FrameData::FloatQuaternion PlatformXRPose::orientation() const
{
simd_quatf simdOrientation = this->simdOrientation();
return { simdOrientation.vector.x, simdOrientation.vector.y, simdOrientation.vector.z, simdOrientation.vector.w };
}

PlatformXR::Device::FrameData::Pose PlatformXRPose::pose() const
{
PlatformXR::Device::FrameData::Pose pose;
pose.position = position();
pose.orientation = orientation();
return pose;
}

float PlatformXRPose::distanceToPose(const PlatformXRPose& otherPose) const
{
simd_float3 position = simdPosition();
simd_float3 otherPosition = otherPose.simdPosition();
return simd_distance(position, otherPosition);
}

PlatformXRPose PlatformXRPose::verticalTransformPose() const
{
simd_float3 position = simdPosition();
simd_float4x4 transform = matrix_identity_float4x4;
transform.columns[3].y = position.y;
return PlatformXRPose(transform);
}

PlatformXRPose::PlatformXRPose(const simd_float4x4& transform)
: m_simdTransform(transform)
{
}

PlatformXRPose::PlatformXRPose(const simd_float4x4& transform, const simd_float4x4& parentTransform)
{
m_simdTransform = simd_mul(parentTransform, transform);
}

#endif // ENABLE(WEBXR) && PLATFORM(COCOA)
33 changes: 33 additions & 0 deletions Source/WebCore/platform/xr/cocoa/PlatformXRPose.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright (C) 2021 Apple Inc. All rights reserved.
*/

#pragma once

#if ENABLE(WEBXR) && PLATFORM(COCOA)

#include <WebCore/PlatformXR.h>
#include <simd/simd.h>

class PlatformXRPose {
WTF_MAKE_FAST_ALLOCATED;

public:
simd_float4x4 simdTransform() const { return m_simdTransform; }
simd_float3 simdPosition() const { return m_simdTransform.columns[3].xyz; }
simd_quatf simdOrientation() const { return simd_quaternion(m_simdTransform); }
WEBCORE_EXPORT WebCore::FloatPoint3D position() const;
WEBCORE_EXPORT PlatformXR::Device::FrameData::FloatQuaternion orientation() const;
WEBCORE_EXPORT PlatformXR::Device::FrameData::Pose pose() const;

WEBCORE_EXPORT float distanceToPose(const PlatformXRPose&) const;
WEBCORE_EXPORT PlatformXRPose verticalTransformPose() const;

WEBCORE_EXPORT PlatformXRPose(const simd_float4x4&);
WEBCORE_EXPORT PlatformXRPose(const simd_float4x4&, const simd_float4x4& parentTransform);

private:
simd_float4x4 m_simdTransform;
};

#endif // ENABLE(WEBXR) && PLATFORM(COCOA)

0 comments on commit 44e258d

Please sign in to comment.