检测D3D_SHADER_MODEL_6_7返回E_INVALIDARGS,低版本正常求解决
解决思路
适配硬件,动态选择Shader Model版本
既然Intel HD 630的驱动本身就不支持Shader Model 6.7(官方对这款核显的驱动支持最高到6.6),而且HP设备大概率有驱动锁没法装通用版新驱动,最稳妥的办法是在代码里动态检测硬件支持的最高版本,自动适配:D3D12_FEATURE_DATA_SHADER_MODEL m_shaderModel = {}; // 先查询硬件能支持的最高Shader Model HRESULT hr = m_device->m_device->CheckFeatureSupport( D3D12_FEATURE::D3D12_FEATURE_SHADER_MODEL, &m_shaderModel, sizeof(D3D12_FEATURE_DATA_SHADER_MODEL)); if (SUCCEEDED(hr)) { // 限制版本不超过硬件支持的上限,这里直接卡到6.6 m_shaderModel.HighestShaderModel = min(m_shaderModel.HighestShaderModel, D3D_SHADER_MODEL_6_6); // 后续用这个版本编译Shader、初始化相关模块 }尝试绕过HP驱动锁装通用Intel驱动
部分HP设备的驱动限制可以通过修改驱动INF文件绕过:- 下载Intel官方针对HD 630的Windows 10版驱动,解压到本地文件夹
- 找到驱动文件夹里的
igdlh64.inf(64位系统),用记事本打开 - 设备管理器里找到Intel HD 630,查看它的硬件ID(属性→详细信息→硬件ID)
- 在INF文件中找到对应设备ID的段落,把你的硬件ID加进去
- 保存后右键点击INF文件选“安装”,或者在设备管理器里手动更新驱动选这个文件夹
注意:这么做可能有稳定性风险,操作前备份好当前驱动和系统。
检查Windows系统更新
打开Windows更新,安装所有可用的累积更新和可选的图形相关更新,部分系统补丁可能会优化DirectX的特性支持,说不定能间接解决部分兼容性问题。评估6.7特性的必要性
如果项目里不是必须用Shader Model 6.7的专属特性,直接改用6.6兼容的实现,彻底绕开硬件支持的问题。
内容的提问来源于stack exchange,提问作者developer68
相关产品推荐
相关产品推荐

