4

Sascha Willems のテクスチャ チュートリアルを使用していますが、問題なく動作します。次に、テクスチャを 2D テクスチャから符号なし 16 ビットの 3D テクスチャに変更します。

正しい深さを設定してから、これらの値を変更します。

VK_FORMAT_BC3_UNORM_BLOCK -> VK_FORMAT_R16_UINT
VK_IMAGE_TYPE_2D -> VK_IMAGE_TYPE_3D
and just one component ->   view.components = { VK_COMPONENT_SWIZZLE_R };

シェーダーで:

sampler2D -> sampler3D

しかし、 texture(volumeTexture, textPos).r から取得した値はすべてゼロになりました。私がやりたいことは、UINT16 画像をアップロードすることですが、フラグメント シェーダーから float としてサンプリングします。

RenderDoc を開くと、テクスチャがきれいに見えます。

pastie.org/private/i7dqw7pm0snkbf40eyywg

これは私がopenglで行ったことです:

  const auto& glType           = GL_SHORT;
  const auto& glFormat         = GL_LUMINANCE;
  const auto& glInternalFormat = GL_LUMINANCE16F_ARB;
  const auto& glClampMode      = GL_CLAMP_TO_EDGE;
4

2 に答える 2

3

これは私がopenglで行ったことです:

不快なものや遅いものを受け入れるには、OpenGL のピクセル転送機能が必要です。バルカンにはありません。

OpenGL で行ったことは、ドライバーがすべてのピクセルを 16 ビットの符号なしの正規化された固定小数点値から16 ビットの IEEE-754 浮動小数点値に強制的に変換することでした。ほぼ確実に、この変換は CPU 上で行われました。

Vulkan には補助輪がなく、Vulkan のドライバーがあなたの代わりに作業を行うことはありません。Vulkan には形式があり、仕様にはその意味が正確に記載されています。データが最終的に使用したい形式と一致しない場合は、変換を行う必要があります。

于 2016-05-25T15:01:35.093 に答える
2

もう少し情報を追加していただけますか?「テクスチャから読み取る」とは、フラグメントシェーダーでサンプリングすることを意味しますか? 検証レイヤーからエラーが発生しますか? 実装は R16_UINT からのサンプリングをサポートしていますか?

RenderDoc がテクスチャを表示してもアプリケーションで「見えない」場合、少なくともハードウェアで適切な画像レイアウトの移行を見逃す可能性があります。これには、正しい subresourcerange も含まれます。

また、 https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#resources-image-viewsにある表をご覧ください。

また、画像とビューのパラメータが 3D テクスチャに適合していることを確認してください。

于 2016-05-25T11:18:49.133 に答える