diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index a87bf16d1e..bc37345197 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -1432,7 +1432,7 @@ static Module *__KernelLoadELFFromPtr(const u8 *ptr, size_t elfSize, u32 loadAdd delete [] newptr; if (!reportedModule && IsHLEVersionedModule(modinfo->name)) { - INFO_LOG_REPORT(SCEMODULE, "Loading module %s with version %04x, devkit %08x", modinfo->name, modinfo->moduleVersion, devkitVersion); + INFO_LOG(SCEMODULE, "Loading module %s with version %04x, devkit %08x", modinfo->name, modinfo->moduleVersion, devkitVersion); if (!strcmp(modinfo->name, "sceMpeg_library")) { __MpegLoadModule(modinfo->moduleVersion); diff --git a/GPU/Common/SoftwareTransformCommon.cpp b/GPU/Common/SoftwareTransformCommon.cpp index a7f0410038..c92b9b9131 100644 --- a/GPU/Common/SoftwareTransformCommon.cpp +++ b/GPU/Common/SoftwareTransformCommon.cpp @@ -394,7 +394,7 @@ void SoftwareTransform( // TODO: This bleeds outside the play area in non-buffered mode. Big deal? Probably not. // TODO: Allow creating a depth clear and a color draw. bool reallyAClear = false; - if (maxIndex > 1 && prim == GE_PRIM_RECTANGLES && gstate.isModeClear()) { + if (maxIndex > 1 && prim == GE_PRIM_RECTANGLES && gstate.isModeClear() && params->allowClear) { int scissorX2 = gstate.getScissorX2() + 1; int scissorY2 = gstate.getScissorY2() + 1; reallyAClear = IsReallyAClear(transformed, maxIndex, scissorX2, scissorY2); diff --git a/GPU/Common/SoftwareTransformCommon.h b/GPU/Common/SoftwareTransformCommon.h index 9ae3bd2697..9bc2e4da49 100644 --- a/GPU/Common/SoftwareTransformCommon.h +++ b/GPU/Common/SoftwareTransformCommon.h @@ -44,6 +44,7 @@ struct SoftwareTransformParams { TransformedVertex *transformedExpanded; FramebufferManagerCommon *fbman; TextureCacheCommon *texCache; + bool allowClear; bool allowSeparateAlphaClear; }; diff --git a/GPU/D3D11/DrawEngineD3D11.cpp b/GPU/D3D11/DrawEngineD3D11.cpp index 7f09171a13..d43edbdd89 100644 --- a/GPU/D3D11/DrawEngineD3D11.cpp +++ b/GPU/D3D11/DrawEngineD3D11.cpp @@ -635,16 +635,14 @@ rotateVBO: bool drawIndexed = false; u16 *inds = decIndex; TransformedVertex *drawBuffer = NULL; - SoftwareTransformResult result; - memset(&result, 0, sizeof(result)); - - SoftwareTransformParams params; - memset(¶ms, 0, sizeof(params)); + SoftwareTransformResult result{}; + SoftwareTransformParams params{}; params.decoded = decoded; params.transformed = transformed; params.transformedExpanded = transformedExpanded; params.fbman = framebufferManager_; params.texCache = textureCache_; + params.allowClear = true; params.allowSeparateAlphaClear = false; // D3D11 doesn't support separate alpha clears int maxIndex = indexGen.MaxIndex(); diff --git a/GPU/Directx9/DrawEngineDX9.cpp b/GPU/Directx9/DrawEngineDX9.cpp index da76b0024f..fbfafd13e3 100644 --- a/GPU/Directx9/DrawEngineDX9.cpp +++ b/GPU/Directx9/DrawEngineDX9.cpp @@ -599,16 +599,14 @@ rotateVBO: bool drawIndexed = false; u16 *inds = decIndex; TransformedVertex *drawBuffer = NULL; - SoftwareTransformResult result; - memset(&result, 0, sizeof(result)); - - SoftwareTransformParams params; - memset(¶ms, 0, sizeof(params)); + SoftwareTransformResult result{}; + SoftwareTransformParams params{}; params.decoded = decoded; params.transformed = transformed; params.transformedExpanded = transformedExpanded; params.fbman = framebufferManager_; params.texCache = textureCache_; + params.allowClear = true; params.allowSeparateAlphaClear = true; int maxIndex = indexGen.MaxIndex(); diff --git a/GPU/GLES/DrawEngineGLES.cpp b/GPU/GLES/DrawEngineGLES.cpp index 030400479a..95e6b53de9 100644 --- a/GPU/GLES/DrawEngineGLES.cpp +++ b/GPU/GLES/DrawEngineGLES.cpp @@ -670,17 +670,15 @@ rotateVBO: int numTrans; bool drawIndexed = false; u16 *inds = decIndex; - SoftwareTransformResult result; - memset(&result, 0, sizeof(result)); - + SoftwareTransformResult result{}; // TODO: Keep this static? Faster than repopulating? - SoftwareTransformParams params; - memset(¶ms, 0, sizeof(params)); + SoftwareTransformParams params{}; params.decoded = decoded; params.transformed = transformed; params.transformedExpanded = transformedExpanded; params.fbman = framebufferManager_; params.texCache = textureCache_; + params.allowClear = true; params.allowSeparateAlphaClear = true; int maxIndex = indexGen.MaxIndex(); diff --git a/GPU/Vulkan/DrawEngineVulkan.cpp b/GPU/Vulkan/DrawEngineVulkan.cpp index 73fb6afe4e..04fb0c3423 100644 --- a/GPU/Vulkan/DrawEngineVulkan.cpp +++ b/GPU/Vulkan/DrawEngineVulkan.cpp @@ -897,17 +897,17 @@ void DrawEngineVulkan::DoFlush() { int numTrans = 0; bool drawIndexed = false; u16 *inds = decIndex; - TransformedVertex *drawBuffer = NULL; - SoftwareTransformResult result; - memset(&result, 0, sizeof(result)); - - SoftwareTransformParams params; - memset(¶ms, 0, sizeof(params)); + TransformedVertex *drawBuffer = nullptr; + SoftwareTransformResult result{}; + SoftwareTransformParams params{}; params.decoded = decoded; params.transformed = transformed; params.transformedExpanded = transformedExpanded; params.fbman = framebufferManager_; params.texCache = textureCache_; + // We have to force drawing of primitives if g_Config.iRenderingMode == 0 (non-buffered) because Vulkan clears + // do not respect scissor rects. + params.allowClear = g_Config.iRenderingMode != 0; params.allowSeparateAlphaClear = false; int maxIndex = indexGen.MaxIndex(); diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 6a653c27c2..2aca6b4616 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -457,12 +457,27 @@ void EmuScreen::onVKeyDown(int virtualKeyCode) { break; } +#ifndef MOBILE_DEVICE case VIRTKEY_RECORD: { - g_Config.bDumpFrames = !g_Config.bDumpFrames; - g_Config.bDumpAudio = !g_Config.bDumpAudio; + if (g_Config.bDumpFrames == g_Config.bDumpAudio) { + g_Config.bDumpFrames = !g_Config.bDumpFrames; + g_Config.bDumpAudio = !g_Config.bDumpAudio; + } else { + // This hotkey should always toggle both audio and video together. + // So let's make sure that's the only outcome even if video OR audio was already being dumped. + if (g_Config.bDumpFrames) { + AVIDump::Stop(); + AVIDump::Start(PSP_CoreParameter().renderWidth, PSP_CoreParameter().renderHeight); + g_Config.bDumpAudio = true; + } else { + WAVDump::Reset(); + g_Config.bDumpFrames = true; + } + } break; } +#endif case VIRTKEY_AXIS_X_MIN: case VIRTKEY_AXIS_X_MAX: diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index e145a623e2..f4db4a5280 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -2,9 +2,9 @@ - + android:versionCode="15030000" + android:versionName="1.5.3.0"> + GetBackbufferWidth(); h = vulkan_->GetBackbufferHeight(); renderPass = GetBackbufferRenderPass(); - _dbg_assert_msg_(G3D, step.render.color == VKRRenderPassAction::CLEAR || step.render.color == VKRRenderPassAction::DONT_CARE, "Backbuffer pass should only be CLEAR or DONT_CARE"); - _dbg_assert_msg_(G3D, step.render.depthStencil == VKRRenderPassAction::CLEAR || step.render.depthStencil == VKRRenderPassAction::DONT_CARE, "Backbuffer pass should only be CLEAR or DONT_CARE"); Uint8x4ToFloat4(clearVal[0].color.float32, step.render.clearColor); numClearVals = 2; // We don't bother with a depth buffer here. clearVal[1].depthStencil.depth = 0.0f;