Compare commits

...

6 Commits

Author SHA1 Message Date
PCSX2 Bot c2fd4af163 [ci skip] Qt: Update Base Translation. 2025-12-17 13:12:29 +01:00
SternXD 5bdee3a611 Qt: Add RA Logo to Achievement Login Dialog 2025-12-16 20:19:47 -05:00
TheLastRar cb026a6946 GS/DX12: Fix handling of stencil DATE one
Co-Authored-By: lightningterror <18107717+lightningterror@users.noreply.github.com>
2025-12-16 16:57:16 +01:00
TheLastRar cb5124da4b GS/DX12: Enable GBV with the debug device 2025-12-16 16:57:16 +01:00
TheLastRar 7c88af9c73 GS/DX12: Use aliasing resources for feedback 2025-12-16 16:57:16 +01:00
JordanTheToaster 465a31bbd5 GameDB: Juiced post fixes 2025-12-16 13:38:51 +01:00
7 changed files with 284 additions and 198 deletions

View File

@ -13996,6 +13996,7 @@ SLED-53109:
cpuSpriteRenderLevel: 2 # Needed for above. cpuSpriteRenderLevel: 2 # Needed for above.
autoFlush: 1 # Fixes headlight brightness. autoFlush: 1 # Fixes headlight brightness.
cpuCLUTRender: 1 # Fixes broken headlights. cpuCLUTRender: 1 # Fixes broken headlights.
nativeScaling: 4 # Aligns post effects.
minimumBlendingLevel: 3 minimumBlendingLevel: 3
SLED-53137: SLED-53137:
name: "Stolen [Demo]" name: "Stolen [Demo]"
@ -22269,6 +22270,7 @@ SLES-53044:
cpuSpriteRenderLevel: 2 # Needed for above. cpuSpriteRenderLevel: 2 # Needed for above.
autoFlush: 1 # Fixes headlight brightness. autoFlush: 1 # Fixes headlight brightness.
cpuCLUTRender: 1 # Fixes broken headlights. cpuCLUTRender: 1 # Fixes broken headlights.
nativeScaling: 4 # Aligns post effects.
minimumBlendingLevel: 3 minimumBlendingLevel: 3
SLES-53045: SLES-53045:
name: "Street Racing Syndicate" name: "Street Racing Syndicate"
@ -22592,6 +22594,7 @@ SLES-53151:
cpuSpriteRenderLevel: 2 # Needed for above. cpuSpriteRenderLevel: 2 # Needed for above.
autoFlush: 1 # Fixes headlight brightness. autoFlush: 1 # Fixes headlight brightness.
cpuCLUTRender: 1 # Fixes broken headlights. cpuCLUTRender: 1 # Fixes broken headlights.
nativeScaling: 4 # Aligns post effects.
minimumBlendingLevel: 3 minimumBlendingLevel: 3
SLES-53152: SLES-53152:
name: "Mashed Fully Loaded" name: "Mashed Fully Loaded"
@ -32394,6 +32397,7 @@ SLKA-25283:
cpuSpriteRenderLevel: 2 # Needed for above. cpuSpriteRenderLevel: 2 # Needed for above.
autoFlush: 1 # Fixes headlight brightness. autoFlush: 1 # Fixes headlight brightness.
cpuCLUTRender: 1 # Fixes broken headlights. cpuCLUTRender: 1 # Fixes broken headlights.
nativeScaling: 4 # Aligns post effects.
minimumBlendingLevel: 3 minimumBlendingLevel: 3
SLKA-25284: SLKA-25284:
name: "사쿠라 대전 3 ~파리는 불타고 있는가~" name: "사쿠라 대전 3 ~파리는 불타고 있는가~"
@ -48603,6 +48607,7 @@ SLPM-66277:
cpuSpriteRenderLevel: 2 # Needed for above. cpuSpriteRenderLevel: 2 # Needed for above.
autoFlush: 1 # Fixes headlight brightness. autoFlush: 1 # Fixes headlight brightness.
cpuCLUTRender: 1 # Fixes broken headlights. cpuCLUTRender: 1 # Fixes broken headlights.
nativeScaling: 4 # Aligns post effects.
minimumBlendingLevel: 3 minimumBlendingLevel: 3
SLPM-66278: SLPM-66278:
name: "新・豪血寺一族 -煩悩解放-" name: "新・豪血寺一族 -煩悩解放-"
@ -68225,6 +68230,7 @@ SLUS-20872:
cpuSpriteRenderLevel: 2 # Needed for above. cpuSpriteRenderLevel: 2 # Needed for above.
autoFlush: 1 # Fixes headlight brightness. autoFlush: 1 # Fixes headlight brightness.
cpuCLUTRender: 1 # Fixes broken headlights. cpuCLUTRender: 1 # Fixes broken headlights.
nativeScaling: 4 # Aligns post effects.
minimumBlendingLevel: 3 minimumBlendingLevel: 3
SLUS-20873: SLUS-20873:
name: "Silent Hill 4 - The Room" name: "Silent Hill 4 - The Room"
@ -75330,6 +75336,7 @@ SLUS-29147:
cpuSpriteRenderLevel: 2 # Needed for above. cpuSpriteRenderLevel: 2 # Needed for above.
autoFlush: 1 # Fixes headlight brightness. autoFlush: 1 # Fixes headlight brightness.
cpuCLUTRender: 1 # Fixes broken headlights. cpuCLUTRender: 1 # Fixes broken headlights.
nativeScaling: 4 # Aligns post effects.
minimumBlendingLevel: 3 minimumBlendingLevel: 3
SLUS-29148: SLUS-29148:
name: "The Incredible Hulk - Ultimate Destruction [Demo]" name: "The Incredible Hulk - Ultimate Destruction [Demo]"

View File

@ -17,7 +17,8 @@ AchievementLoginDialog::AchievementLoginDialog(QWidget* parent, Achievements::Lo
, m_reason(reason) , m_reason(reason)
{ {
m_ui.setupUi(this); m_ui.setupUi(this);
QtUtils::SetScalableIcon(m_ui.loginIcon, QIcon::fromTheme(QStringLiteral("login-box-line")), QSize(32, 32)); const QString base_path(QtHost::GetResourcesBasePath());
QtUtils::SetScalableIcon(m_ui.loginIcon, QIcon(QStringLiteral("%1/icons/ra-icon.svg").arg(base_path)), QSize(50, 50));
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
// Adjust text if needed based on reason. // Adjust text if needed based on reason.

View File

@ -11888,12 +11888,12 @@ This action cannot be undone.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp" line="2675"/> <location filename="../../pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp" line="2697"/>
<source>Stencil buffers and texture barriers are both unavailable, this will break some graphical effects.</source> <source>Stencil buffers and texture barriers are both unavailable, this will break some graphical effects.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../../pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp" line="5016"/> <location filename="../../pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp" line="5038"/>
<source>Spin GPU During Readbacks is enabled, but calibrated timestamps are unavailable. This might be really slow.</source> <source>Spin GPU During Readbacks is enabled, but calibrated timestamps are unavailable. This might be really slow.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -11995,7 +11995,7 @@ Please see our official documentation for more information.</source>
<context> <context>
<name>GSDeviceVK</name> <name>GSDeviceVK</name>
<message> <message>
<location filename="../../pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp" line="2043"/> <location filename="../../pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp" line="2062"/>
<source>Your GPU does not support the required Vulkan features.</source> <source>Your GPU does not support the required Vulkan features.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -18242,13 +18242,13 @@ Right click to clear binding</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1573"/> <location filename="../MainWindow.cpp" line="1600"/>
<location filename="../MainWindow.cpp" line="1634"/> <location filename="../MainWindow.cpp" line="1661"/>
<source>Change Disc</source> <source>Change Disc</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3023"/> <location filename="../MainWindow.cpp" line="3096"/>
<source>Load State</source> <source>Load State</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -18818,52 +18818,52 @@ Right click to clear binding</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1677"/> <location filename="../MainWindow.cpp" line="1704"/>
<source>Start Big Picture Mode</source> <source>Start Big Picture Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.ui" line="1018"/> <location filename="../MainWindow.ui" line="1018"/>
<location filename="../MainWindow.cpp" line="1678"/> <location filename="../MainWindow.cpp" line="1705"/>
<source>Big Picture</source> <source>Big Picture</source>
<comment>In Toolbar</comment> <comment>In Toolbar</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="667"/> <location filename="../MainWindow.cpp" line="674"/>
<source>Show Advanced Settings</source> <source>Show Advanced Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="739"/> <location filename="../MainWindow.cpp" line="746"/>
<location filename="../MainWindow.cpp" line="779"/> <location filename="../MainWindow.cpp" line="786"/>
<source>Video Capture</source> <source>Video Capture</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="248"/> <location filename="../MainWindow.cpp" line="255"/>
<source>Internal Resolution</source> <source>Internal Resolution</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="248"/> <location filename="../MainWindow.cpp" line="255"/>
<source>%1x Scale</source> <source>%1x Scale</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="645"/> <location filename="../MainWindow.cpp" line="652"/>
<source>Select location to save block dump:</source> <source>Select location to save block dump:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="663"/> <location filename="../MainWindow.cpp" line="670"/>
<location filename="../MainWindow.cpp" line="1247"/> <location filename="../MainWindow.cpp" line="1274"/>
<location filename="../MainWindow.cpp" line="1292"/> <location filename="../MainWindow.cpp" line="1319"/>
<source>Do not show again</source> <source>Do not show again</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="668"/> <location filename="../MainWindow.cpp" line="675"/>
<source>Changing advanced settings can have unpredictable effects on games, including graphical glitches, lock-ups, and even corrupted save files. We do not recommend changing advanced settings unless you know what you are doing, and the implications of changing each setting. <source>Changing advanced settings can have unpredictable effects on games, including graphical glitches, lock-ups, and even corrupted save files. We do not recommend changing advanced settings unless you know what you are doing, and the implications of changing each setting.
The PCSX2 team will not provide any support for configurations that modify these settings, you are on your own. The PCSX2 team will not provide any support for configurations that modify these settings, you are on your own.
@ -18872,371 +18872,371 @@ Are you sure you want to continue?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="723"/> <location filename="../MainWindow.cpp" line="730"/>
<source>Record On Boot</source> <source>Record On Boot</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="731"/> <location filename="../MainWindow.cpp" line="738"/>
<source>Did you want to start recording on boot?</source> <source>Did you want to start recording on boot?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="736"/> <location filename="../MainWindow.cpp" line="743"/>
<location filename="../MainWindow.cpp" line="776"/> <location filename="../MainWindow.cpp" line="783"/>
<source>%1 Files (*.%2)</source> <source>%1 Files (*.%2)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="745"/> <location filename="../MainWindow.cpp" line="752"/>
<source>Did you want to cancel recording on boot?</source> <source>Did you want to cancel recording on boot?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="769"/> <location filename="../MainWindow.cpp" line="776"/>
<source>Recording will start in a moment</source> <source>Recording will start in a moment</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1129"/> <location filename="../MainWindow.cpp" line="1156"/>
<source>WARNING: Memory Card Busy</source> <source>WARNING: Memory Card Busy</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1133"/> <location filename="../MainWindow.cpp" line="1160"/>
<source>Your memory card is still saving data.</source> <source>Your memory card is still saving data.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1134"/> <location filename="../MainWindow.cpp" line="1161"/>
<source>WARNING: Shutting down now can &lt;b&gt;IRREVERSIBLY CORRUPT YOUR MEMORY CARD.&lt;/b&gt;&lt;br&gt;&lt;br&gt;You are strongly advised to select &apos;No&apos; and let the save finish.&lt;br&gt;&lt;br&gt;Do you want to shutdown anyway and &lt;b&gt;IRREVERSIBLY CORRUPT YOUR MEMORY CARD&lt;/b&gt;?</source> <source>WARNING: Shutting down now can &lt;b&gt;IRREVERSIBLY CORRUPT YOUR MEMORY CARD.&lt;/b&gt;&lt;br&gt;&lt;br&gt;You are strongly advised to select &apos;No&apos; and let the save finish.&lt;br&gt;&lt;br&gt;Do you want to shutdown anyway and &lt;b&gt;IRREVERSIBLY CORRUPT YOUR MEMORY CARD&lt;/b&gt;?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1236"/> <location filename="../MainWindow.cpp" line="1263"/>
<source>Failed to Load State From Backup Slot %1</source> <source>Failed to Load State From Backup Slot %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1238"/> <location filename="../MainWindow.cpp" line="1265"/>
<source>Failed to Load State From Slot %1</source> <source>Failed to Load State From Slot %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1242"/> <location filename="../MainWindow.cpp" line="1269"/>
<source>Failed to Load State</source> <source>Failed to Load State</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1286"/> <location filename="../MainWindow.cpp" line="1313"/>
<source>Failed to Save State To Slot %1</source> <source>Failed to Save State To Slot %1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1288"/> <location filename="../MainWindow.cpp" line="1315"/>
<source>Failed to Save State</source> <source>Failed to Save State</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1362"/> <location filename="../MainWindow.cpp" line="1389"/>
<source>Confirm Shutdown</source> <source>Confirm Shutdown</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1365"/> <location filename="../MainWindow.cpp" line="1392"/>
<source>Are you sure you want to shut down the virtual machine?</source> <source>Are you sure you want to shut down the virtual machine?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1367"/> <location filename="../MainWindow.cpp" line="1394"/>
<source>Save State For Resume</source> <source>Save State For Resume</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1473"/> <location filename="../MainWindow.cpp" line="1500"/>
<location filename="../MainWindow.cpp" line="1864"/> <location filename="../MainWindow.cpp" line="1891"/>
<location filename="../MainWindow.cpp" line="2328"/> <location filename="../MainWindow.cpp" line="2355"/>
<location filename="../MainWindow.cpp" line="2492"/> <location filename="../MainWindow.cpp" line="2523"/>
<location filename="../MainWindow.cpp" line="2903"/> <location filename="../MainWindow.cpp" line="2976"/>
<location filename="../MainWindow.cpp" line="2999"/> <location filename="../MainWindow.cpp" line="3072"/>
<location filename="../MainWindow.cpp" line="3042"/> <location filename="../MainWindow.cpp" line="3115"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1473"/> <location filename="../MainWindow.cpp" line="1500"/>
<source>You must select a disc to change discs.</source> <source>You must select a disc to change discs.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1504"/> <location filename="../MainWindow.cpp" line="1531"/>
<source>Properties...</source> <source>Properties...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1520"/> <location filename="../MainWindow.cpp" line="1547"/>
<source>Set Cover Image...</source> <source>Set Cover Image...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1524"/> <location filename="../MainWindow.cpp" line="1551"/>
<source>Create Game Shortcut...</source> <source>Create Game Shortcut...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1527"/> <location filename="../MainWindow.cpp" line="1554"/>
<source>Exclude From List</source> <source>Exclude From List</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1533"/> <location filename="../MainWindow.cpp" line="1560"/>
<source>Reset Play Time</source> <source>Reset Play Time</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1537"/> <location filename="../MainWindow.cpp" line="1564"/>
<source>Check Wiki Page</source> <source>Check Wiki Page</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1545"/> <location filename="../MainWindow.cpp" line="1572"/>
<source>Default Boot</source> <source>Default Boot</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1552"/> <location filename="../MainWindow.cpp" line="1579"/>
<source>Fast Boot</source> <source>Fast Boot</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1555"/> <location filename="../MainWindow.cpp" line="1582"/>
<source>Full Boot</source> <source>Full Boot</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1560"/> <location filename="../MainWindow.cpp" line="1587"/>
<source>Boot and Debug</source> <source>Boot and Debug</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1584"/> <location filename="../MainWindow.cpp" line="1611"/>
<source>Add Search Directory...</source> <source>Add Search Directory...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1593"/> <location filename="../MainWindow.cpp" line="1620"/>
<source>Start File</source> <source>Start File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1602"/> <location filename="../MainWindow.cpp" line="1629"/>
<source>Start Disc</source> <source>Start Disc</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1619"/> <location filename="../MainWindow.cpp" line="1646"/>
<source>Select Disc Image</source> <source>Select Disc Image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1763"/> <location filename="../MainWindow.cpp" line="1790"/>
<source>Updater Error</source> <source>Updater Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1769"/> <location filename="../MainWindow.cpp" line="1796"/>
<source>&lt;p&gt;Sorry, you are trying to update a PCSX2 version which is not an official GitHub release. To prevent incompatibilities, the auto-updater is only enabled on official builds.&lt;/p&gt;&lt;p&gt;To obtain an official build, please download from the link below:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://pcsx2.net/downloads/&quot;&gt;https://pcsx2.net/downloads/&lt;/a&gt;&lt;/p&gt;</source> <source>&lt;p&gt;Sorry, you are trying to update a PCSX2 version which is not an official GitHub release. To prevent incompatibilities, the auto-updater is only enabled on official builds.&lt;/p&gt;&lt;p&gt;To obtain an official build, please download from the link below:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://pcsx2.net/downloads/&quot;&gt;https://pcsx2.net/downloads/&lt;/a&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1774"/> <location filename="../MainWindow.cpp" line="1801"/>
<source>Automatic updating is not supported on the current platform.</source> <source>Automatic updating is not supported on the current platform.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1854"/> <location filename="../MainWindow.cpp" line="1881"/>
<source>Confirm File Creation</source> <source>Confirm File Creation</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1855"/> <location filename="../MainWindow.cpp" line="1882"/>
<source>The pnach file &apos;%1&apos; does not currently exist. Do you want to create it?</source> <source>The pnach file &apos;%1&apos; does not currently exist. Do you want to create it?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1864"/> <location filename="../MainWindow.cpp" line="1891"/>
<source>Failed to create &apos;%1&apos;.</source> <source>Failed to create &apos;%1&apos;.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1960"/> <location filename="../MainWindow.cpp" line="1987"/>
<source>Input Recording Failed</source> <source>Input Recording Failed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1961"/> <location filename="../MainWindow.cpp" line="1988"/>
<source>Failed to create file: {}</source> <source>Failed to create file: {}</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1983"/> <location filename="../MainWindow.cpp" line="2010"/>
<source>Select a File</source> <source>Select a File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1984"/> <location filename="../MainWindow.cpp" line="2011"/>
<source>Input Recording Files (*.p2m2)</source> <source>Input Recording Files (*.p2m2)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2019"/> <location filename="../MainWindow.cpp" line="2046"/>
<source>Input Playback Failed</source> <source>Input Playback Failed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2020"/> <location filename="../MainWindow.cpp" line="2047"/>
<source>Failed to open file: {}</source> <source>Failed to open file: {}</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2106"/> <location filename="../MainWindow.cpp" line="2133"/>
<source>Paused</source> <source>Paused</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2292"/> <location filename="../MainWindow.cpp" line="2319"/>
<source>Load State Failed</source> <source>Load State Failed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2292"/> <location filename="../MainWindow.cpp" line="2319"/>
<source>Cannot load a save state without a running VM.</source> <source>Cannot load a save state without a running VM.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2316"/> <location filename="../MainWindow.cpp" line="2343"/>
<source>The new ELF cannot be loaded without resetting the virtual machine. Do you want to reset the virtual machine now?</source> <source>The new ELF cannot be loaded without resetting the virtual machine. Do you want to reset the virtual machine now?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2328"/> <location filename="../MainWindow.cpp" line="2355"/>
<source>Cannot change from game to GS dump without shutting down first.</source> <source>Cannot change from game to GS dump without shutting down first.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2492"/> <location filename="../MainWindow.cpp" line="2523"/>
<source>Failed to get window info from widget</source> <source>Failed to get window info from widget</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1677"/> <location filename="../MainWindow.cpp" line="1704"/>
<source>Stop Big Picture Mode</source> <source>Stop Big Picture Mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1678"/> <location filename="../MainWindow.cpp" line="1705"/>
<source>Exit Big Picture</source> <source>Exit Big Picture</source>
<comment>In Toolbar</comment> <comment>In Toolbar</comment>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2809"/> <location filename="../MainWindow.cpp" line="2882"/>
<source>Game Properties</source> <source>Game Properties</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2809"/> <location filename="../MainWindow.cpp" line="2882"/>
<source>Game properties is unavailable for the current game.</source> <source>Game properties is unavailable for the current game.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2861"/> <location filename="../MainWindow.cpp" line="2934"/>
<source>Could not find any CD/DVD-ROM devices. Please ensure you have a drive connected and sufficient permissions to access it.</source> <source>Could not find any CD/DVD-ROM devices. Please ensure you have a drive connected and sufficient permissions to access it.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2879"/> <location filename="../MainWindow.cpp" line="2952"/>
<source>Select disc drive:</source> <source>Select disc drive:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2903"/> <location filename="../MainWindow.cpp" line="2976"/>
<source>This save state does not exist.</source> <source>This save state does not exist.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2916"/> <location filename="../MainWindow.cpp" line="2989"/>
<source>Select Cover Image</source> <source>Select Cover Image</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2933"/> <location filename="../MainWindow.cpp" line="3006"/>
<source>Cover Already Exists</source> <source>Cover Already Exists</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2934"/> <location filename="../MainWindow.cpp" line="3007"/>
<source>A cover image for this game already exists, do you wish to replace it?</source> <source>A cover image for this game already exists, do you wish to replace it?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2929"/> <location filename="../MainWindow.cpp" line="3002"/>
<location filename="../MainWindow.cpp" line="2943"/> <location filename="../MainWindow.cpp" line="3016"/>
<location filename="../MainWindow.cpp" line="2949"/> <location filename="../MainWindow.cpp" line="3022"/>
<location filename="../MainWindow.cpp" line="2955"/> <location filename="../MainWindow.cpp" line="3028"/>
<source>Copy Error</source> <source>Copy Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2943"/> <location filename="../MainWindow.cpp" line="3016"/>
<source>Failed to remove existing cover &apos;%1&apos;</source> <source>Failed to remove existing cover &apos;%1&apos;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2949"/> <location filename="../MainWindow.cpp" line="3022"/>
<source>Failed to copy &apos;%1&apos; to &apos;%2&apos;</source> <source>Failed to copy &apos;%1&apos; to &apos;%2&apos;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2955"/> <location filename="../MainWindow.cpp" line="3028"/>
<source>Failed to remove &apos;%1&apos;</source> <source>Failed to remove &apos;%1&apos;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2315"/> <location filename="../MainWindow.cpp" line="2342"/>
<location filename="../MainWindow.cpp" line="2964"/> <location filename="../MainWindow.cpp" line="3037"/>
<source>Confirm Reset</source> <source>Confirm Reset</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="1539"/> <location filename="../MainWindow.cpp" line="1566"/>
<source>Open Snapshots Folder</source> <source>Open Snapshots Folder</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2916"/> <location filename="../MainWindow.cpp" line="2989"/>
<source>All Cover Image Types (*.jpg *.jpeg *.png *.webp)</source> <source>All Cover Image Types (*.jpg *.jpeg *.png *.webp)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2929"/> <location filename="../MainWindow.cpp" line="3002"/>
<source>You must select a different file to the current cover image.</source> <source>You must select a different file to the current cover image.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2999"/> <location filename="../MainWindow.cpp" line="3072"/>
<source>Failed to create snapshots directory &apos;%1&apos; <source>Failed to create snapshots directory &apos;%1&apos;
Opening default directory.</source> Opening default directory.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3017"/> <location filename="../MainWindow.cpp" line="3090"/>
<source>Load Resume State</source> <source>Load Resume State</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3020"/> <location filename="../MainWindow.cpp" line="3093"/>
<source>A resume save state was found for this game, saved at: <source>A resume save state was found for this game, saved at:
%1. %1.
@ -19245,43 +19245,43 @@ Do you want to load this state, or start from a fresh boot?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3024"/> <location filename="../MainWindow.cpp" line="3097"/>
<source>Fresh Boot</source> <source>Fresh Boot</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3025"/> <location filename="../MainWindow.cpp" line="3098"/>
<source>Delete And Boot</source> <source>Delete And Boot</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3042"/> <location filename="../MainWindow.cpp" line="3115"/>
<source>Failed to delete save state file &apos;%1&apos;.</source> <source>Failed to delete save state file &apos;%1&apos;.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3100"/> <location filename="../MainWindow.cpp" line="3173"/>
<source>Load State File...</source> <source>Load State File...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3100"/> <location filename="../MainWindow.cpp" line="3173"/>
<source>Load From File...</source> <source>Load From File...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3103"/> <location filename="../MainWindow.cpp" line="3176"/>
<location filename="../MainWindow.cpp" line="3177"/> <location filename="../MainWindow.cpp" line="3250"/>
<source>Select Save State File</source> <source>Select Save State File</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3148"/> <location filename="../MainWindow.cpp" line="3221"/>
<source>Load Backup Slot %1 (%2)</source> <source>Load Backup Slot %1 (%2)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../MainWindow.cpp" line="3165"/> <location filename="../MainWindow.cpp" line="3238"/>
<source>%n save states deleted.</source> <source>%n save states deleted.</source>
<translation type="unfinished"> <translation type="unfinished">
<numerusform></numerusform> <numerusform></numerusform>
@ -19289,12 +19289,12 @@ Do you want to load this state, or start from a fresh boot?</source>
</translation> </translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3177"/> <location filename="../MainWindow.cpp" line="3250"/>
<source>Save States (*.p2s)</source> <source>Save States (*.p2s)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3110"/> <location filename="../MainWindow.cpp" line="3183"/>
<source>Delete Save States...</source> <source>Delete Save States...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -19309,7 +19309,7 @@ Do you want to load this state, or start from a fresh boot?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2965"/> <location filename="../MainWindow.cpp" line="3038"/>
<source>Are you sure you want to reset the play time for &apos;%1&apos; (%2)? <source>Are you sure you want to reset the play time for &apos;%1&apos; (%2)?
Your current play time is %3. Your current play time is %3.
@ -19318,75 +19318,75 @@ This action cannot be undone.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2966"/> <location filename="../MainWindow.cpp" line="3039"/>
<source>empty title</source> <source>empty title</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="2967"/> <location filename="../MainWindow.cpp" line="3040"/>
<source>no serial</source> <source>no serial</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3103"/> <location filename="../MainWindow.cpp" line="3176"/>
<source>Save States (*.p2s *.p2s.backup)</source> <source>Save States (*.p2s *.p2s.backup)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3120"/> <location filename="../MainWindow.cpp" line="3193"/>
<source>Resume (%2)</source> <source>Resume (%2)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3136"/> <location filename="../MainWindow.cpp" line="3209"/>
<source>Load Slot %1 (%2)</source> <source>Load Slot %1 (%2)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3157"/> <location filename="../MainWindow.cpp" line="3230"/>
<location filename="../MainWindow.cpp" line="3165"/> <location filename="../MainWindow.cpp" line="3238"/>
<source>Delete Save States</source> <source>Delete Save States</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3158"/> <location filename="../MainWindow.cpp" line="3231"/>
<source>Are you sure you want to delete all save states for %1? <source>Are you sure you want to delete all save states for %1?
The saves will not be recoverable.</source> The saves will not be recoverable.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3175"/> <location filename="../MainWindow.cpp" line="3248"/>
<source>Save To File...</source> <source>Save To File...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3195"/> <location filename="../MainWindow.cpp" line="3268"/>
<source>Empty</source> <source>Empty</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3197"/> <location filename="../MainWindow.cpp" line="3270"/>
<source>Save Slot %1 (%2)</source> <source>Save Slot %1 (%2)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3256"/> <location filename="../MainWindow.cpp" line="3329"/>
<source>Confirm Disc Change</source> <source>Confirm Disc Change</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3257"/> <location filename="../MainWindow.cpp" line="3330"/>
<source>Do you want to swap discs or boot the new image (via system reset)?</source> <source>Do you want to swap discs or boot the new image (via system reset)?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3258"/> <location filename="../MainWindow.cpp" line="3331"/>
<source>Swap Disc</source> <source>Swap Disc</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../MainWindow.cpp" line="3259"/> <location filename="../MainWindow.cpp" line="3332"/>
<source>Reset</source> <source>Reset</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -165,11 +165,12 @@ bool GSDevice12::CreateDevice(u32& vendor_id)
// Enabling the debug layer will fail if the Graphics Tools feature is not installed. // Enabling the debug layer will fail if the Graphics Tools feature is not installed.
if (enable_debug_layer) if (enable_debug_layer)
{ {
ComPtr<ID3D12Debug> debug12; ComPtr<ID3D12Debug1> debug12;
hr = D3D12GetDebugInterface(IID_PPV_ARGS(debug12.put())); hr = D3D12GetDebugInterface(IID_PPV_ARGS(debug12.put()));
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
debug12->EnableDebugLayer(); debug12->EnableDebugLayer();
debug12->SetEnableGPUBasedValidation(true);
} }
else else
{ {
@ -1224,8 +1225,8 @@ bool GSDevice12::CheckFeatures(const u32& vendor_id)
{ {
//const bool isAMD = (vendor_id == 0x1002 || vendor_id == 0x1022); //const bool isAMD = (vendor_id == 0x1002 || vendor_id == 0x1022);
m_features.texture_barrier = false; m_features.texture_barrier = GSConfig.OverrideTextureBarriers != 0;
m_features.multidraw_fb_copy = GSConfig.OverrideTextureBarriers != 0; m_features.multidraw_fb_copy = false;
m_features.broken_point_sampler = false; m_features.broken_point_sampler = false;
m_features.primitive_id = true; m_features.primitive_id = true;
m_features.prefer_new_textures = true; m_features.prefer_new_textures = true;
@ -3207,7 +3208,7 @@ void GSDevice12::SetStencilRef(u8 ref)
m_dirty_flags |= DIRTY_FLAG_STENCIL_REF; m_dirty_flags |= DIRTY_FLAG_STENCIL_REF;
} }
void GSDevice12::PSSetShaderResource(int i, GSTexture* sr, bool check_state) void GSDevice12::PSSetShaderResource(int i, GSTexture* sr, bool check_state, bool feedback)
{ {
D3D12DescriptorHandle handle; D3D12DescriptorHandle handle;
if (sr) if (sr)
@ -3225,7 +3226,7 @@ void GSDevice12::PSSetShaderResource(int i, GSTexture* sr, bool check_state)
dtex->TransitionToState(D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE); dtex->TransitionToState(D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
} }
dtex->SetUseFenceCounter(GetCurrentFenceValue()); dtex->SetUseFenceCounter(GetCurrentFenceValue());
handle = dtex->GetSRVDescriptor(); handle = feedback ? dtex->GetFBLDescriptor() : dtex->GetSRVDescriptor();
} }
else else
{ {
@ -3312,7 +3313,7 @@ void GSDevice12::UnbindTexture(GSTexture12* tex)
{ {
for (u32 i = 0; i < NUM_TOTAL_TFX_TEXTURES; i++) for (u32 i = 0; i < NUM_TOTAL_TFX_TEXTURES; i++)
{ {
if (m_tfx_textures[i] == tex->GetSRVDescriptor()) if (m_tfx_textures[i] == tex->GetSRVDescriptor() || m_tfx_textures[i] == tex->GetFBLDescriptor())
{ {
m_tfx_textures[i] = m_null_texture->GetSRVDescriptor(); m_tfx_textures[i] = m_null_texture->GetSRVDescriptor();
m_dirty_flags |= DIRTY_FLAG_TFX_TEXTURES; m_dirty_flags |= DIRTY_FLAG_TFX_TEXTURES;
@ -3826,12 +3827,24 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
// TODO: Backport from vk. // TODO: Backport from vk.
if (stencil_DATE_One) if (stencil_DATE_One)
{
config.ps.date = 0; config.ps.date = 0;
config.alpha_second_pass.ps.date = 0;
if (!config.ps.IsFeedbackLoop())
{
config.require_one_barrier = false;
config.require_full_barrier = false;
}
if (!config.alpha_second_pass.ps.IsFeedbackLoop())
{
config.alpha_second_pass.require_one_barrier = false;
config.alpha_second_pass.require_full_barrier = false;
}
}
GSTexture12* colclip_rt = static_cast<GSTexture12*>(g_gs_device->GetColorClipTexture()); GSTexture12* colclip_rt = static_cast<GSTexture12*>(g_gs_device->GetColorClipTexture());
GSTexture12* draw_rt = static_cast<GSTexture12*>(config.rt); GSTexture12* draw_rt = static_cast<GSTexture12*>(config.rt);
GSTexture12* draw_ds = static_cast<GSTexture12*>(config.ds); GSTexture12* draw_ds = static_cast<GSTexture12*>(config.ds);
GSTexture12* draw_rt_clone = nullptr;
// Align the render area to 128x128, hopefully avoiding render pass restarts for small render area changes (e.g. Ratchet and Clank). // Align the render area to 128x128, hopefully avoiding render pass restarts for small render area changes (e.g. Ratchet and Clank).
const GSVector2i rtsize(config.rt ? config.rt->GetSize() : config.ds->GetSize()); const GSVector2i rtsize(config.rt ? config.rt->GetSize() : config.ds->GetSize());
@ -3955,7 +3968,7 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
} }
// we're not drawing to the RT, so we can use it as a source // we're not drawing to the RT, so we can use it as a source
if (config.require_one_barrier && !m_features.multidraw_fb_copy) if (config.require_one_barrier && !m_features.texture_barrier)
PSSetShaderResource(2, draw_rt, true); PSSetShaderResource(2, draw_rt, true);
} }
@ -3985,14 +3998,7 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
m_pipeline_selector.ds = true; m_pipeline_selector.ds = true;
} }
if (draw_rt && (config.require_one_barrier || (config.require_full_barrier && m_features.multidraw_fb_copy) || (config.tex && config.tex == config.rt))) const bool feedback = draw_rt && (config.require_one_barrier || (config.require_full_barrier && m_features.texture_barrier) || (config.tex && config.tex == config.rt));
{
// Requires a copy of the RT.
// Used as "bind rt" flag when texture barrier is unsupported for tex is fb.
draw_rt_clone = static_cast<GSTexture12*>(CreateTexture(rtsize.x, rtsize.y, 1, draw_rt->GetFormat(), true));
if (!draw_rt_clone)
Console.Warning("D3D12: Failed to allocate temp texture for RT copy.");
}
OMSetRenderTargets(draw_rt, draw_ds, config.scissor); OMSetRenderTargets(draw_rt, draw_ds, config.scissor);
@ -4011,8 +4017,8 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
draw_ds ? D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE : D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS, draw_ds ? D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE : D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS,
stencil_DATE ? D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE : stencil_DATE ? D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_PRESERVE :
D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS, D3D12_RENDER_PASS_BEGINNING_ACCESS_TYPE_NO_ACCESS,
stencil_DATE ? (draw_rt_clone ? D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE : stencil_DATE ? (feedback ? D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_PRESERVE :
D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD) : D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_DISCARD) :
D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS, D3D12_RENDER_PASS_ENDING_ACCESS_TYPE_NO_ACCESS,
clear_color, draw_ds ? draw_ds->GetClearDepth() : 0.0f, 1); clear_color, draw_ds ? draw_ds->GetClearDepth() : 0.0f, 1);
} }
@ -4040,7 +4046,7 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
UploadHWDrawVerticesAndIndices(config); UploadHWDrawVerticesAndIndices(config);
// now we can do the actual draw // now we can do the actual draw
SendHWDraw(pipe, config, draw_rt_clone, draw_rt, config.require_one_barrier, config.require_full_barrier, false); SendHWDraw(pipe, config, draw_rt, feedback, config.require_one_barrier, config.require_full_barrier);
// blend second pass // blend second pass
if (config.blend_multi_pass.enable) if (config.blend_multi_pass.enable)
@ -4070,12 +4076,9 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
pipe.cms = config.alpha_second_pass.colormask; pipe.cms = config.alpha_second_pass.colormask;
pipe.dss = config.alpha_second_pass.depth; pipe.dss = config.alpha_second_pass.depth;
pipe.bs = config.blend; pipe.bs = config.blend;
SendHWDraw(pipe, config, draw_rt_clone, draw_rt, config.alpha_second_pass.require_one_barrier, config.alpha_second_pass.require_full_barrier, true); SendHWDraw(pipe, config, draw_rt, feedback, config.alpha_second_pass.require_one_barrier, config.alpha_second_pass.require_full_barrier);
} }
if (draw_rt_clone)
Recycle(draw_rt_clone);
if (date_image) if (date_image)
Recycle(date_image); Recycle(date_image);
@ -4113,43 +4116,39 @@ void GSDevice12::RenderHW(GSHWDrawConfig& config)
} }
} }
void GSDevice12::SendHWDraw(const PipelineSelector& pipe, const GSHWDrawConfig& config, GSTexture12* draw_rt_clone, GSTexture12* draw_rt, const bool one_barrier, const bool full_barrier, const bool skip_first_barrier) void GSDevice12::SendHWDraw(const PipelineSelector& pipe, const GSHWDrawConfig& config, GSTexture12* draw_rt, const bool feedback, const bool one_barrier, const bool full_barrier)
{ {
if (draw_rt_clone) if (feedback)
{ {
#ifdef PCSX2_DEVBUILD #ifdef PCSX2_DEVBUILD
if ((one_barrier || full_barrier) && !config.ps.IsFeedbackLoop()) [[unlikely]] if ((one_barrier || full_barrier) && !config.ps.IsFeedbackLoop()) [[unlikely]]
Console.Warning("D3D12: Possible unnecessary copy detected."); Console.Warning("D3D12: Possible unnecessary barrier detected.");
#endif #endif
auto CopyAndBind = [&](GSVector4i drawarea) { if (one_barrier || full_barrier)
EndRenderPass(); PSSetShaderResource(2, draw_rt, false, true);
if (config.tex && config.tex == config.rt)
PSSetShaderResource(0, draw_rt, false, true);
CopyRect(draw_rt, draw_rt_clone, drawarea, drawarea.left, drawarea.top); if (full_barrier)
draw_rt->TransitionToState(D3D12_RESOURCE_STATE_RENDER_TARGET);
if (one_barrier || full_barrier)
PSSetShaderResource(2, draw_rt_clone, true);
if (config.tex && config.tex == config.rt)
PSSetShaderResource(0, draw_rt_clone, true);
};
if (m_features.multidraw_fb_copy && full_barrier)
{ {
pxAssert(config.drawlist && !config.drawlist->empty());
const u32 draw_list_size = static_cast<u32>(config.drawlist->size()); const u32 draw_list_size = static_cast<u32>(config.drawlist->size());
const u32 indices_per_prim = config.indices_per_prim; const u32 indices_per_prim = config.indices_per_prim;
pxAssert(config.drawlist && !config.drawlist->empty()); GL_PUSH("Split the draw");
pxAssert(config.drawlist_bbox && static_cast<u32>(config.drawlist_bbox->size()) == draw_list_size); g_perfmon.Put(GSPerfMon::Barriers, draw_list_size);
for (u32 n = 0, p = 0; n < draw_list_size; n++) for (u32 n = 0, p = 0; n < draw_list_size; n++)
{ {
const u32 count = (*config.drawlist)[n] * indices_per_prim; const u32 count = (*config.drawlist)[n] * indices_per_prim;
GSVector4i bbox = (*config.drawlist_bbox)[n].rintersect(config.drawarea); EndRenderPass();
// Specify null for the after resource as both resources are used after the barrier.
// While this may also be true before the barrier, we only write using the main resource.
D3D12_RESOURCE_BARRIER barrier = {D3D12_RESOURCE_BARRIER_TYPE_ALIASING, D3D12_RESOURCE_BARRIER_FLAG_NONE};
barrier.Aliasing = {draw_rt->GetResource(), nullptr};
GetCommandList()->ResourceBarrier(1, &barrier);
// Copy only the part needed by the draw.
CopyAndBind(bbox);
if (BindDrawPipeline(pipe)) if (BindDrawPipeline(pipe))
DrawIndexedPrimitive(p, count); DrawIndexedPrimitive(p, count);
p += count; p += count;
@ -4158,10 +4157,16 @@ void GSDevice12::SendHWDraw(const PipelineSelector& pipe, const GSHWDrawConfig&
return; return;
} }
if (one_barrier)
{
g_perfmon.Put(GSPerfMon::Barriers, 1);
// Optimization: For alpha second pass we can reuse the copy snapshot from the first pass. EndRenderPass();
if (!skip_first_barrier) // Specify null for the after resource as both resources are used after the barrier.
CopyAndBind(config.drawarea); D3D12_RESOURCE_BARRIER barrier = {D3D12_RESOURCE_BARRIER_TYPE_ALIASING, D3D12_RESOURCE_BARRIER_FLAG_NONE};
barrier.Aliasing = {draw_rt->GetResource(), nullptr};
GetCommandList()->ResourceBarrier(1, &barrier);
}
} }
if (BindDrawPipeline(pipe)) if (BindDrawPipeline(pipe))

View File

@ -456,7 +456,7 @@ public:
void IASetVertexBuffer(const void* vertex, size_t stride, size_t count); void IASetVertexBuffer(const void* vertex, size_t stride, size_t count);
void IASetIndexBuffer(const void* index, size_t count); void IASetIndexBuffer(const void* index, size_t count);
void PSSetShaderResource(int i, GSTexture* sr, bool check_state); void PSSetShaderResource(int i, GSTexture* sr, bool check_state, bool feedback = false);
void PSSetSampler(GSHWDrawConfig::SamplerSelector sel); void PSSetSampler(GSHWDrawConfig::SamplerSelector sel);
void OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i& scissor); void OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i& scissor);
@ -466,7 +466,7 @@ public:
bool BindDrawPipeline(const PipelineSelector& p); bool BindDrawPipeline(const PipelineSelector& p);
void RenderHW(GSHWDrawConfig& config) override; void RenderHW(GSHWDrawConfig& config) override;
void SendHWDraw(const PipelineSelector& pipe, const GSHWDrawConfig& config, GSTexture12* draw_rt_clone, GSTexture12* draw_rt, const bool one_barrier, const bool full_barrier, const bool skip_first_barrier); void SendHWDraw(const PipelineSelector& pipe, const GSHWDrawConfig& config, GSTexture12* draw_rt, const bool feedback, const bool one_barrier, const bool full_barrier);
void UpdateHWPipelineSelector(GSHWDrawConfig& config); void UpdateHWPipelineSelector(GSHWDrawConfig& config);
void UploadHWDrawVerticesAndIndices(const GSHWDrawConfig& config); void UploadHWDrawVerticesAndIndices(const GSHWDrawConfig& config);

View File

@ -15,14 +15,17 @@
#include "D3D12MemAlloc.h" #include "D3D12MemAlloc.h"
GSTexture12::GSTexture12(Type type, Format format, int width, int height, int levels, DXGI_FORMAT dxgi_format, GSTexture12::GSTexture12(Type type, Format format, int width, int height, int levels, DXGI_FORMAT dxgi_format,
wil::com_ptr_nothrow<ID3D12Resource> resource, wil::com_ptr_nothrow<D3D12MA::Allocation> allocation, wil::com_ptr_nothrow<ID3D12Resource> resource, wil::com_ptr_nothrow<ID3D12Resource> resource_fbl,
const D3D12DescriptorHandle& srv_descriptor, const D3D12DescriptorHandle& write_descriptor, wil::com_ptr_nothrow<D3D12MA::Allocation> allocation, const D3D12DescriptorHandle& srv_descriptor,
const D3D12DescriptorHandle& uav_descriptor, WriteDescriptorType wdtype, D3D12_RESOURCE_STATES resource_state) const D3D12DescriptorHandle& write_descriptor, const D3D12DescriptorHandle& uav_descriptor,
const D3D12DescriptorHandle& fbl_descriptor, WriteDescriptorType wdtype, D3D12_RESOURCE_STATES resource_state)
: m_resource(std::move(resource)) : m_resource(std::move(resource))
, m_resource_fbl(std::move(resource_fbl))
, m_allocation(std::move(allocation)) , m_allocation(std::move(allocation))
, m_srv_descriptor(srv_descriptor) , m_srv_descriptor(srv_descriptor)
, m_write_descriptor(write_descriptor) , m_write_descriptor(write_descriptor)
, m_uav_descriptor(uav_descriptor) , m_uav_descriptor(uav_descriptor)
, m_fbl_descriptor(fbl_descriptor)
, m_write_descriptor_type(wdtype) , m_write_descriptor_type(wdtype)
, m_dxgi_format(dxgi_format) , m_dxgi_format(dxgi_format)
, m_resource_state(resource_state) , m_resource_state(resource_state)
@ -64,8 +67,13 @@ void GSTexture12::Destroy(bool defer)
if (m_uav_descriptor) if (m_uav_descriptor)
dev->DeferDescriptorDestruction(dev->GetDescriptorHeapManager(), &m_uav_descriptor); dev->DeferDescriptorDestruction(dev->GetDescriptorHeapManager(), &m_uav_descriptor);
if (m_fbl_descriptor)
dev->DeferDescriptorDestruction(dev->GetDescriptorHeapManager(), &m_fbl_descriptor);
dev->DeferResourceDestruction(m_allocation.get(), m_resource.get()); dev->DeferResourceDestruction(m_allocation.get(), m_resource.get());
dev->DeferResourceDestruction(m_allocation.get(), m_resource_fbl.get());
m_resource.reset(); m_resource.reset();
m_resource_fbl.reset();
m_allocation.reset(); m_allocation.reset();
} }
else else
@ -88,7 +96,11 @@ void GSTexture12::Destroy(bool defer)
if (m_uav_descriptor) if (m_uav_descriptor)
dev->GetDescriptorHeapManager().Free(&m_uav_descriptor); dev->GetDescriptorHeapManager().Free(&m_uav_descriptor);
if (m_fbl_descriptor)
dev->GetDescriptorHeapManager().Free(&m_fbl_descriptor);
m_resource.reset(); m_resource.reset();
m_resource_fbl.reset();
m_allocation.reset(); m_allocation.reset();
} }
@ -135,7 +147,9 @@ std::unique_ptr<GSTexture12> GSTexture12::Create(Type type, Format format, int w
// RT's tend to be larger, so we'll keep them committed for speed. // RT's tend to be larger, so we'll keep them committed for speed.
pxAssert(levels == 1); pxAssert(levels == 1);
allocationDesc.Flags |= D3D12MA::ALLOCATION_FLAG_COMMITTED; allocationDesc.Flags |= D3D12MA::ALLOCATION_FLAG_COMMITTED;
desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET; allocationDesc.ExtraHeapFlags = D3D12_HEAP_FLAG_DENY_BUFFERS | D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES;
desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS;
desc.Layout = D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE;
optimized_clear_value.Format = rtv_format; optimized_clear_value.Format = rtv_format;
state = D3D12_RESOURCE_STATE_RENDER_TARGET; state = D3D12_RESOURCE_STATE_RENDER_TARGET;
} }
@ -167,20 +181,63 @@ std::unique_ptr<GSTexture12> GSTexture12::Create(Type type, Format format, int w
desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS; desc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;
wil::com_ptr_nothrow<ID3D12Resource> resource; wil::com_ptr_nothrow<ID3D12Resource> resource;
wil::com_ptr_nothrow<ID3D12Resource> resource_fbl;
wil::com_ptr_nothrow<D3D12MA::Allocation> allocation; wil::com_ptr_nothrow<D3D12MA::Allocation> allocation;
HRESULT hr = dev->GetAllocator()->CreateResource(&allocationDesc, &desc, state,
(type == Type::RenderTarget || type == Type::DepthStencil) ? &optimized_clear_value : nullptr, allocation.put(),
IID_PPV_ARGS(resource.put()));
if (FAILED(hr))
{
// OOM isn't fatal.
if (hr != E_OUTOFMEMORY)
Console.Error("Create texture failed: 0x%08X", hr);
return {}; if (type == Type::RenderTarget)
{
const D3D12_RESOURCE_ALLOCATION_INFO allocInfo = dev->GetDevice()->GetResourceAllocationInfo(0, 1, &desc);
HRESULT hr = dev->GetAllocator()->AllocateMemory(&allocationDesc, &allocInfo, allocation.put());
if (FAILED(hr))
{
// OOM isn't fatal.
if (hr != E_OUTOFMEMORY)
Console.Error("Allocate texture memory failed: 0x%08X", hr);
return {};
}
hr = dev->GetAllocator()->CreateAliasingResource(allocation.get(), 0, &desc, state,
(type == Type::RenderTarget || type == Type::DepthStencil) ? &optimized_clear_value : nullptr,
IID_PPV_ARGS(resource.put()));
if (FAILED(hr))
{
// OOM isn't fatal.
if (hr != E_OUTOFMEMORY)
Console.Error("Create texture resource 1 failed: 0x%08X", hr);
return {};
}
hr = dev->GetAllocator()->CreateAliasingResource(allocation.get(), 0, &desc, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE,
(type == Type::RenderTarget || type == Type::DepthStencil) ? &optimized_clear_value : nullptr,
IID_PPV_ARGS(resource_fbl.put()));
if (FAILED(hr))
{
// OOM isn't fatal.
if (hr != E_OUTOFMEMORY)
Console.Error("Create texture resource 2 failed: 0x%08X", hr);
return {};
}
}
else
{
HRESULT hr = dev->GetAllocator()->CreateResource(&allocationDesc, &desc, state,
(type == Type::RenderTarget || type == Type::DepthStencil) ? &optimized_clear_value : nullptr, allocation.put(),
IID_PPV_ARGS(resource.put()));
if (FAILED(hr))
{
// OOM isn't fatal.
if (hr != E_OUTOFMEMORY)
Console.Error("Create texture failed: 0x%08X", hr);
return {};
}
} }
D3D12DescriptorHandle srv_descriptor, write_descriptor, uav_descriptor; D3D12DescriptorHandle srv_descriptor, write_descriptor, uav_descriptor, fbl_descriptor;
WriteDescriptorType write_descriptor_type = WriteDescriptorType::None; WriteDescriptorType write_descriptor_type = WriteDescriptorType::None;
if (srv_format != DXGI_FORMAT_UNKNOWN) if (srv_format != DXGI_FORMAT_UNKNOWN)
{ {
@ -223,9 +280,20 @@ std::unique_ptr<GSTexture12> GSTexture12::Create(Type type, Format format, int w
return {}; return {};
} }
if (resource_fbl)
{
if (!CreateSRVDescriptor(resource_fbl.get(), levels, srv_format, &fbl_descriptor))
{
dev->GetDescriptorHeapManager().Free(&uav_descriptor);
dev->GetDescriptorHeapManager().Free(&write_descriptor);
dev->GetDescriptorHeapManager().Free(&srv_descriptor);
return {};
}
}
return std::unique_ptr<GSTexture12>( return std::unique_ptr<GSTexture12>(
new GSTexture12(type, format, width, height, levels, dxgi_format, std::move(resource), std::move(allocation), new GSTexture12(type, format, width, height, levels, dxgi_format, std::move(resource), std::move(resource_fbl), std::move(allocation),
srv_descriptor, write_descriptor, uav_descriptor, write_descriptor_type, state)); srv_descriptor, write_descriptor, uav_descriptor, fbl_descriptor, write_descriptor_type, state));
} }
std::unique_ptr<GSTexture12> GSTexture12::Adopt(wil::com_ptr_nothrow<ID3D12Resource> resource, Type type, Format format, std::unique_ptr<GSTexture12> GSTexture12::Adopt(wil::com_ptr_nothrow<ID3D12Resource> resource, Type type, Format format,
@ -272,8 +340,8 @@ std::unique_ptr<GSTexture12> GSTexture12::Adopt(wil::com_ptr_nothrow<ID3D12Resou
} }
return std::unique_ptr<GSTexture12>(new GSTexture12(type, format, static_cast<u32>(desc.Width), desc.Height, return std::unique_ptr<GSTexture12>(new GSTexture12(type, format, static_cast<u32>(desc.Width), desc.Height,
desc.MipLevels, desc.Format, std::move(resource), {}, srv_descriptor, write_descriptor, uav_descriptor, desc.MipLevels, desc.Format, std::move(resource), {}, {}, srv_descriptor, write_descriptor, uav_descriptor,
write_descriptor_type, resource_state)); {}, write_descriptor_type, resource_state));
} }
bool GSTexture12::CreateSRVDescriptor( bool GSTexture12::CreateSRVDescriptor(

View File

@ -31,9 +31,11 @@ public:
__fi const D3D12DescriptorHandle& GetSRVDescriptor() const { return m_srv_descriptor; } __fi const D3D12DescriptorHandle& GetSRVDescriptor() const { return m_srv_descriptor; }
__fi const D3D12DescriptorHandle& GetWriteDescriptor() const { return m_write_descriptor; } __fi const D3D12DescriptorHandle& GetWriteDescriptor() const { return m_write_descriptor; }
__fi const D3D12DescriptorHandle& GetUAVDescriptor() const { return m_uav_descriptor; } __fi const D3D12DescriptorHandle& GetUAVDescriptor() const { return m_uav_descriptor; }
__fi const D3D12DescriptorHandle& GetFBLDescriptor() const { return m_fbl_descriptor; }
__fi D3D12_RESOURCE_STATES GetResourceState() const { return m_resource_state; } __fi D3D12_RESOURCE_STATES GetResourceState() const { return m_resource_state; }
__fi DXGI_FORMAT GetDXGIFormat() const { return m_dxgi_format; } __fi DXGI_FORMAT GetDXGIFormat() const { return m_dxgi_format; }
__fi ID3D12Resource* GetResource() const { return m_resource.get(); } __fi ID3D12Resource* GetResource() const { return m_resource.get(); }
__fi ID3D12Resource* GetFBLResource() const { return m_resource_fbl.get(); }
void* GetNativeHandle() const override; void* GetNativeHandle() const override;
@ -68,9 +70,10 @@ private:
}; };
GSTexture12(Type type, Format format, int width, int height, int levels, DXGI_FORMAT dxgi_format, GSTexture12(Type type, Format format, int width, int height, int levels, DXGI_FORMAT dxgi_format,
wil::com_ptr_nothrow<ID3D12Resource> resource, wil::com_ptr_nothrow<D3D12MA::Allocation> allocation, wil::com_ptr_nothrow<ID3D12Resource> resource, wil::com_ptr_nothrow<ID3D12Resource> resource_fbl,
const D3D12DescriptorHandle& srv_descriptor, const D3D12DescriptorHandle& write_descriptor, wil::com_ptr_nothrow<D3D12MA::Allocation> allocation, const D3D12DescriptorHandle& srv_descriptor,
const D3D12DescriptorHandle& uav_descriptor, WriteDescriptorType wdtype, D3D12_RESOURCE_STATES resource_state); const D3D12DescriptorHandle& write_descriptor, const D3D12DescriptorHandle& uav_descriptor,
const D3D12DescriptorHandle& fbl_descriptor, WriteDescriptorType wdtype, D3D12_RESOURCE_STATES resource_state);
static bool CreateSRVDescriptor( static bool CreateSRVDescriptor(
ID3D12Resource* resource, u32 levels, DXGI_FORMAT format, D3D12DescriptorHandle* dh); ID3D12Resource* resource, u32 levels, DXGI_FORMAT format, D3D12DescriptorHandle* dh);
@ -83,11 +86,13 @@ private:
void CopyTextureDataForUpload(void* dst, const void* src, u32 pitch, u32 upload_pitch, u32 height) const; void CopyTextureDataForUpload(void* dst, const void* src, u32 pitch, u32 upload_pitch, u32 height) const;
wil::com_ptr_nothrow<ID3D12Resource> m_resource; wil::com_ptr_nothrow<ID3D12Resource> m_resource;
wil::com_ptr_nothrow<ID3D12Resource> m_resource_fbl;
wil::com_ptr_nothrow<D3D12MA::Allocation> m_allocation; wil::com_ptr_nothrow<D3D12MA::Allocation> m_allocation;
D3D12DescriptorHandle m_srv_descriptor = {}; D3D12DescriptorHandle m_srv_descriptor = {};
D3D12DescriptorHandle m_write_descriptor = {}; D3D12DescriptorHandle m_write_descriptor = {};
D3D12DescriptorHandle m_uav_descriptor = {}; D3D12DescriptorHandle m_uav_descriptor = {};
D3D12DescriptorHandle m_fbl_descriptor = {};
WriteDescriptorType m_write_descriptor_type = WriteDescriptorType::None; WriteDescriptorType m_write_descriptor_type = WriteDescriptorType::None;
DXGI_FORMAT m_dxgi_format = DXGI_FORMAT_UNKNOWN; DXGI_FORMAT m_dxgi_format = DXGI_FORMAT_UNKNOWN;