大家好,今天小白给大家简单分享下Hetcompute sdk中Graphics相关的基础知识,欢迎一起交流学习。
一、Textures
1)Texture API在HetCompute被用于处理图像的任务中。这些API允许用户从驻留在主内存区的数据创建图像数据目标,并且提供这些数据目标到一个内核处理线程。这些API显著地接话了并行图像处理线程的复杂度,例如滤镜算法。
2)往一个使用者处理一个2D或者3D图像数据的时候,Textures API提供一些有用的帮助,它将提供很多种图像格式、滤镜模式、地址访问模式和操纵像素数据在一个有效的GPU内核层。使用Textures的API需要包含texture.hh #include <hetcompute/texture.hh>
3)HetCompute初始化内部的上下文的时候,会根据依赖设备和平台的上下文数据初始化。因此工程师不需要去查询和单独创建这个上下文数据。初始化的时候,工程师可以使用如下代码:
4)这个hetcompute::graphics::create_texture API提供了一个图像格式,图像尺寸和一个指向内存原始输入像素数据的有效主指针。创建一个GPU滤镜例子,包含输入和输出Texture例子,如下:
5)这个mytextureptrtype和mysamplerptrtype在HetCompute中是相同的textures和samplers。定义如下:
6)source_string包含一个实际执行的OpenGL内核代码,使用textures作为内核功能参数,并且执行他们。另外末班参数必须于内核功能签名匹配。如下是内核源代码:source_string
7)kernel模式也能在一般的HetCompute任务模式下执行
8)可以使用hetcompute::graphics::map API读取线程的返回结果
9)HetCompute也可以处理OpenCL上下文和texture目标的释放。但是,程序员仍然应该调用hetcompute::graphics::unmap来释放CPU内存和GPU内存之间的映射,因此相同的HetCompute texture对象可以重用于后续的内核调用。
二、QCOM扩展图像格式
1)HetCompute支持以QCOM扩展图像格式(TP10,NV12,P010)创建texture。 支持这些格式的线性和UBWC变体。 这些图像格式基于YUV格式并限制直接写入父平面图像,但它们支持对衍生Y和UV平面的写入。
2)可以通过调用hetcompute::graphics::create_derivative_texture并传递父texture,宽度和高度来创建派生平面。 hetcompute::graphics::create_derivate_textures包含更新的OpenCL QCOM扩展,以支持QCOM扩展格式和向量操作。 下面的代码片段显示了使用HetCompute父纹理和衍生纹理将压缩TP10简单地用于压缩TP10副本。
3)上面的示例分别创建源和目标ION内存。 源ION存储器填充有正在读取的图像数据。 创建GPU内核,采样器遵循前面的示例。 上面的代码片段创建了父UBWC TP10 texture。 由于我们将UBWC TP10数据写入output_tex,因此该示例创建了导数Y和UV平面。 这些衍生texture 后来都传递到GPU内核,实际上将数据复制到输出Y和UV texture。
三、总结
本篇主要简单介绍了Heterogeneous Compute SDK中Graphics的相关用法,欢迎一起交流学习。