Compare commits

..

3 Commits

Author SHA1 Message Date
Dario 888f11e7f4 Update comment. 2025-03-13 19:12:05 -03:00
Dario cb4eaae9ff Remove waitIdle and only accept valid pointers on execute. 2025-03-13 19:11:02 -03:00
Dario 9b7625f03e Remove the need for waitIdle from Vulkan. 2025-03-13 19:08:35 -03:00
11 changed files with 64 additions and 166 deletions
+48
View File
@@ -0,0 +1,48 @@
---
name: Bug Report
about: Report a bug in Unleashed Recompiled
type: Bug
---
### Validation
- [ ] I have checked the [Issues](https://github.com/hedge-dev/UnleashedRecomp/issues) page to see if my problem has already been reported
- [ ] I have confirmed that this bug does not occur in the original game running on original Xbox 360 hardware
#### If you have DLC installed, please specify which ones you have.
- [ ] Apotos & Shamar Adventure Pack
- [ ] Chun-nan Adventure Pack
- [ ] Empire City & Adabat Adventure Pack
- [ ] Holoska Adventure Pack
- [ ] Mazuri Adventure Pack
- [ ] Spagonia Adventure Pack
#### If you have mods enabled, please specify which ones you have.
Provide a list of your enabled mods in Hedge Mod Manager here. You will not receive support for issues *caused* by mods.
#### If you have codes enabled, please specify which ones you have.
Provide a list of your enabled codes in Hedge Mod Manager here.
### Describe the Bug
A clear and concise description of what the bug is.
### Steps to Reproduce
Steps to reproduce the bug:
1. Go to '...'
2. etc.
### Expected Behavior
A clear and concise description of what you expected to happen.
### Footage
Attach a screenshot or video of the bug. If possible, please also provide footage of the expected behaviour on original Xbox 360 hardware.
### Specifications
Fill out the following details:
- CPU: (e.g. Intel Core [...], AMD Ryzen [...], etc.)
- GPU: (e.g. NVIDIA GeForce [...], Radeon HD [...], Intel HD [...], etc.)
- GPU Driver: (e.g NVIDIA driver 545.XX, AMD driver 24.X.X, etc.)
- OS: (e.g. Windows 10, Windows 11, Linux distro)
- Version: (e.g. 1.0.0)
### Additional Context
Provide any other context about the problem here.
-95
View File
@@ -1,95 +0,0 @@
name: Bug Report
description: Report a bug, crash, or other type of error in Unleashed Recompiled
type: Bug
body:
- id: validation
type: checkboxes
attributes:
label: Validation
options:
- label: I have checked the [Issues](https://github.com/hedge-dev/UnleashedRecomp/issues) page to see if my problem has already been reported
required: true
- label: I have confirmed that this bug does not occur in the original game running on original Xbox 360 hardware
required: false
- id: dlc-installed
type: checkboxes
attributes:
label: If you have DLC installed, please specify which ones you have.
options:
- label: Apotos & Shamar Adventure Pack
required: false
- label: Chun-nan Adventure Pack
required: false
- label: Empire City & Adabat Adventure Pack
required: false
- label: Holoska Adventure Pack
required: false
- label: Mazuri Adventure Pack
required: false
- label: Spagonia Adventure Pack
required: false
- id: mods-used
type: textarea
validations:
required: false
attributes:
label: If you have mods enabled, please specify which ones you have.
description: Provide a list of your enabled mods in Hedge Mod Manager here. You will not receive support for issues *caused* by mods.
- id: codes-used
type: textarea
validations:
required: false
attributes:
label: If you have codes enabled, please specify which ones you have.
description: Provide a list of your enabled codes in Hedge Mod Manager here.
- id: describe-bug
type: textarea
validations:
required: true
attributes:
label: Describe the Bug
description: A clear and concise description of what the bug is.
- id: repro-steps
type: textarea
validations:
required: true
attributes:
label: Steps to Reproduce
description: Step-by-step instructions on how to reproduce the bug.
placeholder: |
1. Go to '...'
2. etc.
- id: expected-behavior
type: textarea
validations:
required: true
attributes:
label: Expected Behavior
description: A clear and concise description of what you expected to happen.
- id: footage
type: textarea
validations:
required: true
attributes:
label: Footage
description: Attach a screenshot or video of the bug. If possible, please also provide footage of the expected behaviour on original Xbox 360 hardware.
- id: system-specifications
type: textarea
validations:
required: true
attributes:
label: System Specifications
description: Fill out the following details.
placeholder: |
- CPU: (e.g. Intel Core [...], AMD Ryzen [...], etc.)
- GPU: (e.g. NVIDIA GeForce [...], Radeon HD [...], Intel HD [...], etc.)
- GPU Driver: (e.g NVIDIA driver 545.XX, AMD driver 24.X.X, etc.)
- OS: (e.g. Windows 10, Windows 11, Linux distro)
- Version: (e.g. 1.0.0)
- id: additional-context
type: textarea
validations:
required: false
attributes:
label: Additional Context
description: Provide any other context about the problem here.
-1
View File
@@ -1 +0,0 @@
blank_issues_enabled: true
+4 -7
View File
@@ -2285,6 +2285,9 @@ namespace plume {
} }
void D3D12CommandQueue::executeCommandLists(const RenderCommandList **commandLists, uint32_t commandListCount, RenderCommandSemaphore **waitSemaphores, uint32_t waitSemaphoreCount, RenderCommandSemaphore **signalSemaphores, uint32_t signalSemaphoreCount, RenderCommandFence *signalFence) { void D3D12CommandQueue::executeCommandLists(const RenderCommandList **commandLists, uint32_t commandListCount, RenderCommandSemaphore **waitSemaphores, uint32_t waitSemaphoreCount, RenderCommandSemaphore **signalSemaphores, uint32_t signalSemaphoreCount, RenderCommandFence *signalFence) {
assert(commandLists != nullptr);
assert(commandListCount > 0);
for (uint32_t i = 0; i < waitSemaphoreCount; i++) { for (uint32_t i = 0; i < waitSemaphoreCount; i++) {
D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(waitSemaphores[i]); D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(waitSemaphores[i]);
d3d->Wait(interfaceSemaphore->d3d, interfaceSemaphore->semaphoreValue); d3d->Wait(interfaceSemaphore->d3d, interfaceSemaphore->semaphoreValue);
@@ -2297,9 +2300,7 @@ namespace plume {
executionVector.emplace_back(static_cast<ID3D12CommandList *>(interfaceCommandList->d3d)); executionVector.emplace_back(static_cast<ID3D12CommandList *>(interfaceCommandList->d3d));
} }
if (!executionVector.empty()) { d3d->ExecuteCommandLists(UINT(executionVector.size()), executionVector.data());
d3d->ExecuteCommandLists(UINT(executionVector.size()), executionVector.data());
}
for (uint32_t i = 0; i < signalSemaphoreCount; i++) { for (uint32_t i = 0; i < signalSemaphoreCount; i++) {
D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(signalSemaphores[i]); D3D12CommandSemaphore *interfaceSemaphore = static_cast<D3D12CommandSemaphore *>(signalSemaphores[i]);
@@ -3798,10 +3799,6 @@ namespace plume {
return countsSupported; return countsSupported;
} }
void D3D12Device::waitIdle() const {
assert(false && "Use fences to replicate wait idle behavior on D3D12.");
}
void D3D12Device::release() { void D3D12Device::release() {
if (d3d != nullptr) { if (d3d != nullptr) {
d3d->Release(); d3d->Release();
-1
View File
@@ -459,7 +459,6 @@ namespace plume {
const RenderDeviceCapabilities &getCapabilities() const override; const RenderDeviceCapabilities &getCapabilities() const override;
const RenderDeviceDescription &getDescription() const override; const RenderDeviceDescription &getDescription() const override;
RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override; RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override;
void waitIdle() const override;
void release(); void release();
bool isValid() const; bool isValid() const;
}; };
@@ -200,7 +200,7 @@ namespace plume {
// Concrete implementation shortcuts. // Concrete implementation shortcuts.
inline void executeCommandLists(const RenderCommandList *commandList, RenderCommandFence *signalFence = nullptr) { inline void executeCommandLists(const RenderCommandList *commandList, RenderCommandFence *signalFence = nullptr) {
executeCommandLists(commandList != nullptr ? &commandList : nullptr, commandList != nullptr ? 1 : 0, nullptr, 0, nullptr, 0, signalFence); executeCommandLists(&commandList, 1, nullptr, 0, nullptr, 0, signalFence);
} }
}; };
@@ -242,7 +242,6 @@ namespace plume {
virtual const RenderDeviceCapabilities &getCapabilities() const = 0; virtual const RenderDeviceCapabilities &getCapabilities() const = 0;
virtual const RenderDeviceDescription &getDescription() const = 0; virtual const RenderDeviceDescription &getDescription() const = 0;
virtual RenderSampleCounts getSampleCountsSupported(RenderFormat format) const = 0; virtual RenderSampleCounts getSampleCountsSupported(RenderFormat format) const = 0;
virtual void waitIdle() const = 0;
}; };
struct RenderInterface { struct RenderInterface {
-4
View File
@@ -4190,10 +4190,6 @@ namespace plume {
} }
} }
void VulkanDevice::waitIdle() const {
vkDeviceWaitIdle(vk);
}
void VulkanDevice::release() { void VulkanDevice::release() {
if (allocator != VK_NULL_HANDLE) { if (allocator != VK_NULL_HANDLE) {
vmaDestroyAllocator(allocator); vmaDestroyAllocator(allocator);
-1
View File
@@ -430,7 +430,6 @@ namespace plume {
const RenderDeviceCapabilities &getCapabilities() const override; const RenderDeviceCapabilities &getCapabilities() const override;
const RenderDeviceDescription &getDescription() const override; const RenderDeviceDescription &getDescription() const override;
RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override; RenderSampleCounts getSampleCountsSupported(RenderFormat format) const override;
void waitIdle() const override;
void release(); void release();
bool isValid() const; bool isValid() const;
}; };
+11 -13
View File
@@ -1973,23 +1973,21 @@ void Video::WaitForGPU()
{ {
g_waitForGPUCount++; g_waitForGPUCount++;
if (g_vulkan) // Wait for all queued frames to finish.
for (size_t i = 0; i < NUM_FRAMES; i++)
{ {
g_device->waitIdle(); if (g_commandListStates[i])
}
else
{
for (size_t i = 0; i < NUM_FRAMES; i++)
{ {
if (g_commandListStates[i]) g_queue->waitForCommandFence(g_commandFences[i].get());
{ g_commandListStates[i] = false;
g_queue->waitForCommandFence(g_commandFences[i].get());
g_commandListStates[i] = false;
}
} }
g_queue->executeCommandLists(nullptr, g_commandFences[0].get());
g_queue->waitForCommandFence(g_commandFences[0].get());
} }
// Execute an empty command list and wait for it to end to guarantee that any remaining presentation has finished.
g_commandLists[0]->begin();
g_commandLists[0]->end();
g_queue->executeCommandLists(g_commandLists[0].get(), g_commandFences[0].get());
g_queue->waitForCommandFence(g_commandFences[0].get());
} }
static uint32_t CreateDevice(uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5, be<uint32_t>* a6) static uint32_t CreateDevice(uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5, be<uint32_t>* a6)
@@ -116,42 +116,3 @@ PPC_FUNC(sub_823B4590)
SDL_User_EvilSonic(false); SDL_User_EvilSonic(false);
} }
// Change state to squat kick.
PPC_FUNC_IMPL(__imp__sub_8236FE88);
PPC_FUNC(sub_8236FE88)
{
if (Config::DisableSquatKick)
{
ctx.r3.u32 = 0;
return;
}
__imp__sub_8236FE88(ctx, base);
}
// Change state to drift.
PPC_FUNC_IMPL(__imp__sub_82370A50);
PPC_FUNC(sub_82370A50)
{
if (ctx.r4.u32)
{
if (Config::DisableDriftOnSlide)
{
if (auto pInputState = SWA::CInputState::GetInstance())
{
auto& rPadState = pInputState->GetPadState();
if (!rPadState.IsDown(SWA::eKeyState_LeftTrigger) && !rPadState.IsDown(SWA::eKeyState_RightTrigger))
return;
}
}
}
else
{
if (Config::DisableDriftOnBrake)
return;
}
__imp__sub_82370A50(ctx, base);
}
-3
View File
@@ -80,11 +80,8 @@ CONFIG_DEFINE_HIDDEN("Codes", bool, DisableAutoSaveWarning, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableBoostFilter, false); CONFIG_DEFINE_HIDDEN("Codes", bool, DisableBoostFilter, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDLCIcon, false); CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDLCIcon, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDPadMovement, false); CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDPadMovement, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDriftOnBrake, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDriftOnSlide, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDWMRoundedCorners, false); CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDWMRoundedCorners, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableLowResolutionFontOnCustomUI, false); CONFIG_DEFINE_HIDDEN("Codes", bool, DisableLowResolutionFontOnCustomUI, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableSquatKick, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, EnableEventCollisionDebugView, false); CONFIG_DEFINE_HIDDEN("Codes", bool, EnableEventCollisionDebugView, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, EnableGIMipLevelDebugView, false); CONFIG_DEFINE_HIDDEN("Codes", bool, EnableGIMipLevelDebugView, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, EnableObjectCollisionDebugView, false); CONFIG_DEFINE_HIDDEN("Codes", bool, EnableObjectCollisionDebugView, false);