android - 如何在 renderscript 中使用半精度?

标签 android renderscript android-renderscript

我使用以下代码将 float 数组传输到渲染脚本内核:

 float[] bufName = new float[3];
 bufName [0] = 255;
 bufName [1] = 255;
 bufName [2] = 0;

 Allocation alloc1 = Allocation.createSized(mRs, Element.F32(mRs), 3);
 alloc1.copy1DRangeFrom(0, 3, mtmd);
 ScriptC_foo foo = new ScriptC_foo(mRs);
 foo.set_gIn(alloc1);

并且我在foo.rs文件中定义了gIn如下:

rs_allocation gIn;

我想使用 16 位 float 。我知道我应该将分配创建更改为:

 Allocation alloc1 = Allocation.createSized(mRs, Element.F16(mRs), 3);

但是,我找不到将 bufName 数组复制到分配的解决方案。任何帮助表示赞赏。

最佳答案

Java 没有定义半精度 float ,因此您必须自己进行操作才能使其正常工作。如果您使用 Float.valueOf(f).shortValue()(其中 f 是您希望表示为半精度的特定流)。这应该正确地将 float 转换为新的位大小。然后创建 Element.F16 大小的 Allocation。您应该能够将一组 short 值复制到 RenderScript 来完成这项工作。

关于android - 如何在 renderscript 中使用半精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38144060/

相关文章:

android - Renderscript 模糊警告

renderscript - 如何在 Android RenderScript 中同时缩放、裁剪和旋转

Android 在图像上应用自定义贴纸

android - 软键盘打开时不要缩小 ImageView 或背景

database - 如何将静态数据放入 Android 中的 SQLite 数据库?

android-things - Android Things 是否支持 RenderScript 计算?

java - 如何将此代码从 java 移至 Renderscript

android - 如何拥有网站启动画面(网络应用程序)

java - ScriptIntrinsicBlur 在 Galaxy S7 上的 API 24 上损坏了吗?

android - 关于渲染脚本