最近、2016年末のMacBook ProにRadeon 445 gpuが追加されました。現在、iOSとEl Capitanの両方でうまく動作しているカーネル関数に問題があります。 Nvidia gpu's。私はインテルを強制しようとした メタルカーネル関数の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次元で失敗する理由と時期を知りたいと思っています。
'min_filter'、' mag_filter'、 '(おそらく)' mip_filter'を 'filter'ではなく独立して指定してください。それが重要かどうかを知るために 'linear'の代わりに' bicubic'を試してみてください。 'MTLSamplerState'オブジェクトを作成し、シェーダコードで定義されたサンプラではなく、APIを介して渡してみてください。 –
あなたが示唆するように、CPU上でMTLSamplerStateを作成することで問題は解決します。ありがとうございました!理由は何か、またはこれは既知のバグですか? –
バイキュービックは定義されていません少なくとも、私はそれにアクセスできないと思います。 –