如何在 C++ 中获取像素着色器版本和顶点着色器版本

Posted

技术标签:

【中文标题】如何在 C++ 中获取像素着色器版本和顶点着色器版本【英文标题】:How to get pixel shader version and vertex shader version in c++ 【发布时间】:2018-05-28 06:58:56 【问题描述】:

如标题中所述,我需要在 C++ 代码中获取像素着色器版本和顶点着色器版本。但我不知道该怎么做。有没有人可以帮帮我?

【问题讨论】:

我尝试使用glGetString,但没有得到正确的结果。 从什么获取版本?从驱动程序/硬件,从编译的着色器 blob,什么? @ChuckWalbourn 在浏览器地址栏中输入 chrome://gpu,您将在页面中看到像素着色器版本。这就是我想要的 您使用的是哪个版本的 DirectX? 9、10、11、12? “像素着色器版本”是 Direct3D 9 中的一项功能。在 Direct3D 10 或更高版本中,它由 Direct3D hardware feature level 暗示。 【参考方案1】:

您创建的设备正在传递D3D_FEATURE_LEVEL 值的数组,当函数成功时,所选功能级别将通过pFeatureLevel 指针返回。返回的功能级别决定了视频适配器支持的最高着色器版本。

constexpr const ::std::array<::D3D_FEATURE_LEVEL, 4> feature_levels

    ::D3D_FEATURE_LEVEL_11_0
,   ::D3D_FEATURE_LEVEL_11_0
,   ::D3D_FEATURE_LEVEL_10_1
,   ::D3D_FEATURE_LEVEL_10
;
::ID3D11Device * naked_p_device;
::D3D_FEATURE_LEVEL selected_feature_level;
::ID3D11DeviceContext * naked_p_device_context;
if
(
    SUCCEEDED
    (
        ::D3D11CreateDevice
        (
            p_adapter
        ,   D3D_DRIVER_TYPE_UNKNOWN
        ,   nullptr
        ,   creation_flags
        ,   feature_levels.data()
        ,   static_cast< ::UINT >(feature_levels.size())
        ,   D3D11_SDK_VERSION
        ,   ::std::addressof(naked_p_device)
        ,   ::std::addressof(selected_feature_level)
        ,   ::std::addressof(naked_p_device_context)
        )
    )
)

    // inspect selected_feature_level...

Table of feature level capabilities

【讨论】:

但我们如何获得当前的像素着色器版本仍然是一个问题 @Frank Shader 版本直接对应特征级别。

以上是关于如何在 C++ 中获取像素着色器版本和顶点着色器版本的主要内容,如果未能解决你的问题,请参考以下文章

片段着色器是不是处理来自顶点着色器的所有像素?

从顶点数据中获取像素法线

如何在着色器之后读取像素?

-图形处理单元-3.8-像素着色器

着色器的简单理解

着色器怎么选