2016-11-30 9 views
3

ユーザは、デュアルGPUシステム上でIntel GPU上で動作する私のアプリケーション(Direct3D 11を使用してCADライクな機能のために重い3Dコンテンツをレンダリングする)に苦情を言いました。.NETアプリケーション用の高性能GPUを有効にする

見つけたのはNvOptimusEnablement/AmdPowerXpressRequestHighPerformanceです。しかし、アプリケーションには.NETのフロントエンドがあり、そこから物事をエクスポートすることはできません。 there’s some workaroundの間に、その再コンパイル手順はデバッガを中断させ(ブレークポイントをもう設定できなくなります)、デバッグシンボルを無効にします。

他のアイデアはありますか?

インストール中にnVidiaアプリケーションプロファイルを作成することはできますか?

または、NVApiを使用して高性能GPUを選択するにはどうすればよいですか?

答えて

2

カスタムWIXアクションでC++ DLLを作成しました。これは、インストール時にアプリケーションのプロファイルを作成/更新し、アンインストール時に削除します。

公式のnVidia APIにはほとんどドキュメント化されていませんが、そのために必要なNvAPI_DRS_ *機能があります。

はここにワークフローの:NvAPI_Initializeは(失敗した場合には、ユーザーは、NVIDIA GPUを持っていないことを意味し、それはエラーではありません)、NvAPI_DRS_CreateSessionNvAPI_DRS_LoadSettingsNvAPI_DRS_FindProfileByName

の場合はNvAPI_DRS_CreateProfile、見つかった、とNvAPI_DRS_SetSettingを3回呼び出し、3つのDWORDのプロパティ設定していませんでした。そして、

  1. SHIM_MCCOMPAT_ID = SHIM_MCCOMPAT_ENABLE
  2. SHIM_RENDERING_MODE_ID = SHIM_RENDERING_MODE_ENABLE
  3. SHIM_RENDERING_OPTIONS_ID = SHIM_RENDERING_OPTIONS_DEFAULT_RENDERING_MODE

を、NvAPI_DRS_GetProfileInfoに電話してくださいその後、NvAPI_DRS_EnumApplicationsが続き、EXEパスが検索されます。

アンインストールするときに、NvAPI_DRS_FindProfileByName、次にNvAPI_DRS_DeleteProfileを呼び出して、完全なプロファイルを削除します。

再インストールとアップグレードでは、両方を行います。最初に削除してから追加します。

最後にNvAPI_DRS_SaveSettingsを忘れないでください。

P.S.予想外のことは、NVDIAはNVDRS_APPLICATION :: appNameフィールドに格納されているパスを「正規化」し、それらを小文字に変換し、さらに'\''/'に置き換えることです。この "正規化"のために、標準の文字列比較関数はそれらのためには機能しません。

関連する問題