Skip to content

Commit

Permalink
skip texture copy
Browse files Browse the repository at this point in the history
  • Loading branch information
weihuoya committed Jan 20, 2022
1 parent ce86294 commit 6a14dfe
Show file tree
Hide file tree
Showing 10 changed files with 39 additions and 18 deletions.
3 changes: 3 additions & 0 deletions src/android/app/src/main/assets/3dstdb-zh_CN.txt
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,9 @@
00040000001BB200 = 银河战士 萨姆斯归来
00040000001BFC00 = 银河战士 萨姆斯归来
00040000001BFB00 = 银河战士 萨姆斯归来
000400000016E300 = 银河战士 同盟力量
000400000016CE00 = 银河战士 同盟力量
0004000000175200 = 银河战士 同盟力量
0004001000021700 = Mii Maker
0004000000047B00 = 纳米突击
000400000018EB00 = 热血物语 SP
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,13 @@ public class SettingsItem {
public static final int SETTING_CORE_TICKS_HACK = 0;
public static final int SETTING_SKIP_SLOW_DRAW = 1;
public static final int SETTING_SKIP_CPU_WRITE = 2;
public static final int SETTING_USE_LINEAR_FILTER = 3;
public static final int SETTING_SCALE_FACTOR = 4;
public static final int SETTING_SCREEN_LAYOUT = 5;
public static final int SETTING_ACCURATE_MUL = 6;
public static final int SETTING_CUSTOM_LAYOUT = 7;
public static final int SETTING_FRAME_LIMIT = 8;
public static final int SETTING_SKIP_TEXTURE_COPY = 3;
public static final int SETTING_USE_LINEAR_FILTER = 4;
public static final int SETTING_SCALE_FACTOR = 5;
public static final int SETTING_SCREEN_LAYOUT = 6;
public static final int SETTING_ACCURATE_MUL = 7;
public static final int SETTING_CUSTOM_LAYOUT = 8;
public static final int SETTING_FRAME_LIMIT = 9;

// pref
public static final int SETTING_JOYSTICK_RELATIVE = 100;
Expand Down Expand Up @@ -652,6 +653,9 @@ public void loadSettingsMenu() {
mSettings.add(new SettingsItem(SettingsItem.SETTING_SKIP_CPU_WRITE,
R.string.setting_skip_cpu_write,
SettingsItem.TYPE_CHECKBOX, mRunningSettings[i++]));
mSettings.add(new SettingsItem(SettingsItem.SETTING_SKIP_TEXTURE_COPY,
R.string.setting_skip_texture_copy,
SettingsItem.TYPE_CHECKBOX, mRunningSettings[i++]));
mSettings.add(new SettingsItem(SettingsItem.SETTING_USE_LINEAR_FILTER,
R.string.setting_use_linear_filter,
SettingsItem.TYPE_CHECKBOX, mRunningSettings[i++]));
Expand Down
1 change: 1 addition & 0 deletions src/android/app/src/main/res/values-zh/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
<string name="setting_core_ticks_hack">FMV Hack</string>
<string name="setting_skip_slow_draw">跳过慢渲染</string>
<string name="setting_skip_cpu_write">跳过CPU访问</string>
<string name="setting_skip_texture_copy">跳过纹理复制</string>
<string name="setting_use_linear_filter">使用线性过滤</string>
<string name="use_haptic_feedback">按键反馈(震动)</string>
<string name="joystick_relative_center">摇杆使用相对位置</string>
Expand Down
1 change: 1 addition & 0 deletions src/android/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
<string name="setting_core_ticks_hack">FMV Hack</string>
<string name="setting_skip_slow_draw">Skip Slow Draw</string>
<string name="setting_skip_cpu_write">Skip CPU Access</string>
<string name="setting_skip_texture_copy">Skip Texture Copy</string>
<string name="setting_use_linear_filter">Use Linear Filter</string>
<string name="use_haptic_feedback">Haptic Feedback (Vibration)</string>
<string name="joystick_relative_center">Joystick use relative center</string>
Expand Down
2 changes: 1 addition & 1 deletion src/android/jni/jni_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ int NativeLibrary::GetDisplayRotation() {
}

bool NativeLibrary::IsPortrait() {
return current_display_rotation == 0 || current_display_rotation == 3;
return current_display_rotation == 0 || current_display_rotation == 2;
}

bool NativeLibrary::CheckRecordPermission() {
Expand Down
13 changes: 10 additions & 3 deletions src/android/jni/main_android.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,7 @@ JNIEXPORT void JNICALL Java_org_citra_emu_NativeLibrary_Run(JNIEnv* env, jclass
Settings::values.skip_slow_draw = false;
Settings::values.display_transfer_hack = false;
Settings::values.skip_cpu_write = false;
Settings::values.skip_texture_copy = false;
Settings::values.disable_clip_coef = false;
Settings::values.y2r_perform_hack = false;
Settings::values.y2r_event_delay = false;
Expand Down Expand Up @@ -524,8 +525,10 @@ JNIEXPORT void JNICALL Java_org_citra_emu_NativeLibrary_Run(JNIEnv* env, jclass
}

JNIEXPORT void JNICALL Java_org_citra_emu_NativeLibrary_ResumeEmulation(JNIEnv* env, jclass obj) {
s_is_running = true;
s_running_cv.notify_all();
if (!s_stop_running) {
s_is_running = true;
s_running_cv.notify_all();
}
}

JNIEXPORT void JNICALL Java_org_citra_emu_NativeLibrary_PauseEmulation(JNIEnv* env, jclass obj) {
Expand All @@ -542,12 +545,13 @@ JNIEXPORT void JNICALL Java_org_citra_emu_NativeLibrary_StopEmulation(JNIEnv* en
JNIEXPORT jintArray JNICALL Java_org_citra_emu_NativeLibrary_getRunningSettings(JNIEnv* env,
jclass obj) {
int i = 0;
int settings[9];
int settings[10];

// get settings
settings[i++] = Settings::values.core_ticks_hack > 0;
settings[i++] = Settings::values.skip_slow_draw;
settings[i++] = Settings::values.skip_cpu_write;
settings[i++] = Settings::values.skip_texture_copy;
settings[i++] = Settings::values.use_linear_filter;
settings[i++] = std::min(std::max(Settings::values.resolution_factor - 1, 0), 3);
settings[i++] = static_cast<int>(Settings::values.layout_option);
Expand All @@ -574,6 +578,9 @@ JNIEXPORT void JNICALL Java_org_citra_emu_NativeLibrary_setRunningSettings(JNIEn
// Skip CPU Write
Settings::values.skip_cpu_write = settings[i++] > 0;

// Skip Texture Copy
Settings::values.skip_texture_copy = settings[i++] > 0;

// Use Linear Filter
Settings::values.use_linear_filter = settings[i++] > 0;

Expand Down
4 changes: 4 additions & 0 deletions src/core/core.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,10 @@ static void LoadOverrides(u64 title_id) {
} else if (title_id == 0x00040000000DCA00) {
// Danball Senki W Chou Custom
Settings::values.y2r_perform_hack = true;
} else if (title_id == 0x000400000008B400 || title_id == 0x0004000000030600 ||
title_id == 0x0004000000030800 || title_id == 0x0004000000030700) {
// Mario Kart 7
Settings::values.skip_texture_copy = true;
}

const std::array<u64, 7> cpu_limit_ids = {
Expand Down
1 change: 1 addition & 0 deletions src/core/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ struct Values {
bool use_shader_cache;
bool skip_slow_draw;
bool skip_cpu_write;
bool skip_texture_copy;
bool disable_clip_coef;
bool display_transfer_hack;
bool stream_buffer_hack;
Expand Down
2 changes: 1 addition & 1 deletion src/video_core/renderer_opengl/gl_rasterizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1413,7 +1413,7 @@ bool RasterizerOpenGL::AccelerateTextureCopy(const GPU::Regs::DisplayTransferCon
Surface src_surface;
std::tie(src_surface, src_rect) = res_cache.GetTexCopySurface(src_params);
if (src_surface == nullptr) {
return false;
return Settings::values.skip_texture_copy;
}

if (output_gap != 0 &&
Expand Down
14 changes: 7 additions & 7 deletions src/video_core/renderer_opengl/gl_rasterizer_cache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -744,7 +744,7 @@ void CachedSurface::DownloadGLTexture(const Common::Rectangle<u32>& rect) {

glPixelStorei(GL_PACK_ROW_LENGTH, static_cast<GLint>(stride));
OpenGLState::BindReadFramebuffer(g_read_framebuffer.handle);
std::size_t buffer_offset = (y0 * stride + x0) * bytes_per_pixel;
std::size_t buffer_offset = (rect.bottom * stride + rect.left) * bytes_per_pixel;
if (type == SurfaceType::Color || type == SurfaceType::Texture) {
glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, target_tex,
0);
Expand Down Expand Up @@ -774,7 +774,7 @@ void CachedSurface::DumpToFile() {
const std::string& output = FileUtil::GetUserPath(FileUtil::UserPath::LogDir);
const auto& image_interface = Core::System::GetInstance().GetImageInterface();
std::string path =
fmt::format("{}{:08X}_{}_{}_{}.png", output, addr, width, height, pixel_format);
fmt::format("{}{:08X}_{}_{}_{}.png", output, addr, width, height, (u32)pixel_format);
u32 bytes_per_pixel = GetGLBytesPerPixel(pixel_format);
const FormatTuple& tuple = GetFormatTuple(pixel_format);
std::vector<u8> pixels(width * height * bytes_per_pixel);
Expand Down Expand Up @@ -917,8 +917,8 @@ bool RasterizerCacheOpenGL::BlitSurfaces(const Surface& src_surface,
BlitTextures(src_surface, src_rect, dst_surface, dst_rect);
return true;
} else {
LOG_INFO(Render_OpenGL, "BlitSurfaces failed from: {} to: {}", src_surface->pixel_format,
dst_surface->pixel_format);
LOG_INFO(Render_OpenGL, "BlitSurfaces failed from: {} to: {}", (u32)src_surface->pixel_format,
(u32)dst_surface->pixel_format);
return false;
}
}
Expand Down Expand Up @@ -1551,7 +1551,7 @@ void RasterizerCacheOpenGL::ValidateSurface(const Surface& surface, PAddr addr,
surface->LoadGLBuffer(params.addr, params.end);
surface->UploadGLTexture(surface->GetSubRect(params));
} else {
LOG_INFO(Render_OpenGL, "ValidateSurface load depth: {}", surface->pixel_format);
LOG_INFO(Render_OpenGL, "ValidateSurface load depth: {}", (u32)surface->pixel_format);
}
notify_validated(params.GetInterval());
}
Expand All @@ -1573,8 +1573,8 @@ bool RasterizerCacheOpenGL::NoUnimplementedReinterpretations(const Surface& surf
Surface test_surface =
FindMatch<MatchFlags::Copy>(surface_cache, params, ScaleMatch::Ignore, interval);
if (test_surface != nullptr) {
LOG_WARNING(Render_OpenGL, "Missing pixel_format reinterpreter: {} -> {}", format,
surface->pixel_format);
LOG_WARNING(Render_OpenGL, "Missing pixel_format reinterpreter: {} -> {}", (u32)format,
(u32)surface->pixel_format);
implemented = false;
}
}
Expand Down

0 comments on commit 6a14dfe

Please sign in to comment.