确定内存中编译的着色器的大小



一旦您编译了在OpenGL或Directx的运行时说出顶点着色器,是否可以在GPU内存中确定其足迹?

在OpenGL中,您可以将glGetProgramivGL_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);
    

希望它有帮助!

相关内容

  • 没有找到相关文章

最新更新