OpenGL与DirectX,加载着色器时使用的内存

时间:2017-02-07 18:10:22

标签: c++ opengl directx-11

我有一个具有许多不同着色器的应用程序,并且具有OpenGL和DirectX 11实现。除了语言差异(GLSL和HLSL之间)之外,着色器在两个平台上都是相同的。在DirectX中,使用fxc(带有/Fh选项)离线编译着色器,并将其编译为可执行文件。在OpenGL中,着色器的文本嵌入到可执行文件中,并在运行时进行编译。然后它将被保存为glGetProgramBinary的二进制文件(如果平台有能力,它在我的测试用例中),并在glProgramBinary的后续运行中重新加载。

我注意到在OpenGL中,我的应用程序使用的报告总内存(在procexp中报告)平均每次调用增加49kb glProgramBinary。这种增加似乎与程序二进制文件的大小没有直接关系。有些内存大致增加了二进制文件的大小,而有些内存的大小增加了很多倍。此外,二进制大小看起来相当大,即使对于最简单的程序也要大约12kb。

相反,在DirectX 11中,对ID3D11Device::CreateVertexShaderID3D11Device::CreatePixelShader的等效调用会增加报告的内存使用量,但每对平均只增加6kb(同样,增加似乎与二进制的大小)。此外,离线编译的着色器二进制blob似乎要小得多,最小值小于2kb。

是否有某种方法可以减少与OpenGL中着色器相关的内存量,以便它更符合DirectX中的内存使用量?或者,这是一个报告问题(DirectX实际上是在使用内存,但它并没有显示在进程中#);

(平台是NVidia 373.34,在Windows 10上)。

0 个答案:

没有答案