From 52ccd2220532ee47ad44df980732a1b467f984cf Mon Sep 17 00:00:00 2001 From: Sherlocks Date: Tue, 6 Jun 2017 23:56:02 +0900 Subject: [PATCH] Added Kabylake Graphics --- Changelog.md | 3 + .../project.pbxproj | 4 +- .../UserInterfaceState.xcuserstate | Bin 47712 -> 47240 bytes IntelGraphicsDVMTFixup/kern_igdvmt.cpp | 73 +++++++++++++++++- 4 files changed, 77 insertions(+), 3 deletions(-) diff --git a/Changelog.md b/Changelog.md index d9187f2..48033dd 100755 --- a/Changelog.md +++ b/Changelog.md @@ -1,5 +1,8 @@ IntelGraphicsDVMTFixup Changelog ============================= +#### v1.1.6 +- Added Kabylake Graphics + #### v1.1.5 - Added OSBundleCompatibleVersion diff --git a/IntelGraphicsDVMTFixup.xcodeproj/project.pbxproj b/IntelGraphicsDVMTFixup.xcodeproj/project.pbxproj index 13e1728..9854d48 100755 --- a/IntelGraphicsDVMTFixup.xcodeproj/project.pbxproj +++ b/IntelGraphicsDVMTFixup.xcodeproj/project.pbxproj @@ -328,7 +328,7 @@ MODULE_NAME = com.sherlocks.IntelGraphicsDVMTFixup; MODULE_START = "$(PRODUCT_NAME)_kern_start"; MODULE_STOP = "$(PRODUCT_NAME)_kern_stop"; - MODULE_VERSION = 1.1.5; + MODULE_VERSION = 1.1.6; OTHER_CFLAGS = ( "-mmmx", "-msse", @@ -372,7 +372,7 @@ MODULE_NAME = com.sherlocks.IntelGraphicsDVMTFixup; MODULE_START = "$(PRODUCT_NAME)_kern_start"; MODULE_STOP = "$(PRODUCT_NAME)_kern_stop"; - MODULE_VERSION = 1.1.5; + MODULE_VERSION = 1.1.6; OTHER_CFLAGS = ( "-mmmx", "-msse", diff --git a/IntelGraphicsDVMTFixup.xcodeproj/project.xcworkspace/xcuserdata/supreme.xcuserdatad/UserInterfaceState.xcuserstate b/IntelGraphicsDVMTFixup.xcodeproj/project.xcworkspace/xcuserdata/supreme.xcuserdatad/UserInterfaceState.xcuserstate index e8af16dbe8e132f1d829f0f865c206cd0f257672..cc710f39e193b86ce501bbb1d2e95e309f78bf22 100755 GIT binary patch literal 47240 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 diff --git a/IntelGraphicsDVMTFixup/kern_igdvmt.cpp b/IntelGraphicsDVMTFixup/kern_igdvmt.cpp index 90cc1fd..dc38953 100755 --- a/IntelGraphicsDVMTFixup/kern_igdvmt.cpp +++ b/IntelGraphicsDVMTFixup/kern_igdvmt.cpp @@ -26,12 +26,16 @@ static const char *kextBDWGraphicsFramebuffer[] { static const char *kextSKLGraphicsFramebuffer[] { "/System/Library/Extensions/AppleIntelSKLGraphicsFramebuffer.kext/Contents/MacOS/AppleIntelSKLGraphicsFramebuffer" }; +static const char *kextKBLGraphicsFramebuffer[] { + "/System/Library/Extensions/AppleIntelSKLGraphicsFramebuffer.kext/Contents/MacOS/AppleIntelSKLGraphicsFramebuffer" }; + static KernelPatcher::KextInfo kextList[] { { "com.apple.driver.AppleIntelBDWGraphicsFramebuffer", kextBDWGraphicsFramebuffer, 1, true, {}, KernelPatcher::KextInfo::Unloaded }, { "com.apple.driver.AppleIntelSKLGraphicsFramebuffer", kextSKLGraphicsFramebuffer, 1, true, {}, KernelPatcher::KextInfo::Unloaded }, + { "com.apple.driver.AppleIntelKBLGraphicsFramebuffer", kextSKLGraphicsFramebuffer, 1, true, {}, KernelPatcher::KextInfo::Unloaded }, }; -static size_t kextListSize {2}; +static size_t kextListSize {3}; bool IGDVMT::init() { LiluAPI::Error error = lilu.onKextLoad(kextList, kextListSize, @@ -255,6 +259,73 @@ void IGDVMT::processKext(KernelPatcher &patcher, size_t index, mach_vm_address_t progressState |= ProcessingState::GraphicsFramebufferPatched; DBGLOG("igdvmt @ Skylake - 01030404 00002002 00000000 :: minStolenSize patch with 32mb DVMT-prealloc was applied"); } + else if (!(progressState & ProcessingState::GraphicsFramebufferPatched) && !strcmp(kextList[i].id, "com.apple.driver.AppleIntelKBLGraphicsFramebuffer")) { + DBGLOG("igdvmt @ found com.apple.driver.AppleIntelKBLGraphicsFramebuffer"); + /*if (KernelCheck == KernelVersion::Sierra){ + const uint8_t find[] = {0x4C, 0x89, 0x5D, 0xC0, 0x76, 0x46}; + const uint8_t replace[] = {0x4C, 0x89, 0x5D, 0xC0, 0xEB, 0x46}; + KextPatch kext_patch { + {&kextList[i], find, replace, sizeof(find), 1}, + KernelVersion::Sierra, KernelVersion::Sierra + }; + applyPatches(patcher, index, &kext_patch, 1); + progressState |= ProcessingState::GraphicsFramebufferPatched; + DBGLOG("igdvmt @ Kabylake - 10.13 :: DVMT patches applied"); + }*/ + const uint8_t find[] = {0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x00, 0x00}; + const uint8_t replace[] = {0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x90, 0x00}; + KextPatch kext_patch { + {&kextList[i], find, replace, sizeof(find), 1}, + KernelVersion::Sierra, KernelVersion::Sierra + }; + applyPatches(patcher, index, &kext_patch, 1); + progressState |= ProcessingState::GraphicsFramebufferPatched; + DBGLOG("igdvmt @ Kabylake - 01010101 00006002 00000000 :: minStolenSize patch with 32mb DVMT-prealloc was applied"); + + + const uint8_t find1[] = {0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00}; + const uint8_t replace1[] = {0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x90, 0x00}; + KextPatch kext_patch1 { + {&kextList[i], find1, replace1, sizeof(find1), 2}, + KernelVersion::Sierra, KernelVersion::Sierra + }; + applyPatches(patcher, index, &kext_patch1, 1); + progressState |= ProcessingState::GraphicsFramebufferPatched; + DBGLOG("igdvmt @ Kabylake - 01030303 00002002 00000000 :: minStolenSize patch with 32mb DVMT-prealloc was applied"); + + + const uint8_t find2[] = {0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x00, 0x00}; + const uint8_t replace2[] = {0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x90, 0x00}; + KextPatch kext_patch2 { + {&kextList[i], find2, replace2, sizeof(find2), 2}, + KernelVersion::Sierra, KernelVersion::Sierra + }; + applyPatches(patcher, index, &kext_patch2, 1); + progressState |= ProcessingState::GraphicsFramebufferPatched; + DBGLOG("igdvmt @ Kabylake - 01030303 00006002 00000000 :: minStolenSize patch with 32mb DVMT-prealloc was applied"); + + + const uint8_t find3[] = {0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x50, 0x01}; + const uint8_t replace3[] = {0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x90, 0x00}; + KextPatch kext_patch3 { + {&kextList[i], find3, replace3, sizeof(find3), 1}, + KernelVersion::Sierra, KernelVersion::Sierra + }; + applyPatches(patcher, index, &kext_patch3, 1); + progressState |= ProcessingState::GraphicsFramebufferPatched; + DBGLOG("igdvmt @ Kabylake - 01030303 00006002 00005001 :: minStolenSize patch with 32mb DVMT-prealloc was applied"); + + + const uint8_t find4[] = {0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x90, 0x03, 0x00, 0x00, 0x00, 0x00}; + const uint8_t replace4[] = {0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x90, 0x00}; + KextPatch kext_patch4 { + {&kextList[i], find4, replace4, sizeof(find4), 2}, + KernelVersion::Sierra, KernelVersion::Sierra + }; + applyPatches(patcher, index, &kext_patch4, 1); + progressState |= ProcessingState::GraphicsFramebufferPatched; + DBGLOG("igdvmt @ Kabylake - 01030303 00009003 00000000 :: minStolenSize patch with 32mb DVMT-prealloc was applied"); + } } } }