summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.ci/scripts/common/post-upload.sh4
-rw-r--r--.ci/scripts/common/pre-upload.sh3
-rwxr-xr-x.ci/scripts/linux/docker.sh44
-rw-r--r--.ci/scripts/linux/upload.sh5
-rw-r--r--src/core/CMakeLists.txt2
-rw-r--r--src/core/crypto/key_manager.cpp11
-rw-r--r--src/core/file_sys/nca_patch.cpp2
-rw-r--r--src/core/file_sys/registered_cache.cpp3
-rw-r--r--src/core/hle/kernel/memory/address_space_info.cpp2
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue.cpp28
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue.h6
-rw-r--r--src/core/hle/service/sockets/sockets_translate.cpp1
-rw-r--r--src/core/loader/loader.cpp4
-rw-r--r--src/core/loader/loader.h1
-rw-r--r--src/video_core/CMakeLists.txt8
-rw-r--r--src/video_core/renderer_vulkan/blit_image.cpp8
-rw-r--r--src/video_core/renderer_vulkan/blit_image.h11
-rw-r--r--src/video_core/renderer_vulkan/maxwell_to_vk.cpp10
-rw-r--r--src/video_core/renderer_vulkan/maxwell_to_vk.h10
-rw-r--r--src/video_core/renderer_vulkan/renderer_vulkan.cpp6
-rw-r--r--src/video_core/renderer_vulkan/renderer_vulkan.h4
-rw-r--r--src/video_core/renderer_vulkan/vk_blit_screen.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_blit_screen.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.cpp8
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.h10
-rw-r--r--src/video_core/renderer_vulkan/vk_command_pool.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_command_pool.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pass.cpp10
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pass.h10
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pipeline.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_compute_pipeline.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_descriptor_pool.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_descriptor_pool.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_fence_manager.cpp8
-rw-r--r--src/video_core/renderer_vulkan/vk_fence_manager.h12
-rw-r--r--src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_graphics_pipeline.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_master_semaphore.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_master_semaphore.h4
-rw-r--r--src/video_core/renderer_vulkan/vk_memory_manager.cpp10
-rw-r--r--src/video_core/renderer_vulkan/vk_memory_manager.h10
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_pipeline_cache.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_query_cache.cpp22
-rw-r--r--src/video_core/renderer_vulkan/vk_query_cache.h14
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp16
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.h4
-rw-r--r--src/video_core/renderer_vulkan/vk_scheduler.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_scheduler.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_shader_decompiler.cpp8
-rw-r--r--src/video_core/renderer_vulkan/vk_shader_decompiler.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_shader_util.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_shader_util.h4
-rw-r--r--src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_staging_buffer_pool.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_stream_buffer.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_stream_buffer.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_swapchain.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_swapchain.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.cpp12
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.h6
-rw-r--r--src/video_core/renderer_vulkan/vk_update_descriptor.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_update_descriptor.h6
-rw-r--r--src/video_core/shader/async_shaders.cpp2
-rw-r--r--src/video_core/shader/async_shaders.h6
-rw-r--r--src/video_core/vulkan_common/nsight_aftermath_tracker.cpp (renamed from src/video_core/renderer_vulkan/nsight_aftermath_tracker.cpp)30
-rw-r--r--src/video_core/vulkan_common/nsight_aftermath_tracker.h (renamed from src/video_core/renderer_vulkan/nsight_aftermath_tracker.h)5
-rw-r--r--src/video_core/vulkan_common/vulkan_device.cpp (renamed from src/video_core/renderer_vulkan/vk_device.cpp)53
-rw-r--r--src/video_core/vulkan_common/vulkan_device.h (renamed from src/video_core/renderer_vulkan/vk_device.h)13
-rw-r--r--src/yuzu/bootmanager.cpp11
-rw-r--r--src/yuzu/bootmanager.h2
-rw-r--r--src/yuzu/main.cpp32
-rw-r--r--src/yuzu/main.h3
73 files changed, 342 insertions, 280 deletions
diff --git a/.ci/scripts/common/post-upload.sh b/.ci/scripts/common/post-upload.sh
index e46ee0abb..99e79fcb6 100644
--- a/.ci/scripts/common/post-upload.sh
+++ b/.ci/scripts/common/post-upload.sh
@@ -15,5 +15,5 @@ mv "${REV_NAME}-source.tar.xz" $RELEASE_NAME
157z a "$REV_NAME.7z" $RELEASE_NAME 157z a "$REV_NAME.7z" $RELEASE_NAME
16 16
17# move the compiled archive into the artifacts directory to be uploaded by travis releases 17# move the compiled archive into the artifacts directory to be uploaded by travis releases
18mv "$ARCHIVE_NAME" artifacts/ 18mv "$ARCHIVE_NAME" "${ARTIFACTS_DIR}/"
19mv "$REV_NAME.7z" artifacts/ 19mv "$REV_NAME.7z" "${ARTIFACTS_DIR}/"
diff --git a/.ci/scripts/common/pre-upload.sh b/.ci/scripts/common/pre-upload.sh
index 3c2fc79a2..a49e3fff3 100644
--- a/.ci/scripts/common/pre-upload.sh
+++ b/.ci/scripts/common/pre-upload.sh
@@ -2,5 +2,6 @@
2 2
3GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" 3GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`"
4GITREV="`git show -s --format='%h'`" 4GITREV="`git show -s --format='%h'`"
5ARTIFACTS_DIR="artifacts"
5 6
6mkdir -p artifacts 7mkdir -p "${ARTIFACTS_DIR}/"
diff --git a/.ci/scripts/linux/docker.sh b/.ci/scripts/linux/docker.sh
index e0c018cfd..30391f6ad 100755
--- a/.ci/scripts/linux/docker.sh
+++ b/.ci/scripts/linux/docker.sh
@@ -1,14 +1,54 @@
1#!/bin/bash -ex 1#!/bin/bash -ex
2 2
3# Exit on error, rather than continuing with the rest of the script.
4set -e
5
3cd /yuzu 6cd /yuzu
4 7
5ccache -s 8ccache -s
6 9
7mkdir build || true && cd build 10mkdir build || true && cd build
8cmake .. -G Ninja -DDISPLAY_VERSION=$1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_QT_TRANSLATION=ON 11cmake .. -DDISPLAY_VERSION=$1 -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/lib/ccache/gcc -DCMAKE_CXX_COMPILER=/usr/lib/ccache/g++ -DYUZU_ENABLE_COMPATIBILITY_REPORTING=${ENABLE_COMPATIBILITY_REPORTING:-"OFF"} -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON -DUSE_DISCORD_PRESENCE=ON -DENABLE_QT_TRANSLATION=ON -DCMAKE_INSTALL_PREFIX="/usr"
9 12
10ninja 13make -j$(nproc)
11 14
12ccache -s 15ccache -s
13 16
14ctest -VV -C Release 17ctest -VV -C Release
18
19make install DESTDIR=AppDir
20rm -vf AppDir/usr/bin/yuzu-cmd AppDir/usr/bin/yuzu-tester
21
22# Download tools needed to build an AppImage
23wget -nc https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
24wget -nc https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
25wget -nc https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
26wget -nc https://github.com/darealshinji/AppImageKit-checkrt/releases/download/continuous/AppRun-patched-x86_64
27wget -nc https://github.com/darealshinji/AppImageKit-checkrt/releases/download/continuous/exec-x86_64.so
28# Set executable bit
29chmod 755 \
30 appimagetool-x86_64.AppImage \
31 AppRun-patched-x86_64 \
32 exec-x86_64.so \
33 linuxdeploy-x86_64.AppImage \
34 linuxdeploy-plugin-qt-x86_64.AppImage
35
36# Workaround for https://github.com/AppImage/AppImageKit/issues/828
37export APPIMAGE_EXTRACT_AND_RUN=1
38
39mkdir -p AppDir/usr/optional
40mkdir -p AppDir/usr/optional/libstdc++
41mkdir -p AppDir/usr/optional/libgcc_s
42
43# Deploy yuzu's needed dependencies
44./linuxdeploy-x86_64.AppImage --appdir AppDir --plugin qt
45
46# Workaround for building yuzu with GCC 10 but also trying to distribute it to Ubuntu 18.04 et al.
47# See https://github.com/darealshinji/AppImageKit-checkrt
48cp exec-x86_64.so AppDir/usr/optional/exec.so
49cp AppRun-patched-x86_64 AppDir/AppRun
50cp --dereference /usr/lib/x86_64-linux-gnu/libstdc++.so.6 AppDir/usr/optional/libstdc++/libstdc++.so.6
51cp --dereference /lib/x86_64-linux-gnu/libgcc_s.so.1 AppDir/usr/optional/libgcc_s/libgcc_s.so.1
52
53# Build the AppImage
54./appimagetool-x86_64.AppImage AppDir
diff --git a/.ci/scripts/linux/upload.sh b/.ci/scripts/linux/upload.sh
index fe4e6b2ac..7175e4cb5 100644
--- a/.ci/scripts/linux/upload.sh
+++ b/.ci/scripts/linux/upload.sh
@@ -2,6 +2,8 @@
2 2
3. .ci/scripts/common/pre-upload.sh 3. .ci/scripts/common/pre-upload.sh
4 4
5APPIMAGE_NAME="yuzu-x86_64.AppImage"
6NEW_APPIMAGE_NAME="yuzu-${GITDATE}-${GITREV}-x86_64.AppImage"
5REV_NAME="yuzu-linux-${GITDATE}-${GITREV}" 7REV_NAME="yuzu-linux-${GITDATE}-${GITREV}"
6ARCHIVE_NAME="${REV_NAME}.tar.xz" 8ARCHIVE_NAME="${REV_NAME}.tar.xz"
7COMPRESSION_FLAGS="-cJvf" 9COMPRESSION_FLAGS="-cJvf"
@@ -17,4 +19,7 @@ mkdir "$DIR_NAME"
17cp build/bin/yuzu-cmd "$DIR_NAME" 19cp build/bin/yuzu-cmd "$DIR_NAME"
18cp build/bin/yuzu "$DIR_NAME" 20cp build/bin/yuzu "$DIR_NAME"
19 21
22# Copy the AppImage to the artifacts directory and avoid compressing it
23cp "build/${APPIMAGE_NAME}" "${ARTIFACTS_DIR}/${NEW_APPIMAGE_NAME}"
24
20. .ci/scripts/common/post-upload.sh 25. .ci/scripts/common/post-upload.sh
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 01f3e9419..893df433a 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -635,6 +635,8 @@ if (MSVC)
635 /we4267 635 /we4267
636 # 'context' : truncation from 'type1' to 'type2' 636 # 'context' : truncation from 'type1' to 'type2'
637 /we4305 637 /we4305
638 # 'function' : not all control paths return a value
639 /we4715
638 ) 640 )
639else() 641else()
640 target_compile_options(core PRIVATE 642 target_compile_options(core PRIVATE
diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp
index da15f764a..cebe2ce37 100644
--- a/src/core/crypto/key_manager.cpp
+++ b/src/core/crypto/key_manager.cpp
@@ -143,6 +143,7 @@ u64 GetSignatureTypeDataSize(SignatureType type) {
143 return 0x3C; 143 return 0x3C;
144 } 144 }
145 UNREACHABLE(); 145 UNREACHABLE();
146 return 0;
146} 147}
147 148
148u64 GetSignatureTypePaddingSize(SignatureType type) { 149u64 GetSignatureTypePaddingSize(SignatureType type) {
@@ -157,6 +158,7 @@ u64 GetSignatureTypePaddingSize(SignatureType type) {
157 return 0x40; 158 return 0x40;
158 } 159 }
159 UNREACHABLE(); 160 UNREACHABLE();
161 return 0;
160} 162}
161 163
162SignatureType Ticket::GetSignatureType() const { 164SignatureType Ticket::GetSignatureType() const {
@@ -169,8 +171,7 @@ SignatureType Ticket::GetSignatureType() const {
169 if (const auto* ticket = std::get_if<ECDSATicket>(&data)) { 171 if (const auto* ticket = std::get_if<ECDSATicket>(&data)) {
170 return ticket->sig_type; 172 return ticket->sig_type;
171 } 173 }
172 174 throw std::bad_variant_access{};
173 UNREACHABLE();
174} 175}
175 176
176TicketData& Ticket::GetData() { 177TicketData& Ticket::GetData() {
@@ -183,8 +184,7 @@ TicketData& Ticket::GetData() {
183 if (auto* ticket = std::get_if<ECDSATicket>(&data)) { 184 if (auto* ticket = std::get_if<ECDSATicket>(&data)) {
184 return ticket->data; 185 return ticket->data;
185 } 186 }
186 187 throw std::bad_variant_access{};
187 UNREACHABLE();
188} 188}
189 189
190const TicketData& Ticket::GetData() const { 190const TicketData& Ticket::GetData() const {
@@ -197,8 +197,7 @@ const TicketData& Ticket::GetData() const {
197 if (const auto* ticket = std::get_if<ECDSATicket>(&data)) { 197 if (const auto* ticket = std::get_if<ECDSATicket>(&data)) {
198 return ticket->data; 198 return ticket->data;
199 } 199 }
200 200 throw std::bad_variant_access{};
201 UNREACHABLE();
202} 201}
203 202
204u64 Ticket::GetSize() const { 203u64 Ticket::GetSize() const {
diff --git a/src/core/file_sys/nca_patch.cpp b/src/core/file_sys/nca_patch.cpp
index adcf0732f..a65ec6798 100644
--- a/src/core/file_sys/nca_patch.cpp
+++ b/src/core/file_sys/nca_patch.cpp
@@ -51,8 +51,8 @@ std::pair<std::size_t, std::size_t> SearchBucketEntry(u64 offset, const BlockTyp
51 low = mid + 1; 51 low = mid + 1;
52 } 52 }
53 } 53 }
54
55 UNREACHABLE_MSG("Offset could not be found in BKTR block."); 54 UNREACHABLE_MSG("Offset could not be found in BKTR block.");
55 return {0, 0};
56} 56}
57} // Anonymous namespace 57} // Anonymous namespace
58 58
diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp
index da01002d5..431302f55 100644
--- a/src/core/file_sys/registered_cache.cpp
+++ b/src/core/file_sys/registered_cache.cpp
@@ -105,7 +105,8 @@ ContentRecordType GetCRTypeFromNCAType(NCAContentType type) {
105 // TODO(DarkLordZach): Peek at NCA contents to differentiate Manual and Legal. 105 // TODO(DarkLordZach): Peek at NCA contents to differentiate Manual and Legal.
106 return ContentRecordType::HtmlDocument; 106 return ContentRecordType::HtmlDocument;
107 default: 107 default:
108 UNREACHABLE_MSG("Invalid NCAContentType={:02X}", static_cast<u8>(type)); 108 UNREACHABLE_MSG("Invalid NCAContentType={:02X}", type);
109 return ContentRecordType{};
109 } 110 }
110} 111}
111 112
diff --git a/src/core/hle/kernel/memory/address_space_info.cpp b/src/core/hle/kernel/memory/address_space_info.cpp
index e4288cab4..6cf43ba24 100644
--- a/src/core/hle/kernel/memory/address_space_info.cpp
+++ b/src/core/hle/kernel/memory/address_space_info.cpp
@@ -96,6 +96,7 @@ u64 AddressSpaceInfo::GetAddressSpaceStart(std::size_t width, Type type) {
96 return AddressSpaceInfos[AddressSpaceIndices39Bit[index]].address; 96 return AddressSpaceInfos[AddressSpaceIndices39Bit[index]].address;
97 } 97 }
98 UNREACHABLE(); 98 UNREACHABLE();
99 return 0;
99} 100}
100 101
101std::size_t AddressSpaceInfo::GetAddressSpaceSize(std::size_t width, Type type) { 102std::size_t AddressSpaceInfo::GetAddressSpaceSize(std::size_t width, Type type) {
@@ -112,6 +113,7 @@ std::size_t AddressSpaceInfo::GetAddressSpaceSize(std::size_t width, Type type)
112 return AddressSpaceInfos[AddressSpaceIndices39Bit[index]].size; 113 return AddressSpaceInfos[AddressSpaceIndices39Bit[index]].size;
113 } 114 }
114 UNREACHABLE(); 115 UNREACHABLE();
116 return 0;
115} 117}
116 118
117} // namespace Kernel::Memory 119} // namespace Kernel::Memory
diff --git a/src/core/hle/service/nvflinger/buffer_queue.cpp b/src/core/hle/service/nvflinger/buffer_queue.cpp
index 0e6bde9f5..c68905e19 100644
--- a/src/core/hle/service/nvflinger/buffer_queue.cpp
+++ b/src/core/hle/service/nvflinger/buffer_queue.cpp
@@ -26,10 +26,10 @@ void BufferQueue::SetPreallocatedBuffer(u32 slot, const IGBPBuffer& igbp_buffer)
26 LOG_WARNING(Service, "Adding graphics buffer {}", slot); 26 LOG_WARNING(Service, "Adding graphics buffer {}", slot);
27 27
28 { 28 {
29 std::unique_lock lock{queue_mutex}; 29 std::unique_lock lock{free_buffers_mutex};
30 free_buffers.push_back(slot); 30 free_buffers.push_back(slot);
31 } 31 }
32 condition.notify_one(); 32 free_buffers_condition.notify_one();
33 33
34 buffers[slot] = { 34 buffers[slot] = {
35 .slot = slot, 35 .slot = slot,
@@ -48,8 +48,8 @@ std::optional<std::pair<u32, Service::Nvidia::MultiFence*>> BufferQueue::Dequeue
48 u32 height) { 48 u32 height) {
49 // Wait for first request before trying to dequeue 49 // Wait for first request before trying to dequeue
50 { 50 {
51 std::unique_lock lock{queue_mutex}; 51 std::unique_lock lock{free_buffers_mutex};
52 condition.wait(lock, [this] { return !free_buffers.empty() || !is_connect; }); 52 free_buffers_condition.wait(lock, [this] { return !free_buffers.empty() || !is_connect; });
53 } 53 }
54 54
55 if (!is_connect) { 55 if (!is_connect) {
@@ -58,7 +58,7 @@ std::optional<std::pair<u32, Service::Nvidia::MultiFence*>> BufferQueue::Dequeue
58 return std::nullopt; 58 return std::nullopt;
59 } 59 }
60 60
61 std::unique_lock lock{queue_mutex}; 61 std::unique_lock lock{free_buffers_mutex};
62 62
63 auto f_itr = free_buffers.begin(); 63 auto f_itr = free_buffers.begin();
64 auto slot = buffers.size(); 64 auto slot = buffers.size();
@@ -100,6 +100,7 @@ void BufferQueue::QueueBuffer(u32 slot, BufferTransformFlags transform,
100 buffers[slot].crop_rect = crop_rect; 100 buffers[slot].crop_rect = crop_rect;
101 buffers[slot].swap_interval = swap_interval; 101 buffers[slot].swap_interval = swap_interval;
102 buffers[slot].multi_fence = multi_fence; 102 buffers[slot].multi_fence = multi_fence;
103 std::unique_lock lock{queue_sequence_mutex};
103 queue_sequence.push_back(slot); 104 queue_sequence.push_back(slot);
104} 105}
105 106
@@ -113,15 +114,16 @@ void BufferQueue::CancelBuffer(u32 slot, const Service::Nvidia::MultiFence& mult
113 buffers[slot].swap_interval = 0; 114 buffers[slot].swap_interval = 0;
114 115
115 { 116 {
116 std::unique_lock lock{queue_mutex}; 117 std::unique_lock lock{free_buffers_mutex};
117 free_buffers.push_back(slot); 118 free_buffers.push_back(slot);
118 } 119 }
119 condition.notify_one(); 120 free_buffers_condition.notify_one();
120 121
121 buffer_wait_event.writable->Signal(); 122 buffer_wait_event.writable->Signal();
122} 123}
123 124
124std::optional<std::reference_wrapper<const BufferQueue::Buffer>> BufferQueue::AcquireBuffer() { 125std::optional<std::reference_wrapper<const BufferQueue::Buffer>> BufferQueue::AcquireBuffer() {
126 std::unique_lock lock{queue_sequence_mutex};
125 std::size_t buffer_slot = buffers.size(); 127 std::size_t buffer_slot = buffers.size();
126 // Iterate to find a queued buffer matching the requested slot. 128 // Iterate to find a queued buffer matching the requested slot.
127 while (buffer_slot == buffers.size() && !queue_sequence.empty()) { 129 while (buffer_slot == buffers.size() && !queue_sequence.empty()) {
@@ -147,25 +149,29 @@ void BufferQueue::ReleaseBuffer(u32 slot) {
147 149
148 buffers[slot].status = Buffer::Status::Free; 150 buffers[slot].status = Buffer::Status::Free;
149 { 151 {
150 std::unique_lock lock{queue_mutex}; 152 std::unique_lock lock{free_buffers_mutex};
151 free_buffers.push_back(slot); 153 free_buffers.push_back(slot);
152 } 154 }
153 condition.notify_one(); 155 free_buffers_condition.notify_one();
154 156
155 buffer_wait_event.writable->Signal(); 157 buffer_wait_event.writable->Signal();
156} 158}
157 159
158void BufferQueue::Connect() { 160void BufferQueue::Connect() {
161 std::unique_lock lock{queue_sequence_mutex};
159 queue_sequence.clear(); 162 queue_sequence.clear();
160 is_connect = true; 163 is_connect = true;
161} 164}
162 165
163void BufferQueue::Disconnect() { 166void BufferQueue::Disconnect() {
164 buffers.fill({}); 167 buffers.fill({});
165 queue_sequence.clear(); 168 {
169 std::unique_lock lock{queue_sequence_mutex};
170 queue_sequence.clear();
171 }
166 buffer_wait_event.writable->Signal(); 172 buffer_wait_event.writable->Signal();
167 is_connect = false; 173 is_connect = false;
168 condition.notify_one(); 174 free_buffers_condition.notify_one();
169} 175}
170 176
171u32 BufferQueue::Query(QueryType type) { 177u32 BufferQueue::Query(QueryType type) {
diff --git a/src/core/hle/service/nvflinger/buffer_queue.h b/src/core/hle/service/nvflinger/buffer_queue.h
index a2f60d9eb..ad7469277 100644
--- a/src/core/hle/service/nvflinger/buffer_queue.h
+++ b/src/core/hle/service/nvflinger/buffer_queue.h
@@ -129,8 +129,10 @@ private:
129 std::list<u32> queue_sequence; 129 std::list<u32> queue_sequence;
130 Kernel::EventPair buffer_wait_event; 130 Kernel::EventPair buffer_wait_event;
131 131
132 std::mutex queue_mutex; 132 std::mutex free_buffers_mutex;
133 std::condition_variable condition; 133 std::condition_variable free_buffers_condition;
134
135 std::mutex queue_sequence_mutex;
134}; 136};
135 137
136} // namespace Service::NVFlinger 138} // namespace Service::NVFlinger
diff --git a/src/core/hle/service/sockets/sockets_translate.cpp b/src/core/hle/service/sockets/sockets_translate.cpp
index c822d21b8..ca61d72ca 100644
--- a/src/core/hle/service/sockets/sockets_translate.cpp
+++ b/src/core/hle/service/sockets/sockets_translate.cpp
@@ -64,6 +64,7 @@ Network::Type Translate(Type type) {
64 return Network::Type::DGRAM; 64 return Network::Type::DGRAM;
65 default: 65 default:
66 UNIMPLEMENTED_MSG("Unimplemented type={}", type); 66 UNIMPLEMENTED_MSG("Unimplemented type={}", type);
67 return Network::Type{};
67 } 68 }
68} 69}
69 70
diff --git a/src/core/loader/loader.cpp b/src/core/loader/loader.cpp
index d91c15561..e4f5fd40c 100644
--- a/src/core/loader/loader.cpp
+++ b/src/core/loader/loader.cpp
@@ -185,6 +185,10 @@ constexpr std::array<const char*, 66> RESULT_MESSAGES{
185 "The INI file contains more than the maximum allowable number of KIP files.", 185 "The INI file contains more than the maximum allowable number of KIP files.",
186}; 186};
187 187
188std::string GetResultStatusString(ResultStatus status) {
189 return RESULT_MESSAGES.at(static_cast<std::size_t>(status));
190}
191
188std::ostream& operator<<(std::ostream& os, ResultStatus status) { 192std::ostream& operator<<(std::ostream& os, ResultStatus status) {
189 os << RESULT_MESSAGES.at(static_cast<std::size_t>(status)); 193 os << RESULT_MESSAGES.at(static_cast<std::size_t>(status));
190 return os; 194 return os;
diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h
index 36e79e71d..b2e5b13de 100644
--- a/src/core/loader/loader.h
+++ b/src/core/loader/loader.h
@@ -135,6 +135,7 @@ enum class ResultStatus : u16 {
135 ErrorINITooManyKIPs, 135 ErrorINITooManyKIPs,
136}; 136};
137 137
138std::string GetResultStatusString(ResultStatus status);
138std::ostream& operator<<(std::ostream& os, ResultStatus status); 139std::ostream& operator<<(std::ostream& os, ResultStatus status);
139 140
140/// Interface for loading an application 141/// Interface for loading an application
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index 4bd48f706..f7b9d7f86 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -115,8 +115,6 @@ add_library(video_core STATIC
115 renderer_vulkan/fixed_pipeline_state.h 115 renderer_vulkan/fixed_pipeline_state.h
116 renderer_vulkan/maxwell_to_vk.cpp 116 renderer_vulkan/maxwell_to_vk.cpp
117 renderer_vulkan/maxwell_to_vk.h 117 renderer_vulkan/maxwell_to_vk.h
118 renderer_vulkan/nsight_aftermath_tracker.cpp
119 renderer_vulkan/nsight_aftermath_tracker.h
120 renderer_vulkan/renderer_vulkan.h 118 renderer_vulkan/renderer_vulkan.h
121 renderer_vulkan/renderer_vulkan.cpp 119 renderer_vulkan/renderer_vulkan.cpp
122 renderer_vulkan/vk_blit_screen.cpp 120 renderer_vulkan/vk_blit_screen.cpp
@@ -131,8 +129,6 @@ add_library(video_core STATIC
131 renderer_vulkan/vk_compute_pipeline.h 129 renderer_vulkan/vk_compute_pipeline.h
132 renderer_vulkan/vk_descriptor_pool.cpp 130 renderer_vulkan/vk_descriptor_pool.cpp
133 renderer_vulkan/vk_descriptor_pool.h 131 renderer_vulkan/vk_descriptor_pool.h
134 renderer_vulkan/vk_device.cpp
135 renderer_vulkan/vk_device.h
136 renderer_vulkan/vk_fence_manager.cpp 132 renderer_vulkan/vk_fence_manager.cpp
137 renderer_vulkan/vk_fence_manager.h 133 renderer_vulkan/vk_fence_manager.h
138 renderer_vulkan/vk_graphics_pipeline.cpp 134 renderer_vulkan/vk_graphics_pipeline.cpp
@@ -257,6 +253,8 @@ add_library(video_core STATIC
257 video_core.h 253 video_core.h
258 vulkan_common/vulkan_debug_callback.cpp 254 vulkan_common/vulkan_debug_callback.cpp
259 vulkan_common/vulkan_debug_callback.h 255 vulkan_common/vulkan_debug_callback.h
256 vulkan_common/vulkan_device.cpp
257 vulkan_common/vulkan_device.h
260 vulkan_common/vulkan_instance.cpp 258 vulkan_common/vulkan_instance.cpp
261 vulkan_common/vulkan_instance.h 259 vulkan_common/vulkan_instance.h
262 vulkan_common/vulkan_library.cpp 260 vulkan_common/vulkan_library.cpp
@@ -265,6 +263,8 @@ add_library(video_core STATIC
265 vulkan_common/vulkan_surface.h 263 vulkan_common/vulkan_surface.h
266 vulkan_common/vulkan_wrapper.cpp 264 vulkan_common/vulkan_wrapper.cpp
267 vulkan_common/vulkan_wrapper.h 265 vulkan_common/vulkan_wrapper.h
266 vulkan_common/nsight_aftermath_tracker.cpp
267 vulkan_common/nsight_aftermath_tracker.h
268) 268)
269 269
270create_target_directory_groups(video_core) 270create_target_directory_groups(video_core)
diff --git a/src/video_core/renderer_vulkan/blit_image.cpp b/src/video_core/renderer_vulkan/blit_image.cpp
index 504492cac..1f6a169ae 100644
--- a/src/video_core/renderer_vulkan/blit_image.cpp
+++ b/src/video_core/renderer_vulkan/blit_image.cpp
@@ -11,13 +11,13 @@
11#include "video_core/host_shaders/vulkan_blit_depth_stencil_frag_spv.h" 11#include "video_core/host_shaders/vulkan_blit_depth_stencil_frag_spv.h"
12#include "video_core/renderer_vulkan/blit_image.h" 12#include "video_core/renderer_vulkan/blit_image.h"
13#include "video_core/renderer_vulkan/maxwell_to_vk.h" 13#include "video_core/renderer_vulkan/maxwell_to_vk.h"
14#include "video_core/renderer_vulkan/vk_device.h"
15#include "video_core/renderer_vulkan/vk_scheduler.h" 14#include "video_core/renderer_vulkan/vk_scheduler.h"
16#include "video_core/renderer_vulkan/vk_shader_util.h" 15#include "video_core/renderer_vulkan/vk_shader_util.h"
17#include "video_core/renderer_vulkan/vk_state_tracker.h" 16#include "video_core/renderer_vulkan/vk_state_tracker.h"
18#include "video_core/renderer_vulkan/vk_texture_cache.h" 17#include "video_core/renderer_vulkan/vk_texture_cache.h"
19#include "video_core/renderer_vulkan/vk_update_descriptor.h" 18#include "video_core/renderer_vulkan/vk_update_descriptor.h"
20#include "video_core/surface.h" 19#include "video_core/surface.h"
20#include "video_core/vulkan_common/vulkan_device.h"
21#include "video_core/vulkan_common/vulkan_wrapper.h" 21#include "video_core/vulkan_common/vulkan_wrapper.h"
22 22
23namespace Vulkan { 23namespace Vulkan {
@@ -225,7 +225,7 @@ constexpr std::array<VkPipelineShaderStageCreateInfo, 2> MakeStages(
225 }; 225 };
226} 226}
227 227
228void UpdateOneTextureDescriptorSet(const VKDevice& device, VkDescriptorSet descriptor_set, 228void UpdateOneTextureDescriptorSet(const Device& device, VkDescriptorSet descriptor_set,
229 VkSampler sampler, VkImageView image_view) { 229 VkSampler sampler, VkImageView image_view) {
230 const VkDescriptorImageInfo image_info{ 230 const VkDescriptorImageInfo image_info{
231 .sampler = sampler, 231 .sampler = sampler,
@@ -247,7 +247,7 @@ void UpdateOneTextureDescriptorSet(const VKDevice& device, VkDescriptorSet descr
247 device.GetLogical().UpdateDescriptorSets(write_descriptor_set, nullptr); 247 device.GetLogical().UpdateDescriptorSets(write_descriptor_set, nullptr);
248} 248}
249 249
250void UpdateTwoTexturesDescriptorSet(const VKDevice& device, VkDescriptorSet descriptor_set, 250void UpdateTwoTexturesDescriptorSet(const Device& device, VkDescriptorSet descriptor_set,
251 VkSampler sampler, VkImageView image_view_0, 251 VkSampler sampler, VkImageView image_view_0,
252 VkImageView image_view_1) { 252 VkImageView image_view_1) {
253 const VkDescriptorImageInfo image_info_0{ 253 const VkDescriptorImageInfo image_info_0{
@@ -326,7 +326,7 @@ void BindBlitState(vk::CommandBuffer cmdbuf, VkPipelineLayout layout,
326 326
327} // Anonymous namespace 327} // Anonymous namespace
328 328
329BlitImageHelper::BlitImageHelper(const VKDevice& device_, VKScheduler& scheduler_, 329BlitImageHelper::BlitImageHelper(const Device& device_, VKScheduler& scheduler_,
330 StateTracker& state_tracker_, VKDescriptorPool& descriptor_pool) 330 StateTracker& state_tracker_, VKDescriptorPool& descriptor_pool)
331 : device{device_}, scheduler{scheduler_}, state_tracker{state_tracker_}, 331 : device{device_}, scheduler{scheduler_}, state_tracker{state_tracker_},
332 one_texture_set_layout(device.GetLogical().CreateDescriptorSetLayout( 332 one_texture_set_layout(device.GetLogical().CreateDescriptorSetLayout(
diff --git a/src/video_core/renderer_vulkan/blit_image.h b/src/video_core/renderer_vulkan/blit_image.h
index 1a4f66336..43fd3d737 100644
--- a/src/video_core/renderer_vulkan/blit_image.h
+++ b/src/video_core/renderer_vulkan/blit_image.h
@@ -15,12 +15,11 @@ namespace Vulkan {
15 15
16using VideoCommon::Offset2D; 16using VideoCommon::Offset2D;
17 17
18class VKDevice; 18class Device;
19class VKScheduler;
20class StateTracker;
21
22class Framebuffer; 19class Framebuffer;
23class ImageView; 20class ImageView;
21class StateTracker;
22class VKScheduler;
24 23
25struct BlitImagePipelineKey { 24struct BlitImagePipelineKey {
26 constexpr auto operator<=>(const BlitImagePipelineKey&) const noexcept = default; 25 constexpr auto operator<=>(const BlitImagePipelineKey&) const noexcept = default;
@@ -31,7 +30,7 @@ struct BlitImagePipelineKey {
31 30
32class BlitImageHelper { 31class BlitImageHelper {
33public: 32public:
34 explicit BlitImageHelper(const VKDevice& device, VKScheduler& scheduler, 33 explicit BlitImageHelper(const Device& device, VKScheduler& scheduler,
35 StateTracker& state_tracker, VKDescriptorPool& descriptor_pool); 34 StateTracker& state_tracker, VKDescriptorPool& descriptor_pool);
36 ~BlitImageHelper(); 35 ~BlitImageHelper();
37 36
@@ -67,7 +66,7 @@ private:
67 66
68 void ConvertColorToDepthPipeline(vk::Pipeline& pipeline, VkRenderPass renderpass); 67 void ConvertColorToDepthPipeline(vk::Pipeline& pipeline, VkRenderPass renderpass);
69 68
70 const VKDevice& device; 69 const Device& device;
71 VKScheduler& scheduler; 70 VKScheduler& scheduler;
72 StateTracker& state_tracker; 71 StateTracker& state_tracker;
73 72
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
index ed4fce714..ca7c2c579 100644
--- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
+++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp
@@ -9,8 +9,8 @@
9#include "common/logging/log.h" 9#include "common/logging/log.h"
10#include "video_core/engines/maxwell_3d.h" 10#include "video_core/engines/maxwell_3d.h"
11#include "video_core/renderer_vulkan/maxwell_to_vk.h" 11#include "video_core/renderer_vulkan/maxwell_to_vk.h"
12#include "video_core/renderer_vulkan/vk_device.h"
13#include "video_core/surface.h" 12#include "video_core/surface.h"
13#include "video_core/vulkan_common/vulkan_device.h"
14#include "video_core/vulkan_common/vulkan_wrapper.h" 14#include "video_core/vulkan_common/vulkan_wrapper.h"
15 15
16namespace Vulkan::MaxwellToVK { 16namespace Vulkan::MaxwellToVK {
@@ -47,7 +47,7 @@ VkSamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter
47 return {}; 47 return {};
48} 48}
49 49
50VkSamplerAddressMode WrapMode(const VKDevice& device, Tegra::Texture::WrapMode wrap_mode, 50VkSamplerAddressMode WrapMode(const Device& device, Tegra::Texture::WrapMode wrap_mode,
51 Tegra::Texture::TextureFilter filter) { 51 Tegra::Texture::TextureFilter filter) {
52 switch (wrap_mode) { 52 switch (wrap_mode) {
53 case Tegra::Texture::WrapMode::Wrap: 53 case Tegra::Texture::WrapMode::Wrap:
@@ -222,7 +222,7 @@ constexpr bool IsZetaFormat(PixelFormat pixel_format) {
222 222
223} // Anonymous namespace 223} // Anonymous namespace
224 224
225FormatInfo SurfaceFormat(const VKDevice& device, FormatType format_type, PixelFormat pixel_format) { 225FormatInfo SurfaceFormat(const Device& device, FormatType format_type, PixelFormat pixel_format) {
226 ASSERT(static_cast<std::size_t>(pixel_format) < std::size(tex_format_tuples)); 226 ASSERT(static_cast<std::size_t>(pixel_format) < std::size(tex_format_tuples));
227 227
228 auto tuple = tex_format_tuples[static_cast<std::size_t>(pixel_format)]; 228 auto tuple = tex_format_tuples[static_cast<std::size_t>(pixel_format)];
@@ -280,7 +280,7 @@ VkShaderStageFlagBits ShaderStage(Tegra::Engines::ShaderType stage) {
280 return {}; 280 return {};
281} 281}
282 282
283VkPrimitiveTopology PrimitiveTopology([[maybe_unused]] const VKDevice& device, 283VkPrimitiveTopology PrimitiveTopology([[maybe_unused]] const Device& device,
284 Maxwell::PrimitiveTopology topology) { 284 Maxwell::PrimitiveTopology topology) {
285 switch (topology) { 285 switch (topology) {
286 case Maxwell::PrimitiveTopology::Points: 286 case Maxwell::PrimitiveTopology::Points:
@@ -526,7 +526,7 @@ VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison) {
526 return {}; 526 return {};
527} 527}
528 528
529VkIndexType IndexFormat(const VKDevice& device, Maxwell::IndexFormat index_format) { 529VkIndexType IndexFormat(const Device& device, Maxwell::IndexFormat index_format) {
530 switch (index_format) { 530 switch (index_format) {
531 case Maxwell::IndexFormat::UnsignedByte: 531 case Maxwell::IndexFormat::UnsignedByte:
532 if (!device.IsExtIndexTypeUint8Supported()) { 532 if (!device.IsExtIndexTypeUint8Supported()) {
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.h b/src/video_core/renderer_vulkan/maxwell_to_vk.h
index 8cf5aa711..537969840 100644
--- a/src/video_core/renderer_vulkan/maxwell_to_vk.h
+++ b/src/video_core/renderer_vulkan/maxwell_to_vk.h
@@ -6,9 +6,9 @@
6 6
7#include "common/common_types.h" 7#include "common/common_types.h"
8#include "video_core/engines/maxwell_3d.h" 8#include "video_core/engines/maxwell_3d.h"
9#include "video_core/renderer_vulkan/vk_device.h"
10#include "video_core/surface.h" 9#include "video_core/surface.h"
11#include "video_core/textures/texture.h" 10#include "video_core/textures/texture.h"
11#include "video_core/vulkan_common/vulkan_device.h"
12#include "video_core/vulkan_common/vulkan_wrapper.h" 12#include "video_core/vulkan_common/vulkan_wrapper.h"
13 13
14namespace Vulkan::MaxwellToVK { 14namespace Vulkan::MaxwellToVK {
@@ -22,7 +22,7 @@ VkFilter Filter(Tegra::Texture::TextureFilter filter);
22 22
23VkSamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter); 23VkSamplerMipmapMode MipmapMode(Tegra::Texture::TextureMipmapFilter mipmap_filter);
24 24
25VkSamplerAddressMode WrapMode(const VKDevice& device, Tegra::Texture::WrapMode wrap_mode, 25VkSamplerAddressMode WrapMode(const Device& device, Tegra::Texture::WrapMode wrap_mode,
26 Tegra::Texture::TextureFilter filter); 26 Tegra::Texture::TextureFilter filter);
27 27
28VkCompareOp DepthCompareFunction(Tegra::Texture::DepthCompareFunc depth_compare_func); 28VkCompareOp DepthCompareFunction(Tegra::Texture::DepthCompareFunc depth_compare_func);
@@ -35,17 +35,17 @@ struct FormatInfo {
35 bool storage; 35 bool storage;
36}; 36};
37 37
38FormatInfo SurfaceFormat(const VKDevice& device, FormatType format_type, PixelFormat pixel_format); 38FormatInfo SurfaceFormat(const Device& device, FormatType format_type, PixelFormat pixel_format);
39 39
40VkShaderStageFlagBits ShaderStage(Tegra::Engines::ShaderType stage); 40VkShaderStageFlagBits ShaderStage(Tegra::Engines::ShaderType stage);
41 41
42VkPrimitiveTopology PrimitiveTopology(const VKDevice& device, Maxwell::PrimitiveTopology topology); 42VkPrimitiveTopology PrimitiveTopology(const Device& device, Maxwell::PrimitiveTopology topology);
43 43
44VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttribute::Size size); 44VkFormat VertexFormat(Maxwell::VertexAttribute::Type type, Maxwell::VertexAttribute::Size size);
45 45
46VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison); 46VkCompareOp ComparisonOp(Maxwell::ComparisonOp comparison);
47 47
48VkIndexType IndexFormat(const VKDevice& device, Maxwell::IndexFormat index_format); 48VkIndexType IndexFormat(const Device& device, Maxwell::IndexFormat index_format);
49 49
50VkStencilOp StencilOp(Maxwell::StencilOp stencil_op); 50VkStencilOp StencilOp(Maxwell::StencilOp stencil_op);
51 51
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
index 5b35cb407..d7437e185 100644
--- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp
+++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
@@ -22,7 +22,6 @@
22#include "video_core/gpu.h" 22#include "video_core/gpu.h"
23#include "video_core/renderer_vulkan/renderer_vulkan.h" 23#include "video_core/renderer_vulkan/renderer_vulkan.h"
24#include "video_core/renderer_vulkan/vk_blit_screen.h" 24#include "video_core/renderer_vulkan/vk_blit_screen.h"
25#include "video_core/renderer_vulkan/vk_device.h"
26#include "video_core/renderer_vulkan/vk_master_semaphore.h" 25#include "video_core/renderer_vulkan/vk_master_semaphore.h"
27#include "video_core/renderer_vulkan/vk_memory_manager.h" 26#include "video_core/renderer_vulkan/vk_memory_manager.h"
28#include "video_core/renderer_vulkan/vk_rasterizer.h" 27#include "video_core/renderer_vulkan/vk_rasterizer.h"
@@ -30,6 +29,7 @@
30#include "video_core/renderer_vulkan/vk_state_tracker.h" 29#include "video_core/renderer_vulkan/vk_state_tracker.h"
31#include "video_core/renderer_vulkan/vk_swapchain.h" 30#include "video_core/renderer_vulkan/vk_swapchain.h"
32#include "video_core/vulkan_common/vulkan_debug_callback.h" 31#include "video_core/vulkan_common/vulkan_debug_callback.h"
32#include "video_core/vulkan_common/vulkan_device.h"
33#include "video_core/vulkan_common/vulkan_instance.h" 33#include "video_core/vulkan_common/vulkan_instance.h"
34#include "video_core/vulkan_common/vulkan_library.h" 34#include "video_core/vulkan_common/vulkan_library.h"
35#include "video_core/vulkan_common/vulkan_surface.h" 35#include "video_core/vulkan_common/vulkan_surface.h"
@@ -42,7 +42,7 @@ std::string GetReadableVersion(u32 version) {
42 VK_VERSION_PATCH(version)); 42 VK_VERSION_PATCH(version));
43} 43}
44 44
45std::string GetDriverVersion(const VKDevice& device) { 45std::string GetDriverVersion(const Device& device) {
46 // Extracted from 46 // Extracted from
47 // https://github.com/SaschaWillems/vulkan.gpuinfo.org/blob/5dddea46ea1120b0df14eef8f15ff8e318e35462/functions.php#L308-L314 47 // https://github.com/SaschaWillems/vulkan.gpuinfo.org/blob/5dddea46ea1120b0df14eef8f15ff8e318e35462/functions.php#L308-L314
48 const u32 version = device.GetDriverVersion(); 48 const u32 version = device.GetDriverVersion();
@@ -184,7 +184,7 @@ void RendererVulkan::InitializeDevice() {
184 throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED); 184 throw vk::Exception(VK_ERROR_INITIALIZATION_FAILED);
185 } 185 }
186 const vk::PhysicalDevice physical_device(devices[static_cast<size_t>(device_index)], dld); 186 const vk::PhysicalDevice physical_device(devices[static_cast<size_t>(device_index)], dld);
187 device = std::make_unique<VKDevice>(*instance, physical_device, *surface, dld); 187 device = std::make_unique<Device>(*instance, physical_device, *surface, dld);
188} 188}
189 189
190void RendererVulkan::Report() const { 190void RendererVulkan::Report() const {
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h
index f22f50709..5575ffc54 100644
--- a/src/video_core/renderer_vulkan/renderer_vulkan.h
+++ b/src/video_core/renderer_vulkan/renderer_vulkan.h
@@ -27,9 +27,9 @@ class GPU;
27 27
28namespace Vulkan { 28namespace Vulkan {
29 29
30class Device;
30class StateTracker; 31class StateTracker;
31class VKBlitScreen; 32class VKBlitScreen;
32class VKDevice;
33class VKMemoryManager; 33class VKMemoryManager;
34class VKSwapchain; 34class VKSwapchain;
35class VKScheduler; 35class VKScheduler;
@@ -74,7 +74,7 @@ private:
74 VKScreenInfo screen_info; 74 VKScreenInfo screen_info;
75 75
76 vk::DebugUtilsMessenger debug_callback; 76 vk::DebugUtilsMessenger debug_callback;
77 std::unique_ptr<VKDevice> device; 77 std::unique_ptr<Device> device;
78 std::unique_ptr<VKMemoryManager> memory_manager; 78 std::unique_ptr<VKMemoryManager> memory_manager;
79 std::unique_ptr<StateTracker> state_tracker; 79 std::unique_ptr<StateTracker> state_tracker;
80 std::unique_ptr<VKScheduler> scheduler; 80 std::unique_ptr<VKScheduler> scheduler;
diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
index a205cd151..5e184eb42 100644
--- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp
+++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
@@ -21,7 +21,6 @@
21#include "video_core/rasterizer_interface.h" 21#include "video_core/rasterizer_interface.h"
22#include "video_core/renderer_vulkan/renderer_vulkan.h" 22#include "video_core/renderer_vulkan/renderer_vulkan.h"
23#include "video_core/renderer_vulkan/vk_blit_screen.h" 23#include "video_core/renderer_vulkan/vk_blit_screen.h"
24#include "video_core/renderer_vulkan/vk_device.h"
25#include "video_core/renderer_vulkan/vk_master_semaphore.h" 24#include "video_core/renderer_vulkan/vk_master_semaphore.h"
26#include "video_core/renderer_vulkan/vk_memory_manager.h" 25#include "video_core/renderer_vulkan/vk_memory_manager.h"
27#include "video_core/renderer_vulkan/vk_scheduler.h" 26#include "video_core/renderer_vulkan/vk_scheduler.h"
@@ -29,6 +28,7 @@
29#include "video_core/renderer_vulkan/vk_swapchain.h" 28#include "video_core/renderer_vulkan/vk_swapchain.h"
30#include "video_core/surface.h" 29#include "video_core/surface.h"
31#include "video_core/textures/decoders.h" 30#include "video_core/textures/decoders.h"
31#include "video_core/vulkan_common/vulkan_device.h"
32#include "video_core/vulkan_common/vulkan_wrapper.h" 32#include "video_core/vulkan_common/vulkan_wrapper.h"
33 33
34namespace Vulkan { 34namespace Vulkan {
@@ -114,7 +114,7 @@ struct VKBlitScreen::BufferData {
114 114
115VKBlitScreen::VKBlitScreen(Core::Memory::Memory& cpu_memory_, 115VKBlitScreen::VKBlitScreen(Core::Memory::Memory& cpu_memory_,
116 Core::Frontend::EmuWindow& render_window_, 116 Core::Frontend::EmuWindow& render_window_,
117 VideoCore::RasterizerInterface& rasterizer_, const VKDevice& device_, 117 VideoCore::RasterizerInterface& rasterizer_, const Device& device_,
118 VKMemoryManager& memory_manager_, VKSwapchain& swapchain_, 118 VKMemoryManager& memory_manager_, VKSwapchain& swapchain_,
119 VKScheduler& scheduler_, const VKScreenInfo& screen_info_) 119 VKScheduler& scheduler_, const VKScreenInfo& screen_info_)
120 : cpu_memory{cpu_memory_}, render_window{render_window_}, rasterizer{rasterizer_}, 120 : cpu_memory{cpu_memory_}, render_window{render_window_}, rasterizer{rasterizer_},
diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.h b/src/video_core/renderer_vulkan/vk_blit_screen.h
index cc56c4560..69ed61770 100644
--- a/src/video_core/renderer_vulkan/vk_blit_screen.h
+++ b/src/video_core/renderer_vulkan/vk_blit_screen.h
@@ -33,8 +33,8 @@ namespace Vulkan {
33 33
34struct ScreenInfo; 34struct ScreenInfo;
35 35
36class Device;
36class RasterizerVulkan; 37class RasterizerVulkan;
37class VKDevice;
38class VKScheduler; 38class VKScheduler;
39class VKSwapchain; 39class VKSwapchain;
40 40
@@ -42,7 +42,7 @@ class VKBlitScreen final {
42public: 42public:
43 explicit VKBlitScreen(Core::Memory::Memory& cpu_memory, 43 explicit VKBlitScreen(Core::Memory::Memory& cpu_memory,
44 Core::Frontend::EmuWindow& render_window, 44 Core::Frontend::EmuWindow& render_window,
45 VideoCore::RasterizerInterface& rasterizer, const VKDevice& device, 45 VideoCore::RasterizerInterface& rasterizer, const Device& device,
46 VKMemoryManager& memory_manager, VKSwapchain& swapchain, 46 VKMemoryManager& memory_manager, VKSwapchain& swapchain,
47 VKScheduler& scheduler, const VKScreenInfo& screen_info); 47 VKScheduler& scheduler, const VKScreenInfo& screen_info);
48 ~VKBlitScreen(); 48 ~VKBlitScreen();
@@ -85,7 +85,7 @@ private:
85 Core::Memory::Memory& cpu_memory; 85 Core::Memory::Memory& cpu_memory;
86 Core::Frontend::EmuWindow& render_window; 86 Core::Frontend::EmuWindow& render_window;
87 VideoCore::RasterizerInterface& rasterizer; 87 VideoCore::RasterizerInterface& rasterizer;
88 const VKDevice& device; 88 const Device& device;
89 VKMemoryManager& memory_manager; 89 VKMemoryManager& memory_manager;
90 VKSwapchain& swapchain; 90 VKSwapchain& swapchain;
91 VKScheduler& scheduler; 91 VKScheduler& scheduler;
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
index 79131f819..4d517c547 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
@@ -9,9 +9,9 @@
9#include "core/core.h" 9#include "core/core.h"
10#include "video_core/buffer_cache/buffer_cache.h" 10#include "video_core/buffer_cache/buffer_cache.h"
11#include "video_core/renderer_vulkan/vk_buffer_cache.h" 11#include "video_core/renderer_vulkan/vk_buffer_cache.h"
12#include "video_core/renderer_vulkan/vk_device.h"
13#include "video_core/renderer_vulkan/vk_scheduler.h" 12#include "video_core/renderer_vulkan/vk_scheduler.h"
14#include "video_core/renderer_vulkan/vk_stream_buffer.h" 13#include "video_core/renderer_vulkan/vk_stream_buffer.h"
14#include "video_core/vulkan_common/vulkan_device.h"
15#include "video_core/vulkan_common/vulkan_wrapper.h" 15#include "video_core/vulkan_common/vulkan_wrapper.h"
16 16
17namespace Vulkan { 17namespace Vulkan {
@@ -34,13 +34,13 @@ constexpr VkAccessFlags UPLOAD_ACCESS_BARRIERS =
34constexpr VkAccessFlags TRANSFORM_FEEDBACK_WRITE_ACCESS = 34constexpr VkAccessFlags TRANSFORM_FEEDBACK_WRITE_ACCESS =
35 VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT | VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT; 35 VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT | VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT;
36 36
37std::unique_ptr<VKStreamBuffer> CreateStreamBuffer(const VKDevice& device, VKScheduler& scheduler) { 37std::unique_ptr<VKStreamBuffer> CreateStreamBuffer(const Device& device, VKScheduler& scheduler) {
38 return std::make_unique<VKStreamBuffer>(device, scheduler); 38 return std::make_unique<VKStreamBuffer>(device, scheduler);
39} 39}
40 40
41} // Anonymous namespace 41} // Anonymous namespace
42 42
43Buffer::Buffer(const VKDevice& device_, VKMemoryManager& memory_manager, VKScheduler& scheduler_, 43Buffer::Buffer(const Device& device_, VKMemoryManager& memory_manager, VKScheduler& scheduler_,
44 VKStagingBufferPool& staging_pool_, VAddr cpu_addr_, std::size_t size_) 44 VKStagingBufferPool& staging_pool_, VAddr cpu_addr_, std::size_t size_)
45 : BufferBlock{cpu_addr_, size_}, device{device_}, scheduler{scheduler_}, staging_pool{ 45 : BufferBlock{cpu_addr_, size_}, device{device_}, scheduler{scheduler_}, staging_pool{
46 staging_pool_} { 46 staging_pool_} {
@@ -168,7 +168,7 @@ void Buffer::CopyFrom(const Buffer& src, std::size_t src_offset, std::size_t dst
168 168
169VKBufferCache::VKBufferCache(VideoCore::RasterizerInterface& rasterizer_, 169VKBufferCache::VKBufferCache(VideoCore::RasterizerInterface& rasterizer_,
170 Tegra::MemoryManager& gpu_memory_, Core::Memory::Memory& cpu_memory_, 170 Tegra::MemoryManager& gpu_memory_, Core::Memory::Memory& cpu_memory_,
171 const VKDevice& device_, VKMemoryManager& memory_manager_, 171 const Device& device_, VKMemoryManager& memory_manager_,
172 VKScheduler& scheduler_, VKStreamBuffer& stream_buffer_, 172 VKScheduler& scheduler_, VKStreamBuffer& stream_buffer_,
173 VKStagingBufferPool& staging_pool_) 173 VKStagingBufferPool& staging_pool_)
174 : VideoCommon::BufferCache<Buffer, VkBuffer, VKStreamBuffer>{rasterizer_, gpu_memory_, 174 : VideoCommon::BufferCache<Buffer, VkBuffer, VKStreamBuffer>{rasterizer_, gpu_memory_,
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h
index 3ab77a00b..1c39aed34 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.h
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h
@@ -15,13 +15,13 @@
15 15
16namespace Vulkan { 16namespace Vulkan {
17 17
18class VKDevice; 18class Device;
19class VKMemoryManager; 19class VKMemoryManager;
20class VKScheduler; 20class VKScheduler;
21 21
22class Buffer final : public VideoCommon::BufferBlock { 22class Buffer final : public VideoCommon::BufferBlock {
23public: 23public:
24 explicit Buffer(const VKDevice& device, VKMemoryManager& memory_manager, VKScheduler& scheduler, 24 explicit Buffer(const Device& device, VKMemoryManager& memory_manager, VKScheduler& scheduler,
25 VKStagingBufferPool& staging_pool, VAddr cpu_addr_, std::size_t size_); 25 VKStagingBufferPool& staging_pool, VAddr cpu_addr_, std::size_t size_);
26 ~Buffer(); 26 ~Buffer();
27 27
@@ -41,7 +41,7 @@ public:
41 } 41 }
42 42
43private: 43private:
44 const VKDevice& device; 44 const Device& device;
45 VKScheduler& scheduler; 45 VKScheduler& scheduler;
46 VKStagingBufferPool& staging_pool; 46 VKStagingBufferPool& staging_pool;
47 47
@@ -52,7 +52,7 @@ class VKBufferCache final : public VideoCommon::BufferCache<Buffer, VkBuffer, VK
52public: 52public:
53 explicit VKBufferCache(VideoCore::RasterizerInterface& rasterizer, 53 explicit VKBufferCache(VideoCore::RasterizerInterface& rasterizer,
54 Tegra::MemoryManager& gpu_memory, Core::Memory::Memory& cpu_memory, 54 Tegra::MemoryManager& gpu_memory, Core::Memory::Memory& cpu_memory,
55 const VKDevice& device, VKMemoryManager& memory_manager, 55 const Device& device, VKMemoryManager& memory_manager,
56 VKScheduler& scheduler, VKStreamBuffer& stream_buffer, 56 VKScheduler& scheduler, VKStreamBuffer& stream_buffer,
57 VKStagingBufferPool& staging_pool); 57 VKStagingBufferPool& staging_pool);
58 ~VKBufferCache(); 58 ~VKBufferCache();
@@ -63,7 +63,7 @@ protected:
63 std::shared_ptr<Buffer> CreateBlock(VAddr cpu_addr, std::size_t size) override; 63 std::shared_ptr<Buffer> CreateBlock(VAddr cpu_addr, std::size_t size) override;
64 64
65private: 65private:
66 const VKDevice& device; 66 const Device& device;
67 VKMemoryManager& memory_manager; 67 VKMemoryManager& memory_manager;
68 VKScheduler& scheduler; 68 VKScheduler& scheduler;
69 VKStagingBufferPool& staging_pool; 69 VKStagingBufferPool& staging_pool;
diff --git a/src/video_core/renderer_vulkan/vk_command_pool.cpp b/src/video_core/renderer_vulkan/vk_command_pool.cpp
index ccae04929..a99df9323 100644
--- a/src/video_core/renderer_vulkan/vk_command_pool.cpp
+++ b/src/video_core/renderer_vulkan/vk_command_pool.cpp
@@ -5,7 +5,7 @@
5#include <cstddef> 5#include <cstddef>
6 6
7#include "video_core/renderer_vulkan/vk_command_pool.h" 7#include "video_core/renderer_vulkan/vk_command_pool.h"
8#include "video_core/renderer_vulkan/vk_device.h" 8#include "video_core/vulkan_common/vulkan_device.h"
9#include "video_core/vulkan_common/vulkan_wrapper.h" 9#include "video_core/vulkan_common/vulkan_wrapper.h"
10 10
11namespace Vulkan { 11namespace Vulkan {
@@ -17,7 +17,7 @@ struct CommandPool::Pool {
17 vk::CommandBuffers cmdbufs; 17 vk::CommandBuffers cmdbufs;
18}; 18};
19 19
20CommandPool::CommandPool(MasterSemaphore& master_semaphore_, const VKDevice& device_) 20CommandPool::CommandPool(MasterSemaphore& master_semaphore_, const Device& device_)
21 : ResourcePool(master_semaphore_, COMMAND_BUFFER_POOL_SIZE), device{device_} {} 21 : ResourcePool(master_semaphore_, COMMAND_BUFFER_POOL_SIZE), device{device_} {}
22 22
23CommandPool::~CommandPool() = default; 23CommandPool::~CommandPool() = default;
diff --git a/src/video_core/renderer_vulkan/vk_command_pool.h b/src/video_core/renderer_vulkan/vk_command_pool.h
index ce0e34515..61c26a22a 100644
--- a/src/video_core/renderer_vulkan/vk_command_pool.h
+++ b/src/video_core/renderer_vulkan/vk_command_pool.h
@@ -12,12 +12,12 @@
12 12
13namespace Vulkan { 13namespace Vulkan {
14 14
15class Device;
15class MasterSemaphore; 16class MasterSemaphore;
16class VKDevice;
17 17
18class CommandPool final : public ResourcePool { 18class CommandPool final : public ResourcePool {
19public: 19public:
20 explicit CommandPool(MasterSemaphore& master_semaphore_, const VKDevice& device_); 20 explicit CommandPool(MasterSemaphore& master_semaphore_, const Device& device_);
21 ~CommandPool() override; 21 ~CommandPool() override;
22 22
23 void Allocate(size_t begin, size_t end) override; 23 void Allocate(size_t begin, size_t end) override;
@@ -27,7 +27,7 @@ public:
27private: 27private:
28 struct Pool; 28 struct Pool;
29 29
30 const VKDevice& device; 30 const Device& device;
31 std::vector<Pool> pools; 31 std::vector<Pool> pools;
32}; 32};
33 33
diff --git a/src/video_core/renderer_vulkan/vk_compute_pass.cpp b/src/video_core/renderer_vulkan/vk_compute_pass.cpp
index 5d4543bae..02a6d54b7 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pass.cpp
+++ b/src/video_core/renderer_vulkan/vk_compute_pass.cpp
@@ -15,10 +15,10 @@
15#include "video_core/host_shaders/vulkan_uint8_comp_spv.h" 15#include "video_core/host_shaders/vulkan_uint8_comp_spv.h"
16#include "video_core/renderer_vulkan/vk_compute_pass.h" 16#include "video_core/renderer_vulkan/vk_compute_pass.h"
17#include "video_core/renderer_vulkan/vk_descriptor_pool.h" 17#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
18#include "video_core/renderer_vulkan/vk_device.h"
19#include "video_core/renderer_vulkan/vk_scheduler.h" 18#include "video_core/renderer_vulkan/vk_scheduler.h"
20#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h" 19#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h"
21#include "video_core/renderer_vulkan/vk_update_descriptor.h" 20#include "video_core/renderer_vulkan/vk_update_descriptor.h"
21#include "video_core/vulkan_common/vulkan_device.h"
22#include "video_core/vulkan_common/vulkan_wrapper.h" 22#include "video_core/vulkan_common/vulkan_wrapper.h"
23 23
24namespace Vulkan { 24namespace Vulkan {
@@ -86,7 +86,7 @@ VkDescriptorUpdateTemplateEntryKHR BuildInputOutputDescriptorUpdateTemplate() {
86 86
87} // Anonymous namespace 87} // Anonymous namespace
88 88
89VKComputePass::VKComputePass(const VKDevice& device, VKDescriptorPool& descriptor_pool, 89VKComputePass::VKComputePass(const Device& device, VKDescriptorPool& descriptor_pool,
90 vk::Span<VkDescriptorSetLayoutBinding> bindings, 90 vk::Span<VkDescriptorSetLayoutBinding> bindings,
91 vk::Span<VkDescriptorUpdateTemplateEntryKHR> templates, 91 vk::Span<VkDescriptorUpdateTemplateEntryKHR> templates,
92 vk::Span<VkPushConstantRange> push_constants, 92 vk::Span<VkPushConstantRange> push_constants,
@@ -162,7 +162,7 @@ VkDescriptorSet VKComputePass::CommitDescriptorSet(
162 return set; 162 return set;
163} 163}
164 164
165QuadArrayPass::QuadArrayPass(const VKDevice& device_, VKScheduler& scheduler_, 165QuadArrayPass::QuadArrayPass(const Device& device_, VKScheduler& scheduler_,
166 VKDescriptorPool& descriptor_pool_, 166 VKDescriptorPool& descriptor_pool_,
167 VKStagingBufferPool& staging_buffer_pool_, 167 VKStagingBufferPool& staging_buffer_pool_,
168 VKUpdateDescriptorQueue& update_descriptor_queue_) 168 VKUpdateDescriptorQueue& update_descriptor_queue_)
@@ -211,7 +211,7 @@ std::pair<VkBuffer, VkDeviceSize> QuadArrayPass::Assemble(u32 num_vertices, u32
211 return {*buffer.handle, 0}; 211 return {*buffer.handle, 0};
212} 212}
213 213
214Uint8Pass::Uint8Pass(const VKDevice& device, VKScheduler& scheduler_, 214Uint8Pass::Uint8Pass(const Device& device, VKScheduler& scheduler_,
215 VKDescriptorPool& descriptor_pool, VKStagingBufferPool& staging_buffer_pool_, 215 VKDescriptorPool& descriptor_pool, VKStagingBufferPool& staging_buffer_pool_,
216 VKUpdateDescriptorQueue& update_descriptor_queue_) 216 VKUpdateDescriptorQueue& update_descriptor_queue_)
217 : VKComputePass(device, descriptor_pool, BuildInputOutputDescriptorSetBindings(), 217 : VKComputePass(device, descriptor_pool, BuildInputOutputDescriptorSetBindings(),
@@ -255,7 +255,7 @@ std::pair<VkBuffer, u64> Uint8Pass::Assemble(u32 num_vertices, VkBuffer src_buff
255 return {*buffer.handle, 0}; 255 return {*buffer.handle, 0};
256} 256}
257 257
258QuadIndexedPass::QuadIndexedPass(const VKDevice& device_, VKScheduler& scheduler_, 258QuadIndexedPass::QuadIndexedPass(const Device& device_, VKScheduler& scheduler_,
259 VKDescriptorPool& descriptor_pool_, 259 VKDescriptorPool& descriptor_pool_,
260 VKStagingBufferPool& staging_buffer_pool_, 260 VKStagingBufferPool& staging_buffer_pool_,
261 VKUpdateDescriptorQueue& update_descriptor_queue_) 261 VKUpdateDescriptorQueue& update_descriptor_queue_)
diff --git a/src/video_core/renderer_vulkan/vk_compute_pass.h b/src/video_core/renderer_vulkan/vk_compute_pass.h
index 1b7502a4f..7ddb09afb 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pass.h
+++ b/src/video_core/renderer_vulkan/vk_compute_pass.h
@@ -15,14 +15,14 @@
15 15
16namespace Vulkan { 16namespace Vulkan {
17 17
18class VKDevice; 18class Device;
19class VKScheduler; 19class VKScheduler;
20class VKStagingBufferPool; 20class VKStagingBufferPool;
21class VKUpdateDescriptorQueue; 21class VKUpdateDescriptorQueue;
22 22
23class VKComputePass { 23class VKComputePass {
24public: 24public:
25 explicit VKComputePass(const VKDevice& device, VKDescriptorPool& descriptor_pool, 25 explicit VKComputePass(const Device& device, VKDescriptorPool& descriptor_pool,
26 vk::Span<VkDescriptorSetLayoutBinding> bindings, 26 vk::Span<VkDescriptorSetLayoutBinding> bindings,
27 vk::Span<VkDescriptorUpdateTemplateEntryKHR> templates, 27 vk::Span<VkDescriptorUpdateTemplateEntryKHR> templates,
28 vk::Span<VkPushConstantRange> push_constants, std::span<const u32> code); 28 vk::Span<VkPushConstantRange> push_constants, std::span<const u32> code);
@@ -43,7 +43,7 @@ private:
43 43
44class QuadArrayPass final : public VKComputePass { 44class QuadArrayPass final : public VKComputePass {
45public: 45public:
46 explicit QuadArrayPass(const VKDevice& device_, VKScheduler& scheduler_, 46 explicit QuadArrayPass(const Device& device_, VKScheduler& scheduler_,
47 VKDescriptorPool& descriptor_pool_, 47 VKDescriptorPool& descriptor_pool_,
48 VKStagingBufferPool& staging_buffer_pool_, 48 VKStagingBufferPool& staging_buffer_pool_,
49 VKUpdateDescriptorQueue& update_descriptor_queue_); 49 VKUpdateDescriptorQueue& update_descriptor_queue_);
@@ -59,7 +59,7 @@ private:
59 59
60class Uint8Pass final : public VKComputePass { 60class Uint8Pass final : public VKComputePass {
61public: 61public:
62 explicit Uint8Pass(const VKDevice& device_, VKScheduler& scheduler_, 62 explicit Uint8Pass(const Device& device_, VKScheduler& scheduler_,
63 VKDescriptorPool& descriptor_pool_, 63 VKDescriptorPool& descriptor_pool_,
64 VKStagingBufferPool& staging_buffer_pool_, 64 VKStagingBufferPool& staging_buffer_pool_,
65 VKUpdateDescriptorQueue& update_descriptor_queue_); 65 VKUpdateDescriptorQueue& update_descriptor_queue_);
@@ -75,7 +75,7 @@ private:
75 75
76class QuadIndexedPass final : public VKComputePass { 76class QuadIndexedPass final : public VKComputePass {
77public: 77public:
78 explicit QuadIndexedPass(const VKDevice& device_, VKScheduler& scheduler_, 78 explicit QuadIndexedPass(const Device& device_, VKScheduler& scheduler_,
79 VKDescriptorPool& descriptor_pool_, 79 VKDescriptorPool& descriptor_pool_,
80 VKStagingBufferPool& staging_buffer_pool_, 80 VKStagingBufferPool& staging_buffer_pool_,
81 VKUpdateDescriptorQueue& update_descriptor_queue_); 81 VKUpdateDescriptorQueue& update_descriptor_queue_);
diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
index 9966dd14a..3a48219b7 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
+++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp
@@ -6,16 +6,16 @@
6 6
7#include "video_core/renderer_vulkan/vk_compute_pipeline.h" 7#include "video_core/renderer_vulkan/vk_compute_pipeline.h"
8#include "video_core/renderer_vulkan/vk_descriptor_pool.h" 8#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
9#include "video_core/renderer_vulkan/vk_device.h"
10#include "video_core/renderer_vulkan/vk_pipeline_cache.h" 9#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
11#include "video_core/renderer_vulkan/vk_scheduler.h" 10#include "video_core/renderer_vulkan/vk_scheduler.h"
12#include "video_core/renderer_vulkan/vk_shader_decompiler.h" 11#include "video_core/renderer_vulkan/vk_shader_decompiler.h"
13#include "video_core/renderer_vulkan/vk_update_descriptor.h" 12#include "video_core/renderer_vulkan/vk_update_descriptor.h"
13#include "video_core/vulkan_common/vulkan_device.h"
14#include "video_core/vulkan_common/vulkan_wrapper.h" 14#include "video_core/vulkan_common/vulkan_wrapper.h"
15 15
16namespace Vulkan { 16namespace Vulkan {
17 17
18VKComputePipeline::VKComputePipeline(const VKDevice& device_, VKScheduler& scheduler_, 18VKComputePipeline::VKComputePipeline(const Device& device_, VKScheduler& scheduler_,
19 VKDescriptorPool& descriptor_pool_, 19 VKDescriptorPool& descriptor_pool_,
20 VKUpdateDescriptorQueue& update_descriptor_queue_, 20 VKUpdateDescriptorQueue& update_descriptor_queue_,
21 const SPIRVShader& shader_) 21 const SPIRVShader& shader_)
diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.h b/src/video_core/renderer_vulkan/vk_compute_pipeline.h
index a7197536c..7e16575ac 100644
--- a/src/video_core/renderer_vulkan/vk_compute_pipeline.h
+++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.h
@@ -11,13 +11,13 @@
11 11
12namespace Vulkan { 12namespace Vulkan {
13 13
14class VKDevice; 14class Device;
15class VKScheduler; 15class VKScheduler;
16class VKUpdateDescriptorQueue; 16class VKUpdateDescriptorQueue;
17 17
18class VKComputePipeline final { 18class VKComputePipeline final {
19public: 19public:
20 explicit VKComputePipeline(const VKDevice& device_, VKScheduler& scheduler_, 20 explicit VKComputePipeline(const Device& device_, VKScheduler& scheduler_,
21 VKDescriptorPool& descriptor_pool_, 21 VKDescriptorPool& descriptor_pool_,
22 VKUpdateDescriptorQueue& update_descriptor_queue_, 22 VKUpdateDescriptorQueue& update_descriptor_queue_,
23 const SPIRVShader& shader_); 23 const SPIRVShader& shader_);
@@ -48,7 +48,7 @@ private:
48 48
49 vk::Pipeline CreatePipeline() const; 49 vk::Pipeline CreatePipeline() const;
50 50
51 const VKDevice& device; 51 const Device& device;
52 VKScheduler& scheduler; 52 VKScheduler& scheduler;
53 ShaderEntries entries; 53 ShaderEntries entries;
54 54
diff --git a/src/video_core/renderer_vulkan/vk_descriptor_pool.cpp b/src/video_core/renderer_vulkan/vk_descriptor_pool.cpp
index 4dea03239..ef9fb5910 100644
--- a/src/video_core/renderer_vulkan/vk_descriptor_pool.cpp
+++ b/src/video_core/renderer_vulkan/vk_descriptor_pool.cpp
@@ -6,9 +6,9 @@
6 6
7#include "common/common_types.h" 7#include "common/common_types.h"
8#include "video_core/renderer_vulkan/vk_descriptor_pool.h" 8#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
9#include "video_core/renderer_vulkan/vk_device.h"
10#include "video_core/renderer_vulkan/vk_resource_pool.h" 9#include "video_core/renderer_vulkan/vk_resource_pool.h"
11#include "video_core/renderer_vulkan/vk_scheduler.h" 10#include "video_core/renderer_vulkan/vk_scheduler.h"
11#include "video_core/vulkan_common/vulkan_device.h"
12#include "video_core/vulkan_common/vulkan_wrapper.h" 12#include "video_core/vulkan_common/vulkan_wrapper.h"
13 13
14namespace Vulkan { 14namespace Vulkan {
@@ -32,7 +32,7 @@ void DescriptorAllocator::Allocate(std::size_t begin, std::size_t end) {
32 descriptors_allocations.push_back(descriptor_pool.AllocateDescriptors(layout, end - begin)); 32 descriptors_allocations.push_back(descriptor_pool.AllocateDescriptors(layout, end - begin));
33} 33}
34 34
35VKDescriptorPool::VKDescriptorPool(const VKDevice& device_, VKScheduler& scheduler) 35VKDescriptorPool::VKDescriptorPool(const Device& device_, VKScheduler& scheduler)
36 : device{device_}, master_semaphore{scheduler.GetMasterSemaphore()}, active_pool{ 36 : device{device_}, master_semaphore{scheduler.GetMasterSemaphore()}, active_pool{
37 AllocateNewPool()} {} 37 AllocateNewPool()} {}
38 38
diff --git a/src/video_core/renderer_vulkan/vk_descriptor_pool.h b/src/video_core/renderer_vulkan/vk_descriptor_pool.h
index 2abcaeddd..f892be7be 100644
--- a/src/video_core/renderer_vulkan/vk_descriptor_pool.h
+++ b/src/video_core/renderer_vulkan/vk_descriptor_pool.h
@@ -11,7 +11,7 @@
11 11
12namespace Vulkan { 12namespace Vulkan {
13 13
14class VKDevice; 14class Device;
15class VKDescriptorPool; 15class VKDescriptorPool;
16class VKScheduler; 16class VKScheduler;
17 17
@@ -39,7 +39,7 @@ class VKDescriptorPool final {
39 friend DescriptorAllocator; 39 friend DescriptorAllocator;
40 40
41public: 41public:
42 explicit VKDescriptorPool(const VKDevice& device, VKScheduler& scheduler); 42 explicit VKDescriptorPool(const Device& device, VKScheduler& scheduler);
43 ~VKDescriptorPool(); 43 ~VKDescriptorPool();
44 44
45 VKDescriptorPool(const VKDescriptorPool&) = delete; 45 VKDescriptorPool(const VKDescriptorPool&) = delete;
@@ -50,7 +50,7 @@ private:
50 50
51 vk::DescriptorSets AllocateDescriptors(VkDescriptorSetLayout layout, std::size_t count); 51 vk::DescriptorSets AllocateDescriptors(VkDescriptorSetLayout layout, std::size_t count);
52 52
53 const VKDevice& device; 53 const Device& device;
54 MasterSemaphore& master_semaphore; 54 MasterSemaphore& master_semaphore;
55 55
56 std::vector<vk::DescriptorPool> pools; 56 std::vector<vk::DescriptorPool> pools;
diff --git a/src/video_core/renderer_vulkan/vk_fence_manager.cpp b/src/video_core/renderer_vulkan/vk_fence_manager.cpp
index cd044c187..4c5bc0aa1 100644
--- a/src/video_core/renderer_vulkan/vk_fence_manager.cpp
+++ b/src/video_core/renderer_vulkan/vk_fence_manager.cpp
@@ -6,19 +6,19 @@
6#include <thread> 6#include <thread>
7 7
8#include "video_core/renderer_vulkan/vk_buffer_cache.h" 8#include "video_core/renderer_vulkan/vk_buffer_cache.h"
9#include "video_core/renderer_vulkan/vk_device.h"
10#include "video_core/renderer_vulkan/vk_fence_manager.h" 9#include "video_core/renderer_vulkan/vk_fence_manager.h"
11#include "video_core/renderer_vulkan/vk_scheduler.h" 10#include "video_core/renderer_vulkan/vk_scheduler.h"
12#include "video_core/renderer_vulkan/vk_texture_cache.h" 11#include "video_core/renderer_vulkan/vk_texture_cache.h"
12#include "video_core/vulkan_common/vulkan_device.h"
13#include "video_core/vulkan_common/vulkan_wrapper.h" 13#include "video_core/vulkan_common/vulkan_wrapper.h"
14 14
15namespace Vulkan { 15namespace Vulkan {
16 16
17InnerFence::InnerFence(const VKDevice& device_, VKScheduler& scheduler_, u32 payload_, 17InnerFence::InnerFence(const Device& device_, VKScheduler& scheduler_, u32 payload_,
18 bool is_stubbed_) 18 bool is_stubbed_)
19 : FenceBase{payload_, is_stubbed_}, device{device_}, scheduler{scheduler_} {} 19 : FenceBase{payload_, is_stubbed_}, device{device_}, scheduler{scheduler_} {}
20 20
21InnerFence::InnerFence(const VKDevice& device_, VKScheduler& scheduler_, GPUVAddr address_, 21InnerFence::InnerFence(const Device& device_, VKScheduler& scheduler_, GPUVAddr address_,
22 u32 payload_, bool is_stubbed_) 22 u32 payload_, bool is_stubbed_)
23 : FenceBase{address_, payload_, is_stubbed_}, device{device_}, scheduler{scheduler_} {} 23 : FenceBase{address_, payload_, is_stubbed_}, device{device_}, scheduler{scheduler_} {}
24 24
@@ -75,7 +75,7 @@ bool InnerFence::IsEventSignalled() const {
75VKFenceManager::VKFenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_, 75VKFenceManager::VKFenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_,
76 Tegra::MemoryManager& memory_manager_, TextureCache& texture_cache_, 76 Tegra::MemoryManager& memory_manager_, TextureCache& texture_cache_,
77 VKBufferCache& buffer_cache_, VKQueryCache& query_cache_, 77 VKBufferCache& buffer_cache_, VKQueryCache& query_cache_,
78 const VKDevice& device_, VKScheduler& scheduler_) 78 const Device& device_, VKScheduler& scheduler_)
79 : GenericFenceManager{rasterizer_, gpu_, texture_cache_, buffer_cache_, query_cache_}, 79 : GenericFenceManager{rasterizer_, gpu_, texture_cache_, buffer_cache_, query_cache_},
80 device{device_}, scheduler{scheduler_} {} 80 device{device_}, scheduler{scheduler_} {}
81 81
diff --git a/src/video_core/renderer_vulkan/vk_fence_manager.h b/src/video_core/renderer_vulkan/vk_fence_manager.h
index 272ae6d29..6b51e4587 100644
--- a/src/video_core/renderer_vulkan/vk_fence_manager.h
+++ b/src/video_core/renderer_vulkan/vk_fence_manager.h
@@ -21,16 +21,16 @@ class RasterizerInterface;
21 21
22namespace Vulkan { 22namespace Vulkan {
23 23
24class Device;
24class VKBufferCache; 25class VKBufferCache;
25class VKDevice;
26class VKQueryCache; 26class VKQueryCache;
27class VKScheduler; 27class VKScheduler;
28 28
29class InnerFence : public VideoCommon::FenceBase { 29class InnerFence : public VideoCommon::FenceBase {
30public: 30public:
31 explicit InnerFence(const VKDevice& device_, VKScheduler& scheduler_, u32 payload_, 31 explicit InnerFence(const Device& device_, VKScheduler& scheduler_, u32 payload_,
32 bool is_stubbed_); 32 bool is_stubbed_);
33 explicit InnerFence(const VKDevice& device_, VKScheduler& scheduler_, GPUVAddr address_, 33 explicit InnerFence(const Device& device_, VKScheduler& scheduler_, GPUVAddr address_,
34 u32 payload_, bool is_stubbed_); 34 u32 payload_, bool is_stubbed_);
35 ~InnerFence(); 35 ~InnerFence();
36 36
@@ -43,7 +43,7 @@ public:
43private: 43private:
44 bool IsEventSignalled() const; 44 bool IsEventSignalled() const;
45 45
46 const VKDevice& device; 46 const Device& device;
47 VKScheduler& scheduler; 47 VKScheduler& scheduler;
48 vk::Event event; 48 vk::Event event;
49 u64 ticks = 0; 49 u64 ticks = 0;
@@ -58,7 +58,7 @@ public:
58 explicit VKFenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_, 58 explicit VKFenceManager(VideoCore::RasterizerInterface& rasterizer_, Tegra::GPU& gpu_,
59 Tegra::MemoryManager& memory_manager_, TextureCache& texture_cache_, 59 Tegra::MemoryManager& memory_manager_, TextureCache& texture_cache_,
60 VKBufferCache& buffer_cache_, VKQueryCache& query_cache_, 60 VKBufferCache& buffer_cache_, VKQueryCache& query_cache_,
61 const VKDevice& device_, VKScheduler& scheduler_); 61 const Device& device_, VKScheduler& scheduler_);
62 62
63protected: 63protected:
64 Fence CreateFence(u32 value, bool is_stubbed) override; 64 Fence CreateFence(u32 value, bool is_stubbed) override;
@@ -68,7 +68,7 @@ protected:
68 void WaitFence(Fence& fence) override; 68 void WaitFence(Fence& fence) override;
69 69
70private: 70private:
71 const VKDevice& device; 71 const Device& device;
72 VKScheduler& scheduler; 72 VKScheduler& scheduler;
73}; 73};
74 74
diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
index d9c1ed553..8a94464f6 100644
--- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
+++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp
@@ -12,11 +12,11 @@
12#include "video_core/renderer_vulkan/fixed_pipeline_state.h" 12#include "video_core/renderer_vulkan/fixed_pipeline_state.h"
13#include "video_core/renderer_vulkan/maxwell_to_vk.h" 13#include "video_core/renderer_vulkan/maxwell_to_vk.h"
14#include "video_core/renderer_vulkan/vk_descriptor_pool.h" 14#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
15#include "video_core/renderer_vulkan/vk_device.h"
16#include "video_core/renderer_vulkan/vk_graphics_pipeline.h" 15#include "video_core/renderer_vulkan/vk_graphics_pipeline.h"
17#include "video_core/renderer_vulkan/vk_pipeline_cache.h" 16#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
18#include "video_core/renderer_vulkan/vk_scheduler.h" 17#include "video_core/renderer_vulkan/vk_scheduler.h"
19#include "video_core/renderer_vulkan/vk_update_descriptor.h" 18#include "video_core/renderer_vulkan/vk_update_descriptor.h"
19#include "video_core/vulkan_common/vulkan_device.h"
20#include "video_core/vulkan_common/vulkan_wrapper.h" 20#include "video_core/vulkan_common/vulkan_wrapper.h"
21 21
22namespace Vulkan { 22namespace Vulkan {
@@ -94,7 +94,7 @@ VkSampleCountFlagBits ConvertMsaaMode(Tegra::Texture::MsaaMode msaa_mode) {
94 94
95} // Anonymous namespace 95} // Anonymous namespace
96 96
97VKGraphicsPipeline::VKGraphicsPipeline(const VKDevice& device_, VKScheduler& scheduler_, 97VKGraphicsPipeline::VKGraphicsPipeline(const Device& device_, VKScheduler& scheduler_,
98 VKDescriptorPool& descriptor_pool_, 98 VKDescriptorPool& descriptor_pool_,
99 VKUpdateDescriptorQueue& update_descriptor_queue_, 99 VKUpdateDescriptorQueue& update_descriptor_queue_,
100 const GraphicsPipelineCacheKey& key, 100 const GraphicsPipelineCacheKey& key,
diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.h b/src/video_core/renderer_vulkan/vk_graphics_pipeline.h
index 3bc93bc2a..8b6a98fe0 100644
--- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.h
+++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.h
@@ -40,8 +40,8 @@ static_assert(std::has_unique_object_representations_v<GraphicsPipelineCacheKey>
40static_assert(std::is_trivially_copyable_v<GraphicsPipelineCacheKey>); 40static_assert(std::is_trivially_copyable_v<GraphicsPipelineCacheKey>);
41static_assert(std::is_trivially_constructible_v<GraphicsPipelineCacheKey>); 41static_assert(std::is_trivially_constructible_v<GraphicsPipelineCacheKey>);
42 42
43class Device;
43class VKDescriptorPool; 44class VKDescriptorPool;
44class VKDevice;
45class VKScheduler; 45class VKScheduler;
46class VKUpdateDescriptorQueue; 46class VKUpdateDescriptorQueue;
47 47
@@ -49,7 +49,7 @@ using SPIRVProgram = std::array<std::optional<SPIRVShader>, Maxwell::MaxShaderSt
49 49
50class VKGraphicsPipeline final { 50class VKGraphicsPipeline final {
51public: 51public:
52 explicit VKGraphicsPipeline(const VKDevice& device_, VKScheduler& scheduler_, 52 explicit VKGraphicsPipeline(const Device& device_, VKScheduler& scheduler_,
53 VKDescriptorPool& descriptor_pool, 53 VKDescriptorPool& descriptor_pool,
54 VKUpdateDescriptorQueue& update_descriptor_queue_, 54 VKUpdateDescriptorQueue& update_descriptor_queue_,
55 const GraphicsPipelineCacheKey& key, 55 const GraphicsPipelineCacheKey& key,
@@ -85,7 +85,7 @@ private:
85 vk::Pipeline CreatePipeline(const SPIRVProgram& program, VkRenderPass renderpass, 85 vk::Pipeline CreatePipeline(const SPIRVProgram& program, VkRenderPass renderpass,
86 u32 num_color_buffers) const; 86 u32 num_color_buffers) const;
87 87
88 const VKDevice& device; 88 const Device& device;
89 VKScheduler& scheduler; 89 VKScheduler& scheduler;
90 const GraphicsPipelineCacheKey cache_key; 90 const GraphicsPipelineCacheKey cache_key;
91 const u64 hash; 91 const u64 hash;
diff --git a/src/video_core/renderer_vulkan/vk_master_semaphore.cpp b/src/video_core/renderer_vulkan/vk_master_semaphore.cpp
index ed6ea0805..56ec5e380 100644
--- a/src/video_core/renderer_vulkan/vk_master_semaphore.cpp
+++ b/src/video_core/renderer_vulkan/vk_master_semaphore.cpp
@@ -6,15 +6,15 @@
6#include <chrono> 6#include <chrono>
7 7
8#include "core/settings.h" 8#include "core/settings.h"
9#include "video_core/renderer_vulkan/vk_device.h"
10#include "video_core/renderer_vulkan/vk_master_semaphore.h" 9#include "video_core/renderer_vulkan/vk_master_semaphore.h"
10#include "video_core/vulkan_common/vulkan_device.h"
11#include "video_core/vulkan_common/vulkan_wrapper.h" 11#include "video_core/vulkan_common/vulkan_wrapper.h"
12 12
13namespace Vulkan { 13namespace Vulkan {
14 14
15using namespace std::chrono_literals; 15using namespace std::chrono_literals;
16 16
17MasterSemaphore::MasterSemaphore(const VKDevice& device) { 17MasterSemaphore::MasterSemaphore(const Device& device) {
18 static constexpr VkSemaphoreTypeCreateInfoKHR semaphore_type_ci{ 18 static constexpr VkSemaphoreTypeCreateInfoKHR semaphore_type_ci{
19 .sType = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR, 19 .sType = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR,
20 .pNext = nullptr, 20 .pNext = nullptr,
diff --git a/src/video_core/renderer_vulkan/vk_master_semaphore.h b/src/video_core/renderer_vulkan/vk_master_semaphore.h
index 747d2f3bc..f336f1862 100644
--- a/src/video_core/renderer_vulkan/vk_master_semaphore.h
+++ b/src/video_core/renderer_vulkan/vk_master_semaphore.h
@@ -12,11 +12,11 @@
12 12
13namespace Vulkan { 13namespace Vulkan {
14 14
15class VKDevice; 15class Device;
16 16
17class MasterSemaphore { 17class MasterSemaphore {
18public: 18public:
19 explicit MasterSemaphore(const VKDevice& device); 19 explicit MasterSemaphore(const Device& device);
20 ~MasterSemaphore(); 20 ~MasterSemaphore();
21 21
22 /// Returns the current logical tick. 22 /// Returns the current logical tick.
diff --git a/src/video_core/renderer_vulkan/vk_memory_manager.cpp b/src/video_core/renderer_vulkan/vk_memory_manager.cpp
index 35f859f77..a6abd0eee 100644
--- a/src/video_core/renderer_vulkan/vk_memory_manager.cpp
+++ b/src/video_core/renderer_vulkan/vk_memory_manager.cpp
@@ -11,8 +11,8 @@
11#include "common/assert.h" 11#include "common/assert.h"
12#include "common/common_types.h" 12#include "common/common_types.h"
13#include "common/logging/log.h" 13#include "common/logging/log.h"
14#include "video_core/renderer_vulkan/vk_device.h"
15#include "video_core/renderer_vulkan/vk_memory_manager.h" 14#include "video_core/renderer_vulkan/vk_memory_manager.h"
15#include "video_core/vulkan_common/vulkan_device.h"
16#include "video_core/vulkan_common/vulkan_wrapper.h" 16#include "video_core/vulkan_common/vulkan_wrapper.h"
17 17
18namespace Vulkan { 18namespace Vulkan {
@@ -29,7 +29,7 @@ u64 GetAllocationChunkSize(u64 required_size) {
29 29
30class VKMemoryAllocation final { 30class VKMemoryAllocation final {
31public: 31public:
32 explicit VKMemoryAllocation(const VKDevice& device_, vk::DeviceMemory memory_, 32 explicit VKMemoryAllocation(const Device& device_, vk::DeviceMemory memory_,
33 VkMemoryPropertyFlags properties_, u64 allocation_size_, u32 type_) 33 VkMemoryPropertyFlags properties_, u64 allocation_size_, u32 type_)
34 : device{device_}, memory{std::move(memory_)}, properties{properties_}, 34 : device{device_}, memory{std::move(memory_)}, properties{properties_},
35 allocation_size{allocation_size_}, shifted_type{ShiftType(type_)} {} 35 allocation_size{allocation_size_}, shifted_type{ShiftType(type_)} {}
@@ -104,7 +104,7 @@ private:
104 return std::nullopt; 104 return std::nullopt;
105 } 105 }
106 106
107 const VKDevice& device; ///< Vulkan device. 107 const Device& device; ///< Vulkan device.
108 const vk::DeviceMemory memory; ///< Vulkan memory allocation handler. 108 const vk::DeviceMemory memory; ///< Vulkan memory allocation handler.
109 const VkMemoryPropertyFlags properties; ///< Vulkan properties. 109 const VkMemoryPropertyFlags properties; ///< Vulkan properties.
110 const u64 allocation_size; ///< Size of this allocation. 110 const u64 allocation_size; ///< Size of this allocation.
@@ -117,7 +117,7 @@ private:
117 std::vector<const VKMemoryCommitImpl*> commits; 117 std::vector<const VKMemoryCommitImpl*> commits;
118}; 118};
119 119
120VKMemoryManager::VKMemoryManager(const VKDevice& device_) 120VKMemoryManager::VKMemoryManager(const Device& device_)
121 : device{device_}, properties{device_.GetPhysical().GetMemoryProperties()} {} 121 : device{device_}, properties{device_.GetPhysical().GetMemoryProperties()} {}
122 122
123VKMemoryManager::~VKMemoryManager() = default; 123VKMemoryManager::~VKMemoryManager() = default;
@@ -207,7 +207,7 @@ VKMemoryCommit VKMemoryManager::TryAllocCommit(const VkMemoryRequirements& requi
207 return {}; 207 return {};
208} 208}
209 209
210VKMemoryCommitImpl::VKMemoryCommitImpl(const VKDevice& device_, VKMemoryAllocation* allocation_, 210VKMemoryCommitImpl::VKMemoryCommitImpl(const Device& device_, VKMemoryAllocation* allocation_,
211 const vk::DeviceMemory& memory_, u64 begin_, u64 end_) 211 const vk::DeviceMemory& memory_, u64 begin_, u64 end_)
212 : device{device_}, memory{memory_}, interval{begin_, end_}, allocation{allocation_} {} 212 : device{device_}, memory{memory_}, interval{begin_, end_}, allocation{allocation_} {}
213 213
diff --git a/src/video_core/renderer_vulkan/vk_memory_manager.h b/src/video_core/renderer_vulkan/vk_memory_manager.h
index 20463ecad..2452bca4e 100644
--- a/src/video_core/renderer_vulkan/vk_memory_manager.h
+++ b/src/video_core/renderer_vulkan/vk_memory_manager.h
@@ -13,8 +13,8 @@
13 13
14namespace Vulkan { 14namespace Vulkan {
15 15
16class Device;
16class MemoryMap; 17class MemoryMap;
17class VKDevice;
18class VKMemoryAllocation; 18class VKMemoryAllocation;
19class VKMemoryCommitImpl; 19class VKMemoryCommitImpl;
20 20
@@ -22,7 +22,7 @@ using VKMemoryCommit = std::unique_ptr<VKMemoryCommitImpl>;
22 22
23class VKMemoryManager final { 23class VKMemoryManager final {
24public: 24public:
25 explicit VKMemoryManager(const VKDevice& device_); 25 explicit VKMemoryManager(const Device& device_);
26 VKMemoryManager(const VKMemoryManager&) = delete; 26 VKMemoryManager(const VKMemoryManager&) = delete;
27 ~VKMemoryManager(); 27 ~VKMemoryManager();
28 28
@@ -49,7 +49,7 @@ private:
49 VKMemoryCommit TryAllocCommit(const VkMemoryRequirements& requirements, 49 VKMemoryCommit TryAllocCommit(const VkMemoryRequirements& requirements,
50 VkMemoryPropertyFlags wanted_properties); 50 VkMemoryPropertyFlags wanted_properties);
51 51
52 const VKDevice& device; ///< Device handler. 52 const Device& device; ///< Device handler.
53 const VkPhysicalDeviceMemoryProperties properties; ///< Physical device properties. 53 const VkPhysicalDeviceMemoryProperties properties; ///< Physical device properties.
54 std::vector<std::unique_ptr<VKMemoryAllocation>> allocations; ///< Current allocations. 54 std::vector<std::unique_ptr<VKMemoryAllocation>> allocations; ///< Current allocations.
55}; 55};
@@ -59,7 +59,7 @@ class VKMemoryCommitImpl final {
59 friend MemoryMap; 59 friend MemoryMap;
60 60
61public: 61public:
62 explicit VKMemoryCommitImpl(const VKDevice& device_, VKMemoryAllocation* allocation_, 62 explicit VKMemoryCommitImpl(const Device& device_, VKMemoryAllocation* allocation_,
63 const vk::DeviceMemory& memory_, u64 begin_, u64 end_); 63 const vk::DeviceMemory& memory_, u64 begin_, u64 end_);
64 ~VKMemoryCommitImpl(); 64 ~VKMemoryCommitImpl();
65 65
@@ -85,7 +85,7 @@ private:
85 /// Unmaps memory. 85 /// Unmaps memory.
86 void Unmap() const; 86 void Unmap() const;
87 87
88 const VKDevice& device; ///< Vulkan device. 88 const Device& device; ///< Vulkan device.
89 const vk::DeviceMemory& memory; ///< Vulkan device memory handler. 89 const vk::DeviceMemory& memory; ///< Vulkan device memory handler.
90 std::pair<u64, u64> interval{}; ///< Interval where the commit exists. 90 std::pair<u64, u64> interval{}; ///< Interval where the commit exists.
91 VKMemoryAllocation* allocation{}; ///< Pointer to the large memory allocation. 91 VKMemoryAllocation* allocation{}; ///< Pointer to the large memory allocation.
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
index b44fd6159..02282e36f 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp
@@ -19,7 +19,6 @@
19#include "video_core/renderer_vulkan/maxwell_to_vk.h" 19#include "video_core/renderer_vulkan/maxwell_to_vk.h"
20#include "video_core/renderer_vulkan/vk_compute_pipeline.h" 20#include "video_core/renderer_vulkan/vk_compute_pipeline.h"
21#include "video_core/renderer_vulkan/vk_descriptor_pool.h" 21#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
22#include "video_core/renderer_vulkan/vk_device.h"
23#include "video_core/renderer_vulkan/vk_graphics_pipeline.h" 22#include "video_core/renderer_vulkan/vk_graphics_pipeline.h"
24#include "video_core/renderer_vulkan/vk_pipeline_cache.h" 23#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
25#include "video_core/renderer_vulkan/vk_rasterizer.h" 24#include "video_core/renderer_vulkan/vk_rasterizer.h"
@@ -29,6 +28,7 @@
29#include "video_core/shader/memory_util.h" 28#include "video_core/shader/memory_util.h"
30#include "video_core/shader_cache.h" 29#include "video_core/shader_cache.h"
31#include "video_core/shader_notify.h" 30#include "video_core/shader_notify.h"
31#include "video_core/vulkan_common/vulkan_device.h"
32#include "video_core/vulkan_common/vulkan_wrapper.h" 32#include "video_core/vulkan_common/vulkan_wrapper.h"
33 33
34namespace Vulkan { 34namespace Vulkan {
@@ -149,7 +149,7 @@ Shader::~Shader() = default;
149VKPipelineCache::VKPipelineCache(RasterizerVulkan& rasterizer_, Tegra::GPU& gpu_, 149VKPipelineCache::VKPipelineCache(RasterizerVulkan& rasterizer_, Tegra::GPU& gpu_,
150 Tegra::Engines::Maxwell3D& maxwell3d_, 150 Tegra::Engines::Maxwell3D& maxwell3d_,
151 Tegra::Engines::KeplerCompute& kepler_compute_, 151 Tegra::Engines::KeplerCompute& kepler_compute_,
152 Tegra::MemoryManager& gpu_memory_, const VKDevice& device_, 152 Tegra::MemoryManager& gpu_memory_, const Device& device_,
153 VKScheduler& scheduler_, VKDescriptorPool& descriptor_pool_, 153 VKScheduler& scheduler_, VKDescriptorPool& descriptor_pool_,
154 VKUpdateDescriptorQueue& update_descriptor_queue_) 154 VKUpdateDescriptorQueue& update_descriptor_queue_)
155 : VideoCommon::ShaderCache<Shader>{rasterizer_}, gpu{gpu_}, maxwell3d{maxwell3d_}, 155 : VideoCommon::ShaderCache<Shader>{rasterizer_}, gpu{gpu_}, maxwell3d{maxwell3d_},
diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.h b/src/video_core/renderer_vulkan/vk_pipeline_cache.h
index 5ce1b17f3..89d635a3d 100644
--- a/src/video_core/renderer_vulkan/vk_pipeline_cache.h
+++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.h
@@ -33,10 +33,10 @@ class System;
33 33
34namespace Vulkan { 34namespace Vulkan {
35 35
36class Device;
36class RasterizerVulkan; 37class RasterizerVulkan;
37class VKComputePipeline; 38class VKComputePipeline;
38class VKDescriptorPool; 39class VKDescriptorPool;
39class VKDevice;
40class VKScheduler; 40class VKScheduler;
41class VKUpdateDescriptorQueue; 41class VKUpdateDescriptorQueue;
42 42
@@ -121,7 +121,7 @@ public:
121 explicit VKPipelineCache(RasterizerVulkan& rasterizer, Tegra::GPU& gpu, 121 explicit VKPipelineCache(RasterizerVulkan& rasterizer, Tegra::GPU& gpu,
122 Tegra::Engines::Maxwell3D& maxwell3d, 122 Tegra::Engines::Maxwell3D& maxwell3d,
123 Tegra::Engines::KeplerCompute& kepler_compute, 123 Tegra::Engines::KeplerCompute& kepler_compute,
124 Tegra::MemoryManager& gpu_memory, const VKDevice& device, 124 Tegra::MemoryManager& gpu_memory, const Device& device,
125 VKScheduler& scheduler, VKDescriptorPool& descriptor_pool, 125 VKScheduler& scheduler, VKDescriptorPool& descriptor_pool,
126 VKUpdateDescriptorQueue& update_descriptor_queue); 126 VKUpdateDescriptorQueue& update_descriptor_queue);
127 ~VKPipelineCache() override; 127 ~VKPipelineCache() override;
@@ -148,7 +148,7 @@ private:
148 Tegra::Engines::KeplerCompute& kepler_compute; 148 Tegra::Engines::KeplerCompute& kepler_compute;
149 Tegra::MemoryManager& gpu_memory; 149 Tegra::MemoryManager& gpu_memory;
150 150
151 const VKDevice& device; 151 const Device& device;
152 VKScheduler& scheduler; 152 VKScheduler& scheduler;
153 VKDescriptorPool& descriptor_pool; 153 VKDescriptorPool& descriptor_pool;
154 VKUpdateDescriptorQueue& update_descriptor_queue; 154 VKUpdateDescriptorQueue& update_descriptor_queue;
diff --git a/src/video_core/renderer_vulkan/vk_query_cache.cpp b/src/video_core/renderer_vulkan/vk_query_cache.cpp
index 7852178b6..7cadd5147 100644
--- a/src/video_core/renderer_vulkan/vk_query_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_query_cache.cpp
@@ -7,10 +7,10 @@
7#include <utility> 7#include <utility>
8#include <vector> 8#include <vector>
9 9
10#include "video_core/renderer_vulkan/vk_device.h"
11#include "video_core/renderer_vulkan/vk_query_cache.h" 10#include "video_core/renderer_vulkan/vk_query_cache.h"
12#include "video_core/renderer_vulkan/vk_resource_pool.h" 11#include "video_core/renderer_vulkan/vk_resource_pool.h"
13#include "video_core/renderer_vulkan/vk_scheduler.h" 12#include "video_core/renderer_vulkan/vk_scheduler.h"
13#include "video_core/vulkan_common/vulkan_device.h"
14#include "video_core/vulkan_common/vulkan_wrapper.h" 14#include "video_core/vulkan_common/vulkan_wrapper.h"
15 15
16namespace Vulkan { 16namespace Vulkan {
@@ -27,7 +27,7 @@ constexpr VkQueryType GetTarget(QueryType type) {
27 27
28} // Anonymous namespace 28} // Anonymous namespace
29 29
30QueryPool::QueryPool(const VKDevice& device_, VKScheduler& scheduler, QueryType type_) 30QueryPool::QueryPool(const Device& device_, VKScheduler& scheduler, QueryType type_)
31 : ResourcePool{scheduler.GetMasterSemaphore(), GROW_STEP}, device{device_}, type{type_} {} 31 : ResourcePool{scheduler.GetMasterSemaphore(), GROW_STEP}, device{device_}, type{type_} {}
32 32
33QueryPool::~QueryPool() = default; 33QueryPool::~QueryPool() = default;
@@ -68,7 +68,7 @@ void QueryPool::Reserve(std::pair<VkQueryPool, u32> query) {
68 68
69VKQueryCache::VKQueryCache(VideoCore::RasterizerInterface& rasterizer_, 69VKQueryCache::VKQueryCache(VideoCore::RasterizerInterface& rasterizer_,
70 Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_, 70 Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
71 const VKDevice& device_, VKScheduler& scheduler_) 71 const Device& device_, VKScheduler& scheduler_)
72 : QueryCacheBase{rasterizer_, maxwell3d_, gpu_memory_}, device{device_}, scheduler{scheduler_}, 72 : QueryCacheBase{rasterizer_, maxwell3d_, gpu_memory_}, device{device_}, scheduler{scheduler_},
73 query_pools{ 73 query_pools{
74 QueryPool{device_, scheduler_, QueryType::SamplesPassed}, 74 QueryPool{device_, scheduler_, QueryType::SamplesPassed},
@@ -96,9 +96,9 @@ void VKQueryCache::Reserve(QueryType type, std::pair<VkQueryPool, u32> query) {
96HostCounter::HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_, 96HostCounter::HostCounter(VKQueryCache& cache_, std::shared_ptr<HostCounter> dependency_,
97 QueryType type_) 97 QueryType type_)
98 : HostCounterBase{std::move(dependency_)}, cache{cache_}, type{type_}, 98 : HostCounterBase{std::move(dependency_)}, cache{cache_}, type{type_},
99 query{cache_.AllocateQuery(type_)}, tick{cache_.Scheduler().CurrentTick()} { 99 query{cache_.AllocateQuery(type_)}, tick{cache_.GetScheduler().CurrentTick()} {
100 const vk::Device* logical = &cache_.Device().GetLogical(); 100 const vk::Device* logical = &cache.GetDevice().GetLogical();
101 cache_.Scheduler().Record([logical, query = query](vk::CommandBuffer cmdbuf) { 101 cache.GetScheduler().Record([logical, query = query](vk::CommandBuffer cmdbuf) {
102 logical->ResetQueryPoolEXT(query.first, query.second, 1); 102 logical->ResetQueryPoolEXT(query.first, query.second, 1);
103 cmdbuf.BeginQuery(query.first, query.second, VK_QUERY_CONTROL_PRECISE_BIT); 103 cmdbuf.BeginQuery(query.first, query.second, VK_QUERY_CONTROL_PRECISE_BIT);
104 }); 104 });
@@ -109,17 +109,17 @@ HostCounter::~HostCounter() {
109} 109}
110 110
111void HostCounter::EndQuery() { 111void HostCounter::EndQuery() {
112 cache.Scheduler().Record( 112 cache.GetScheduler().Record(
113 [query = query](vk::CommandBuffer cmdbuf) { cmdbuf.EndQuery(query.first, query.second); }); 113 [query = query](vk::CommandBuffer cmdbuf) { cmdbuf.EndQuery(query.first, query.second); });
114} 114}
115 115
116u64 HostCounter::BlockingQuery() const { 116u64 HostCounter::BlockingQuery() const {
117 if (tick >= cache.Scheduler().CurrentTick()) { 117 if (tick >= cache.GetScheduler().CurrentTick()) {
118 cache.Scheduler().Flush(); 118 cache.GetScheduler().Flush();
119 } 119 }
120 120
121 u64 data; 121 u64 data;
122 const VkResult query_result = cache.Device().GetLogical().GetQueryResults( 122 const VkResult query_result = cache.GetDevice().GetLogical().GetQueryResults(
123 query.first, query.second, 1, sizeof(data), &data, sizeof(data), 123 query.first, query.second, 1, sizeof(data), &data, sizeof(data),
124 VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT); 124 VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT);
125 125
@@ -127,7 +127,7 @@ u64 HostCounter::BlockingQuery() const {
127 case VK_SUCCESS: 127 case VK_SUCCESS:
128 return data; 128 return data;
129 case VK_ERROR_DEVICE_LOST: 129 case VK_ERROR_DEVICE_LOST:
130 cache.Device().ReportLoss(); 130 cache.GetDevice().ReportLoss();
131 [[fallthrough]]; 131 [[fallthrough]];
132 default: 132 default:
133 throw vk::Exception(query_result); 133 throw vk::Exception(query_result);
diff --git a/src/video_core/renderer_vulkan/vk_query_cache.h b/src/video_core/renderer_vulkan/vk_query_cache.h
index b4fb6b3b0..7190946b9 100644
--- a/src/video_core/renderer_vulkan/vk_query_cache.h
+++ b/src/video_core/renderer_vulkan/vk_query_cache.h
@@ -21,8 +21,8 @@ class RasterizerInterface;
21namespace Vulkan { 21namespace Vulkan {
22 22
23class CachedQuery; 23class CachedQuery;
24class Device;
24class HostCounter; 25class HostCounter;
25class VKDevice;
26class VKQueryCache; 26class VKQueryCache;
27class VKScheduler; 27class VKScheduler;
28 28
@@ -30,7 +30,7 @@ using CounterStream = VideoCommon::CounterStreamBase<VKQueryCache, HostCounter>;
30 30
31class QueryPool final : public ResourcePool { 31class QueryPool final : public ResourcePool {
32public: 32public:
33 explicit QueryPool(const VKDevice& device, VKScheduler& scheduler, VideoCore::QueryType type); 33 explicit QueryPool(const Device& device, VKScheduler& scheduler, VideoCore::QueryType type);
34 ~QueryPool() override; 34 ~QueryPool() override;
35 35
36 std::pair<VkQueryPool, u32> Commit(); 36 std::pair<VkQueryPool, u32> Commit();
@@ -43,7 +43,7 @@ protected:
43private: 43private:
44 static constexpr std::size_t GROW_STEP = 512; 44 static constexpr std::size_t GROW_STEP = 512;
45 45
46 const VKDevice& device; 46 const Device& device;
47 const VideoCore::QueryType type; 47 const VideoCore::QueryType type;
48 48
49 std::vector<vk::QueryPool> pools; 49 std::vector<vk::QueryPool> pools;
@@ -55,23 +55,23 @@ class VKQueryCache final
55public: 55public:
56 explicit VKQueryCache(VideoCore::RasterizerInterface& rasterizer_, 56 explicit VKQueryCache(VideoCore::RasterizerInterface& rasterizer_,
57 Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_, 57 Tegra::Engines::Maxwell3D& maxwell3d_, Tegra::MemoryManager& gpu_memory_,
58 const VKDevice& device_, VKScheduler& scheduler_); 58 const Device& device_, VKScheduler& scheduler_);
59 ~VKQueryCache(); 59 ~VKQueryCache();
60 60
61 std::pair<VkQueryPool, u32> AllocateQuery(VideoCore::QueryType type); 61 std::pair<VkQueryPool, u32> AllocateQuery(VideoCore::QueryType type);
62 62
63 void Reserve(VideoCore::QueryType type, std::pair<VkQueryPool, u32> query); 63 void Reserve(VideoCore::QueryType type, std::pair<VkQueryPool, u32> query);
64 64
65 const VKDevice& Device() const noexcept { 65 const Device& GetDevice() const noexcept {
66 return device; 66 return device;
67 } 67 }
68 68
69 VKScheduler& Scheduler() const noexcept { 69 VKScheduler& GetScheduler() const noexcept {
70 return scheduler; 70 return scheduler;
71 } 71 }
72 72
73private: 73private:
74 const VKDevice& device; 74 const Device& device;
75 VKScheduler& scheduler; 75 VKScheduler& scheduler;
76 std::array<QueryPool, VideoCore::NumQueryTypes> query_pools; 76 std::array<QueryPool, VideoCore::NumQueryTypes> query_pools;
77}; 77};
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 1c174e7ec..93fbea510 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -27,7 +27,6 @@
27#include "video_core/renderer_vulkan/vk_compute_pass.h" 27#include "video_core/renderer_vulkan/vk_compute_pass.h"
28#include "video_core/renderer_vulkan/vk_compute_pipeline.h" 28#include "video_core/renderer_vulkan/vk_compute_pipeline.h"
29#include "video_core/renderer_vulkan/vk_descriptor_pool.h" 29#include "video_core/renderer_vulkan/vk_descriptor_pool.h"
30#include "video_core/renderer_vulkan/vk_device.h"
31#include "video_core/renderer_vulkan/vk_graphics_pipeline.h" 30#include "video_core/renderer_vulkan/vk_graphics_pipeline.h"
32#include "video_core/renderer_vulkan/vk_pipeline_cache.h" 31#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
33#include "video_core/renderer_vulkan/vk_rasterizer.h" 32#include "video_core/renderer_vulkan/vk_rasterizer.h"
@@ -38,6 +37,7 @@
38#include "video_core/renderer_vulkan/vk_update_descriptor.h" 37#include "video_core/renderer_vulkan/vk_update_descriptor.h"
39#include "video_core/shader_cache.h" 38#include "video_core/shader_cache.h"
40#include "video_core/texture_cache/texture_cache.h" 39#include "video_core/texture_cache/texture_cache.h"
40#include "video_core/vulkan_common/vulkan_device.h"
41#include "video_core/vulkan_common/vulkan_wrapper.h" 41#include "video_core/vulkan_common/vulkan_wrapper.h"
42 42
43namespace Vulkan { 43namespace Vulkan {
@@ -62,7 +62,7 @@ namespace {
62 62
63constexpr auto COMPUTE_SHADER_INDEX = static_cast<size_t>(Tegra::Engines::ShaderType::Compute); 63constexpr auto COMPUTE_SHADER_INDEX = static_cast<size_t>(Tegra::Engines::ShaderType::Compute);
64 64
65VkViewport GetViewportState(const VKDevice& device, const Maxwell& regs, size_t index) { 65VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index) {
66 const auto& src = regs.viewport_transform[index]; 66 const auto& src = regs.viewport_transform[index];
67 const float width = src.scale_x * 2.0f; 67 const float width = src.scale_x * 2.0f;
68 const float height = src.scale_y * 2.0f; 68 const float height = src.scale_y * 2.0f;
@@ -239,7 +239,7 @@ public:
239 index.type = type; 239 index.type = type;
240 } 240 }
241 241
242 void Bind(const VKDevice& device, VKScheduler& scheduler) const { 242 void Bind(const Device& device, VKScheduler& scheduler) const {
243 // Use this large switch case to avoid dispatching more memory in the record lambda than 243 // Use this large switch case to avoid dispatching more memory in the record lambda than
244 // what we need. It looks horrible, but it's the best we can do on standard C++. 244 // what we need. It looks horrible, but it's the best we can do on standard C++.
245 switch (vertex.num_buffers) { 245 switch (vertex.num_buffers) {
@@ -330,7 +330,7 @@ private:
330 } index; 330 } index;
331 331
332 template <size_t N> 332 template <size_t N>
333 void BindStatic(const VKDevice& device, VKScheduler& scheduler) const { 333 void BindStatic(const Device& device, VKScheduler& scheduler) const {
334 if (device.IsExtExtendedDynamicStateSupported()) { 334 if (device.IsExtExtendedDynamicStateSupported()) {
335 if (index.buffer) { 335 if (index.buffer) {
336 BindStatic<N, true, true>(scheduler); 336 BindStatic<N, true, true>(scheduler);
@@ -409,7 +409,7 @@ void RasterizerVulkan::DrawParameters::Draw(vk::CommandBuffer cmdbuf) const {
409RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, 409RasterizerVulkan::RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
410 Tegra::MemoryManager& gpu_memory_, 410 Tegra::MemoryManager& gpu_memory_,
411 Core::Memory::Memory& cpu_memory_, VKScreenInfo& screen_info_, 411 Core::Memory::Memory& cpu_memory_, VKScreenInfo& screen_info_,
412 const VKDevice& device_, VKMemoryManager& memory_manager_, 412 const Device& device_, VKMemoryManager& memory_manager_,
413 StateTracker& state_tracker_, VKScheduler& scheduler_) 413 StateTracker& state_tracker_, VKScheduler& scheduler_)
414 : RasterizerAccelerated{cpu_memory_}, gpu{gpu_}, 414 : RasterizerAccelerated{cpu_memory_}, gpu{gpu_},
415 gpu_memory{gpu_memory_}, maxwell3d{gpu.Maxwell3D()}, kepler_compute{gpu.KeplerCompute()}, 415 gpu_memory{gpu_memory_}, maxwell3d{gpu.Maxwell3D()}, kepler_compute{gpu.KeplerCompute()},
@@ -628,8 +628,10 @@ void RasterizerVulkan::DispatchCompute(GPUVAddr code_addr) {
628 grid_z = launch_desc.grid_dim_z, pipeline_handle, pipeline_layout, 628 grid_z = launch_desc.grid_dim_z, pipeline_handle, pipeline_layout,
629 descriptor_set](vk::CommandBuffer cmdbuf) { 629 descriptor_set](vk::CommandBuffer cmdbuf) {
630 cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_handle); 630 cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_handle);
631 cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_layout, DESCRIPTOR_SET, 631 if (descriptor_set) {
632 descriptor_set, {}); 632 cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_COMPUTE, pipeline_layout,
633 DESCRIPTOR_SET, descriptor_set, nullptr);
634 }
633 cmdbuf.Dispatch(grid_x, grid_y, grid_z); 635 cmdbuf.Dispatch(grid_x, grid_y, grid_z);
634 }); 636 });
635} 637}
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h
index 7b9ec3bb8..4695718e9 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.h
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.h
@@ -55,7 +55,7 @@ class RasterizerVulkan final : public VideoCore::RasterizerAccelerated {
55public: 55public:
56 explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_, 56 explicit RasterizerVulkan(Core::Frontend::EmuWindow& emu_window_, Tegra::GPU& gpu_,
57 Tegra::MemoryManager& gpu_memory_, Core::Memory::Memory& cpu_memory_, 57 Tegra::MemoryManager& gpu_memory_, Core::Memory::Memory& cpu_memory_,
58 VKScreenInfo& screen_info_, const VKDevice& device_, 58 VKScreenInfo& screen_info_, const Device& device_,
59 VKMemoryManager& memory_manager_, StateTracker& state_tracker_, 59 VKMemoryManager& memory_manager_, StateTracker& state_tracker_,
60 VKScheduler& scheduler_); 60 VKScheduler& scheduler_);
61 ~RasterizerVulkan() override; 61 ~RasterizerVulkan() override;
@@ -212,7 +212,7 @@ private:
212 Tegra::Engines::KeplerCompute& kepler_compute; 212 Tegra::Engines::KeplerCompute& kepler_compute;
213 213
214 VKScreenInfo& screen_info; 214 VKScreenInfo& screen_info;
215 const VKDevice& device; 215 const Device& device;
216 VKMemoryManager& memory_manager; 216 VKMemoryManager& memory_manager;
217 StateTracker& state_tracker; 217 StateTracker& state_tracker;
218 VKScheduler& scheduler; 218 VKScheduler& scheduler;
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp
index f7b79e74c..66004f9c0 100644
--- a/src/video_core/renderer_vulkan/vk_scheduler.cpp
+++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp
@@ -11,12 +11,12 @@
11#include "common/microprofile.h" 11#include "common/microprofile.h"
12#include "common/thread.h" 12#include "common/thread.h"
13#include "video_core/renderer_vulkan/vk_command_pool.h" 13#include "video_core/renderer_vulkan/vk_command_pool.h"
14#include "video_core/renderer_vulkan/vk_device.h"
15#include "video_core/renderer_vulkan/vk_master_semaphore.h" 14#include "video_core/renderer_vulkan/vk_master_semaphore.h"
16#include "video_core/renderer_vulkan/vk_query_cache.h" 15#include "video_core/renderer_vulkan/vk_query_cache.h"
17#include "video_core/renderer_vulkan/vk_scheduler.h" 16#include "video_core/renderer_vulkan/vk_scheduler.h"
18#include "video_core/renderer_vulkan/vk_state_tracker.h" 17#include "video_core/renderer_vulkan/vk_state_tracker.h"
19#include "video_core/renderer_vulkan/vk_texture_cache.h" 18#include "video_core/renderer_vulkan/vk_texture_cache.h"
19#include "video_core/vulkan_common/vulkan_device.h"
20#include "video_core/vulkan_common/vulkan_wrapper.h" 20#include "video_core/vulkan_common/vulkan_wrapper.h"
21 21
22namespace Vulkan { 22namespace Vulkan {
@@ -37,7 +37,7 @@ void VKScheduler::CommandChunk::ExecuteAll(vk::CommandBuffer cmdbuf) {
37 last = nullptr; 37 last = nullptr;
38} 38}
39 39
40VKScheduler::VKScheduler(const VKDevice& device_, StateTracker& state_tracker_) 40VKScheduler::VKScheduler(const Device& device_, StateTracker& state_tracker_)
41 : device{device_}, state_tracker{state_tracker_}, 41 : device{device_}, state_tracker{state_tracker_},
42 master_semaphore{std::make_unique<MasterSemaphore>(device)}, 42 master_semaphore{std::make_unique<MasterSemaphore>(device)},
43 command_pool{std::make_unique<CommandPool>(*master_semaphore, device)} { 43 command_pool{std::make_unique<CommandPool>(*master_semaphore, device)} {
diff --git a/src/video_core/renderer_vulkan/vk_scheduler.h b/src/video_core/renderer_vulkan/vk_scheduler.h
index 1172ec622..4cd43e425 100644
--- a/src/video_core/renderer_vulkan/vk_scheduler.h
+++ b/src/video_core/renderer_vulkan/vk_scheduler.h
@@ -17,17 +17,17 @@
17namespace Vulkan { 17namespace Vulkan {
18 18
19class CommandPool; 19class CommandPool;
20class Device;
20class Framebuffer; 21class Framebuffer;
21class MasterSemaphore; 22class MasterSemaphore;
22class StateTracker; 23class StateTracker;
23class VKDevice;
24class VKQueryCache; 24class VKQueryCache;
25 25
26/// The scheduler abstracts command buffer and fence management with an interface that's able to do 26/// The scheduler abstracts command buffer and fence management with an interface that's able to do
27/// OpenGL-like operations on Vulkan command buffers. 27/// OpenGL-like operations on Vulkan command buffers.
28class VKScheduler { 28class VKScheduler {
29public: 29public:
30 explicit VKScheduler(const VKDevice& device, StateTracker& state_tracker); 30 explicit VKScheduler(const Device& device, StateTracker& state_tracker);
31 ~VKScheduler(); 31 ~VKScheduler();
32 32
33 /// Returns the current command buffer tick. 33 /// Returns the current command buffer tick.
@@ -179,7 +179,7 @@ private:
179 179
180 void AcquireNewChunk(); 180 void AcquireNewChunk();
181 181
182 const VKDevice& device; 182 const Device& device;
183 StateTracker& state_tracker; 183 StateTracker& state_tracker;
184 184
185 std::unique_ptr<MasterSemaphore> master_semaphore; 185 std::unique_ptr<MasterSemaphore> master_semaphore;
diff --git a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
index 571460c2f..89cbe01ad 100644
--- a/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
+++ b/src/video_core/renderer_vulkan/vk_shader_decompiler.cpp
@@ -22,11 +22,11 @@
22#include "video_core/engines/shader_bytecode.h" 22#include "video_core/engines/shader_bytecode.h"
23#include "video_core/engines/shader_header.h" 23#include "video_core/engines/shader_header.h"
24#include "video_core/engines/shader_type.h" 24#include "video_core/engines/shader_type.h"
25#include "video_core/renderer_vulkan/vk_device.h"
26#include "video_core/renderer_vulkan/vk_shader_decompiler.h" 25#include "video_core/renderer_vulkan/vk_shader_decompiler.h"
27#include "video_core/shader/node.h" 26#include "video_core/shader/node.h"
28#include "video_core/shader/shader_ir.h" 27#include "video_core/shader/shader_ir.h"
29#include "video_core/shader/transform_feedback.h" 28#include "video_core/shader/transform_feedback.h"
29#include "video_core/vulkan_common/vulkan_device.h"
30 30
31namespace Vulkan { 31namespace Vulkan {
32 32
@@ -274,7 +274,7 @@ bool IsPrecise(Operation operand) {
274 274
275class SPIRVDecompiler final : public Sirit::Module { 275class SPIRVDecompiler final : public Sirit::Module {
276public: 276public:
277 explicit SPIRVDecompiler(const VKDevice& device_, const ShaderIR& ir_, ShaderType stage_, 277 explicit SPIRVDecompiler(const Device& device_, const ShaderIR& ir_, ShaderType stage_,
278 const Registry& registry_, const Specialization& specialization_) 278 const Registry& registry_, const Specialization& specialization_)
279 : Module(0x00010300), device{device_}, ir{ir_}, stage{stage_}, header{ir_.GetHeader()}, 279 : Module(0x00010300), device{device_}, ir{ir_}, stage{stage_}, header{ir_.GetHeader()},
280 registry{registry_}, specialization{specialization_} { 280 registry{registry_}, specialization{specialization_} {
@@ -2742,7 +2742,7 @@ private:
2742 }; 2742 };
2743 static_assert(operation_decompilers.size() == static_cast<std::size_t>(OperationCode::Amount)); 2743 static_assert(operation_decompilers.size() == static_cast<std::size_t>(OperationCode::Amount));
2744 2744
2745 const VKDevice& device; 2745 const Device& device;
2746 const ShaderIR& ir; 2746 const ShaderIR& ir;
2747 const ShaderType stage; 2747 const ShaderType stage;
2748 const Tegra::Shader::Header header; 2748 const Tegra::Shader::Header header;
@@ -3130,7 +3130,7 @@ ShaderEntries GenerateShaderEntries(const VideoCommon::Shader::ShaderIR& ir) {
3130 return entries; 3130 return entries;
3131} 3131}
3132 3132
3133std::vector<u32> Decompile(const VKDevice& device, const VideoCommon::Shader::ShaderIR& ir, 3133std::vector<u32> Decompile(const Device& device, const VideoCommon::Shader::ShaderIR& ir,
3134 ShaderType stage, const VideoCommon::Shader::Registry& registry, 3134 ShaderType stage, const VideoCommon::Shader::Registry& registry,
3135 const Specialization& specialization) { 3135 const Specialization& specialization) {
3136 return SPIRVDecompiler(device, ir, stage, registry, specialization).Assemble(); 3136 return SPIRVDecompiler(device, ir, stage, registry, specialization).Assemble();
diff --git a/src/video_core/renderer_vulkan/vk_shader_decompiler.h b/src/video_core/renderer_vulkan/vk_shader_decompiler.h
index ad91ad5de..26381e444 100644
--- a/src/video_core/renderer_vulkan/vk_shader_decompiler.h
+++ b/src/video_core/renderer_vulkan/vk_shader_decompiler.h
@@ -15,10 +15,8 @@
15#include "video_core/shader/shader_ir.h" 15#include "video_core/shader/shader_ir.h"
16 16
17namespace Vulkan { 17namespace Vulkan {
18class VKDevice;
19}
20 18
21namespace Vulkan { 19class Device;
22 20
23using Maxwell = Tegra::Engines::Maxwell3D::Regs; 21using Maxwell = Tegra::Engines::Maxwell3D::Regs;
24using UniformTexelEntry = VideoCommon::Shader::SamplerEntry; 22using UniformTexelEntry = VideoCommon::Shader::SamplerEntry;
@@ -109,7 +107,7 @@ struct SPIRVShader {
109 107
110ShaderEntries GenerateShaderEntries(const VideoCommon::Shader::ShaderIR& ir); 108ShaderEntries GenerateShaderEntries(const VideoCommon::Shader::ShaderIR& ir);
111 109
112std::vector<u32> Decompile(const VKDevice& device, const VideoCommon::Shader::ShaderIR& ir, 110std::vector<u32> Decompile(const Device& device, const VideoCommon::Shader::ShaderIR& ir,
113 Tegra::Engines::ShaderType stage, 111 Tegra::Engines::ShaderType stage,
114 const VideoCommon::Shader::Registry& registry, 112 const VideoCommon::Shader::Registry& registry,
115 const Specialization& specialization); 113 const Specialization& specialization);
diff --git a/src/video_core/renderer_vulkan/vk_shader_util.cpp b/src/video_core/renderer_vulkan/vk_shader_util.cpp
index 630306077..aaad4f292 100644
--- a/src/video_core/renderer_vulkan/vk_shader_util.cpp
+++ b/src/video_core/renderer_vulkan/vk_shader_util.cpp
@@ -7,13 +7,13 @@
7 7
8#include "common/assert.h" 8#include "common/assert.h"
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "video_core/renderer_vulkan/vk_device.h"
11#include "video_core/renderer_vulkan/vk_shader_util.h" 10#include "video_core/renderer_vulkan/vk_shader_util.h"
11#include "video_core/vulkan_common/vulkan_device.h"
12#include "video_core/vulkan_common/vulkan_wrapper.h" 12#include "video_core/vulkan_common/vulkan_wrapper.h"
13 13
14namespace Vulkan { 14namespace Vulkan {
15 15
16vk::ShaderModule BuildShader(const VKDevice& device, std::span<const u32> code) { 16vk::ShaderModule BuildShader(const Device& device, std::span<const u32> code) {
17 return device.GetLogical().CreateShaderModule({ 17 return device.GetLogical().CreateShaderModule({
18 .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, 18 .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
19 .pNext = nullptr, 19 .pNext = nullptr,
diff --git a/src/video_core/renderer_vulkan/vk_shader_util.h b/src/video_core/renderer_vulkan/vk_shader_util.h
index 98ee5e668..9517cbe84 100644
--- a/src/video_core/renderer_vulkan/vk_shader_util.h
+++ b/src/video_core/renderer_vulkan/vk_shader_util.h
@@ -11,8 +11,8 @@
11 11
12namespace Vulkan { 12namespace Vulkan {
13 13
14class VKDevice; 14class Device;
15 15
16vk::ShaderModule BuildShader(const VKDevice& device, std::span<const u32> code); 16vk::ShaderModule BuildShader(const Device& device, std::span<const u32> code);
17 17
18} // namespace Vulkan 18} // namespace Vulkan
diff --git a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
index e5155e886..1e0b8b922 100644
--- a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
+++ b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
@@ -9,9 +9,9 @@
9 9
10#include "common/bit_util.h" 10#include "common/bit_util.h"
11#include "common/common_types.h" 11#include "common/common_types.h"
12#include "video_core/renderer_vulkan/vk_device.h"
13#include "video_core/renderer_vulkan/vk_scheduler.h" 12#include "video_core/renderer_vulkan/vk_scheduler.h"
14#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h" 13#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h"
14#include "video_core/vulkan_common/vulkan_device.h"
15#include "video_core/vulkan_common/vulkan_wrapper.h" 15#include "video_core/vulkan_common/vulkan_wrapper.h"
16 16
17namespace Vulkan { 17namespace Vulkan {
@@ -19,7 +19,7 @@ namespace Vulkan {
19VKStagingBufferPool::StagingBuffer::StagingBuffer(std::unique_ptr<VKBuffer> buffer_) 19VKStagingBufferPool::StagingBuffer::StagingBuffer(std::unique_ptr<VKBuffer> buffer_)
20 : buffer{std::move(buffer_)} {} 20 : buffer{std::move(buffer_)} {}
21 21
22VKStagingBufferPool::VKStagingBufferPool(const VKDevice& device_, VKMemoryManager& memory_manager_, 22VKStagingBufferPool::VKStagingBufferPool(const Device& device_, VKMemoryManager& memory_manager_,
23 VKScheduler& scheduler_) 23 VKScheduler& scheduler_)
24 : device{device_}, memory_manager{memory_manager_}, scheduler{scheduler_} {} 24 : device{device_}, memory_manager{memory_manager_}, scheduler{scheduler_} {}
25 25
diff --git a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h
index 97ed1118a..90dadcbbe 100644
--- a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h
+++ b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.h
@@ -14,7 +14,7 @@
14 14
15namespace Vulkan { 15namespace Vulkan {
16 16
17class VKDevice; 17class Device;
18class VKScheduler; 18class VKScheduler;
19 19
20struct VKBuffer final { 20struct VKBuffer final {
@@ -24,7 +24,7 @@ struct VKBuffer final {
24 24
25class VKStagingBufferPool final { 25class VKStagingBufferPool final {
26public: 26public:
27 explicit VKStagingBufferPool(const VKDevice& device, VKMemoryManager& memory_manager, 27 explicit VKStagingBufferPool(const Device& device, VKMemoryManager& memory_manager,
28 VKScheduler& scheduler); 28 VKScheduler& scheduler);
29 ~VKStagingBufferPool(); 29 ~VKStagingBufferPool();
30 30
@@ -58,7 +58,7 @@ private:
58 58
59 u64 ReleaseLevel(StagingBuffersCache& cache, std::size_t log2); 59 u64 ReleaseLevel(StagingBuffersCache& cache, std::size_t log2);
60 60
61 const VKDevice& device; 61 const Device& device;
62 VKMemoryManager& memory_manager; 62 VKMemoryManager& memory_manager;
63 VKScheduler& scheduler; 63 VKScheduler& scheduler;
64 64
diff --git a/src/video_core/renderer_vulkan/vk_stream_buffer.cpp b/src/video_core/renderer_vulkan/vk_stream_buffer.cpp
index aae50bf25..a09fe084e 100644
--- a/src/video_core/renderer_vulkan/vk_stream_buffer.cpp
+++ b/src/video_core/renderer_vulkan/vk_stream_buffer.cpp
@@ -10,9 +10,9 @@
10 10
11#include "common/alignment.h" 11#include "common/alignment.h"
12#include "common/assert.h" 12#include "common/assert.h"
13#include "video_core/renderer_vulkan/vk_device.h"
14#include "video_core/renderer_vulkan/vk_scheduler.h" 13#include "video_core/renderer_vulkan/vk_scheduler.h"
15#include "video_core/renderer_vulkan/vk_stream_buffer.h" 14#include "video_core/renderer_vulkan/vk_stream_buffer.h"
15#include "video_core/vulkan_common/vulkan_device.h"
16#include "video_core/vulkan_common/vulkan_wrapper.h" 16#include "video_core/vulkan_common/vulkan_wrapper.h"
17 17
18namespace Vulkan { 18namespace Vulkan {
@@ -60,7 +60,7 @@ u32 GetMemoryType(const VkPhysicalDeviceMemoryProperties& properties,
60 60
61} // Anonymous namespace 61} // Anonymous namespace
62 62
63VKStreamBuffer::VKStreamBuffer(const VKDevice& device_, VKScheduler& scheduler_) 63VKStreamBuffer::VKStreamBuffer(const Device& device_, VKScheduler& scheduler_)
64 : device{device_}, scheduler{scheduler_} { 64 : device{device_}, scheduler{scheduler_} {
65 CreateBuffers(); 65 CreateBuffers();
66 ReserveWatches(current_watches, WATCHES_INITIAL_RESERVE); 66 ReserveWatches(current_watches, WATCHES_INITIAL_RESERVE);
diff --git a/src/video_core/renderer_vulkan/vk_stream_buffer.h b/src/video_core/renderer_vulkan/vk_stream_buffer.h
index aebd68728..2e9c8cb46 100644
--- a/src/video_core/renderer_vulkan/vk_stream_buffer.h
+++ b/src/video_core/renderer_vulkan/vk_stream_buffer.h
@@ -13,13 +13,13 @@
13 13
14namespace Vulkan { 14namespace Vulkan {
15 15
16class VKDevice; 16class Device;
17class VKFenceWatch; 17class VKFenceWatch;
18class VKScheduler; 18class VKScheduler;
19 19
20class VKStreamBuffer final { 20class VKStreamBuffer final {
21public: 21public:
22 explicit VKStreamBuffer(const VKDevice& device, VKScheduler& scheduler); 22 explicit VKStreamBuffer(const Device& device, VKScheduler& scheduler);
23 ~VKStreamBuffer(); 23 ~VKStreamBuffer();
24 24
25 /** 25 /**
@@ -54,7 +54,7 @@ private:
54 54
55 void WaitPendingOperations(u64 requested_upper_bound); 55 void WaitPendingOperations(u64 requested_upper_bound);
56 56
57 const VKDevice& device; ///< Vulkan device manager. 57 const Device& device; ///< Vulkan device manager.
58 VKScheduler& scheduler; ///< Command scheduler. 58 VKScheduler& scheduler; ///< Command scheduler.
59 59
60 vk::Buffer buffer; ///< Mapped buffer. 60 vk::Buffer buffer; ///< Mapped buffer.
diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp
index 458aa4532..725a2a05d 100644
--- a/src/video_core/renderer_vulkan/vk_swapchain.cpp
+++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp
@@ -11,9 +11,9 @@
11#include "common/logging/log.h" 11#include "common/logging/log.h"
12#include "core/core.h" 12#include "core/core.h"
13#include "core/frontend/framebuffer_layout.h" 13#include "core/frontend/framebuffer_layout.h"
14#include "video_core/renderer_vulkan/vk_device.h"
15#include "video_core/renderer_vulkan/vk_scheduler.h" 14#include "video_core/renderer_vulkan/vk_scheduler.h"
16#include "video_core/renderer_vulkan/vk_swapchain.h" 15#include "video_core/renderer_vulkan/vk_swapchain.h"
16#include "video_core/vulkan_common/vulkan_device.h"
17#include "video_core/vulkan_common/vulkan_wrapper.h" 17#include "video_core/vulkan_common/vulkan_wrapper.h"
18 18
19namespace Vulkan { 19namespace Vulkan {
@@ -56,7 +56,7 @@ VkExtent2D ChooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities, u32 wi
56 56
57} // Anonymous namespace 57} // Anonymous namespace
58 58
59VKSwapchain::VKSwapchain(VkSurfaceKHR surface_, const VKDevice& device_, VKScheduler& scheduler_) 59VKSwapchain::VKSwapchain(VkSurfaceKHR surface_, const Device& device_, VKScheduler& scheduler_)
60 : surface{surface_}, device{device_}, scheduler{scheduler_} {} 60 : surface{surface_}, device{device_}, scheduler{scheduler_} {}
61 61
62VKSwapchain::~VKSwapchain() = default; 62VKSwapchain::~VKSwapchain() = default;
diff --git a/src/video_core/renderer_vulkan/vk_swapchain.h b/src/video_core/renderer_vulkan/vk_swapchain.h
index 25eb20832..2eadd62b3 100644
--- a/src/video_core/renderer_vulkan/vk_swapchain.h
+++ b/src/video_core/renderer_vulkan/vk_swapchain.h
@@ -15,12 +15,12 @@ struct FramebufferLayout;
15 15
16namespace Vulkan { 16namespace Vulkan {
17 17
18class VKDevice; 18class Device;
19class VKScheduler; 19class VKScheduler;
20 20
21class VKSwapchain { 21class VKSwapchain {
22public: 22public:
23 explicit VKSwapchain(VkSurfaceKHR surface, const VKDevice& device, VKScheduler& scheduler); 23 explicit VKSwapchain(VkSurfaceKHR surface, const Device& device, VKScheduler& scheduler);
24 ~VKSwapchain(); 24 ~VKSwapchain();
25 25
26 /// Creates (or recreates) the swapchain with a given size. 26 /// Creates (or recreates) the swapchain with a given size.
@@ -73,7 +73,7 @@ private:
73 void Destroy(); 73 void Destroy();
74 74
75 const VkSurfaceKHR surface; 75 const VkSurfaceKHR surface;
76 const VKDevice& device; 76 const Device& device;
77 VKScheduler& scheduler; 77 VKScheduler& scheduler;
78 78
79 vk::SwapchainKHR swapchain; 79 vk::SwapchainKHR swapchain;
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
index e04dd23ef..bd11de012 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
@@ -10,10 +10,12 @@
10#include "video_core/engines/fermi_2d.h" 10#include "video_core/engines/fermi_2d.h"
11#include "video_core/renderer_vulkan/blit_image.h" 11#include "video_core/renderer_vulkan/blit_image.h"
12#include "video_core/renderer_vulkan/maxwell_to_vk.h" 12#include "video_core/renderer_vulkan/maxwell_to_vk.h"
13#include "video_core/renderer_vulkan/vk_device.h" 13#include "video_core/renderer_vulkan/vk_memory_manager.h"
14#include "video_core/renderer_vulkan/vk_rasterizer.h"
14#include "video_core/renderer_vulkan/vk_scheduler.h" 15#include "video_core/renderer_vulkan/vk_scheduler.h"
15#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h" 16#include "video_core/renderer_vulkan/vk_staging_buffer_pool.h"
16#include "video_core/renderer_vulkan/vk_texture_cache.h" 17#include "video_core/renderer_vulkan/vk_texture_cache.h"
18#include "video_core/vulkan_common/vulkan_device.h"
17#include "video_core/vulkan_common/vulkan_wrapper.h" 19#include "video_core/vulkan_common/vulkan_wrapper.h"
18 20
19namespace Vulkan { 21namespace Vulkan {
@@ -93,7 +95,7 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
93 } 95 }
94} 96}
95 97
96[[nodiscard]] VkImageCreateInfo MakeImageCreateInfo(const VKDevice& device, const ImageInfo& info) { 98[[nodiscard]] VkImageCreateInfo MakeImageCreateInfo(const Device& device, const ImageInfo& info) {
97 const auto format_info = MaxwellToVK::SurfaceFormat(device, FormatType::Optimal, info.format); 99 const auto format_info = MaxwellToVK::SurfaceFormat(device, FormatType::Optimal, info.format);
98 VkImageCreateFlags flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; 100 VkImageCreateFlags flags = VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
99 if (info.type == ImageType::e2D && info.resources.layers >= 6 && 101 if (info.type == ImageType::e2D && info.resources.layers >= 6 &&
@@ -146,14 +148,14 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
146 }; 148 };
147} 149}
148 150
149[[nodiscard]] vk::Image MakeImage(const VKDevice& device, const ImageInfo& info) { 151[[nodiscard]] vk::Image MakeImage(const Device& device, const ImageInfo& info) {
150 if (info.type == ImageType::Buffer) { 152 if (info.type == ImageType::Buffer) {
151 return vk::Image{}; 153 return vk::Image{};
152 } 154 }
153 return device.GetLogical().CreateImage(MakeImageCreateInfo(device, info)); 155 return device.GetLogical().CreateImage(MakeImageCreateInfo(device, info));
154} 156}
155 157
156[[nodiscard]] vk::Buffer MakeBuffer(const VKDevice& device, const ImageInfo& info) { 158[[nodiscard]] vk::Buffer MakeBuffer(const Device& device, const ImageInfo& info) {
157 if (info.type != ImageType::Buffer) { 159 if (info.type != ImageType::Buffer) {
158 return vk::Buffer{}; 160 return vk::Buffer{};
159 } 161 }
@@ -205,7 +207,7 @@ constexpr VkBorderColor ConvertBorderColor(const std::array<float, 4>& color) {
205 } 207 }
206} 208}
207 209
208[[nodiscard]] VkAttachmentDescription AttachmentDescription(const VKDevice& device, 210[[nodiscard]] VkAttachmentDescription AttachmentDescription(const Device& device,
209 const ImageView* image_view) { 211 const ImageView* image_view) {
210 const auto pixel_format = image_view->format; 212 const auto pixel_format = image_view->format;
211 return VkAttachmentDescription{ 213 return VkAttachmentDescription{
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.h b/src/video_core/renderer_vulkan/vk_texture_cache.h
index e5599de5e..92a7aad8b 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.h
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.h
@@ -19,11 +19,11 @@ using VideoCommon::Offset2D;
19using VideoCommon::RenderTargets; 19using VideoCommon::RenderTargets;
20using VideoCore::Surface::PixelFormat; 20using VideoCore::Surface::PixelFormat;
21 21
22class VKDevice;
23class VKScheduler; 22class VKScheduler;
24class VKStagingBufferPool; 23class VKStagingBufferPool;
25 24
26class BlitImageHelper; 25class BlitImageHelper;
26class Device;
27class Image; 27class Image;
28class ImageView; 28class ImageView;
29class Framebuffer; 29class Framebuffer;
@@ -68,7 +68,7 @@ struct ImageBufferMap {
68}; 68};
69 69
70struct TextureCacheRuntime { 70struct TextureCacheRuntime {
71 const VKDevice& device; 71 const Device& device;
72 VKScheduler& scheduler; 72 VKScheduler& scheduler;
73 VKMemoryManager& memory_manager; 73 VKMemoryManager& memory_manager;
74 VKStagingBufferPool& staging_buffer_pool; 74 VKStagingBufferPool& staging_buffer_pool;
@@ -182,7 +182,7 @@ public:
182private: 182private:
183 [[nodiscard]] vk::ImageView MakeDepthStencilView(VkImageAspectFlags aspect_mask); 183 [[nodiscard]] vk::ImageView MakeDepthStencilView(VkImageAspectFlags aspect_mask);
184 184
185 const VKDevice* device = nullptr; 185 const Device* device = nullptr;
186 std::array<vk::ImageView, VideoCommon::NUM_IMAGE_VIEW_TYPES> image_views; 186 std::array<vk::ImageView, VideoCommon::NUM_IMAGE_VIEW_TYPES> image_views;
187 vk::ImageView depth_view; 187 vk::ImageView depth_view;
188 vk::ImageView stencil_view; 188 vk::ImageView stencil_view;
diff --git a/src/video_core/renderer_vulkan/vk_update_descriptor.cpp b/src/video_core/renderer_vulkan/vk_update_descriptor.cpp
index c0603ac22..f99273c6a 100644
--- a/src/video_core/renderer_vulkan/vk_update_descriptor.cpp
+++ b/src/video_core/renderer_vulkan/vk_update_descriptor.cpp
@@ -7,14 +7,14 @@
7 7
8#include "common/assert.h" 8#include "common/assert.h"
9#include "common/logging/log.h" 9#include "common/logging/log.h"
10#include "video_core/renderer_vulkan/vk_device.h"
11#include "video_core/renderer_vulkan/vk_scheduler.h" 10#include "video_core/renderer_vulkan/vk_scheduler.h"
12#include "video_core/renderer_vulkan/vk_update_descriptor.h" 11#include "video_core/renderer_vulkan/vk_update_descriptor.h"
12#include "video_core/vulkan_common/vulkan_device.h"
13#include "video_core/vulkan_common/vulkan_wrapper.h" 13#include "video_core/vulkan_common/vulkan_wrapper.h"
14 14
15namespace Vulkan { 15namespace Vulkan {
16 16
17VKUpdateDescriptorQueue::VKUpdateDescriptorQueue(const VKDevice& device_, VKScheduler& scheduler_) 17VKUpdateDescriptorQueue::VKUpdateDescriptorQueue(const Device& device_, VKScheduler& scheduler_)
18 : device{device_}, scheduler{scheduler_} {} 18 : device{device_}, scheduler{scheduler_} {}
19 19
20VKUpdateDescriptorQueue::~VKUpdateDescriptorQueue() = default; 20VKUpdateDescriptorQueue::~VKUpdateDescriptorQueue() = default;
diff --git a/src/video_core/renderer_vulkan/vk_update_descriptor.h b/src/video_core/renderer_vulkan/vk_update_descriptor.h
index d0ae49010..e214f7195 100644
--- a/src/video_core/renderer_vulkan/vk_update_descriptor.h
+++ b/src/video_core/renderer_vulkan/vk_update_descriptor.h
@@ -12,7 +12,7 @@
12 12
13namespace Vulkan { 13namespace Vulkan {
14 14
15class VKDevice; 15class Device;
16class VKScheduler; 16class VKScheduler;
17 17
18struct DescriptorUpdateEntry { 18struct DescriptorUpdateEntry {
@@ -31,7 +31,7 @@ struct DescriptorUpdateEntry {
31 31
32class VKUpdateDescriptorQueue final { 32class VKUpdateDescriptorQueue final {
33public: 33public:
34 explicit VKUpdateDescriptorQueue(const VKDevice& device_, VKScheduler& scheduler_); 34 explicit VKUpdateDescriptorQueue(const Device& device_, VKScheduler& scheduler_);
35 ~VKUpdateDescriptorQueue(); 35 ~VKUpdateDescriptorQueue();
36 36
37 void TickFrame(); 37 void TickFrame();
@@ -69,7 +69,7 @@ public:
69 } 69 }
70 70
71private: 71private:
72 const VKDevice& device; 72 const Device& device;
73 VKScheduler& scheduler; 73 VKScheduler& scheduler;
74 74
75 const DescriptorUpdateEntry* upload_start = nullptr; 75 const DescriptorUpdateEntry* upload_start = nullptr;
diff --git a/src/video_core/shader/async_shaders.cpp b/src/video_core/shader/async_shaders.cpp
index 09f93463b..9707136e9 100644
--- a/src/video_core/shader/async_shaders.cpp
+++ b/src/video_core/shader/async_shaders.cpp
@@ -134,7 +134,7 @@ void AsyncShaders::QueueOpenGLShader(const OpenGL::Device& device,
134} 134}
135 135
136void AsyncShaders::QueueVulkanShader(Vulkan::VKPipelineCache* pp_cache, 136void AsyncShaders::QueueVulkanShader(Vulkan::VKPipelineCache* pp_cache,
137 const Vulkan::VKDevice& device, Vulkan::VKScheduler& scheduler, 137 const Vulkan::Device& device, Vulkan::VKScheduler& scheduler,
138 Vulkan::VKDescriptorPool& descriptor_pool, 138 Vulkan::VKDescriptorPool& descriptor_pool,
139 Vulkan::VKUpdateDescriptorQueue& update_descriptor_queue, 139 Vulkan::VKUpdateDescriptorQueue& update_descriptor_queue,
140 std::vector<VkDescriptorSetLayoutBinding> bindings, 140 std::vector<VkDescriptorSetLayoutBinding> bindings,
diff --git a/src/video_core/shader/async_shaders.h b/src/video_core/shader/async_shaders.h
index 004e214a8..0dbb1a31f 100644
--- a/src/video_core/shader/async_shaders.h
+++ b/src/video_core/shader/async_shaders.h
@@ -24,9 +24,9 @@
24#include "video_core/renderer_opengl/gl_device.h" 24#include "video_core/renderer_opengl/gl_device.h"
25#include "video_core/renderer_opengl/gl_resource_manager.h" 25#include "video_core/renderer_opengl/gl_resource_manager.h"
26#include "video_core/renderer_opengl/gl_shader_decompiler.h" 26#include "video_core/renderer_opengl/gl_shader_decompiler.h"
27#include "video_core/renderer_vulkan/vk_device.h"
28#include "video_core/renderer_vulkan/vk_pipeline_cache.h" 27#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
29#include "video_core/renderer_vulkan/vk_scheduler.h" 28#include "video_core/renderer_vulkan/vk_scheduler.h"
29#include "video_core/vulkan_common/vulkan_device.h"
30 30
31namespace Core::Frontend { 31namespace Core::Frontend {
32class EmuWindow; 32class EmuWindow;
@@ -94,7 +94,7 @@ public:
94 CompilerSettings compiler_settings, const Registry& registry, 94 CompilerSettings compiler_settings, const Registry& registry,
95 VAddr cpu_addr); 95 VAddr cpu_addr);
96 96
97 void QueueVulkanShader(Vulkan::VKPipelineCache* pp_cache, const Vulkan::VKDevice& device, 97 void QueueVulkanShader(Vulkan::VKPipelineCache* pp_cache, const Vulkan::Device& device,
98 Vulkan::VKScheduler& scheduler, 98 Vulkan::VKScheduler& scheduler,
99 Vulkan::VKDescriptorPool& descriptor_pool, 99 Vulkan::VKDescriptorPool& descriptor_pool,
100 Vulkan::VKUpdateDescriptorQueue& update_descriptor_queue, 100 Vulkan::VKUpdateDescriptorQueue& update_descriptor_queue,
@@ -123,7 +123,7 @@ private:
123 123
124 // For Vulkan 124 // For Vulkan
125 Vulkan::VKPipelineCache* pp_cache; 125 Vulkan::VKPipelineCache* pp_cache;
126 const Vulkan::VKDevice* vk_device; 126 const Vulkan::Device* vk_device;
127 Vulkan::VKScheduler* scheduler; 127 Vulkan::VKScheduler* scheduler;
128 Vulkan::VKDescriptorPool* descriptor_pool; 128 Vulkan::VKDescriptorPool* descriptor_pool;
129 Vulkan::VKUpdateDescriptorQueue* update_descriptor_queue; 129 Vulkan::VKUpdateDescriptorQueue* update_descriptor_queue;
diff --git a/src/video_core/renderer_vulkan/nsight_aftermath_tracker.cpp b/src/video_core/vulkan_common/nsight_aftermath_tracker.cpp
index 5b01020ec..8d10ac29e 100644
--- a/src/video_core/renderer_vulkan/nsight_aftermath_tracker.cpp
+++ b/src/video_core/vulkan_common/nsight_aftermath_tracker.cpp
@@ -32,20 +32,11 @@ namespace Vulkan {
32 32
33static constexpr char AFTERMATH_LIB_NAME[] = "GFSDK_Aftermath_Lib.x64.dll"; 33static constexpr char AFTERMATH_LIB_NAME[] = "GFSDK_Aftermath_Lib.x64.dll";
34 34
35NsightAftermathTracker::NsightAftermathTracker() = default; 35NsightAftermathTracker::NsightAftermathTracker() {
36
37NsightAftermathTracker::~NsightAftermathTracker() {
38 if (initialized) {
39 (void)GFSDK_Aftermath_DisableGpuCrashDumps();
40 }
41}
42
43bool NsightAftermathTracker::Initialize() {
44 if (!dl.Open(AFTERMATH_LIB_NAME)) { 36 if (!dl.Open(AFTERMATH_LIB_NAME)) {
45 LOG_ERROR(Render_Vulkan, "Failed to load Nsight Aftermath DLL"); 37 LOG_ERROR(Render_Vulkan, "Failed to load Nsight Aftermath DLL");
46 return false; 38 return;
47 } 39 }
48
49 if (!dl.GetSymbol("GFSDK_Aftermath_DisableGpuCrashDumps", 40 if (!dl.GetSymbol("GFSDK_Aftermath_DisableGpuCrashDumps",
50 &GFSDK_Aftermath_DisableGpuCrashDumps) || 41 &GFSDK_Aftermath_DisableGpuCrashDumps) ||
51 !dl.GetSymbol("GFSDK_Aftermath_EnableGpuCrashDumps", 42 !dl.GetSymbol("GFSDK_Aftermath_EnableGpuCrashDumps",
@@ -64,27 +55,28 @@ bool NsightAftermathTracker::Initialize() {
64 LOG_ERROR(Render_Vulkan, "Failed to load Nsight Aftermath function pointers"); 55 LOG_ERROR(Render_Vulkan, "Failed to load Nsight Aftermath function pointers");
65 return false; 56 return false;
66 } 57 }
67
68 dump_dir = Common::FS::GetUserPath(Common::FS::UserPath::LogDir) + "gpucrash"; 58 dump_dir = Common::FS::GetUserPath(Common::FS::UserPath::LogDir) + "gpucrash";
69 59
70 (void)Common::FS::DeleteDirRecursively(dump_dir); 60 void(Common::FS::DeleteDirRecursively(dump_dir));
71 if (!Common::FS::CreateDir(dump_dir)) { 61 if (!Common::FS::CreateDir(dump_dir)) {
72 LOG_ERROR(Render_Vulkan, "Failed to create Nsight Aftermath dump directory"); 62 LOG_ERROR(Render_Vulkan, "Failed to create Nsight Aftermath dump directory");
73 return false; 63 return;
74 } 64 }
75
76 if (!GFSDK_Aftermath_SUCCEED(GFSDK_Aftermath_EnableGpuCrashDumps( 65 if (!GFSDK_Aftermath_SUCCEED(GFSDK_Aftermath_EnableGpuCrashDumps(
77 GFSDK_Aftermath_Version_API, GFSDK_Aftermath_GpuCrashDumpWatchedApiFlags_Vulkan, 66 GFSDK_Aftermath_Version_API, GFSDK_Aftermath_GpuCrashDumpWatchedApiFlags_Vulkan,
78 GFSDK_Aftermath_GpuCrashDumpFeatureFlags_Default, GpuCrashDumpCallback, 67 GFSDK_Aftermath_GpuCrashDumpFeatureFlags_Default, GpuCrashDumpCallback,
79 ShaderDebugInfoCallback, CrashDumpDescriptionCallback, this))) { 68 ShaderDebugInfoCallback, CrashDumpDescriptionCallback, this))) {
80 LOG_ERROR(Render_Vulkan, "GFSDK_Aftermath_EnableGpuCrashDumps failed"); 69 LOG_ERROR(Render_Vulkan, "GFSDK_Aftermath_EnableGpuCrashDumps failed");
81 return false; 70 return;
82 } 71 }
83
84 LOG_INFO(Render_Vulkan, "Nsight Aftermath dump directory is \"{}\"", dump_dir); 72 LOG_INFO(Render_Vulkan, "Nsight Aftermath dump directory is \"{}\"", dump_dir);
85
86 initialized = true; 73 initialized = true;
87 return true; 74}
75
76NsightAftermathTracker::~NsightAftermathTracker() {
77 if (initialized) {
78 (void)GFSDK_Aftermath_DisableGpuCrashDumps();
79 }
88} 80}
89 81
90void NsightAftermathTracker::SaveShader(const std::vector<u32>& spirv) const { 82void NsightAftermathTracker::SaveShader(const std::vector<u32>& spirv) const {
diff --git a/src/video_core/renderer_vulkan/nsight_aftermath_tracker.h b/src/video_core/vulkan_common/nsight_aftermath_tracker.h
index afe7ae99e..cee3847fb 100644
--- a/src/video_core/renderer_vulkan/nsight_aftermath_tracker.h
+++ b/src/video_core/vulkan_common/nsight_aftermath_tracker.h
@@ -34,8 +34,6 @@ public:
34 NsightAftermathTracker(NsightAftermathTracker&&) = delete; 34 NsightAftermathTracker(NsightAftermathTracker&&) = delete;
35 NsightAftermathTracker& operator=(NsightAftermathTracker&&) = delete; 35 NsightAftermathTracker& operator=(NsightAftermathTracker&&) = delete;
36 36
37 bool Initialize();
38
39 void SaveShader(const std::vector<u32>& spirv) const; 37 void SaveShader(const std::vector<u32>& spirv) const;
40 38
41private: 39private:
@@ -78,9 +76,6 @@ private:
78#ifndef HAS_NSIGHT_AFTERMATH 76#ifndef HAS_NSIGHT_AFTERMATH
79inline NsightAftermathTracker::NsightAftermathTracker() = default; 77inline NsightAftermathTracker::NsightAftermathTracker() = default;
80inline NsightAftermathTracker::~NsightAftermathTracker() = default; 78inline NsightAftermathTracker::~NsightAftermathTracker() = default;
81inline bool NsightAftermathTracker::Initialize() {
82 return false;
83}
84inline void NsightAftermathTracker::SaveShader(const std::vector<u32>&) const {} 79inline void NsightAftermathTracker::SaveShader(const std::vector<u32>&) const {}
85#endif 80#endif
86 81
diff --git a/src/video_core/renderer_vulkan/vk_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp
index 9008530d5..75173324e 100644
--- a/src/video_core/renderer_vulkan/vk_device.cpp
+++ b/src/video_core/vulkan_common/vulkan_device.cpp
@@ -13,7 +13,8 @@
13 13
14#include "common/assert.h" 14#include "common/assert.h"
15#include "core/settings.h" 15#include "core/settings.h"
16#include "video_core/renderer_vulkan/vk_device.h" 16#include "video_core/vulkan_common/nsight_aftermath_tracker.h"
17#include "video_core/vulkan_common/vulkan_device.h"
17#include "video_core/vulkan_common/vulkan_wrapper.h" 18#include "video_core/vulkan_common/vulkan_wrapper.h"
18 19
19namespace Vulkan { 20namespace Vulkan {
@@ -206,8 +207,8 @@ std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties(
206 207
207} // Anonymous namespace 208} // Anonymous namespace
208 209
209VKDevice::VKDevice(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR surface, 210Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR surface,
210 const vk::InstanceDispatch& dld_) 211 const vk::InstanceDispatch& dld_)
211 : instance{instance_}, dld{dld_}, physical{physical_}, properties{physical.GetProperties()}, 212 : instance{instance_}, dld{dld_}, physical{physical_}, properties{physical.GetProperties()},
212 format_properties{GetFormatProperties(physical, dld)} { 213 format_properties{GetFormatProperties(physical, dld)} {
213 CheckSuitability(); 214 CheckSuitability();
@@ -412,7 +413,7 @@ VKDevice::VKDevice(VkInstance instance_, vk::PhysicalDevice physical_, VkSurface
412 413
413 VkDeviceDiagnosticsConfigCreateInfoNV diagnostics_nv; 414 VkDeviceDiagnosticsConfigCreateInfoNV diagnostics_nv;
414 if (nv_device_diagnostics_config) { 415 if (nv_device_diagnostics_config) {
415 nsight_aftermath_tracker.Initialize(); 416 nsight_aftermath_tracker = std::make_unique<NsightAftermathTracker>();
416 417
417 diagnostics_nv = { 418 diagnostics_nv = {
418 .sType = VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV, 419 .sType = VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV,
@@ -449,10 +450,10 @@ VKDevice::VKDevice(VkInstance instance_, vk::PhysicalDevice physical_, VkSurface
449 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue(); 450 use_asynchronous_shaders = Settings::values.use_asynchronous_shaders.GetValue();
450} 451}
451 452
452VKDevice::~VKDevice() = default; 453Device::~Device() = default;
453 454
454VkFormat VKDevice::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage, 455VkFormat Device::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
455 FormatType format_type) const { 456 FormatType format_type) const {
456 if (IsFormatSupported(wanted_format, wanted_usage, format_type)) { 457 if (IsFormatSupported(wanted_format, wanted_usage, format_type)) {
457 return wanted_format; 458 return wanted_format;
458 } 459 }
@@ -483,18 +484,20 @@ VkFormat VKDevice::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFla
483 return wanted_format; 484 return wanted_format;
484} 485}
485 486
486void VKDevice::ReportLoss() const { 487void Device::ReportLoss() const {
487 LOG_CRITICAL(Render_Vulkan, "Device loss occurred!"); 488 LOG_CRITICAL(Render_Vulkan, "Device loss occured!");
488 489
489 // Wait for the log to flush and for Nsight Aftermath to dump the results 490 // Wait for the log to flush and for Nsight Aftermath to dump the results
490 std::this_thread::sleep_for(std::chrono::seconds{15}); 491 std::this_thread::sleep_for(std::chrono::seconds{15});
491} 492}
492 493
493void VKDevice::SaveShader(const std::vector<u32>& spirv) const { 494void Device::SaveShader(const std::vector<u32>& spirv) const {
494 nsight_aftermath_tracker.SaveShader(spirv); 495 if (nsight_aftermath_tracker) {
496 nsight_aftermath_tracker->SaveShader(spirv);
497 }
495} 498}
496 499
497bool VKDevice::IsOptimalAstcSupported(const VkPhysicalDeviceFeatures& features) const { 500bool Device::IsOptimalAstcSupported(const VkPhysicalDeviceFeatures& features) const {
498 // Disable for now to avoid converting ASTC twice. 501 // Disable for now to avoid converting ASTC twice.
499 static constexpr std::array astc_formats = { 502 static constexpr std::array astc_formats = {
500 VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SRGB_BLOCK, 503 VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
@@ -528,7 +531,7 @@ bool VKDevice::IsOptimalAstcSupported(const VkPhysicalDeviceFeatures& features)
528 return true; 531 return true;
529} 532}
530 533
531bool VKDevice::TestDepthStencilBlits() const { 534bool Device::TestDepthStencilBlits() const {
532 static constexpr VkFormatFeatureFlags required_features = 535 static constexpr VkFormatFeatureFlags required_features =
533 VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT; 536 VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT;
534 const auto test_features = [](VkFormatProperties props) { 537 const auto test_features = [](VkFormatProperties props) {
@@ -538,8 +541,8 @@ bool VKDevice::TestDepthStencilBlits() const {
538 test_features(format_properties.at(VK_FORMAT_D24_UNORM_S8_UINT)); 541 test_features(format_properties.at(VK_FORMAT_D24_UNORM_S8_UINT));
539} 542}
540 543
541bool VKDevice::IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage, 544bool Device::IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage,
542 FormatType format_type) const { 545 FormatType format_type) const {
543 const auto it = format_properties.find(wanted_format); 546 const auto it = format_properties.find(wanted_format);
544 if (it == format_properties.end()) { 547 if (it == format_properties.end()) {
545 UNIMPLEMENTED_MSG("Unimplemented format query={}", wanted_format); 548 UNIMPLEMENTED_MSG("Unimplemented format query={}", wanted_format);
@@ -549,7 +552,7 @@ bool VKDevice::IsFormatSupported(VkFormat wanted_format, VkFormatFeatureFlags wa
549 return (supported_usage & wanted_usage) == wanted_usage; 552 return (supported_usage & wanted_usage) == wanted_usage;
550} 553}
551 554
552void VKDevice::CheckSuitability() const { 555void Device::CheckSuitability() const {
553 std::bitset<REQUIRED_EXTENSIONS.size()> available_extensions; 556 std::bitset<REQUIRED_EXTENSIONS.size()> available_extensions;
554 for (const VkExtensionProperties& property : physical.EnumerateDeviceExtensionProperties()) { 557 for (const VkExtensionProperties& property : physical.EnumerateDeviceExtensionProperties()) {
555 for (std::size_t i = 0; i < REQUIRED_EXTENSIONS.size(); ++i) { 558 for (std::size_t i = 0; i < REQUIRED_EXTENSIONS.size(); ++i) {
@@ -614,7 +617,7 @@ void VKDevice::CheckSuitability() const {
614 } 617 }
615} 618}
616 619
617std::vector<const char*> VKDevice::LoadExtensions() { 620std::vector<const char*> Device::LoadExtensions() {
618 std::vector<const char*> extensions; 621 std::vector<const char*> extensions;
619 extensions.reserve(7 + REQUIRED_EXTENSIONS.size()); 622 extensions.reserve(7 + REQUIRED_EXTENSIONS.size());
620 extensions.insert(extensions.begin(), REQUIRED_EXTENSIONS.begin(), REQUIRED_EXTENSIONS.end()); 623 extensions.insert(extensions.begin(), REQUIRED_EXTENSIONS.begin(), REQUIRED_EXTENSIONS.end());
@@ -767,12 +770,12 @@ std::vector<const char*> VKDevice::LoadExtensions() {
767 return extensions; 770 return extensions;
768} 771}
769 772
770void VKDevice::SetupFamilies(VkSurfaceKHR surface) { 773void Device::SetupFamilies(VkSurfaceKHR surface) {
771 const std::vector queue_family_properties = physical.GetQueueFamilyProperties(); 774 const std::vector queue_family_properties = physical.GetQueueFamilyProperties();
772 std::optional<u32> graphics; 775 std::optional<u32> graphics;
773 std::optional<u32> present; 776 std::optional<u32> present;
774 for (u32 index = 0; index < static_cast<u32>(queue_family_properties.size()); ++index) { 777 for (u32 index = 0; index < static_cast<u32>(queue_family_properties.size()); ++index) {
775 if (graphics && present) { 778 if (graphics && (present || !surface)) {
776 break; 779 break;
777 } 780 }
778 const VkQueueFamilyProperties& queue_family = queue_family_properties[index]; 781 const VkQueueFamilyProperties& queue_family = queue_family_properties[index];
@@ -782,7 +785,7 @@ void VKDevice::SetupFamilies(VkSurfaceKHR surface) {
782 if (queue_family.queueFlags & VK_QUEUE_GRAPHICS_BIT) { 785 if (queue_family.queueFlags & VK_QUEUE_GRAPHICS_BIT) {
783 graphics = index; 786 graphics = index;
784 } 787 }
785 if (physical.GetSurfaceSupportKHR(index, surface)) { 788 if (surface && physical.GetSurfaceSupportKHR(index, surface)) {
786 present = index; 789 present = index;
787 } 790 }
788 } 791 }
@@ -790,7 +793,7 @@ void VKDevice::SetupFamilies(VkSurfaceKHR surface) {
790 LOG_ERROR(Render_Vulkan, "Device lacks a graphics queue"); 793 LOG_ERROR(Render_Vulkan, "Device lacks a graphics queue");
791 throw vk::Exception(VK_ERROR_FEATURE_NOT_PRESENT); 794 throw vk::Exception(VK_ERROR_FEATURE_NOT_PRESENT);
792 } 795 }
793 if (!present) { 796 if (surface && !present) {
794 LOG_ERROR(Render_Vulkan, "Device lacks a present queue"); 797 LOG_ERROR(Render_Vulkan, "Device lacks a present queue");
795 throw vk::Exception(VK_ERROR_FEATURE_NOT_PRESENT); 798 throw vk::Exception(VK_ERROR_FEATURE_NOT_PRESENT);
796 } 799 }
@@ -798,14 +801,14 @@ void VKDevice::SetupFamilies(VkSurfaceKHR surface) {
798 present_family = *present; 801 present_family = *present;
799} 802}
800 803
801void VKDevice::SetupFeatures() { 804void Device::SetupFeatures() {
802 const auto supported_features{physical.GetFeatures()}; 805 const auto supported_features{physical.GetFeatures()};
803 is_formatless_image_load_supported = supported_features.shaderStorageImageReadWithoutFormat; 806 is_formatless_image_load_supported = supported_features.shaderStorageImageReadWithoutFormat;
804 is_blit_depth_stencil_supported = TestDepthStencilBlits(); 807 is_blit_depth_stencil_supported = TestDepthStencilBlits();
805 is_optimal_astc_supported = IsOptimalAstcSupported(supported_features); 808 is_optimal_astc_supported = IsOptimalAstcSupported(supported_features);
806} 809}
807 810
808void VKDevice::CollectTelemetryParameters() { 811void Device::CollectTelemetryParameters() {
809 VkPhysicalDeviceDriverPropertiesKHR driver{ 812 VkPhysicalDeviceDriverPropertiesKHR driver{
810 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR, 813 .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR,
811 .pNext = nullptr, 814 .pNext = nullptr,
@@ -832,7 +835,7 @@ void VKDevice::CollectTelemetryParameters() {
832 } 835 }
833} 836}
834 837
835void VKDevice::CollectToolingInfo() { 838void Device::CollectToolingInfo() {
836 if (!ext_tooling_info) { 839 if (!ext_tooling_info) {
837 return; 840 return;
838 } 841 }
@@ -858,7 +861,7 @@ void VKDevice::CollectToolingInfo() {
858 } 861 }
859} 862}
860 863
861std::vector<VkDeviceQueueCreateInfo> VKDevice::GetDeviceQueueCreateInfos() const { 864std::vector<VkDeviceQueueCreateInfo> Device::GetDeviceQueueCreateInfos() const {
862 static constexpr float QUEUE_PRIORITY = 1.0f; 865 static constexpr float QUEUE_PRIORITY = 1.0f;
863 866
864 std::unordered_set<u32> unique_queue_families{graphics_family, present_family}; 867 std::unordered_set<u32> unique_queue_families{graphics_family, present_family};
diff --git a/src/video_core/renderer_vulkan/vk_device.h b/src/video_core/vulkan_common/vulkan_device.h
index 146acbe24..a973c3ce4 100644
--- a/src/video_core/renderer_vulkan/vk_device.h
+++ b/src/video_core/vulkan_common/vulkan_device.h
@@ -10,11 +10,12 @@
10#include <vector> 10#include <vector>
11 11
12#include "common/common_types.h" 12#include "common/common_types.h"
13#include "video_core/renderer_vulkan/nsight_aftermath_tracker.h"
14#include "video_core/vulkan_common/vulkan_wrapper.h" 13#include "video_core/vulkan_common/vulkan_wrapper.h"
15 14
16namespace Vulkan { 15namespace Vulkan {
17 16
17class NsightAftermathTracker;
18
18/// Format usage descriptor. 19/// Format usage descriptor.
19enum class FormatType { Linear, Optimal, Buffer }; 20enum class FormatType { Linear, Optimal, Buffer };
20 21
@@ -22,11 +23,11 @@ enum class FormatType { Linear, Optimal, Buffer };
22const u32 GuestWarpSize = 32; 23const u32 GuestWarpSize = 32;
23 24
24/// Handles data specific to a physical device. 25/// Handles data specific to a physical device.
25class VKDevice final { 26class Device final {
26public: 27public:
27 explicit VKDevice(VkInstance instance, vk::PhysicalDevice physical, VkSurfaceKHR surface, 28 explicit Device(VkInstance instance, vk::PhysicalDevice physical, VkSurfaceKHR surface,
28 const vk::InstanceDispatch& dld); 29 const vk::InstanceDispatch& dld);
29 ~VKDevice(); 30 ~Device();
30 31
31 /** 32 /**
32 * Returns a format supported by the device for the passed requeriments. 33 * Returns a format supported by the device for the passed requeriments.
@@ -300,7 +301,7 @@ private:
300 std::unordered_map<VkFormat, VkFormatProperties> format_properties; 301 std::unordered_map<VkFormat, VkFormatProperties> format_properties;
301 302
302 /// Nsight Aftermath GPU crash tracker 303 /// Nsight Aftermath GPU crash tracker
303 NsightAftermathTracker nsight_aftermath_tracker; 304 std::unique_ptr<NsightAftermathTracker> nsight_aftermath_tracker;
304}; 305};
305 306
306} // namespace Vulkan 307} // namespace Vulkan
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index e124836b5..85ee2577d 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -397,7 +397,7 @@ void GRenderWindow::mousePressEvent(QMouseEvent* event) {
397 this->TouchPressed(x, y); 397 this->TouchPressed(x, y);
398 } 398 }
399 399
400 QWidget::mousePressEvent(event); 400 emit MouseActivity();
401} 401}
402 402
403void GRenderWindow::mouseMoveEvent(QMouseEvent* event) { 403void GRenderWindow::mouseMoveEvent(QMouseEvent* event) {
@@ -411,7 +411,7 @@ void GRenderWindow::mouseMoveEvent(QMouseEvent* event) {
411 input_subsystem->GetMouse()->MouseMove(x, y); 411 input_subsystem->GetMouse()->MouseMove(x, y);
412 this->TouchMoved(x, y); 412 this->TouchMoved(x, y);
413 413
414 QWidget::mouseMoveEvent(event); 414 emit MouseActivity();
415} 415}
416 416
417void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { 417void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) {
@@ -688,3 +688,10 @@ void GRenderWindow::showEvent(QShowEvent* event) {
688 connect(windowHandle(), &QWindow::screenChanged, this, &GRenderWindow::OnFramebufferSizeChanged, 688 connect(windowHandle(), &QWindow::screenChanged, this, &GRenderWindow::OnFramebufferSizeChanged,
689 Qt::UniqueConnection); 689 Qt::UniqueConnection);
690} 690}
691
692bool GRenderWindow::eventFilter(QObject* object, QEvent* event) {
693 if (event->type() == QEvent::HoverMove) {
694 emit MouseActivity();
695 }
696 return false;
697}
diff --git a/src/yuzu/bootmanager.h b/src/yuzu/bootmanager.h
index ebe5cb965..339095509 100644
--- a/src/yuzu/bootmanager.h
+++ b/src/yuzu/bootmanager.h
@@ -184,6 +184,7 @@ signals:
184 void Closed(); 184 void Closed();
185 void FirstFrameDisplayed(); 185 void FirstFrameDisplayed();
186 void ExecuteProgramSignal(std::size_t program_index); 186 void ExecuteProgramSignal(std::size_t program_index);
187 void MouseActivity();
187 188
188private: 189private:
189 void TouchBeginEvent(const QTouchEvent* event); 190 void TouchBeginEvent(const QTouchEvent* event);
@@ -216,4 +217,5 @@ private:
216 217
217protected: 218protected:
218 void showEvent(QShowEvent* event) override; 219 void showEvent(QShowEvent* event) override;
220 bool eventFilter(QObject* object, QEvent* event) override;
219}; 221};
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 43d64b708..2c10160c8 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -1058,8 +1058,9 @@ bool GMainWindow::LoadROM(const QString& filename, std::size_t program_index) {
1058 tr("%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the " 1058 tr("%1<br>Please follow <a href='https://yuzu-emu.org/help/quickstart/'>the "
1059 "yuzu quickstart guide</a> to redump your files.<br>You can refer " 1059 "yuzu quickstart guide</a> to redump your files.<br>You can refer "
1060 "to the yuzu wiki</a> or the yuzu Discord</a> for help.", 1060 "to the yuzu wiki</a> or the yuzu Discord</a> for help.",
1061 "%1 signifies a numeric error ID.") 1061 "%1 signifies an error string.")
1062 .arg(error_id); 1062 .arg(QString::fromStdString(
1063 GetResultStatusString(static_cast<Loader::ResultStatus>(error_id))));
1063 1064
1064 QMessageBox::critical(this, title, description); 1065 QMessageBox::critical(this, title, description);
1065 } else { 1066 } else {
@@ -1133,6 +1134,7 @@ void GMainWindow::BootGame(const QString& filename, std::size_t program_index) {
1133 [this](std::size_t program_index) { render_window->ExecuteProgram(program_index); }); 1134 [this](std::size_t program_index) { render_window->ExecuteProgram(program_index); });
1134 1135
1135 connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame); 1136 connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame);
1137 connect(render_window, &GRenderWindow::MouseActivity, this, &GMainWindow::OnMouseActivity);
1136 // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views 1138 // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views
1137 // before the CPU continues 1139 // before the CPU continues
1138 connect(emu_thread.get(), &EmuThread::DebugModeEntered, waitTreeWidget, 1140 connect(emu_thread.get(), &EmuThread::DebugModeEntered, waitTreeWidget,
@@ -1156,8 +1158,8 @@ void GMainWindow::BootGame(const QString& filename, std::size_t program_index) {
1156 1158
1157 if (UISettings::values.hide_mouse) { 1159 if (UISettings::values.hide_mouse) {
1158 mouse_hide_timer.start(); 1160 mouse_hide_timer.start();
1159 setMouseTracking(true); 1161 render_window->installEventFilter(render_window);
1160 ui.centralwidget->setMouseTracking(true); 1162 render_window->setAttribute(Qt::WA_Hover, true);
1161 } 1163 }
1162 1164
1163 std::string title_name; 1165 std::string title_name;
@@ -1234,8 +1236,8 @@ void GMainWindow::ShutdownGame() {
1234 } 1236 }
1235 game_list->SetFilterFocus(); 1237 game_list->SetFilterFocus();
1236 1238
1237 setMouseTracking(false); 1239 render_window->removeEventFilter(render_window);
1238 ui.centralwidget->setMouseTracking(false); 1240 render_window->setAttribute(Qt::WA_Hover, false);
1239 1241
1240 UpdateWindowTitle(); 1242 UpdateWindowTitle();
1241 1243
@@ -2316,12 +2318,12 @@ void GMainWindow::OnConfigure() {
2316 config->Save(); 2318 config->Save();
2317 2319
2318 if (UISettings::values.hide_mouse && emulation_running) { 2320 if (UISettings::values.hide_mouse && emulation_running) {
2319 setMouseTracking(true); 2321 render_window->installEventFilter(render_window);
2320 ui.centralwidget->setMouseTracking(true); 2322 render_window->setAttribute(Qt::WA_Hover, true);
2321 mouse_hide_timer.start(); 2323 mouse_hide_timer.start();
2322 } else { 2324 } else {
2323 setMouseTracking(false); 2325 render_window->removeEventFilter(render_window);
2324 ui.centralwidget->setMouseTracking(false); 2326 render_window->setAttribute(Qt::WA_Hover, false);
2325 } 2327 }
2326 2328
2327 UpdateStatusButtons(); 2329 UpdateStatusButtons();
@@ -2561,21 +2563,17 @@ void GMainWindow::HideMouseCursor() {
2561 ShowMouseCursor(); 2563 ShowMouseCursor();
2562 return; 2564 return;
2563 } 2565 }
2564 setCursor(QCursor(Qt::BlankCursor)); 2566 render_window->setCursor(QCursor(Qt::BlankCursor));
2565} 2567}
2566 2568
2567void GMainWindow::ShowMouseCursor() { 2569void GMainWindow::ShowMouseCursor() {
2568 unsetCursor(); 2570 render_window->unsetCursor();
2569 if (emu_thread != nullptr && UISettings::values.hide_mouse) { 2571 if (emu_thread != nullptr && UISettings::values.hide_mouse) {
2570 mouse_hide_timer.start(); 2572 mouse_hide_timer.start();
2571 } 2573 }
2572} 2574}
2573 2575
2574void GMainWindow::mouseMoveEvent(QMouseEvent* event) { 2576void GMainWindow::OnMouseActivity() {
2575 ShowMouseCursor();
2576}
2577
2578void GMainWindow::mousePressEvent(QMouseEvent* event) {
2579 ShowMouseCursor(); 2577 ShowMouseCursor();
2580} 2578}
2581 2579
diff --git a/src/yuzu/main.h b/src/yuzu/main.h
index ea6d2c30d..31788ea62 100644
--- a/src/yuzu/main.h
+++ b/src/yuzu/main.h
@@ -248,6 +248,7 @@ private slots:
248 void OnCoreError(Core::System::ResultStatus, std::string); 248 void OnCoreError(Core::System::ResultStatus, std::string);
249 void OnReinitializeKeys(ReinitializeKeyBehavior behavior); 249 void OnReinitializeKeys(ReinitializeKeyBehavior behavior);
250 void OnLanguageChanged(const QString& locale); 250 void OnLanguageChanged(const QString& locale);
251 void OnMouseActivity();
251 252
252private: 253private:
253 void RemoveBaseContent(u64 program_id, const QString& entry_type); 254 void RemoveBaseContent(u64 program_id, const QString& entry_type);
@@ -335,6 +336,4 @@ protected:
335 void dropEvent(QDropEvent* event) override; 336 void dropEvent(QDropEvent* event) override;
336 void dragEnterEvent(QDragEnterEvent* event) override; 337 void dragEnterEvent(QDragEnterEvent* event) override;
337 void dragMoveEvent(QDragMoveEvent* event) override; 338 void dragMoveEvent(QDragMoveEvent* event) override;
338 void mouseMoveEvent(QMouseEvent* event) override;
339 void mousePressEvent(QMouseEvent* event) override;
340}; 339};