一旦您编译了在OpenGL或Directx的运行时说出顶点着色器,是否可以在GPU内存中确定其足迹?
在OpenGL中,您可以将glGetProgramiv
与GL_PROGRAM_BINARY_LENGTH
一起使用(此处的文档)。这是glGetProgramBinary
返回的程序的长度 - 它可能无法反映GPU内存中的实际足迹。
我仍然很好奇,为什么您需要这个,我认为只有驱动程序才知道Sharder Binary的确切上传到设备(哪个部分?什么时候?完全上传?一次或一对一的着色器?)。无法从高级API(例如OpenGL和DirectX)估算着着色器的设备内存足迹。您甚至不知道它到达设备内存的时间。如果它完全得到。
仍然可以在CPU方面获得二进制的大小,以了解我们在说什么数字。
-
在DirectX中,您可以通过调用其
ID3DBlob::GetBufferSize()
方法来查询D3DCompile()
函数返回的ID3DBlob
的二进制尺寸。示例(省略了错误检查以确定):ID3DBlob* pBinary = 0; D3DCompile(..., &pBinary, &pErrorMsgs); size_t binarySize = pBinary->GetBufferSize();
-
在OpenGL中,您可以将
glGetProgramiv()
功能与GL_PROGRAM_BINARY_LENGTH
一起使用,如Guyrt的答案中所述。示例(省略了错误检查以确定):GLint binarySize = 0; glGetProgramiv(programId, GL_PROGRAM_BINARY_LENGTH, &binarySize);
希望它有帮助!