Post

Replies

Boosts

Views

Activity

Metal compiler fails on valid usage of depth2d<half> references
I'm working on a parser which translates HLSL to HLSL/MSL. But valid MSL isn't compiling when passing the depth2d to a class and class ctor. The ctor use allows globals to be referenced as member variables by the MSL which typically passes it's parameters from call to call. This reports the following which makes no sense. The code is fine with use of texture2d and references, so seems to be a metal compiler bug. It's saying the ctor input needs to be device space, but it's already decleared as such. This limits any use of depth style textures in MSL. DepthTest.metal:31:16: error: no matching constructor for initialization of 'SamplePSNS'   SamplePSNS shader(shadowMap, sampleBorder);         ^   ~~~~~~~~~~~~~~~~~~~~~~~ DepthTest.metal:18:5: note: candidate constructor not viable: address space mismatch in 1st argument ('depth2d<float>'), parameter type must be 'device depth2d<float> &'   SamplePSNS(   ^ DepthTest.metal:5:8: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided struct SamplePSNS {     ^ DepthTest.metal:5:8: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided #include <metal_stdlib> using namespace metal; struct SamplePSNS {   struct InputPS {     float4 position [[position]];   };       device depth2d<float>& shadowMap;   thread sampler& sampleBorder;       float4 SamplePS(InputPS input) {     return shadowMap.sample_compare(sampleBorder, input.position.xy, input.position.z);   };       SamplePSNS(    device depth2d<float>& shadowMap,    thread sampler& sampleBorder)     : shadowMap(shadowMap),      sampleBorder(sampleBorder)   {} }; fragment float4 SamplePS(   SamplePSNS::InputPS input [[stage_in]],   depth2d<float> shadowMap [[texture(0)]],   sampler sampleBorder [[sampler(0)]]) {   SamplePSNS shader(shadowMap, sampleBorder);   return shader.SamplePS(input); }
1
0
737
Mar ’23
HDR seems broken for iOS on macOS using M2 MBP.
Trying to test HDR running an EDR-capable iOS app on macOS. This is running on the same M2 MBP. On macOS, NSScreen.maximumPotentialExtendedDynamciRangeColorComponentValue returns 16. That's what I'd expect on a mini-led display like this one. On iOS on macOS, UIScreen.potentialEDRHeadroom reports 1.0. That's not correct.
1
0
840
Jun ’23
AppKit does not allow directory to be selected
I have a UTI for "public.directory" and can drag-drop folders onto my app and open them. I also added this to the Info.plist to say the app supported directoryies. But the default "Open" command seems to popup up an NSOpenPanel with folders not selectable. The "Open" button stays disabled. How do I change this? I tried implementing "openDocument", but then it lets through any file type, not just the ones in my Info.plist. So I'd like to just use the default implementation, but need an override for the NSOpenPanel. (IBAction)openDocument:(id)sender { NSOpenPanel *panel = [NSOpenPanel openPanel]; [panel setCanChooseFiles:YES]; [panel setCanChooseDirectories:YES]; [panel setAllowsMultipleSelection:NO]; ... }
Topic: UI Frameworks SubTopic: AppKit Tags:
1
0
606
Oct ’23
WKWebView changes page off "delete" key
I have the following set, but the WKWebView is losing the page content that I'm updating in a given page whenever the user presses the "delete" key. This is in SwiftUI, and I see no way to intercept and block this key. webView.allowsBackForwardNavigationGestures = false Isn't the whole point of setting this flag, to not just have "swipe" navigation stop, but all back/forward support stop? Also with the backForwardList immutable, it's not like I can delete an entry from it.
1
0
647
Mar ’24
Getting SwiftUI macOS app to have fullscreen menu option.
Not sure why this has to be so obscure. But somehow adding the call into toggleFullscreen, even though this appDelegate doesn't have a window set, adds a menu item with the fn+F menu item. Posting this to save other pain. Plus the View menu doesn't even have a reference, and is empty otherwise. Pretty hard to polish something shippable with these unfixed outstanding flaws in the API. CommandGroup(after: .toolbar) { // must call through NSWindow Button("See Below") { // Window isn't set in AppDelegate, so menu item is skipped. // But add fn+F menu item into app. Suo many stupid hacks. appDelegate.window?.toggleFullScreen(nil) } }
1
1
805
Mar ’24
Don't understand how to access heavyweight WKWebView from NSViewRepresentable
I create @State holding a WKWebView (heavyweight object), and then wrap that in a VKViewRepresentable, then @State var myWebView = newWebView(request: URLRequest(url:URL(string: request)!)) This is the only way I can then reference the webView late on to run javascript queries on it. Otherwise, it's embedded in the View/ContentView hierarchy. So then when I moved from Window to WindowGroup, only one of these WKWebView is created. This looks bad to have an empty detail panel in the previous Window. The docs on WindowGroup state that it makes new state to go with each Window in the WindowGroup, but in this case, that's not the case here.
1
0
543
Mar ’24
Xcode 16 doesn't open file with warning/error (C++)
Xcode 16 breaks fundamental feature of error/warning clickthrough to a given header or .cpp file. The issues list will jump to the point of include, instead of the actual error/warning. There's not even a highlighted line since these files aren't the source of the error. Not really sure how this one got through QA since Apple uses Xcode internally. Now I'm constantly having to scour the report navigator, open the items, and then manually jump to file/line.
1
1
508
Oct ’24
How to receive keyboard/mouse on VisionOS?
I tried using the GameController APIs for this, but they didn't seem to work. Is that the recommended API for handling keyboard/mouse? The notifications for mouse and keyboard connect/disconnect don't seem to be defined for visionOS. The visionOS 2.0 touts keyboard and mouse support. The simulator can even forward keyboard/mouse to the app. But there don't seem to be any sample code of how to programatically receive either of these. The game controller works fine (on device, not on Simulator).
1
0
606
Nov ’24
Why can't Xcode projects be opened in multiple workspaces
So Xcode has projects. And I breakup my code/libraries/targets into those. So why after 20 years of Xcode, can a workspace, that holds projects not display the same project opened in another workspace? The workspace redirects all output the project would normally generate in DerivedData to a completely different folder by default. What this means is I have to shut one workspace, and then open the other workspace with a different set of projects to see the ones that are shared. The workspace can't build because it can't open the project shared with another one that is open. VS sln files don't have this issue, so why do workspace files.
1
0
103
Jun ’25
Occlusion query and instance buffers
So the underutilized boolean and counting occlusion queries look ideal for predicated rendering given no API support. This should work for 5s and above. generate a set of indexes in an instance buffer have occlusion query write an 8-byte value to that indexed buffer location read the buffer location from each instance. in vertex shader, lookup buffer value at index, and vertkill all instance vertices if 8-byte value is 0 Seems like this should work. This means the instance buffer is dynamically changed on the gpu after it is submitted. The buffer would need to be "private" space for gpu writes, but could be "shared" on iOS. Does this seem viable? One thing that would be useful as an extension to occlusion only write 0, and not any positive values to knock out instance counts. be able to write to 4 bytes instead of 8 to knock out ICB values being able to submit instanced boxes with queries on each one. The current queries require a scoped draw per box which is a lot of commands submitted
0
0
624
May ’21
Non-standard pthread_setname_np can't set thread name from other threads.
All major platform pthread APIs except for Apple, provide a pthread_setname_np call that takes a pthread_t handle as the first argument. Even pthread_getname_np takes a pthread_t handle. But Apple, only allows setting the name from within the thread. This means std::thread abstractions in C++ can't or don't provide a reasonable call to set or change the thread name from another thread. pthread_setname_np(pthread_t thread, const char* name); <- standard api pthread_setname_np(const char* name); <- Apple's api Could this be standardized? Given that [NSThread setName:] exists and can perform this function, there must be a way to perform this.
0
0
1.7k
May ’22
How does Apple Silicon interpolate fp16 inputs/outputs?
I'm hoping the answer here is that the fp16 values get written out to the parameter buffer to save space on TBDR, but then the gpu promotes them back to fp32 for interpolation, and then back to fp16 for the receiving fragment shader. This would then work around banding if the output and interpolation was done in fp16 math like on Android. There is no documentation that I've found on this, or even on the PowerVR documentation about their gpu.
0
0
739
Jun ’22
ETC2 not supported as 3d texture format on M1
Is this a new development? I have a texture viewer that I develop, and Metal is failing to create a texture for ETC2_RGBA textures when the type is a 3D texture. 2d, cube, and 2d array seem to have support. Are other ETC2 textures preserved as compressed textures in the L1, or are these being decompressed?
0
0
591
Jul ’22
Apple's STL basic_string slows C++ builds
I've been looking at C++ build times with Xcode. The Apple STL library for basic_string auto-instantiates basic_string for 5 types into all files that include it. I'm trying to use alternate STL libraries like EASTL and FASTL which have their own string types, but have to mix in the following types where there are holes. 1. <mutex>, <condition_variable>, <thread> include <system_error> which includes <string> 2. <random> includes <string>. So these slow the build even if header are precompiled, but creates 5x versions of basic_string in char, char8_t, char16_t, char32_t, and wchar_t flavors into every file that happens to include this even indirectly through the headers above. I only use string and basic_string<char> with utf8 data anyhow. I don't need the other 4 types. How can this be improved?
0
0
617
Aug ’22
Metal compiler fails on valid usage of depth2d<half> references
I'm working on a parser which translates HLSL to HLSL/MSL. But valid MSL isn't compiling when passing the depth2d to a class and class ctor. The ctor use allows globals to be referenced as member variables by the MSL which typically passes it's parameters from call to call. This reports the following which makes no sense. The code is fine with use of texture2d and references, so seems to be a metal compiler bug. It's saying the ctor input needs to be device space, but it's already decleared as such. This limits any use of depth style textures in MSL. DepthTest.metal:31:16: error: no matching constructor for initialization of 'SamplePSNS'   SamplePSNS shader(shadowMap, sampleBorder);         ^   ~~~~~~~~~~~~~~~~~~~~~~~ DepthTest.metal:18:5: note: candidate constructor not viable: address space mismatch in 1st argument ('depth2d<float>'), parameter type must be 'device depth2d<float> &'   SamplePSNS(   ^ DepthTest.metal:5:8: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided struct SamplePSNS {     ^ DepthTest.metal:5:8: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided #include <metal_stdlib> using namespace metal; struct SamplePSNS {   struct InputPS {     float4 position [[position]];   };       device depth2d<float>& shadowMap;   thread sampler& sampleBorder;       float4 SamplePS(InputPS input) {     return shadowMap.sample_compare(sampleBorder, input.position.xy, input.position.z);   };       SamplePSNS(    device depth2d<float>& shadowMap,    thread sampler& sampleBorder)     : shadowMap(shadowMap),      sampleBorder(sampleBorder)   {} }; fragment float4 SamplePS(   SamplePSNS::InputPS input [[stage_in]],   depth2d<float> shadowMap [[texture(0)]],   sampler sampleBorder [[sampler(0)]]) {   SamplePSNS shader(shadowMap, sampleBorder);   return shader.SamplePS(input); }
Replies
1
Boosts
0
Views
737
Activity
Mar ’23
HDR seems broken for iOS on macOS using M2 MBP.
Trying to test HDR running an EDR-capable iOS app on macOS. This is running on the same M2 MBP. On macOS, NSScreen.maximumPotentialExtendedDynamciRangeColorComponentValue returns 16. That's what I'd expect on a mini-led display like this one. On iOS on macOS, UIScreen.potentialEDRHeadroom reports 1.0. That's not correct.
Replies
1
Boosts
0
Views
840
Activity
Jun ’23
AppKit does not allow directory to be selected
I have a UTI for "public.directory" and can drag-drop folders onto my app and open them. I also added this to the Info.plist to say the app supported directoryies. But the default "Open" command seems to popup up an NSOpenPanel with folders not selectable. The "Open" button stays disabled. How do I change this? I tried implementing "openDocument", but then it lets through any file type, not just the ones in my Info.plist. So I'd like to just use the default implementation, but need an override for the NSOpenPanel. (IBAction)openDocument:(id)sender { NSOpenPanel *panel = [NSOpenPanel openPanel]; [panel setCanChooseFiles:YES]; [panel setCanChooseDirectories:YES]; [panel setAllowsMultipleSelection:NO]; ... }
Topic: UI Frameworks SubTopic: AppKit Tags:
Replies
1
Boosts
0
Views
606
Activity
Oct ’23
metal-shaderconverter needs to output air files
Seems that metal-shaderconverter can build a metallib, but I need .air files. Then I link the .air files into a single metallib and metallibdsym file. HLSL -> dxc -> DXIL -> metal-shaderconverter -> .metallib But there's no way to link together multiple metallib into a single metallib is there?
Replies
1
Boosts
0
Views
935
Activity
Feb ’24
WKWebView changes page off "delete" key
I have the following set, but the WKWebView is losing the page content that I'm updating in a given page whenever the user presses the "delete" key. This is in SwiftUI, and I see no way to intercept and block this key. webView.allowsBackForwardNavigationGestures = false Isn't the whole point of setting this flag, to not just have "swipe" navigation stop, but all back/forward support stop? Also with the backForwardList immutable, it's not like I can delete an entry from it.
Replies
1
Boosts
0
Views
647
Activity
Mar ’24
Getting SwiftUI macOS app to have fullscreen menu option.
Not sure why this has to be so obscure. But somehow adding the call into toggleFullscreen, even though this appDelegate doesn't have a window set, adds a menu item with the fn+F menu item. Posting this to save other pain. Plus the View menu doesn't even have a reference, and is empty otherwise. Pretty hard to polish something shippable with these unfixed outstanding flaws in the API. CommandGroup(after: .toolbar) { // must call through NSWindow Button("See Below") { // Window isn't set in AppDelegate, so menu item is skipped. // But add fn+F menu item into app. Suo many stupid hacks. appDelegate.window?.toggleFullScreen(nil) } }
Replies
1
Boosts
1
Views
805
Activity
Mar ’24
Don't understand how to access heavyweight WKWebView from NSViewRepresentable
I create @State holding a WKWebView (heavyweight object), and then wrap that in a VKViewRepresentable, then @State var myWebView = newWebView(request: URLRequest(url:URL(string: request)!)) This is the only way I can then reference the webView late on to run javascript queries on it. Otherwise, it's embedded in the View/ContentView hierarchy. So then when I moved from Window to WindowGroup, only one of these WKWebView is created. This looks bad to have an empty detail panel in the previous Window. The docs on WindowGroup state that it makes new state to go with each Window in the WindowGroup, but in this case, that's not the case here.
Replies
1
Boosts
0
Views
543
Activity
Mar ’24
Xcode 16 doesn't open file with warning/error (C++)
Xcode 16 breaks fundamental feature of error/warning clickthrough to a given header or .cpp file. The issues list will jump to the point of include, instead of the actual error/warning. There's not even a highlighted line since these files aren't the source of the error. Not really sure how this one got through QA since Apple uses Xcode internally. Now I'm constantly having to scour the report navigator, open the items, and then manually jump to file/line.
Replies
1
Boosts
1
Views
508
Activity
Oct ’24
How to receive keyboard/mouse on VisionOS?
I tried using the GameController APIs for this, but they didn't seem to work. Is that the recommended API for handling keyboard/mouse? The notifications for mouse and keyboard connect/disconnect don't seem to be defined for visionOS. The visionOS 2.0 touts keyboard and mouse support. The simulator can even forward keyboard/mouse to the app. But there don't seem to be any sample code of how to programatically receive either of these. The game controller works fine (on device, not on Simulator).
Replies
1
Boosts
0
Views
606
Activity
Nov ’24
Why can't Xcode projects be opened in multiple workspaces
So Xcode has projects. And I breakup my code/libraries/targets into those. So why after 20 years of Xcode, can a workspace, that holds projects not display the same project opened in another workspace? The workspace redirects all output the project would normally generate in DerivedData to a completely different folder by default. What this means is I have to shut one workspace, and then open the other workspace with a different set of projects to see the ones that are shared. The workspace can't build because it can't open the project shared with another one that is open. VS sln files don't have this issue, so why do workspace files.
Replies
1
Boosts
0
Views
103
Activity
Jun ’25
Occlusion query and instance buffers
So the underutilized boolean and counting occlusion queries look ideal for predicated rendering given no API support. This should work for 5s and above. generate a set of indexes in an instance buffer have occlusion query write an 8-byte value to that indexed buffer location read the buffer location from each instance. in vertex shader, lookup buffer value at index, and vertkill all instance vertices if 8-byte value is 0 Seems like this should work. This means the instance buffer is dynamically changed on the gpu after it is submitted. The buffer would need to be "private" space for gpu writes, but could be "shared" on iOS. Does this seem viable? One thing that would be useful as an extension to occlusion only write 0, and not any positive values to knock out instance counts. be able to write to 4 bytes instead of 8 to knock out ICB values being able to submit instanced boxes with queries on each one. The current queries require a scoped draw per box which is a lot of commands submitted
Replies
0
Boosts
0
Views
624
Activity
May ’21
Non-standard pthread_setname_np can't set thread name from other threads.
All major platform pthread APIs except for Apple, provide a pthread_setname_np call that takes a pthread_t handle as the first argument. Even pthread_getname_np takes a pthread_t handle. But Apple, only allows setting the name from within the thread. This means std::thread abstractions in C++ can't or don't provide a reasonable call to set or change the thread name from another thread. pthread_setname_np(pthread_t thread, const char* name); <- standard api pthread_setname_np(const char* name); <- Apple's api Could this be standardized? Given that [NSThread setName:] exists and can perform this function, there must be a way to perform this.
Replies
0
Boosts
0
Views
1.7k
Activity
May ’22
How does Apple Silicon interpolate fp16 inputs/outputs?
I'm hoping the answer here is that the fp16 values get written out to the parameter buffer to save space on TBDR, but then the gpu promotes them back to fp32 for interpolation, and then back to fp16 for the receiving fragment shader. This would then work around banding if the output and interpolation was done in fp16 math like on Android. There is no documentation that I've found on this, or even on the PowerVR documentation about their gpu.
Replies
0
Boosts
0
Views
739
Activity
Jun ’22
ETC2 not supported as 3d texture format on M1
Is this a new development? I have a texture viewer that I develop, and Metal is failing to create a texture for ETC2_RGBA textures when the type is a 3D texture. 2d, cube, and 2d array seem to have support. Are other ETC2 textures preserved as compressed textures in the L1, or are these being decompressed?
Replies
0
Boosts
0
Views
591
Activity
Jul ’22
Apple's STL basic_string slows C++ builds
I've been looking at C++ build times with Xcode. The Apple STL library for basic_string auto-instantiates basic_string for 5 types into all files that include it. I'm trying to use alternate STL libraries like EASTL and FASTL which have their own string types, but have to mix in the following types where there are holes. 1. <mutex>, <condition_variable>, <thread> include <system_error> which includes <string> 2. <random> includes <string>. So these slow the build even if header are precompiled, but creates 5x versions of basic_string in char, char8_t, char16_t, char32_t, and wchar_t flavors into every file that happens to include this even indirectly through the headers above. I only use string and basic_string<char> with utf8 data anyhow. I don't need the other 4 types. How can this be improved?
Replies
0
Boosts
0
Views
617
Activity
Aug ’22