Skip to content

Commit

Permalink
Add: Support for RG11B10 and RGB9E5 vertex formats
Browse files Browse the repository at this point in the history
  • Loading branch information
spnda committed Jun 6, 2023
1 parent 0332055 commit 2726a74
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 1 deletion.
4 changes: 4 additions & 0 deletions Common/MVKCommonEnvironment.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ extern "C" {
#endif

/** Building with Xcode versions. iOS version also covers tvOS. */
#ifndef MVK_XCODE_15
# define MVK_XCODE_15 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 140000) || \
(__IPHONE_OS_VERSION_MAX_ALLOWED >= 170000))
#endif
#ifndef MVK_XCODE_14_3
# define MVK_XCODE_14_3 ((__MAC_OS_X_VERSION_MAX_ALLOWED >= 130300) || \
(__IPHONE_OS_VERSION_MAX_ALLOWED >= 160400))
Expand Down
20 changes: 20 additions & 0 deletions MoltenVK/MoltenVK/GPUObjects/MVKDevice.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1737,6 +1737,11 @@
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_0;
}
#endif
#if MVK_XCODE_15
if ( mvkOSVersionIsAtLeast(17.0) ) {
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_1;
}
#endif

#endif

Expand Down Expand Up @@ -1855,6 +1860,11 @@
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_0;
}
#endif
#if MVK_XCODE_15
if ( mvkOSVersionIsAtLeast(17.0) ) {
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_1;
}
#endif

#endif

Expand Down Expand Up @@ -1940,6 +1950,11 @@
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_0;
}
#endif
#if MVK_XCODE_15
if ( mvkOSVersionIsAtLeast(14.0) ) {
_metalFeatures.mslVersionEnum = MTLLanguageVersion3_1;
}
#endif

// This is an Apple GPU--treat it accordingly.
if (supportsMTLGPUFamily(Apple1)) {
Expand Down Expand Up @@ -2055,6 +2070,11 @@
_metalFeatures.mslVersion = SPIRV_CROSS_NAMESPACE::CompilerMSL::Options::make_msl_version(maj, min);

switch (_metalFeatures.mslVersionEnum) {
#if MVK_XCODE_15
case MTLLanguageVersion3_1:
setMSLVersion(3, 1);
break;
#endif
#if MVK_XCODE_14
case MTLLanguageVersion3_0:
setMSLVersion(3, 0);
Expand Down
27 changes: 26 additions & 1 deletion MoltenVK/MoltenVK/GPUObjects/MVKPixelFormats.mm
Original file line number Diff line number Diff line change
Expand Up @@ -922,9 +922,14 @@
addVkFormatDesc( R64G64B64A64_SINT, Invalid, Invalid, Invalid, Invalid, 1, 1, 32, ColorFloat );
addVkFormatDesc( R64G64B64A64_SFLOAT, Invalid, Invalid, Invalid, Invalid, 1, 1, 32, ColorFloat );

#if MVK_XCODE_15
addVkFormatDesc( B10G11R11_UFLOAT_PACK32, RG11B10Float, Invalid, FloatRG11B10, Invalid, 1, 1, 4, ColorFloat );
addVkFormatDesc( E5B9G9R9_UFLOAT_PACK32, RGB9E5Float, Invalid, FloatRGB9E5, Invalid, 1, 1, 4, ColorFloat );
#else
addVkFormatDesc( B10G11R11_UFLOAT_PACK32, RG11B10Float, Invalid, Invalid, Invalid, 1, 1, 4, ColorFloat );
addVkFormatDesc( E5B9G9R9_UFLOAT_PACK32, RGB9E5Float, Invalid, Invalid, Invalid, 1, 1, 4, ColorFloat );

#endif

addVkFormatDesc( D32_SFLOAT, Depth32Float, Invalid, Invalid, Invalid, 1, 1, 4, DepthStencil );
addVkFormatDesc( D32_SFLOAT_S8_UINT, Depth32Float_Stencil8, Invalid, Invalid, Invalid, 1, 1, 5, DepthStencil );

Expand Down Expand Up @@ -1338,6 +1343,11 @@
addMTLVertexFormatDesc( Half, None, None );

addMTLVertexFormatDesc( UChar4Normalized_BGRA, None, None );

#if MVK_XCODE_15
addMTLVertexFormatDesc( FloatRG11B10, Vertex, Vertex );
addMTLVertexFormatDesc( FloatRGB9E5, Vertex, Vertex );
#endif

// When adding to this list, be sure to ensure _mtlVertexFormatCount is large enough for the format count
}
Expand Down Expand Up @@ -1634,6 +1644,11 @@
addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, Short, Vertex );
addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, Half, Vertex );
addFeatSetMTLVtxFmtCaps( macOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex );

#if MVK_XCODE_15
addGPUOSMTLVtxFmtCaps( Apple5, 14.0, FloatRG11B10, Vertex );
addGPUOSMTLVtxFmtCaps( Apple5, 14.0, FloatRGB9E5, Vertex );
#endif
#endif

#if MVK_TVOS
Expand Down Expand Up @@ -1727,6 +1742,11 @@
addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, Short, Vertex );
addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, Half, Vertex );
addFeatSetMTLVtxFmtCaps( tvOS_GPUFamily1_v3, UChar4Normalized_BGRA, Vertex );

#if MVK_XCODE_15
addGPUOSMTLVtxFmtCaps( Apple5, 17.0, FloatRG11B10, Vertex );
addGPUOSMTLVtxFmtCaps( Apple5, 17.0, FloatRGB9E5, Vertex );
#endif

// Disable for tvOS simulator last.
#if MVK_OS_SIMULATOR
Expand Down Expand Up @@ -1884,6 +1904,11 @@
addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, Short, Vertex );
addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, Half, Vertex );
addFeatSetMTLVtxFmtCaps( iOS_GPUFamily1_v4, UChar4Normalized_BGRA, Vertex );

#if MVK_XCODE_15
addGPUOSMTLVtxFmtCaps( Apple5, 17.0, FloatRG11B10, Vertex );
addGPUOSMTLVtxFmtCaps( Apple5, 17.0, FloatRGB9E5, Vertex );
#endif

// Disable for iOS simulator last.
#if MVK_OS_SIMULATOR
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@
#define mslVer(MJ, MN, PT) mslVersionMajor == MJ && mslVersionMinor == MN && mslVersionPoint == PT

MTLLanguageVersion mslVerEnum = (MTLLanguageVersion)0;
#if MVK_XCODE_15
if (mslVer(3, 1, 0)) {
mslVerEnum = MTLLanguageVersion3_1;
} else
#endif
#if MVK_XCODE_14
if (mslVer(3, 0, 0)) {
mslVerEnum = MTLLanguageVersion3_0;
Expand Down

0 comments on commit 2726a74

Please sign in to comment.