summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.ci/scripts/merge/apply-patches-by-label-private.py52
-rw-r--r--.ci/scripts/merge/apply-patches-by-label.py12
-rw-r--r--.ci/scripts/windows/upload.ps132
-rw-r--r--.ci/templates/build-msvc.yml21
-rw-r--r--.ci/templates/build-single.yml4
-rw-r--r--.ci/templates/mergebot-private.yml15
-rw-r--r--.ci/templates/mergebot.yml2
-rw-r--r--.ci/templates/release-download.yml2
-rw-r--r--.ci/yuzu-mainline-step2.yml43
-rw-r--r--.ci/yuzu-patreon-step2.yml22
-rw-r--r--README.md1
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp10
12 files changed, 157 insertions, 59 deletions
diff --git a/.ci/scripts/merge/apply-patches-by-label-private.py b/.ci/scripts/merge/apply-patches-by-label-private.py
index 11ec60010..fe0acd510 100644
--- a/.ci/scripts/merge/apply-patches-by-label-private.py
+++ b/.ci/scripts/merge/apply-patches-by-label-private.py
@@ -1,41 +1,45 @@
# Download all pull requests as patches that match a specific label
# Usage: python download-patches-by-label.py <Label to Match> <Root Path Folder to DL to>
-import requests, sys, json, urllib3.request, shutil, subprocess, os, traceback
+import requests, sys, json, shutil, subprocess, os, traceback
-org = os.getenv("PrivateMergeOrg".upper(), "yuzu-emu")
-repo = os.getenv("PrivateMergeRepo".upper(), "yuzu-private")
-tagline = os.getenv("MergeTaglinePrivate".upper(), "")
+org = os.getenv("PRIVATEMERGEORG", "yuzu-emu")
+repo = os.getenv("PRIVATEMERGEREPO", "yuzu-private")
+tagline = sys.argv[3]
user = sys.argv[1]
-http = urllib3.PoolManager()
dl_list = {}
+TAG_NAME = sys.argv[2]
+
def check_individual(repo_id, pr_id):
url = 'https://%sdev.azure.com/%s/%s/_apis/git/repositories/%s/pullRequests/%s/labels?api-version=5.1-preview.1' % (user, org, repo, repo_id, pr_id)
response = requests.get(url)
if (response.ok):
- j = json.loads(response.content)
- for tg in j['value']:
- if (tg['name'] == sys.argv[2]):
- return True
+ try:
+ js = response.json()
+ return any(tag.get('name') == TAG_NAME for tag in js['value'])
+ except:
+ return False
return False
-try:
+def merge_pr(pn, ref):
+ print("Matched PR# %s" % pn)
+ print(subprocess.check_output(["git", "fetch", "https://%sdev.azure.com/%s/_git/%s" % (user, org, repo), ref, "-f"]))
+ print(subprocess.check_output(["git", "merge", "--squash", 'origin/' + ref.replace('refs/heads/','')]))
+ print(subprocess.check_output(["git", "commit", "-m\"Merge %s PR %s\"" % (tagline, pn)]))
+
+def main():
url = 'https://%sdev.azure.com/%s/%s/_apis/git/pullrequests?api-version=5.1' % (user, org, repo)
response = requests.get(url)
if (response.ok):
- j = json.loads(response.content)
- for pr in j["value"]:
- repo_id = pr['repository']['id']
- pr_id = pr['pullRequestId']
- if (check_individual(repo_id, pr_id)):
- pn = pr_id
- ref = pr['sourceRefName']
- print("Matched PR# %s" % pn)
- print(subprocess.check_output(["git", "fetch", "https://%sdev.azure.com/%s/_git/%s" % (user, org, repo), ref, "-f"]))
- print(subprocess.check_output(["git", "merge", "--squash", 'origin/' + ref.replace('refs/heads/','')]))
- print(subprocess.check_output(["git", "commit", "-m\"Merge %s PR %s\"" % (tagline, pn)]))
-except:
- traceback.print_exc(file=sys.stdout)
- sys.exit(-1)
+ js = response.json()
+ tagged_prs = filter(lambda pr: check_individual(pr['repository']['id'], pr['pullRequestId']), js['value'])
+ map(lambda pr: merge_pr(pr['pullRequestId'], pr['sourceRefName']), tagged_prs)
+
+if __name__ == '__main__':
+ try:
+ main()
+ except:
+ traceback.print_exc(file=sys.stdout)
+ sys.exit(-1)
diff --git a/.ci/scripts/merge/apply-patches-by-label.py b/.ci/scripts/merge/apply-patches-by-label.py
index 7f1ea06cf..43ed74d7f 100644
--- a/.ci/scripts/merge/apply-patches-by-label.py
+++ b/.ci/scripts/merge/apply-patches-by-label.py
@@ -3,7 +3,7 @@
import requests, sys, json, urllib3.request, shutil, subprocess, os
-tagline = os.getenv("MergeTaglinePublic".upper(), "")
+tagline = sys.argv[2]
http = urllib3.PoolManager()
dl_list = {}
@@ -14,11 +14,13 @@ def check_individual(labels):
return True
return False
-try:
- url = 'https://api.github.com/repos/yuzu-emu/yuzu/pulls'
+def do_page(page):
+ url = 'https://api.github.com/repos/yuzu-emu/yuzu/pulls?page=%s' % page
response = requests.get(url)
if (response.ok):
j = json.loads(response.content)
+ if j == []:
+ return
for pr in j:
if (check_individual(pr["labels"])):
pn = pr["number"]
@@ -26,5 +28,9 @@ try:
print(subprocess.check_output(["git", "fetch", "https://github.com/yuzu-emu/yuzu.git", "pull/%s/head:pr-%s" % (pn, pn), "-f"]))
print(subprocess.check_output(["git", "merge", "--squash", "pr-%s" % pn]))
print(subprocess.check_output(["git", "commit", "-m\"Merge %s PR %s\"" % (tagline, pn)]))
+
+try:
+ for i in range(1,30):
+ do_page(i)
except:
sys.exit(-1)
diff --git a/.ci/scripts/windows/upload.ps1 b/.ci/scripts/windows/upload.ps1
new file mode 100644
index 000000000..de86e7390
--- /dev/null
+++ b/.ci/scripts/windows/upload.ps1
@@ -0,0 +1,32 @@
+$GITDATE = $(git show -s --date=short --format='%ad') -replace "-",""
+$GITREV = $(git show -s --format='%h')
+$RELEASE_DIST = "yuzu-windows-msvc"
+
+$MSVC_BUILD_ZIP = "yuzu-windows-msvc-$GITDATE-$GITREV.zip" -replace " ", ""
+$MSVC_BUILD_PDB = "yuzu-windows-msvc-$GITDATE-$GITREV-debugsymbols.zip" -replace " ", ""
+$MSVC_SEVENZIP = "yuzu-windows-msvc-$GITDATE-$GITREV.7z" -replace " ", ""
+
+$env:BUILD_ZIP = $MSVC_BUILD_ZIP
+$env:BUILD_SYMBOLS = $MSVC_BUILD_PDB
+$env:BUILD_UPDATE = $MSVC_SEVENZIP
+
+$BUILD_DIR = ".\build\bin\Release"
+
+mkdir pdb
+Get-ChildItem "$BUILD_DIR\" -Recurse -Filter "*.pdb" | Copy-Item -destination .\pdb
+7z a -tzip $MSVC_BUILD_PDB .\pdb\*.pdb
+rm "$BUILD_DIR\*.pdb"
+mkdir $RELEASE_DIST
+mkdir "artifacts"
+
+Copy-Item "$BUILD_DIR\*" -Destination $RELEASE_DIST -Recurse
+rm "$RELEASE_DIST\*.exe"
+Get-ChildItem "$BUILD_DIR" -Recurse -Filter "yuzu*.exe" | Copy-Item -destination $RELEASE_DIST
+Get-ChildItem "$BUILD_DIR" -Recurse -Filter "QtWebEngineProcess*.exe" | Copy-Item -destination $RELEASE_DIST
+Copy-Item .\license.txt -Destination $RELEASE_DIST
+Copy-Item .\README.md -Destination $RELEASE_DIST
+7z a -tzip $MSVC_BUILD_ZIP $RELEASE_DIST\*
+7z a $MSVC_SEVENZIP $RELEASE_DIST
+
+Get-ChildItem . -Filter "*.zip" | Copy-Item -destination "artifacts"
+Get-ChildItem . -Filter "*.7z" | Copy-Item -destination "artifacts" \ No newline at end of file
diff --git a/.ci/templates/build-msvc.yml b/.ci/templates/build-msvc.yml
new file mode 100644
index 000000000..906afa382
--- /dev/null
+++ b/.ci/templates/build-msvc.yml
@@ -0,0 +1,21 @@
+parameters:
+ artifactSource: 'true'
+ cache: 'false'
+
+steps:
+- script: mkdir build && cd build && set DATE=`date '+%Y.%m.%d'` && set CI=true && set AZURE_REPO_NAME=yuzu-emu/yuzu-$(BuildName) && set AZURE_REPO_TAG=$(BuildName)-$DATE && cmake -G "Visual Studio 15 2017 Win64" --config Release -DYUZU_USE_BUNDLED_QT=1 -DYUZU_USE_BUNDLED_SDL2=1 -DYUZU_USE_BUNDLED_UNICORN=1 -DYUZU_USE_QT_WEB_ENGINE=ON -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${COMPAT} -DUSE_DISCORD_PRESENCE=ON .. && cd ..
+ displayName: 'Configure CMake'
+- task: MSBuild@1
+ displayName: 'Build'
+ inputs:
+ solution: 'build/yuzu.sln'
+ maximumCpuCount: true
+ configuration: release
+- task: PowerShell@2
+ displayName: 'Package Artifacts'
+ inputs:
+ targetType: 'filePath'
+ filePath: './.ci/scripts/windows/upload.ps1'
+- publish: artifacts
+ artifact: 'yuzu-$(BuildName)-windows-msvc'
+ displayName: 'Upload Artifacts'
diff --git a/.ci/templates/build-single.yml b/.ci/templates/build-single.yml
index 9bc27247e..002f5d24f 100644
--- a/.ci/templates/build-single.yml
+++ b/.ci/templates/build-single.yml
@@ -3,8 +3,6 @@ parameters:
cache: 'false'
steps:
-- script: export DATE=`date '+%Y.%m.%d'` && export CI=true && AZURE_REPO_NAME=yuzu-emu/yuzu-$(BuildName) && AZURE_REPO_TAG=$(BuildName)-$DATE
- displayName: 'Determine Build Name'
- task: DockerInstaller@0
displayName: 'Prepare Environment'
inputs:
@@ -15,7 +13,7 @@ steps:
key: yuzu-v1-$(BuildName)-$(BuildSuffix)-$(CacheSuffix)
path: $(System.DefaultWorkingDirectory)/ccache
cacheHitVar: CACHE_RESTORED
-- script: chmod a+x ./.ci/scripts/$(ScriptFolder)/exec.sh && ./.ci/scripts/$(ScriptFolder)/exec.sh
+- script: export DATE=`date '+%Y.%m.%d'` && export CI=true && export AZURE_REPO_NAME=yuzu-emu/yuzu-$(BuildName) && export AZURE_REPO_TAG=$(BuildName)-$DATE && chmod a+x ./.ci/scripts/$(ScriptFolder)/exec.sh && ./.ci/scripts/$(ScriptFolder)/exec.sh
displayName: 'Build'
- script: chmod a+x ./.ci/scripts/$(ScriptFolder)/upload.sh && RELEASE_NAME=$(BuildName) ./.ci/scripts/$(ScriptFolder)/upload.sh
displayName: 'Package Artifacts'
diff --git a/.ci/templates/mergebot-private.yml b/.ci/templates/mergebot-private.yml
index a673c5b01..f9a40cf61 100644
--- a/.ci/templates/mergebot-private.yml
+++ b/.ci/templates/mergebot-private.yml
@@ -8,16 +8,23 @@ steps:
- script: chmod a+x $(System.DefaultWorkingDirectory)/.ci/scripts/merge/yuzubot-git-config.sh && $(System.DefaultWorkingDirectory)/.ci/scripts/merge/yuzubot-git-config.sh
displayName: 'Apply Git Configuration'
- task: PythonScript@0
- displayName: 'Discover, Download, and Apply Patches'
+ displayName: 'Discover, Download, and Apply Patches (Mainline)'
inputs:
scriptSource: 'filePath'
scriptPath: '.ci/scripts/merge/apply-patches-by-label.py'
- arguments: '${{ parameters.matchLabelPublic }} patches-public'
+ arguments: '${{ parameters.matchLabelPublic }} $(MergeTaglinePublic) patches-public'
workingDirectory: '$(System.DefaultWorkingDirectory)'
- task: PythonScript@0
- displayName: 'Discover, Download, and Apply Patches'
+ displayName: 'Discover, Download, and Apply Patches (Patreon Public)'
+ inputs:
+ scriptSource: 'filePath'
+ scriptPath: '.ci/scripts/merge/apply-patches-by-label.py'
+ arguments: '${{ parameters.matchLabel }} "$(MergeTaglinePrivate) Public" patches-mixed-public'
+ workingDirectory: '$(System.DefaultWorkingDirectory)'
+ - task: PythonScript@0
+ displayName: 'Discover, Download, and Apply Patches (Patreon Private)'
inputs:
scriptSource: 'filePath'
scriptPath: '.ci/scripts/merge/apply-patches-by-label-private.py'
- arguments: '$(PrivateMergeUser) ${{ parameters.matchLabel }} patches-private'
+ arguments: '$(PrivateMergeUser) ${{ parameters.matchLabel }} "$(MergeTaglinePrivate) Private" patches-private'
workingDirectory: '$(System.DefaultWorkingDirectory)'
diff --git a/.ci/templates/mergebot.yml b/.ci/templates/mergebot.yml
index 5211efcc6..a4c5c2a28 100644
--- a/.ci/templates/mergebot.yml
+++ b/.ci/templates/mergebot.yml
@@ -11,5 +11,5 @@ steps:
inputs:
scriptSource: 'filePath'
scriptPath: '.ci/scripts/merge/apply-patches-by-label.py'
- arguments: '${{ parameters.matchLabel }} patches'
+ arguments: '${{ parameters.matchLabel }} Tagged patches'
workingDirectory: '$(System.DefaultWorkingDirectory)'
diff --git a/.ci/templates/release-download.yml b/.ci/templates/release-download.yml
index 50ca06bb2..f7e30690f 100644
--- a/.ci/templates/release-download.yml
+++ b/.ci/templates/release-download.yml
@@ -2,7 +2,7 @@ steps:
- task: DownloadPipelineArtifact@2
displayName: 'Download Windows Release'
inputs:
- artifactName: 'yuzu-$(BuildName)-windows-mingw'
+ artifactName: 'yuzu-$(BuildName)-windows-msvc'
buildType: 'current'
targetPath: '$(Build.ArtifactStagingDirectory)'
- task: DownloadPipelineArtifact@2
diff --git a/.ci/yuzu-mainline-step2.yml b/.ci/yuzu-mainline-step2.yml
index fec724d11..0c1af397b 100644
--- a/.ci/yuzu-mainline-step2.yml
+++ b/.ci/yuzu-mainline-step2.yml
@@ -15,12 +15,47 @@ stages:
dependsOn: format
displayName: 'build'
jobs:
- - template: ./templates/build-standard.yml
- parameters:
- cache: 'true'
+ - job: build
+ displayName: 'standard'
+ pool:
+ vmImage: ubuntu-latest
+ strategy:
+ maxParallel: 10
+ matrix:
+ linux:
+ BuildSuffix: 'linux'
+ ScriptFolder: 'linux'
+ steps:
+ - template: ./templates/sync-source.yml
+ parameters:
+ artifactSource: $(parameters.artifactSource)
+ needSubmodules: 'true'
+ - template: ./templates/build-single.yml
+ parameters:
+ artifactSource: 'false'
+ cache: 'true'
+- stage: build_win
+ dependsOn: format
+ displayName: 'build-windows'
+ jobs:
+ - job: build
+ displayName: 'msvc'
+ pool:
+ vmImage: vs2017-win2016
+ steps:
+ - template: ./templates/sync-source.yml
+ parameters:
+ artifactSource: $(parameters.artifactSource)
+ needSubmodules: 'true'
+ - template: ./templates/build-msvc.yml
+ parameters:
+ artifactSource: 'false'
+ cache: 'true'
- stage: release
displayName: 'Release'
- dependsOn: build
+ dependsOn:
+ - build
+ - build_win
jobs:
- job: github
displayName: 'GitHub Release'
diff --git a/.ci/yuzu-patreon-step2.yml b/.ci/yuzu-patreon-step2.yml
index 080118224..23e45d9dd 100644
--- a/.ci/yuzu-patreon-step2.yml
+++ b/.ci/yuzu-patreon-step2.yml
@@ -15,14 +15,16 @@ stages:
dependsOn: format
displayName: 'build'
jobs:
- - template: ./templates/build-standard.yml
- parameters:
- cache: 'true'
-- stage: release
- displayName: 'release'
- dependsOn: build
- jobs:
- - job: azure
- displayName: 'azure'
+ - job: build
+ displayName: 'windows-msvc'
+ pool:
+ vmImage: vs2017-win2016
steps:
- - template: ./templates/release-universal.yml \ No newline at end of file
+ - template: ./templates/sync-source.yml
+ parameters:
+ artifactSource: $(parameters.artifactSource)
+ needSubmodules: 'true'
+ - template: ./templates/build-msvc.yml
+ parameters:
+ artifactSource: 'false'
+ cache: $(parameters.cache)
diff --git a/README.md b/README.md
index ecace43f2..bdee2e872 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,6 @@
yuzu emulator
=============
[![Travis CI Build Status](https://travis-ci.org/yuzu-emu/yuzu.svg?branch=master)](https://travis-ci.org/yuzu-emu/yuzu)
-[![AppVeyor CI Build Status](https://ci.appveyor.com/api/projects/status/77k97svb2usreu68?svg=true)](https://ci.appveyor.com/project/bunnei/yuzu)
[![Azure Mainline CI Build Status](https://dev.azure.com/yuzu-emu/yuzu/_apis/build/status/yuzu%20mainline?branchName=master)](https://dev.azure.com/yuzu-emu/yuzu/)
yuzu is an experimental open-source emulator for the Nintendo Switch from the creators of [Citra](https://citra-emu.org/).
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index 44b668fbf..a9cd119c4 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -165,13 +165,14 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) {
controller.battery_level[0] = BATTERY_FULL;
controller.battery_level[1] = BATTERY_FULL;
controller.battery_level[2] = BATTERY_FULL;
+ styleset_changed_events[controller_idx].writable->Signal();
}
void Controller_NPad::OnInit() {
auto& kernel = system.Kernel();
for (std::size_t i = 0; i < styleset_changed_events.size(); i++) {
styleset_changed_events[i] = Kernel::WritableEvent::CreateEventPair(
- kernel, Kernel::ResetType::Automatic, fmt::format("npad:NpadStyleSetChanged_{}", i));
+ kernel, Kernel::ResetType::Manual, fmt::format("npad:NpadStyleSetChanged_{}", i));
}
if (!IsControllerActivated()) {
@@ -433,7 +434,6 @@ void Controller_NPad::SetSupportedNPadIdTypes(u8* data, std::size_t length) {
supported_npad_id_types.clear();
supported_npad_id_types.resize(length / sizeof(u32));
std::memcpy(supported_npad_id_types.data(), data, length);
- bool had_controller_update = false;
for (std::size_t i = 0; i < connected_controllers.size(); i++) {
auto& controller = connected_controllers[i];
if (!controller.is_connected) {
@@ -452,10 +452,6 @@ void Controller_NPad::SetSupportedNPadIdTypes(u8* data, std::size_t length) {
controller.type = requested_controller;
InitNewlyAddedControler(i);
}
- had_controller_update = true;
- }
- if (had_controller_update) {
- styleset_changed_events[i].writable->Signal();
}
}
}
@@ -481,7 +477,6 @@ void Controller_NPad::SetNpadMode(u32 npad_id, NPadAssignments assignment_mode)
const std::size_t npad_index = NPadIdToIndex(npad_id);
ASSERT(npad_index < shared_memory_entries.size());
if (shared_memory_entries[npad_index].pad_assignment != assignment_mode) {
- styleset_changed_events[npad_index].writable->Signal();
shared_memory_entries[npad_index].pad_assignment = assignment_mode;
}
}
@@ -507,7 +502,6 @@ Kernel::SharedPtr<Kernel::ReadableEvent> Controller_NPad::GetStyleSetChangedEven
// TODO(ogniK): Figure out the best time to signal this event. This event seems that it should
// be signalled at least once, and signaled after a new controller is connected?
const auto& styleset_event = styleset_changed_events[NPadIdToIndex(npad_id)];
- styleset_event.writable->Signal();
return styleset_event.readable;
}