Welcome Contributors!
Thank you for your interest in contributing to the Virtual Display Driver project! This is an open-source project that welcomes contributions from the community.The Virtual Display Driver is developed by MikeTheTech (Project Manager, Lead Programmer) and Jocke (Programmer, Concept Design).
Ways to Contribute
There are many ways to contribute to the project:Code Contributions
- Bug fixes: Fix issues reported in GitHub Issues
- New features: Implement requested features
- Performance improvements: Optimize driver performance
- Code quality: Refactoring and cleanup
- Platform support: Improve ARM64 or other platform support
Documentation
- Fix typos and errors: Improve documentation accuracy
- Add examples: Provide usage examples and tutorials
- Translate: Help translate documentation
- Write guides: Create setup guides for specific use cases
Testing and Reporting
- Bug reports: Report issues with detailed information
- Feature requests: Suggest new capabilities
- Testing: Test on different hardware configurations
- Compatibility: Verify driver works with various applications
Community Support
- Help users: Answer questions in discussions
- Community scripts: Share PowerShell scripts and utilities
- Tutorials: Create video guides or blog posts
Getting Started
1. Fork the Repository
- Visit Virtual Display Driver on GitHub
- Click the Fork button (top right)
- Clone your fork:
2. Set Up Development Environment
Follow the Build Requirements guide to set up your environment:- Install Visual Studio 2019/2022
- Install Windows Driver Kit (WDK)
- Configure build tools
3. Create a Branch
Create a feature branch for your changes:feature/feature-name- New featuresfix/bug-description- Bug fixesdocs/documentation-update- Documentation changesrefactor/component-name- Code refactoring
Making Changes
Code Style Guidelines
The project uses C++17 and follows Windows driver development best practices: General Guidelines:- Use clear, descriptive variable names
- Comment complex logic and driver-specific behavior
- Follow existing code formatting and style
- Keep functions focused and reasonably sized
- Use proper UMDF patterns and conventions
- Handle all error cases with appropriate status codes
- Use WPP tracing for diagnostics
- Follow IddCx API usage guidelines
- Validate all input parameters
Testing Your Changes
Before submitting:-
Build successfully: Ensure all configurations compile
-
Run PREfast analysis: Fix all static analysis warnings
- Build automatically runs PREfast
- Address any new warnings your changes introduce
-
Test on real hardware: Install and test the driver
- Test in a VM or test system (not your primary development machine)
- Verify basic functionality works
- Test your specific changes
- Check for memory leaks and crashes
-
Test multiple configurations:
- Different resolutions and refresh rates
- HDR and SDR modes
- Multiple virtual monitors
- Different GPU adapters
Commit Messages
Write clear, descriptive commit messages: Good commit messages:- First line: Brief summary (50 characters or less)
- Blank line
- Detailed description explaining what and why
- Reference related issues with
Fixes #123orRelates to #456
Pull Request Process
1. Prepare Your Pull Request
Before opening a PR:- Code compiles without errors on x64 and ARM64
- All PREfast warnings addressed
- Changes tested on real hardware
- Commit messages are clear and descriptive
- Code follows project style guidelines
- Documentation updated (if applicable)
2. Push to Your Fork
3. Open a Pull Request
- Go to your fork on GitHub
- Click Pull Request button
- Select base repository:
VirtualDrivers/Virtual-Display-Driver - Select base branch:
master(or appropriate branch) - Select your feature branch
- Fill out the PR template:
4. Code Review
Project maintainers will review your PR:- Feedback: Address any requested changes
- Discussion: Be open to suggestions and alternatives
- Iteration: Update your PR based on feedback
- Approval: PR will be merged once approved
Reporting Issues
Bug Reports
Use the Bug Report template: Include:- Windows version and build number
- Driver version
- GPU model and driver version
- Steps to reproduce
- Expected vs. actual behavior
- Logs or error messages
- Screenshots (if applicable)
Feature Requests
Use the Feature Request template: Include:- Clear description of the feature
- Use case and motivation
- Potential implementation approach
- Examples from similar projects
Questions
Use the Question template for:- Usage questions
- Configuration help
- General inquiries
Community Scripts
Contribute PowerShell scripts to help users:- Add your script to
Community Scripts/directory - Include a README explaining what it does
- Add usage examples
- Test on multiple systems
Code of Conduct
Our Standards
- Be respectful: Treat all community members with respect
- Be constructive: Provide helpful feedback
- Be inclusive: Welcome contributors of all backgrounds
- Be collaborative: Work together toward common goals
Unacceptable Behavior
- Harassment or discrimination
- Trolling or insulting comments
- Publishing others’ private information
- Other unprofessional conduct
Enforcement
Project maintainers may remove, edit, or reject contributions that don’t follow these guidelines.Support the Project
Financial Support
If you’d like to support the developers:Spread the Word
- Star the repository on GitHub
- Share the project with others
- Write blog posts or tutorials
- Create video guides
Recognition
Contributors
All contributors are recognized in:- GitHub Contributors page
- Project README acknowledgements
- Release notes (for significant contributions)
Past Contributors
Special thanks to past contributors:- Bud - Former Lead Programmer
- Roshkins - Original repository
- Baloukj - 8-bit/10-bit support
- Anakngtokwa - Driver source assistance
- And many others in the README acknowledgements
License
By contributing, you agree that your contributions will be licensed under the same license as the project (see LICENSE).Questions?
If you have questions about contributing:- Check existing GitHub Discussions
- Read the Wiki
- Open a new Question issue
Next Steps
Build Requirements
Set up your development environment
Code Structure
Understand the codebase organization