2016-11-24 5 views
1

最近、2016年末のMacBook ProにRadeon 445 gpuが追加されました。現在、iOSとEl Capitanの両方でうまく動作しているカーネル関数に問題があります。 Nvidia gpu's。私はインテルを強制しようとした screenshot where Z goes from left to rightメタルカーネル関数の3Dテクスチャの補間は、Radeon gpuでは機能しません

constexpr sampler s = sampler(coord::normalized, 
           address::repeat, 
           filter::linear); 

問題をこの画像では非常に表示されている:3Dテクスチャは、私はこのような私のサンプラーを指定した場合でも、Z軸方向に補間されていないようですアイリス・グラフィックス(統合)を使用して:

NSArray *devices = MTLCopyAllDevices(); 
device = devices[1]; 

代わりの

device = MTLCreateSystemDefaultDevice(); 

しかし、それは

device = devices[0]; 

だけで正常に動作していても、全く私にコンテキストを与えるものではありません。

私はカーネルで半分から浮動小数点への切り替えを試みましたが、別の結果はありませんでした。

UPDATE:シェーダで

MTLSamplerDescriptor *samplerDescriptor = [MTLSamplerDescriptor new]; 
samplerDescriptor.minFilter = MTLSamplerMinMagFilterLinear; 
samplerDescriptor.magFilter = MTLSamplerMinMagFilterLinear; 
samplerDescriptor.sAddressMode = MTLSamplerAddressModeRepeat; 
samplerDescriptor.tAddressMode = MTLSamplerAddressModeRepeat; 
samplerDescriptor.rAddressMode = MTLSamplerAddressModeRepeat; 
id<MTLSamplerState> sampler = [device newSamplerStateWithDescriptor:samplerDescriptor]; 
[commandEncoder setSamplerState:sampler atIndex:0]; 

::私は「

sampler s [[sampler(0)]] 

CPUのサンプラーの状態を作成し、均一に渡し、ケンによって以下示唆したようにトリックを行うようですConstexprサンプラーがRadeonハードウェア上で3次元で失敗する理由と時期を知りたいと思っています。

+0

'min_filter'、' mag_filter'、 '(おそらく)' mip_filter'を 'filter'ではなく独立して指定してください。それが重要かどうかを知るために 'linear'の代わりに' bicubic'を試してみてください。 'MTLSamplerState'オブジェクトを作成し、シェーダコードで定義されたサンプラではなく、APIを介して渡してみてください。 –

+0

あなたが示唆するように、CPU上でMTLSamplerStateを作成することで問題は解決します。ありがとうございました!理由は何か、またはこれは既知のバグですか? –

+0

バイキュービックは定義されていません少なくとも、私はそれにアクセスできないと思います。 –

答えて

1

MTLSamplerStateオブジェクトを作成し、シェーダコードで定義されたサンプラではなく、APIを介して渡すことは、この問題を回避します。

+0

私は確認することができますが、サンプラーの状態オブジェクトを渡しても、RG8Uintテクスチャで補間することはできません。回避策は今のところRG16floatを使用しています。 –

関連する問題