在 iOS Metal 中执行(支持的)浮点纹理写入时出错

Error when doing (supported) float texture write in iOS Metal

当我尝试从内核写入浮点纹理时,出现错误:

/SourceCache/AcceleratorKit/AcceleratorKit-17.7/ToolsLayers/Debug/MTLDebugComputeCommandEncoder.mm:596: failed assertion `Non-writable texture format MTLPixelFormatR32Float is being bound at index 2 to a shader argument with write access enabled.'

但是,当我查看文档时,该格式是可渲染颜色和可写函数的(请参阅底部的 table):

https://developer.apple.com/library/prerelease/ios/documentation/Metal/Reference/MetalConstants_Ref/index.html#//apple_ref/c/tdef/MTLPixelFormat

部分代码:

// texture creation
MTLTextureDescriptor *floatTextureDescriptor = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatR32Float width:_width height:_height mipmapped:NO];
_myFloatTexture = [self.device newTextureWithDescriptor:floatTextureDescriptor];

// texture binding
[computeCommandEncoder setTexture:_myFloatTexture atIndex:2];

// texture used in the shader
void kernel myKernel(//...
                     texture2d<float, access::write> myFloats [[ texture(2) ]],
                     uint2 gid [[ thread_position_in_grid ]])

我是不是做错了什么或者这可能是一个错误?

只有 iOS9.

才支持它们