Last active
July 5, 2025 16:00
-
-
Save shinyquagsire23/81c86f4bf670aaa68b5804080ff964a0 to your computer and use it in GitHub Desktop.
Revisions
-
shinyquagsire23 renamed this gist
Jul 14, 2024 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
shinyquagsire23 revised this gist
Jul 14, 2024 . 1 changed file with 82 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,82 @@ let forceFastSecretTextureFormats = true // https://github.com/WebKit/WebKit/blob/f86d3400c875519b3f3c368f1ea9a37ed8a1d11b/Source/WebGPU/WebGPU/BindGroup.mm#L43 let kCVPixelFormatType_420YpCbCr10PackedBiPlanarFullRange = 0x70663230 as OSType // pf20 let kCVPixelFormatType_422YpCbCr10PackedBiPlanarFullRange = 0x70663232 as OSType // pf22 let kCVPixelFormatType_444YpCbCr10PackedBiPlanarFullRange = 0x70663434 as OSType // pf44 let kCVPixelFormatType_420YpCbCr10PackedBiPlanarVideoRange = 0x70343230 as OSType // p420 let kCVPixelFormatType_422YpCbCr10PackedBiPlanarVideoRange = 0x70343232 as OSType // p422 let kCVPixelFormatType_444YpCbCr10PackedBiPlanarVideoRange = 0x70343434 as OSType // p444 // Apparently kCVPixelFormatType_Lossless_420YpCbCr8BiPlanarVideoRange is known as kCVPixelFormatType_AGX_420YpCbCr8BiPlanarVideoRange in WebKit. // Other formats Apple forgot let kCVPixelFormatType_Lossy_420YpCbCr10PackedBiPlanarFullRange = 0x2D786630 as OSType // -xf0 let kCVPixelFormatType_Lossless_422YpCbCr10PackedBiPlanarFullRange = 0x26786632 as OSType // &xf2 let kCVPixelFormatType_Lossy_422YpCbCr10PackedBiPlanarFullRange = 0x2D786632 as OSType // -xf2 // The Metal texture formats for each of the planes of a given CVPixelFormatType static func getTextureTypesForFormat(_ format: OSType) -> [MTLPixelFormat] { switch(format) { // 8-bit biplanar case kCVPixelFormatType_Lossy_420YpCbCr8BiPlanarVideoRange, kCVPixelFormatType_Lossless_420YpCbCr8BiPlanarVideoRange, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, kCVPixelFormatType_Lossy_420YpCbCr8BiPlanarFullRange, kCVPixelFormatType_Lossless_420YpCbCr8BiPlanarFullRange, kCVPixelFormatType_420YpCbCr8BiPlanarFullRange, kCVPixelFormatType_422YpCbCr8BiPlanarVideoRange, kCVPixelFormatType_Lossy_420YpCbCr8BiPlanarFullRange, kCVPixelFormatType_Lossless_420YpCbCr8BiPlanarFullRange, kCVPixelFormatType_420YpCbCr8BiPlanarFullRange, kCVPixelFormatType_444YpCbCr8BiPlanarVideoRange, kCVPixelFormatType_444YpCbCr8BiPlanarFullRange: return forceFastSecretTextureFormats ? [MTLPixelFormat.init(rawValue: MTLPixelFormatYCBCR8_420_2P_sRGB)!, MTLPixelFormat.invalid] : [MTLPixelFormat.r8Unorm, MTLPixelFormat.rg8Unorm] // 10-bit biplanar case kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange, kCVPixelFormatType_420YpCbCr10BiPlanarFullRange, kCVPixelFormatType_422YpCbCr10BiPlanarVideoRange, kCVPixelFormatType_422YpCbCr10BiPlanarFullRange, kCVPixelFormatType_444YpCbCr10BiPlanarVideoRange, kCVPixelFormatType_444YpCbCr10BiPlanarFullRange: return forceFastSecretTextureFormats ? [MTLPixelFormat.init(rawValue: MTLPixelFormatYCBCR10_420_2P_sRGB)!, MTLPixelFormat.invalid] : [MTLPixelFormat.r16Unorm, MTLPixelFormat.rg16Unorm] // // If it's good enough for WebKit, it's good enough for me. // https://github.com/WebKit/WebKit/blob/f86d3400c875519b3f3c368f1ea9a37ed8a1d11b/Source/WebGPU/WebGPU/MetalSPI.h#L30 // https://github.com/WebKit/WebKit/blob/f86d3400c875519b3f3c368f1ea9a37ed8a1d11b/Source/WebGPU/WebGPU/BindGroup.mm#L43 // https://github.com/WebKit/WebKit/blob/ef1916c078676dca792cef30502a765d398dcc18/Source/WebGPU/WebGPU/BindGroup.mm#L416 // // 10-bit packed biplanar 4:2:0 case kCVPixelFormatType_Lossy_420YpCbCr10PackedBiPlanarVideoRange, kCVPixelFormatType_Lossless_420YpCbCr10PackedBiPlanarVideoRange, kCVPixelFormatType_Lossy_420YpCbCr10PackedBiPlanarFullRange, kCVPixelFormatType_Lossless_420YpCbCr10PackedBiPlanarFullRange, kCVPixelFormatType_420YpCbCr10PackedBiPlanarFullRange, kCVPixelFormatType_420YpCbCr10PackedBiPlanarVideoRange: return [MTLPixelFormat.init(rawValue: MTLPixelFormatYCBCR10_420_2P_PACKED_sRGB)!, MTLPixelFormat.invalid] // MTLPixelFormatYCBCR10_420_2P_PACKED // 10-bit packed biplanar 4:2:2 case kCVPixelFormatType_Lossy_422YpCbCr10PackedBiPlanarVideoRange, kCVPixelFormatType_Lossless_422YpCbCr10PackedBiPlanarVideoRange, kCVPixelFormatType_Lossy_422YpCbCr10PackedBiPlanarFullRange, kCVPixelFormatType_Lossless_422YpCbCr10PackedBiPlanarFullRange, kCVPixelFormatType_422YpCbCr10PackedBiPlanarFullRange, kCVPixelFormatType_422YpCbCr10PackedBiPlanarVideoRange: return [MTLPixelFormat.init(rawValue: MTLPixelFormatYCBCR10_422_2P_PACKED_sRGB)!, MTLPixelFormat.invalid] // MTLPixelFormatYCBCR10_422_2P_PACKED // 10-bit packed biplanar 4:4:4 case kCVPixelFormatType_444YpCbCr10PackedBiPlanarFullRange, kCVPixelFormatType_444YpCbCr10PackedBiPlanarVideoRange: return [MTLPixelFormat.init(rawValue: MTLPixelFormatYCBCR10_444_2P_PACKED_sRGB)!, MTLPixelFormat.invalid] // MTLPixelFormatYCBCR10_444_2P_PACKED // Guess 8-bit biplanar otherwise default: let formatStr = coreVideoPixelFormatToStr[format, default: "unknown"] print("Warning: Pixel format \(formatStr) (\(format)) is not currently accounted for! Returning 8-bit vals") return [MTLPixelFormat.r8Unorm, MTLPixelFormat.rg8Unorm] } } -
shinyquagsire23 revised this gist
Jul 14, 2024 . 1 changed file with 76 additions and 76 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,84 +1,84 @@ // // Non-conclusive list of interesting private Metal pixel formats // let MTLPixelFormatYCBCR8_420_2P: UInt = 500 let MTLPixelFormatYCBCR8_422_1P: UInt = 501 let MTLPixelFormatYCBCR8_422_2P: UInt = 502 let MTLPixelFormatYCBCR8_444_2P: UInt = 503 let MTLPixelFormatYCBCR10_444_1P: UInt = 504 let MTLPixelFormatYCBCR10_420_2P: UInt = 505 let MTLPixelFormatYCBCR10_422_2P: UInt = 506 let MTLPixelFormatYCBCR10_444_2P: UInt = 507 let MTLPixelFormatYCBCR10_420_2P_PACKED: UInt = 508 let MTLPixelFormatYCBCR10_422_2P_PACKED: UInt = 509 let MTLPixelFormatYCBCR10_444_2P_PACKED: UInt = 510 let MTLPixelFormatYCBCR8_420_2P_sRGB: UInt = 520 let MTLPixelFormatYCBCR8_422_1P_sRGB: UInt = 521 let MTLPixelFormatYCBCR8_422_2P_sRGB: UInt = 522 let MTLPixelFormatYCBCR8_444_2P_sRGB: UInt = 523 let MTLPixelFormatYCBCR10_444_1P_sRGB: UInt = 524 let MTLPixelFormatYCBCR10_420_2P_sRGB: UInt = 525 let MTLPixelFormatYCBCR10_422_2P_sRGB: UInt = 526 let MTLPixelFormatYCBCR10_444_2P_sRGB: UInt = 527 let MTLPixelFormatYCBCR10_420_2P_PACKED_sRGB: UInt = 528 let MTLPixelFormatYCBCR10_422_2P_PACKED_sRGB: UInt = 529 let MTLPixelFormatYCBCR10_444_2P_PACKED_sRGB: UInt = 530 let MTLPixelFormatRGB8_420_2P: UInt = 540 let MTLPixelFormatRGB8_422_2P: UInt = 541 let MTLPixelFormatRGB8_444_2P: UInt = 542 let MTLPixelFormatRGB10_420_2P: UInt = 543 let MTLPixelFormatRGB10_422_2P: UInt = 544 let MTLPixelFormatRGB10_444_2P: UInt = 545 let MTLPixelFormatRGB10_420_2P_PACKED: UInt = 546 let MTLPixelFormatRGB10_422_2P_PACKED: UInt = 547 let MTLPixelFormatRGB10_444_2P_PACKED: UInt = 548 let MTLPixelFormatRGB10A8_2P_XR10: UInt = 550 let MTLPixelFormatRGB10A8_2P_XR10_sRGB: UInt = 551 let MTLPixelFormatBGRA10_XR: UInt = 552 let MTLPixelFormatBGRA10_XR_sRGB: UInt = 553 let MTLPixelFormatBGR10_XR: UInt = 554 let MTLPixelFormatBGR10_XR_sRGB: UInt = 555 let MTLPixelFormatRGBA16Float_XR: UInt = 556 let MTLPixelFormatYCBCRA8_444_1P: UInt = 560 let MTLPixelFormatYCBCR12_420_2P: UInt = 570 let MTLPixelFormatYCBCR12_422_2P: UInt = 571 let MTLPixelFormatYCBCR12_444_2P: UInt = 572 let MTLPixelFormatYCBCR12_420_2P_PQ: UInt = 573 let MTLPixelFormatYCBCR12_422_2P_PQ: UInt = 574 let MTLPixelFormatYCBCR12_444_2P_PQ: UInt = 575 let MTLPixelFormatR10Unorm_X6: UInt = 576 let MTLPixelFormatR10Unorm_X6_sRGB: UInt = 577 let MTLPixelFormatRG10Unorm_X12: UInt = 578 let MTLPixelFormatRG10Unorm_X12_sRGB: UInt = 579 let MTLPixelFormatYCBCR12_420_2P_PACKED: UInt = 580 let MTLPixelFormatYCBCR12_422_2P_PACKED: UInt = 581 let MTLPixelFormatYCBCR12_444_2P_PACKED: UInt = 582 let MTLPixelFormatYCBCR12_420_2P_PACKED_PQ: UInt = 583 let MTLPixelFormatYCBCR12_422_2P_PACKED_PQ: UInt = 584 let MTLPixelFormatYCBCR12_444_2P_PACKED_PQ: UInt = 585 let MTLPixelFormatRGB10A2Unorm_sRGB: UInt = 586 let MTLPixelFormatRGB10A2Unorm_PQ: UInt = 587 let MTLPixelFormatR10Unorm_PACKED: UInt = 588 let MTLPixelFormatRG10Unorm_PACKED: UInt = 589 let MTLPixelFormatYCBCR10_444_1P_XR: UInt = 590 let MTLPixelFormatYCBCR10_420_2P_XR: UInt = 591 let MTLPixelFormatYCBCR10_422_2P_XR: UInt = 592 let MTLPixelFormatYCBCR10_444_2P_XR: UInt = 593 let MTLPixelFormatYCBCR10_420_2P_PACKED_XR: UInt = 594 let MTLPixelFormatYCBCR10_422_2P_PACKED_XR: UInt = 595 let MTLPixelFormatYCBCR10_444_2P_PACKED_XR: UInt = 596 let MTLPixelFormatYCBCR12_420_2P_XR: UInt = 597 let MTLPixelFormatYCBCR12_422_2P_XR: UInt = 598 let MTLPixelFormatYCBCR12_444_2P_XR: UInt = 599 let MTLPixelFormatYCBCR12_420_2P_PACKED_XR: UInt = 600 let MTLPixelFormatYCBCR12_422_2P_PACKED_XR: UInt = 601 let MTLPixelFormatYCBCR12_444_2P_PACKED_XR: UInt = 602 let MTLPixelFormatR12Unorm_X4: UInt = 603 let MTLPixelFormatR12Unorm_X4_PQ: UInt = 604 let MTLPixelFormatRG12Unorm_X8: UInt = 605 let MTLPixelFormatR10Unorm_X6_PQ: UInt = 606 -
shinyquagsire23 created this gist
Jul 6, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,84 @@ // // Non-conclusive list of interesting private Metal pixel formats // let MTLPixelFormatYCBCR8_420_2P = 500 let MTLPixelFormatYCBCR8_422_1P = 501 let MTLPixelFormatYCBCR8_422_2P = 502 let MTLPixelFormatYCBCR8_444_2P = 503 let MTLPixelFormatYCBCR10_444_1P = 504 let MTLPixelFormatYCBCR10_420_2P = 505 let MTLPixelFormatYCBCR10_422_2P = 506 let MTLPixelFormatYCBCR10_444_2P = 507 let MTLPixelFormatYCBCR10_420_2P_PACKED = 508 let MTLPixelFormatYCBCR10_422_2P_PACKED = 509 let MTLPixelFormatYCBCR10_444_2P_PACKED = 510 let MTLPixelFormatYCBCR8_420_2P_sRGB = 520 let MTLPixelFormatYCBCR8_422_1P_sRGB = 521 let MTLPixelFormatYCBCR8_422_2P_sRGB = 522 let MTLPixelFormatYCBCR8_444_2P_sRGB = 523 let MTLPixelFormatYCBCR10_444_1P_sRGB = 524 let MTLPixelFormatYCBCR10_420_2P_sRGB = 525 let MTLPixelFormatYCBCR10_422_2P_sRGB = 526 let MTLPixelFormatYCBCR10_444_2P_sRGB = 527 let MTLPixelFormatYCBCR10_420_2P_PACKED_sRGB = 528 let MTLPixelFormatYCBCR10_422_2P_PACKED_sRGB = 529 let MTLPixelFormatYCBCR10_444_2P_PACKED_sRGB = 530 let MTLPixelFormatRGB8_420_2P = 540 let MTLPixelFormatRGB8_422_2P = 541 let MTLPixelFormatRGB8_444_2P = 542 let MTLPixelFormatRGB10_420_2P = 543 let MTLPixelFormatRGB10_422_2P = 544 let MTLPixelFormatRGB10_444_2P = 545 let MTLPixelFormatRGB10_420_2P_PACKED = 546 let MTLPixelFormatRGB10_422_2P_PACKED = 547 let MTLPixelFormatRGB10_444_2P_PACKED = 548 let MTLPixelFormatRGB10A8_2P_XR10 = 550 let MTLPixelFormatRGB10A8_2P_XR10_sRGB = 551 let MTLPixelFormatBGRA10_XR = 552 let MTLPixelFormatBGRA10_XR_sRGB = 553 let MTLPixelFormatBGR10_XR = 554 let MTLPixelFormatBGR10_XR_sRGB = 555 let MTLPixelFormatRGBA16Float_XR = 556 let MTLPixelFormatYCBCRA8_444_1P = 560 let MTLPixelFormatYCBCR12_420_2P = 570 let MTLPixelFormatYCBCR12_422_2P = 571 let MTLPixelFormatYCBCR12_444_2P = 572 let MTLPixelFormatYCBCR12_420_2P_PQ = 573 let MTLPixelFormatYCBCR12_422_2P_PQ = 574 let MTLPixelFormatYCBCR12_444_2P_PQ = 575 let MTLPixelFormatR10Unorm_X6 = 576 let MTLPixelFormatR10Unorm_X6_sRGB = 577 let MTLPixelFormatRG10Unorm_X12 = 578 let MTLPixelFormatRG10Unorm_X12_sRGB = 579 let MTLPixelFormatYCBCR12_420_2P_PACKED = 580 let MTLPixelFormatYCBCR12_422_2P_PACKED = 581 let MTLPixelFormatYCBCR12_444_2P_PACKED = 582 let MTLPixelFormatYCBCR12_420_2P_PACKED_PQ = 583 let MTLPixelFormatYCBCR12_422_2P_PACKED_PQ = 584 let MTLPixelFormatYCBCR12_444_2P_PACKED_PQ = 585 let MTLPixelFormatRGB10A2Unorm_sRGB = 586 let MTLPixelFormatRGB10A2Unorm_PQ = 587 let MTLPixelFormatR10Unorm_PACKED = 588 let MTLPixelFormatRG10Unorm_PACKED = 589 let MTLPixelFormatYCBCR10_444_1P_XR = 590 let MTLPixelFormatYCBCR10_420_2P_XR = 591 let MTLPixelFormatYCBCR10_422_2P_XR = 592 let MTLPixelFormatYCBCR10_444_2P_XR = 593 let MTLPixelFormatYCBCR10_420_2P_PACKED_XR = 594 let MTLPixelFormatYCBCR10_422_2P_PACKED_XR = 595 let MTLPixelFormatYCBCR10_444_2P_PACKED_XR = 596 let MTLPixelFormatYCBCR12_420_2P_XR = 597 let MTLPixelFormatYCBCR12_422_2P_XR = 598 let MTLPixelFormatYCBCR12_444_2P_XR = 599 let MTLPixelFormatYCBCR12_420_2P_PACKED_XR = 600 let MTLPixelFormatYCBCR12_422_2P_PACKED_XR = 601 let MTLPixelFormatYCBCR12_444_2P_PACKED_XR = 602 let MTLPixelFormatR12Unorm_X4 = 603 let MTLPixelFormatR12Unorm_X4_PQ = 604 let MTLPixelFormatRG12Unorm_X8 = 605 let MTLPixelFormatR10Unorm_X6_PQ = 606