ArtifactType | Language | Platform | Tags |
---|---|---|---|
nupkg |
c++, csharp, markdown |
windows |
display,testing,taef,displays,graphics |
This repository contains the source for a generic test framework for validating display adapter devices, such as GPUs and USB-display dongles. It contains a plugin model for physical capture devices that can emulate monitors and receive pixel data, metadata, and other channels common to display protocols.
The goal for this project is to provide a standard for validating display adapters. The framework is designed to be as generic and extensible as possible, to enable a very wide variety of hardware devices, protocols, and tests to be plugged in.
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
A test system running Windows 11 Enterprise or Pro For Workstations
You will need to install:
- Visual Studio 2022 with the following components:
- .NET 7.0 Runtime
- Windows 11 SDK
- C++ Core Features
- C# and Visual Basic
- MSVC v143 - VS 2022 C++ x64/x86 build tools
- MSBuild
- C++ Universal Windows Platform support for v143 build tools
- NuGet package manager
Note: Installing the Visual Studio 2022 "Workflows" for .Net desktop development, Universal Windows Platform development, and Desktop development with C++ will install all required individual components.
A step by step series of examples that tell you how to get a development environment running
- Clone the repository
- Open the solution file (HardwareHLK.sln) from an admin Visual Studio 2022 instance.
- Due to the nature of these tests, admin is required for most testing situations.
- Right click on the solution and select "restore nuget packages"
- During initial set up for a machine, this will fail to restore the MicrosoftIteIt68051 and Microsoft.TAEF packages. See Nuget Authentication.
- Build the solution.
This entire code project is meant to be executed as a series of tests using a display device and a display capture device in tandem to verify that the expected display output is received. With the solution built, there are a few steps for running our default test pass:
- Attach a capture device supporting one of the installed plugins.
- Two plugins are initially included:
- CapturePlugins\TanagerPlugin:
- Designed for a soon-to-be release capture device developed alongside this framework.
- CapturePlugins\GenericCaptureCardPlugin:
- Designed for DirectShow compatible USB capture cards.
- The Elgato Cam Link is an example of such a device (although this is not an explicit endorsement). Generally... if the capture device appears as a Camera device to Windows, it should work.
- These capture cards generally cannot emulate an arbitrary display, and as such have an additional setup step: you will need to go into Windows Display Settings and remove the target display from the desktop.
- Designed for DirectShow compatible USB capture cards.
- CapturePlugins\TanagerPlugin:
- Two plugins are initially included:
- Run the Tests project in the solution
- By default - this will attempt to automatically determine which display sources correspond to available display sink devices, and will run all available tests on all source-to-sink combinations.
Generally, the command line output of the tests will indicate what the problem is and next steps. Problems can be raised as Github issues or you can contact the authors.
The MicrosoftIteIt68051 package is sourced directly from this Github repo. However, to access a feed such as this you must authenticate your nuget requests, which will require a Github account. To do this, first create an access token as described here. To maintain best practices and prevent accidentally seeing tokens checked-in, use a nuget.config file in a parent directory to your clone - or a user-wide nuget.config for this authentication. Please see the nuget documentation for more information.
A working parent nuget.config file might look something like this:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="github" value="https://nuget.pkg.github.com/microsoft/index.json" />
</packageSources>
<packageSourceCredentials>
<github>
<add key="Username" value="Spruill-1" />
<!-- Github token as described in their documentation -->
</github>
</packageSourceCredentials>
</configuration>
Please read our CONTRIBUTING.md which outlines all of our policies, procedures, and requirements for contributing to this project.
We use SemVer for versioning. For a PR to be accepted it will have to include appropriate versioning updates for the impacted components.
We maintain a ChangeLog to be updated alongside any notable changes.
David Spruill (Microsoft) - principle author, framework Katie Anderson (Microsoft) - principle author, Tanager plugin Dave Hargrove (Microsoft) - hardware design, debugging Zachary Northrup (Microsoft) - software design, CaptureCardViewer project Larissa Umulinga (Microsoft) - author, CaptureCardViewer project
Note: Please add to this list as new components/contributors are added.
Suggestions and feedback can be sent to the authors at [email protected]
This project is licensed under the MIT license - see the LICENSE file for details
- Hat tip to industry partners who helped inspire this project and provided early-stage feedback: Intel, Nvidia, AMD, Qualcomm, and Synaptics