DAY18:阅读纹理内存之Layered Textures

3.2.11.1.3. 16-Bit Floating-Point Textures

The 16-bit floating-point or half format supported by CUDA arrays is the same as the IEEE 754-2008 binary2 format.

CUDA C does not support a matching data type, but provides intrinsic functions【内联函数】 to convert to and from the 32-bit floating-point format via the unsigned short type: __float2half_rn(float) and __half2float(unsigned short). These functions are only supported in device code. Equivalent functions【等价函数】 for the host code can be found in the OpenEXR library, for example.

16-bit floating-point components are promoted to 32 bit float during texture fetching before any filtering is performed.

A channel description for the 16-bit floating-point format can be created by calling one of the cudaCreateChannelDescHalf*() functions.

3.2.11.1.4. Layered Textures

A one-dimensional or two-dimensional layered texture (also known as texture array in Direct3D and array texture in OpenGL) is a texture made up of a sequence of layers, all of which are regular textures of same dimensionality, size, and data type.

A one-dimensional layered texture is addressed using an integer index and a floating-point texture coordinate; the index denotes a layer within the sequence and the coordinate addresses a texel within that layer. A two-dimensional layered texture is addressed using an integer index and two floating-point texture coordinates; the index denotes a layer within the sequence and the coordinates address a texel within that layer.

A layered texture can only be a CUDA array by calling cudaMalloc3DArray() with the cudaArrayLayered flag (and a height of zero for one-dimensional layered texture).

Layered textures are fetched using the device functions described in tex1DLayered(), tex1DLayered(), tex2DLayered(), and tex2DLayered(). Texture filtering (see Texture Fetching) is done only within a layer, not across layers.

Layered textures are only supported on devices of compute capability 2.0 and higher.

本文备注/经验分享:

16-Bit Floating-Point Textures 这部分内容因为我们从来没用过,所以没有好补充的...

 Layered Textures——

这个等于纹理数组(某种意义上),和普通的3D的CUDA Array不同。这个层和层之间是独立的。插值的时候不跨层。 而存储的时候也*可能*每层存储为单独的像2D的纹理那样的布局(4个元素临近在一起),而不是3D那样的8个。例如说, 你有一堆图片的时候,例如PhotoShop之类的软件可以用来做多个图层。 可以总是看成是一堆图层的。而直接的3D纹理会导致层与层之前有关系,而这个只是一堆图片而已。

A one-dimensional layered texture is addressed using an integer index and a floating-point texture coordinate; the index denotes a layer within the sequence and the coordinate addresses a texel within that layer. 这个是1D的, 和2D一个道理, 纹理内部(一张图片内部你可以理解)坐标是float的。而层的坐标是整数的,例如: 第3层, 第2层图片,而不会像是普通的2D(相比1D的layered的)或者3D纹理(相比2D的Layered)那样,虽然大家都是2个坐标和3个坐标。 但含有Layered的字样的纹理最后一个坐标不是纹理内部的, 而是代表层次,因为我们普通的2D和3D的可以随时插值, 允许最后一个坐标是1.2, 3.4这种浮点值,而Layered的最后一个坐标是整数值,这首先暗示里这个纹理不同, 最后一个坐标不是纹理内部的坐标, 也不能用来插值,其次说明不存在层次间的关系, 没有第1.5层之类的说法。我建议你总是将Layered的理解成纹理数组,这样好理解很多。

有不明白的地方,请在本文后留言

或者在我们的技术论坛bbs.gpuworld.cn上发帖

原文发布于微信公众号 - 吉浦迅科技(gpusolution)

原文发表时间:2018-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Coco的专栏

奇妙的 CSS shapes(CSS图形)

1705
来自专栏青蛙要fly的专栏

图片操作系列 —(2)手势旋转图片

在上次的文章:图片操作系列 —(1)手势缩放图片功能中,我们已经学会了如何用手势来对图片进行缩放。这次我们继续来看第二个操作,那就是如何用手势来旋转图片。

1364
来自专栏Venyo 的专栏

HSV颜色直方图

package com.imageretrieval.features; import java.awt.Color; import com.imagere...

2819
来自专栏计算机视觉与深度学习基础

POJ2836

状压DP死活想不到啊,开始还以为是数据结构题,真是膜拜宋威大大。 包括点的矩形最小一定以这些点为顶点,所以枚举所有点对,构成所有状态。 由于不存在面积为0的矩形...

18010
来自专栏重庆的技术分享区

HTML5-canvas之绘制圆弧和贝塞尔曲线(3)

1162
来自专栏极客编程

Material Design Lite ,简洁惊艳的前端工具箱

本文主要介绍Material Design设计语言的HTML/CSS/JS部分实现。

1143
来自专栏腾讯Bugly的专栏

WebP原理和Android支持现状介绍

1.背景 目前网络中图片仍然是占用流量较大的一部分,对于移动端更是如此,因此,如何在保证图片视觉不失真前提下缩小体积,对于节省带宽和电池电量十分重要。 然而目前...

5177
来自专栏练小习的专栏

SVG图形绘制入门第一弹

之前很长一段时间,我是不重视SVG的,认为他就是在AI里画画,然后导出来做个矢量图标。直到我在上家公司遇到图表的绘制,因为不会写不得已而拿插件实现,而插件绘制的...

2127
来自专栏章鱼的慢慢技术路

MFC绘图小实验(3)

1356
来自专栏葡萄城控件技术团队

位图和SVG用法比较

位图,亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单...

1886

扫码关注云+社区