mirror of
https://github.com/keylase/nvidia-patch.git
synced 2024-11-25 15:07:18 +00:00
commit
9a30795f98
@ -2,7 +2,9 @@
|
||||
|
||||
![GitHub last commit](https://img.shields.io/github/last-commit/keylase/nvidia-patch.svg) ![Latest version](https://img.shields.io/badge/latest%20linux%20driver%20version-440.36-brightgreen.svg)
|
||||
|
||||
This patch removes restriction on maximum number of simultaneous NVENC video encoding sessions imposed by Nvidia to consumer-grade GPUs. Also there is experimental NvFBC patch available which allows to use NvFBC on consumer-grade GPUs. It should be applied same way as NVENC `patch.sh`, except you have to use `patch-fbc.sh` instead.
|
||||
This patch removes restriction on maximum number of simultaneous NVENC video encoding sessions imposed by Nvidia to consumer-grade GPUs.
|
||||
|
||||
Also there is available experimental NvFBC patch which allows to use NvFBC on consumer-grade GPUs. It should be applied same way as NVENC `patch.sh`, except you have to use `patch-fbc.sh` instead.
|
||||
|
||||
Main target operating system is **GNU/Linux**, but for **Windows** support see [**win**](win).
|
||||
|
||||
|
@ -2,7 +2,9 @@
|
||||
|
||||
![GitHub last commit](https://img.shields.io/github/last-commit/keylase/nvidia-patch.svg) ![Latest version](https://img.shields.io/badge/latest%20linux%20driver%20version-${latest_version}-brightgreen.svg)
|
||||
|
||||
This patch removes restriction on maximum number of simultaneous NVENC video encoding sessions imposed by Nvidia to consumer-grade GPUs. Also there is experimental NvFBC patch available which allows to use NvFBC on consumer-grade GPUs. It should be applied same way as NVENC `patch.sh`, except you have to use `patch-fbc.sh` instead.
|
||||
This patch removes restriction on maximum number of simultaneous NVENC video encoding sessions imposed by Nvidia to consumer-grade GPUs.
|
||||
|
||||
Also there is available experimental NvFBC patch which allows to use NvFBC on consumer-grade GPUs. It should be applied same way as NVENC `patch.sh`, except you have to use `patch-fbc.sh` instead.
|
||||
|
||||
Main target operating system is **GNU/Linux**, but for **Windows** support see [**win**](win).
|
||||
|
||||
|
@ -5,6 +5,8 @@ Nvidia drivers patch for Windows
|
||||
|
||||
This patch removes restriction on maximum number of simultaneous NVENC video encoding sessions imposed by Nvidia to consumer-grade GPUs.
|
||||
|
||||
Also there is available NvFBC wrapper which allows to use NvFBC on consumer-grade GPUs. See [**nvfbcwrp**](nvfbcwrp) directory for details.
|
||||
|
||||
Requirements:
|
||||
|
||||
- Any of following 64bit operating systems:
|
||||
|
@ -5,6 +5,8 @@ Nvidia drivers patch for Windows
|
||||
|
||||
This patch removes restriction on maximum number of simultaneous NVENC video encoding sessions imposed by Nvidia to consumer-grade GPUs.
|
||||
|
||||
Also there is available NvFBC wrapper which allows to use NvFBC on consumer-grade GPUs. See [**nvfbcwrp**](nvfbcwrp) directory for details.
|
||||
|
||||
Requirements:
|
||||
|
||||
- Any of following 64bit operating systems:
|
||||
|
32
win/nvfbcwrp/.gitignore
vendored
Normal file
32
win/nvfbcwrp/.gitignore
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
12
win/nvfbcwrp/README.md
Normal file
12
win/nvfbcwrp/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
nvfbcwrp
|
||||
========
|
||||
|
||||
Wrapper for `NvFBC64.dll` library which injects private keys into `NvFBC_CreateEx` calls in order to enable NvFBC on customer-grade hardware (like GeForce cards) for all NvFBC-targeted applications. It should work at least with applications built with Nvidia Capture SDK versions 5.0 to 7.1.
|
||||
|
||||
## Usage
|
||||
|
||||
1. Obtain `nvfbcwrp.dll` file. You may build it yourself with MSVS 2019 or download latest release [here](https://gist.github.com/Snawoot/1edfbda9b0e91c46b6cc3d5a0e1e55a4/raw/ee2e4647753a731ac7b333a0c9681dc07d3ee0a1/nvfbcwrp.dll).
|
||||
2. Backup your `%WINDIR\system32\NvFBC64.dll` file.
|
||||
3. Rename file `%WINDIR\system32\NvFBC64.dll` to `%WINDIR\system32\NvFBC64_.dll`
|
||||
4. Put `nvfbcwrp.dll` to `%WINDIR\system32\NvFBC64.dll` (on the original place of renamed `NvFBC64.dll` library).
|
||||
5. Restart any applications using this library. That's it.
|
5
win/nvfbcwrp/framework.h
Normal file
5
win/nvfbcwrp/framework.h
Normal file
@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN // Исключите редко используемые компоненты из заголовков Windows
|
||||
// Файлы заголовков Windows
|
||||
#include <windows.h>
|
37
win/nvfbcwrp/nvfbcbody.asm
Normal file
37
win/nvfbcwrp/nvfbcbody.asm
Normal file
@ -0,0 +1,37 @@
|
||||
.data
|
||||
|
||||
extern ORIG_NvFBC_Create : qword, ORIG_NvFBC_Enable : qword,
|
||||
ORIG_NvFBC_GetSDKVersion : qword, ORIG_NvFBC_GetStatus : qword,
|
||||
ORIG_NvFBC_GetStatusEx : qword, ORIG_NvFBC_SetGlobalFlags : qword,
|
||||
ORIG_NvOptimusEnablement : qword
|
||||
|
||||
.code
|
||||
PROXY_NvFBC_Create proc
|
||||
jmp qword ptr [ORIG_NvFBC_Create]
|
||||
PROXY_NvFBC_Create endp
|
||||
|
||||
PROXY_NvFBC_Enable proc
|
||||
jmp qword ptr [ORIG_NvFBC_Enable]
|
||||
PROXY_NvFBC_Enable endp
|
||||
|
||||
PROXY_NvFBC_GetSDKVersion proc
|
||||
jmp qword ptr [ORIG_NvFBC_GetSDKVersion]
|
||||
PROXY_NvFBC_GetSDKVersion endp
|
||||
|
||||
PROXY_NvFBC_GetStatus proc
|
||||
jmp qword ptr [ORIG_NvFBC_GetStatus]
|
||||
PROXY_NvFBC_GetStatus endp
|
||||
|
||||
PROXY_NvFBC_GetStatusEx proc
|
||||
jmp qword ptr [ORIG_NvFBC_GetStatusEx]
|
||||
PROXY_NvFBC_GetStatusEx endp
|
||||
|
||||
PROXY_NvFBC_SetGlobalFlags proc
|
||||
jmp qword ptr [ORIG_NvFBC_SetGlobalFlags]
|
||||
PROXY_NvFBC_SetGlobalFlags endp
|
||||
|
||||
PROXY_NvOptimusEnablement proc
|
||||
jmp qword ptr [ORIG_NvOptimusEnablement]
|
||||
PROXY_NvOptimusEnablement endp
|
||||
|
||||
end
|
79
win/nvfbcwrp/nvfbcdefs.h
Normal file
79
win/nvfbcwrp/nvfbcdefs.h
Normal file
@ -0,0 +1,79 @@
|
||||
#pragma once
|
||||
|
||||
// Magic code which is passed as pPrivateData and enables NvFBC to work on GeForce
|
||||
int magic[] = { 0x0D7BC620, 0x4C17E142, 0x5E6B5997, 0x4B5A855B };
|
||||
|
||||
typedef unsigned long NvU32; /* 0 to 4294967295 */
|
||||
|
||||
/**
|
||||
* \ingroup NVFBC
|
||||
* Macro to define the NVFBC API version corresponding to this distribution.
|
||||
*/
|
||||
#define NVFBC_DLL_VERSION 0x70
|
||||
|
||||
/**
|
||||
* \ingroup NVFBC
|
||||
* Calling Convention
|
||||
*/
|
||||
#define NVFBCAPI __stdcall
|
||||
|
||||
/**
|
||||
* \ingroup NVFBC
|
||||
* Macro to construct version numbers for parameter structs.
|
||||
*/
|
||||
#define NVFBC_STRUCT_VERSION(typeName, ver) (NvU32)(sizeof(typeName) | ((ver)<<16) | (NVFBC_DLL_VERSION << 24))
|
||||
|
||||
typedef enum _NVFBCRESULT
|
||||
{
|
||||
NVFBC_SUCCESS = 0,
|
||||
NVFBC_ERROR_GENERIC = -1, /**< Unexpected failure in NVFBC. */
|
||||
NVFBC_ERROR_INVALID_PARAM = -2, /**< One or more of the paramteres passed to NvFBC are invalid [This include NULL pointers]. */
|
||||
NVFBC_ERROR_INVALIDATED_SESSION = -3, /**< NvFBC session is invalid. Client needs to recreate session. */
|
||||
NVFBC_ERROR_PROTECTED_CONTENT = -4, /**< Protected content detected. Capture failed. */
|
||||
NVFBC_ERROR_DRIVER_FAILURE = -5, /**< GPU driver returned failure to process NvFBC command. */
|
||||
NVFBC_ERROR_CUDA_FAILURE = -6, /**< CUDA driver returned failure to process NvFBC command. */
|
||||
NVFBC_ERROR_UNSUPPORTED = -7, /**< API Unsupported on this version of NvFBC. */
|
||||
NVFBC_ERROR_HW_ENC_FAILURE = -8, /**< HW Encoder returned failure to process NVFBC command. */
|
||||
NVFBC_ERROR_INCOMPATIBLE_DRIVER = -9, /**< NVFBC is not compatible with this version of the GPU driver. */
|
||||
NVFBC_ERROR_UNSUPPORTED_PLATFORM = -10, /**< NVFBC is not supported on this platform. */
|
||||
NVFBC_ERROR_OUT_OF_MEMORY = -11, /**< Failed to allocate memory. */
|
||||
NVFBC_ERROR_INVALID_PTR = -12, /**< A NULL pointer was passed. */
|
||||
NVFBC_ERROR_INCOMPATIBLE_VERSION = -13, /**< An API was called with a parameter struct that has an incompatible version. Check dwVersion field of paramter struct. */
|
||||
NVFBC_ERROR_OPT_CAPTURE_FAILURE = -14, /**< Desktop Capture failed. */
|
||||
NVFBC_ERROR_INSUFFICIENT_PRIVILEGES = -15, /**< User doesn't have appropriate previlages. */
|
||||
NVFBC_ERROR_INVALID_CALL = -16, /**< NVFBC APIs called in wrong sequence. */
|
||||
NVFBC_ERROR_SYSTEM_ERROR = -17, /**< Win32 error. */
|
||||
NVFBC_ERROR_INVALID_TARGET = -18, /**< The target adapter idx can not be used for NVFBC capture. It may not correspond to an NVIDIA GPU, or may not be attached to desktop. */
|
||||
NVFBC_ERROR_NVAPI_FAILURE = -19, /**< NvAPI Error */
|
||||
NVFBC_ERROR_DYNAMIC_DISABLE = -20, /**< NvFBC is dynamically disabled. Cannot continue to capture */
|
||||
NVFBC_ERROR_IPC_FAILURE = -21, /**< NVFBC encountered an error in state management */
|
||||
NVFBC_ERROR_CURSOR_CAPTURE_FAILURE = -22, /**< Hardware cursor capture failed */
|
||||
} NVFBCRESULT;
|
||||
|
||||
|
||||
typedef struct _NvFBCCreateParams
|
||||
{
|
||||
NvU32 dwVersion; /**< [in] Struct version. Set to NVFBC_CREATE_PARAMS_VER. */
|
||||
NvU32 dwInterfaceType; /**< [in] ID of the NVFBC interface Type being requested. */
|
||||
NvU32 dwMaxDisplayWidth; /**< [out] Max. display width allowed. */
|
||||
NvU32 dwMaxDisplayHeight; /**< [out] Max. display height allowed. */
|
||||
void* pDevice; /**< [in] Device pointer. */
|
||||
void* pPrivateData; /**< [in] Private data [optional]. */
|
||||
NvU32 dwPrivateDataSize; /**< [in] Size of private data. */
|
||||
NvU32 dwInterfaceVersion; /**< [in] Version of the capture interface. */
|
||||
void* pNvFBC; /**< [out] A pointer to the requested NVFBC object. */
|
||||
NvU32 dwAdapterIdx; /**< [in] Adapter Ordinal corresponding to the display to be grabbed. If pDevice is set, this parameter is ignored. */
|
||||
NvU32 dwNvFBCVersion; /**< [out] Indicates the highest NvFBC interface version supported by the loaded NVFBC library. */
|
||||
void* cudaCtx; /**< [in] CUDA context created using cuD3D9CtxCreate with the D3D9 device passed as pDevice. Only used for NvFBCCuda interface.
|
||||
It is mandatory to pass a valid D3D9 device if cudaCtx is passed. The call will fail otherwise.
|
||||
Client must release NvFBCCuda object before destroying the cudaCtx. */
|
||||
void* pPrivateData2; /**< [in] Private data [optional]. */
|
||||
NvU32 dwPrivateData2Size; /**< [in] Size of private data. */
|
||||
NvU32 dwReserved[55]; /**< [in] Reserved. Should be set to 0. */
|
||||
void* pReserved[27]; /**< [in] Reserved. Should be set to NULL. */
|
||||
}NvFBCCreateParams;
|
||||
#define NVFBC_CREATE_PARAMS_VER_1 NVFBC_STRUCT_VERSION(NvFBCCreateParams, 1)
|
||||
#define NVFBC_CREATE_PARAMS_VER_2 NVFBC_STRUCT_VERSION(NvFBCCreateParams, 2)
|
||||
#define NVFBC_CREATE_PARAMS_VER NVFBC_CREATE_PARAMS_VER_2
|
||||
|
||||
typedef NVFBCRESULT(NVFBCAPI* NvFBC_CreateFunctionExType) (void* pCreateParams);
|
10
win/nvfbcwrp/nvfbcwrp.def
Normal file
10
win/nvfbcwrp/nvfbcwrp.def
Normal file
@ -0,0 +1,10 @@
|
||||
LIBRARY nvfbcwrp
|
||||
EXPORTS
|
||||
NvFBC_Create=PROXY_NvFBC_Create @1
|
||||
NvFBC_CreateEx=PROXY_NvFBC_CreateEx @2
|
||||
NvFBC_Enable=PROXY_NvFBC_Enable @3
|
||||
NvFBC_GetSDKVersion=PROXY_NvFBC_GetSDKVersion @4
|
||||
NvFBC_GetStatus=PROXY_NvFBC_GetStatus @5
|
||||
NvFBC_GetStatusEx=PROXY_NvFBC_GetStatusEx @6
|
||||
NvFBC_SetGlobalFlags=PROXY_NvFBC_SetGlobalFlags @7
|
||||
NvOptimusEnablement=PROXY_NvOptimusEnablement @8
|
31
win/nvfbcwrp/nvfbcwrp.sln
Normal file
31
win/nvfbcwrp/nvfbcwrp.sln
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29519.87
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nvfbcwrp", "nvfbcwrp.vcxproj", "{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Debug|x64.Build.0 = Debug|x64
|
||||
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Debug|x86.Build.0 = Debug|Win32
|
||||
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Release|x64.ActiveCfg = Release|x64
|
||||
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Release|x64.Build.0 = Release|x64
|
||||
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Release|x86.ActiveCfg = Release|Win32
|
||||
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {8A014521-63BA-4C47-A9A0-D97C80423FA4}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
187
win/nvfbcwrp/nvfbcwrp.vcxproj
Normal file
187
win/nvfbcwrp/nvfbcwrp.vcxproj
Normal file
@ -0,0 +1,187 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<ProjectGuid>{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>nvfbcwrp</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;NVFBCWRP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;NVFBCWRP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>nvfbcwrp.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
<ProjectReference>
|
||||
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||
</ProjectReference>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;NVFBCWRP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;NVFBCWRP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>nvfbcwrp.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="framework.h" />
|
||||
<ClInclude Include="nvfbcdefs.h" />
|
||||
<ClInclude Include="pch.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="nvfbcwrp_main.cpp" />
|
||||
<ClCompile Include="pch.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MASM Include="nvfbcbody.asm" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="nvfbcwrp.def" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||
</ImportGroup>
|
||||
</Project>
|
46
win/nvfbcwrp/nvfbcwrp.vcxproj.filters
Normal file
46
win/nvfbcwrp/nvfbcwrp.vcxproj.filters
Normal file
@ -0,0 +1,46 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Исходные файлы">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Файлы заголовков">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Файлы ресурсов">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="framework.h">
|
||||
<Filter>Файлы заголовков</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="pch.h">
|
||||
<Filter>Файлы заголовков</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="nvfbcdefs.h">
|
||||
<Filter>Файлы заголовков</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="pch.cpp">
|
||||
<Filter>Исходные файлы</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="nvfbcwrp_main.cpp">
|
||||
<Filter>Исходные файлы</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<MASM Include="nvfbcbody.asm">
|
||||
<Filter>Исходные файлы</Filter>
|
||||
</MASM>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="nvfbcwrp.def">
|
||||
<Filter>Исходные файлы</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
4
win/nvfbcwrp/nvfbcwrp.vcxproj.user
Normal file
4
win/nvfbcwrp/nvfbcwrp.vcxproj.user
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup />
|
||||
</Project>
|
65
win/nvfbcwrp/nvfbcwrp_main.cpp
Normal file
65
win/nvfbcwrp/nvfbcwrp_main.cpp
Normal file
@ -0,0 +1,65 @@
|
||||
#include "pch.h"
|
||||
#include "nvfbcdefs.h"
|
||||
#include <windows.h>
|
||||
|
||||
HINSTANCE hLThis = 0;
|
||||
extern "C" {
|
||||
FARPROC ORIG_NvFBC_Create, ORIG_NvFBC_Enable, ORIG_NvFBC_GetSDKVersion,
|
||||
ORIG_NvFBC_GetStatus, ORIG_NvFBC_GetStatusEx, ORIG_NvFBC_SetGlobalFlags,
|
||||
ORIG_NvOptimusEnablement;
|
||||
}
|
||||
NvFBC_CreateFunctionExType ORIG_NvFBC_CreateEx;
|
||||
HINSTANCE hL = 0;
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
|
||||
{
|
||||
if (reason == DLL_PROCESS_ATTACH)
|
||||
{
|
||||
//hLThis = hInst;
|
||||
hL = LoadLibrary(".\\NvFBC64_.dll");
|
||||
if (!hL) return false;
|
||||
ORIG_NvFBC_Create = GetProcAddress(hL, "NvFBC_Create");
|
||||
if (!ORIG_NvFBC_Create) return false;
|
||||
ORIG_NvFBC_CreateEx = (NvFBC_CreateFunctionExType)::GetProcAddress(hL, "NvFBC_CreateEx");
|
||||
if (!ORIG_NvFBC_CreateEx) return false;
|
||||
ORIG_NvFBC_Enable = GetProcAddress(hL, "NvFBC_Enable");
|
||||
if (!ORIG_NvFBC_Enable) return false;
|
||||
ORIG_NvFBC_GetSDKVersion = GetProcAddress(hL, "NvFBC_GetSDKVersion");
|
||||
if (!ORIG_NvFBC_GetSDKVersion) return false;
|
||||
ORIG_NvFBC_GetStatus = GetProcAddress(hL, "NvFBC_GetStatus");
|
||||
if (!ORIG_NvFBC_GetStatus) return false;
|
||||
ORIG_NvFBC_GetStatusEx = GetProcAddress(hL, "NvFBC_GetStatusEx");
|
||||
if (!ORIG_NvFBC_GetStatusEx) return false;
|
||||
ORIG_NvFBC_SetGlobalFlags = GetProcAddress(hL, "NvFBC_SetGlobalFlags");
|
||||
if (!ORIG_NvFBC_SetGlobalFlags) return false;
|
||||
ORIG_NvOptimusEnablement = GetProcAddress(hL, "NvOptimusEnablement");
|
||||
if (!ORIG_NvOptimusEnablement) return false;
|
||||
}
|
||||
if (reason == DLL_PROCESS_DETACH)
|
||||
{
|
||||
FreeLibrary(hL);
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
NVFBCRESULT NVFBCAPI PROXY_NvFBC_CreateEx(NvFBCCreateParams* params) {
|
||||
if (params->dwPrivateDataSize == 0 && params->pPrivateData == NULL) {
|
||||
//Backup old values
|
||||
void* bkp_privdata = params->pPrivateData;
|
||||
NvU32 bkp_privdatasize = params->dwPrivateDataSize;
|
||||
// Inject private keys into structure
|
||||
params->dwPrivateDataSize = sizeof(magic);
|
||||
params->pPrivateData = &magic;
|
||||
// Invoke original function
|
||||
NVFBCRESULT res = ORIG_NvFBC_CreateEx(params);
|
||||
// Rollback private data changes in params structure
|
||||
params->pPrivateData = bkp_privdata;
|
||||
params->dwPrivateDataSize = bkp_privdatasize;
|
||||
return res;
|
||||
}
|
||||
else {
|
||||
return ORIG_NvFBC_CreateEx((void*)params);
|
||||
}
|
||||
}
|
5
win/nvfbcwrp/pch.cpp
Normal file
5
win/nvfbcwrp/pch.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
// pch.cpp: файл исходного кода, соответствующий предварительно скомпилированному заголовочному файлу
|
||||
|
||||
#include "pch.h"
|
||||
|
||||
// При использовании предварительно скомпилированных заголовочных файлов необходим следующий файл исходного кода для выполнения сборки.
|
13
win/nvfbcwrp/pch.h
Normal file
13
win/nvfbcwrp/pch.h
Normal file
@ -0,0 +1,13 @@
|
||||
// pch.h: это предварительно скомпилированный заголовочный файл.
|
||||
// Перечисленные ниже файлы компилируются только один раз, что ускоряет последующие сборки.
|
||||
// Это также влияет на работу IntelliSense, включая многие функции просмотра и завершения кода.
|
||||
// Однако изменение любого из приведенных здесь файлов между операциями сборки приведет к повторной компиляции всех(!) этих файлов.
|
||||
// Не добавляйте сюда файлы, которые планируете часто изменять, так как в этом случае выигрыша в производительности не будет.
|
||||
|
||||
#ifndef PCH_H
|
||||
#define PCH_H
|
||||
|
||||
// Добавьте сюда заголовочные файлы для предварительной компиляции
|
||||
#include "framework.h"
|
||||
|
||||
#endif //PCH_H
|
Loading…
Reference in New Issue
Block a user