2017-11-22 6 views
0

にmaxComputeWorkGroupCountデバイス制限を超える:は<a href="https://www.khronos.org/registry/vulkan/specs/1.0/man/html/vkCmdDispatch.html" rel="nofollow noreferrer">Vulkan spec document</a>によれば、ディスパッチ呼

呼び出し、ディスパッチを記録する:

空隙vkCmdDispatch( VkCommandBuffer commandBuffer、 のuint32_t groupCountX、 のuint32_t groupCountY、 のuint32_t groupCountZ );

はgroupCountXはmaxComputeWorkGroupCount [0]

:: VkPhysicalDeviceLimits以下でなければなりません。しかし、私は、物理デバイスの制限よりも大きいgroupCountXとコールの発送を持っており、それだけで正常に動作します。検証レイヤーは警告を出さなかった。私はこのWorkGroupCountの制限が特定のベンダーにのみ適用されるかどうか疑問に思っていますか?

答えて

3

いいえ、
有効なVulkan仕様のセクションは絶対的です。
(拡張子を除いたテキストの現在のバージョンではsometimes treated poorlyあるが、それはこの場合には適用されません)

未定義の動作に有効な使用のリード線に違反します。つまり、「すべてが正常に動作するように見える」から「あなたのPCは感情的になり、人類を奴隷にする」ということを意味します。

有効な使用法違反は、あなたのコードの論理的な誤りであり、あなたはこれを行うべきではありません。

検証レイヤーから報告されていない場合は、それらが正しく有効になっており、実際には制限を超えていることを確認してください。それ以外の場合はレイヤーが不完全なので、their repoに報告してください。

+0

ああ、既にこれを参照している問題があります:[github issue](https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues/2063)。しかし、説明に感謝します! – Clmelissa

2

いいえ、報告された制限は特定のベンダーにのみ適用されるとは言えません。 によって取得された物理デバイスの制限vkGetPhysicalDeviceProperties()コンピュータにインストールされたデバイスに関数呼び出しが適用されます。アプリケーションを実行します。このような物理デバイスから論理デバイスを作成する場合、アプリケーションで使用されるパラメータは報告された範囲に限定する必要があります。これらは、ハードウェア/ベンダー/オペレーティングシステム/ドライバの組み合わせに固有のものであり、これらの変更のいずれかが異なる場合があります。しかし、この仕様ではハードウェアに最小値(または最大値)をサポートする必要があり、これらの必要な制限はすべてのベンダーに適用されます。たとえば、すべてのベンダーが最低65535のmaxComputeWorkGroupCountをサポートしている必要があります。

質問の最初の部分は、なぜ正しく動作するのか...ということです。仕様によれば、制限を超えて未定義の動作が発生する可能性があります。制限に従わなくても正しく動作するアプリケーションは未定義の動作として認識されます。だからなぜそれがうまくいかないのは、与えられたハードウェアで多数のグループをディスパッチすることがまだ可能であるならば、なぜドライバがグループカウントのより小さい値を報告するのかということです。私は答えを知らず、推測しかできない。たぶん、いくつかの状況(計算パラメータシェーダのいくつかの状態パラメータ/値やサイズ、シェーダでアクセスされる記述子の数など)があると、ディスパッチされたワークグループの数が報告された制限値に下がり、まだ)。

関連する問題