17ec681f3SmrgThe resulting d3d10sw.dll implements D3D10's software rendering interface, like
27ec681f3SmrgWARP.
37ec681f3Smrg
47ec681f3Smrg
57ec681f3SmrgIt can be used directly from WLK 1.6 and WHCK 2.0 D3D10+ tests, via the -Src
67ec681f3Smrgand -SWDLL options. For example:
77ec681f3Smrg
87ec681f3Smrg    wgf11blend.exe -Debug -DoNotCatchExceptions -DXGI:1.1 -FeatureLevel:10.0 -Src:SW -SWDLL:d3d10sw.dll -LogClean -LogVerbose
97ec681f3Smrg
107ec681f3SmrgHowever, as of WHCK version 2.1 this mechanism no longer works reliably.
117ec681f3SmrgEither you use WHCK 2.0 binaries, or you must use the alternative method
127ec681f3Smrgcribed below (of copying d3d10sw.dll into the executable directory and rename
137ec681f3Smrgit such that it matches the D3D10 UMD of the test machine).
147ec681f3Smrg
157ec681f3Smrg
167ec681f3SmrgExamples can be easily modified to load it too:
177ec681f3Smrg
187ec681f3Smrg    D3D10CreateDeviceAndSwapChain(NULL,
197ec681f3Smrg                                  D3D10_DRIVER_TYPE_SOFTWARE,
207ec681f3Smrg                                  LoadLibraryA("d3d10sw"), /* Software */
217ec681f3Smrg                                  Flags,
227ec681f3Smrg                                  D3D10_SDK_VERSION,
237ec681f3Smrg                                  &SwapChainDesc,
247ec681f3Smrg                                  &g_pSwapChain,
257ec681f3Smrg                                  &g_pDevice);
267ec681f3Smrg
277ec681f3Smrg    D3D11CreateDeviceAndSwapChain(NULL, /* pAdapter */
287ec681f3Smrg                                  D3D_DRIVER_TYPE_SOFTWARE,
297ec681f3Smrg                                  LoadLibraryA("d3d10sw"), /* Software */
307ec681f3Smrg                                  Flags,
317ec681f3Smrg                                  FeatureLevels,
327ec681f3Smrg                                  sizeof FeatureLevels / sizeof FeatureLevels[0],
337ec681f3Smrg                                  D3D11_SDK_VERSION,
347ec681f3Smrg                                  &SwapChainDesc,
357ec681f3Smrg                                  &g_pSwapChain,
367ec681f3Smrg                                  &g_pDevice,
377ec681f3Smrg                                  NULL, /* pFeatureLevel */
387ec681f3Smrg                                  &g_pDeviceContext); /* ppImmediateContext */
397ec681f3Smrg
407ec681f3Smrg
417ec681f3SmrgAlternatively, it can be renamed into the system's D3D10 UMD driver (e.g.,
427ec681f3Smrgvm3dum_10.dll for VMware vGPU, nvwgf2um.dll for NVIDIA GPU), and placed into
437ec681f3Smrgthe application directory, or system's directory, and used instead.
447ec681f3Smrg
457ec681f3SmrgFor the DLL to be picked from the application directory you'll need to do the
467ec681f3Smrgfollowing once:
477ec681f3Smrg
487ec681f3Smrg    reg add "HKLM\System\CurrentControlSet\Control\Session Manager" /v "SafeDllSearchMode" /t REG_DWORD /d 0 /f
497ec681f3Smrg
507ec681f3SmrgSee also https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order
51