DirectX 11 如何处理来自 GPU 上的 sharedHandle 的图像
DirectX 11 How process an image from sharedHandle on the GPU
我有一个存在于GPU上的纹理,我有一个该纹理的共享句柄,并希望对该图片进行一些图像处理。我想获取证书颜色像素的纹理绳索。
例如,我想要颜色 r135、g80、b175 的所有像素的阴影变化为 40(因此 70 和 90 的绿色是可以接受的,但不能低于 40 或高于 120 等(
问题是我想通过着色器在 GPU 上执行此操作,但我不知道该怎么做。
我有一个工作版本,它的工作原理是将纹理处理到 ram,然后从其基本地址读取。问题是它太慢了。仅处理从 GPU 到 ram 的纹理就需要 20 毫秒以上。我希望这总共最大为 5 毫秒,这就是为什么我只想将像素的坐标而不是整个图片发送到 ram。
这是我用来将纹理复制到 RAM 中的代码:
gs_texture_2d *_tex = (gs_texture_2d *)updateTex;
updateTex->device->device.Get()->CreateTexture2D(&(desc), NULL,
&currTexture);
updateTex->device->context.Get()->CopyResource(currTexture,
_tex->texture);
UINT subresource = D3D11CalcSubresource(0, 0, 0);
D3D11_MAPPED_SUBRESOURCE *pRes = new D3D11_MAPPED_SUBRESOURCE;
updateTex->device->context->Map(currTexture, subresource,
D3D11_MAP_READ_WRITE, 0, pRes);
void *baseadress = pRes->pData;
如何编写着色器来读取给定的像素tex_handle/sharedHandle,然后将该数据发送到 CPU?
我对 c++ 和 directX 都有点陌生,所以任何帮助将不胜感激!
首先调用OpenSharedResource,CreateShaderResourceView,CopyResource,Map,然后使用D3D11_MAPPED_SUBRESOURCE.pData作为起始指针来解决此问题。
相关文章:
- DirectX 11 如何处理来自 GPU 上的 sharedHandle 的图像
- 使 C++ Pi 近似在 GPU Nvidia 970M CUDA 上的 Paralell 中运行
- 用于GPU上的瓦片度量和调度的Halide
- 使用opencv在GPU上调整图像大小会产生空的输出矩阵
- 所有的openMp c++编程都是使用在GPU上运行的-fopenmp编译的吗
- 在 GPU 上分配结构的 OpenCL 会导致垃圾
- 使用 GPU 上的推力库进行排序
- 在 openGL 中,模型坐标应该在我的 CPU 上计算还是在 GPU 上使用 OpenGL 调用计算?
- 卤化物::GPU 上的缓冲区
- OpenCV 3.4.0 中带有 cuda 的连接组件(在 GPU 上)
- 低性能 – 补丁匹配.GPU 上的图像处理 (CUDA)
- 与CUDA上的GPU上的简单算法并行
- 如何在GPU上的两个数据容器(最好是CUDA)上执行关系连接
- 使用 GPU 上的基元数在 OpenGL 中绘制
- 可以在 GPU 上的浮点数组上进行数学运算的库
- directx10 gpu上的DirectX11程序
- 是运行在GPU上的opengl代码
- GPU上的OpenCL RK4集成
- OpenCL示例程序在CPU上的执行速度是在GPU上的10倍
- 初始化不同GPU上的结构