compute-shader相关内容
我尝试优化工作的计算着色器。它的目的是创建一个图像:找到好的颜色(使用一个小调色板),然后调用imageStore(image, ivec2, vec4)。 颜色在统一缓冲区的uint数组中进行索引。 此UBO中的一种颜色被包装在一个Uint内,如{0-255,0-255,0-255,0-255}。 代码如下: struct Entry { *some other da
..
我希望将纹理数据作为计算着色器中的一维数组进行处理。我读到,最好的方法是将其作为缓冲区传递,而不是1D纹理。 我正在加载纹理: let textureLoader = MTKTextureLoader(device: device) do { if let image = UIImage(named: "testImage") { let options =
..
我正在使用一个计算着色器,其中的输出将写入SSBO。现在,此缓冲区的使用者是CUDA,它希望它包含无符号字节。我目前无法找到如何在SSB中为每个索引写入一个字节的方法。使用纹理或图像,规范化浮点到无符号字节的转换由OpenGL处理。例如,我可以附加内部格式为R8的纹理,并按条目存储字节。但是使用SSBO不可能做到这一点。是吗 实际上,我希望能够做到以下几点: 计算着色器: #ve
..
假设我正在使用 WebGL 和 GLSL 制作计算着色器. 在这个着色器中,每个片段(或像素)都想查看纹理上的每个像素,然后决定它自己的颜色. 通常一个片段从几个纹理中采样它提供的纹理坐标(UV 值),但我想有效地从单个纹理中为单个片段采样所有 UV 值. 这可能吗? 解决方案 编辑:我能够从 128x128 纹理中的每个像素进行采样,但移动到 256x256 会导致 C
..
我想实现这个算法https://dournac.org/info/gpu_sum_reduction在 Vulkan 的计算着色器中.在 OpenCL 中,这很容易,因为我可以明确声明哪些缓冲区是 __local,哪些是 __global.不幸的是,我似乎无法找到Vulkan 中的任何此类机制.请有经验的人给我举个例子,如何让这些东西在 Vulkan 中工作? 解决方案 Vulkan 中的
..
我需要测量计算着色器的时间.但这当然不是小事.从 OpenGL Wiki - Performance 我得到,在前后使用 glFinish() 很有用着色器调用.但他们也说使用它并不是那么好.是否有可能测量我的着色器的时间?有没有可能测量计算着色器的时间? 我的代码看起来像这样: renderloop(){//(1)//(2)if(updateFunction)//在开始时只执行一次{//
..
我知道OpenCL可以控制GPU的内存架构,因此可以实现更好的优化,但是,撇开这一点,我们可以使用Compute Shaders进行矢量运算(加法,乘法,求逆等)吗? 解决方案 与其他OpenGL着色器类型相比,计算着色器与计算机图形不直接相关,并且提供了与CUDA类似的更直接的底层硬件抽象和OpenCL.它提供可自定义的工作组大小,共享内存,组内同步以及CUDA和OpenCL已知和喜爱的
..
我正在尝试使用opengl 4.3中的计算着色器编写实时光线跟踪器.我知道这是一个相当受欢迎的问题.我已经检查了此和,但是那里提供的体系结构与我的用例并不完全对应. 我只是想转换P. Shirley的书ray_color 函数 ="nofollow noreferrer">此处. 提到的 ray_color 函数: color ray_color(const ray&r,const h
..
我一直在尝试编写通用的计算着色器高斯模糊实现. 它基本上可以工作,但是它包含的伪像会在场景静止的情况下改变每一帧.我花了过去的几个小时来调试它.我已经尽力确保不超出范围,展开所有循环,用常量替换制服,但是工件仍然存在. 我已经在3种不同的机器/GPU(2个nvidia,1个intel)上使用工件对原始代码进行了测试,它们均产生相同的结果.通过使用普通C ++代码向前和向后执行的工作组来
..
我有一个SSBO,它存储屏幕上每个像素的vec4颜色值,并在主循环之前由计算着色器预先填充这些值. 我现在正在尝试将这些数据显示在屏幕上,我想这涉及使用片段着色器(尽管如果您知道一种更好的方法,我欢迎您提出建议) 因此,我试图将缓冲区或至少其中的数据获取到片段着色器,以便可以将每个片段的颜色设置为缓冲区中的相应值,但是找不到任何方法? 有人告诉我可以将SSBO绑定到片段着色器,但
..
我有几个计算着色器(我们称它们为compute1,compute2等),它们具有多个输入绑定(在着色器代码中定义为layout (...) readonly buffer)和多个输出绑定(定义为layout (...) writeonly buffer).我将带有数据的缓冲区绑定到它们的描述符集,然后尝试并行执行这些着色器 . 我尝试过的事情: vkQueueSubmit(),其中Vk
..
我最近将DirectX 9应用程序转换为DirectX 11,该应用程序使用D3DXIntersect查找射线/网格交点到DirectX11。由于D3DXIntersect在DX11中不可用,因此我编写了自己的代码来查找交点,该交点仅遍历了所有三角形。对网格进行测试,并跟踪最接近原点的点。这是在CPU端完成的,可以很好地通过GUI进行拾取,但是我有应用程序的另一部分,它基于几种不同的观点从现有的网
..
我正在尝试实现用于图像处理的多遍计算着色器。 每遍都有输入图像和输出图像。 下一遍的输入图像是前一个的输出图像。 这是我第一次在OpenGL中使用计算着色器,因此可能存在一些问题与我的设置。 我使用OpenCV的Mat作为读取/复制操作的容器。 代码的某些部分与问题无关,因此我不包括在内。其中一些部分包括加载图像或初始化上下文。 初始化: //纹理初始化 glGe
..
我想在DirectX Compute Shader中使用groupshared内存以减少全局内存带宽并希望提高性能.我的输入数据是Texture2D,我可以使用2D索引访问它,如下所示: Input[threadID.xy] 我想要一个共享内存的2D数组来缓存部分输入数据,所以我尝试了显而易见的方法: groupshared float SharedInput[32, 32];
..
在详细介绍问题之前,我先概述一下问题: 我使用RWStructuredBuffers存储我的计算着色器(CS)的输出.由于无法从RWStructuredBuffers读取顶点和像素着色器,因此我将StructuredBuffer映射到同一插槽(u0/t0)和(u4/t4): cbuffer cbWorld : register (b1) { float4x4 worldVie
..
所有DirectX书籍和教程都强烈建议将绘图调用之间的资源分配减至最少 –但我找不到任何能使细节更多的指南.回顾网络上的许多示例代码,我得出的结论是,程序员在此主题上的编码原理完全不同.有些甚至设置和取消设置 VS/PS VS/PS ResourceViews RasterizerStage DepthStencilState PrimitiveTopology ... 每次抽奖之
..
我正在尝试使用C ++ Directx 11 SDK一次渲染到两个纹理.我希望一个纹理包含结果图像每个像素的颜色(渲染3D场景时通常在屏幕上看到的颜色),另一个纹理包含每个像素和深度的法线(法线3个浮点,1个浮点)深度).现在,我能想到的是创建两个渲染目标,并将第一遍渲染为颜色,第二遍将法线和深度分别传递给每个渲染目标.但是,这似乎很浪费时间,因为我可以在第一遍中获得每个像素的颜色,法线和深度的信
..
我想为学校项目制作一个简单的raytracer,假设应该使用计算着色器来阴影三角形或其他一些图元. 为此,我想直接在计算着色器中写入backbuffer-surface,然后直接呈现结果.我确定可以在DX11中实现,尽管我似乎无法使其在DX12中正常工作. 我无法收集到太多有关此的信息,但是我发现 是否有任何方法可以实现raytracer,而无需写入单独的纹理,然后在管道中采样或将其复制到
..
假装我正在使用WebGL和GLSL制作计算着色器. 在此着色器中,每个片段(或像素)都希望查看纹理上的每个像素,然后确定其自身的颜色. 通常,一个片段采样会从一些纹理中提供纹理坐标(UV值),但是我想针对单个片段从单个纹理中有效地采样所有UV值. 这可能吗? 解决方案 编辑:我能够对128x128纹理中的每个像素进行采样,但是移动到256x256会导致Chrome失败.这
..
我正在寻找使用QOpenGLFunctions_4_3_Core OpenGL函数从Qt调用计算着色器的帮助. 具体地说,我对glDispatchCompute(1024, 1, 1);的调用似乎对绑定到它的缓冲区没有任何影响. 如何将缓冲区绑定到QT中的计算着色器,以便可以将着色器的结果读回到C ++ ? 我创建我的程序并将其与( Squircle.cpp ): com
..