mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	Merge pull request #2 from archshift/issue-7-fix
Fixes issues with building Citra on OSX
This commit is contained in:
		
						commit
						204c6bfeca
					
				| @ -2,21 +2,37 @@ cmake_minimum_required(VERSION 2.6) | ||||
| 
 | ||||
| project(citra) | ||||
| 
 | ||||
| SET(GCC_COMPILE_FLAGS "-std=c++11 -fpermissive") | ||||
| SET(CXX_COMPILE_FLAGS "-std=c++11 -fpermissive") | ||||
| 
 | ||||
| # silence some spam | ||||
| add_definitions(-Wno-attributes) | ||||
| add_definitions(-DSINGLETHREADED) | ||||
| add_definitions(${GCC_COMPILE_FLAGS}) | ||||
| add_definitions(${CXX_COMPILE_FLAGS}) | ||||
| 
 | ||||
| # dependency checking | ||||
| list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules/") | ||||
| set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/CMakeTests) | ||||
| include(FindOpenGL REQUIRED) | ||||
| include(FindX11 REQUIRED) | ||||
| find_package(PkgConfig REQUIRED) | ||||
| find_package(GLEW REQUIRED) | ||||
| find_package(OpenGL REQUIRED) | ||||
| pkg_search_module(GLFW REQUIRED glfw3) | ||||
| 
 | ||||
| # corefoundation is required only on OSX | ||||
| IF (APPLE) | ||||
|     FIND_LIBRARY(COREFOUNDATION_LIBRARY CoreFoundation) | ||||
| 	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") | ||||
| 	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") | ||||
| ENDIF (APPLE) | ||||
| 
 | ||||
| #external includes | ||||
| include_directories(${GLFW_INCLUDE_DIRS}) | ||||
| include_directories(${OPENGL_INCLUDE_DIR}) | ||||
| include_directories(${GLEW_INCLUDE_PATH}) | ||||
| 
 | ||||
| # workaround for GLFW linking on OSX | ||||
| link_directories(${GLFW_LIBRARY_DIRS}) | ||||
| 
 | ||||
| option(DISABLE_QT4 "Disable Qt4 GUI" OFF) | ||||
| if(NOT DISABLE_QT4) | ||||
|     include(FindQt4) | ||||
| @ -32,15 +48,11 @@ if(NOT DISABLE_QT4) | ||||
| endif() | ||||
| 
 | ||||
| # generate git revision information | ||||
| list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules/") | ||||
| include(GetGitRevisionDescription) | ||||
| get_git_head_revision(GIT_REF_SPEC GIT_REV) | ||||
| git_describe(GIT_DESC --always --long --dirty) | ||||
| git_branch_name(GIT_BRANCH) | ||||
|      | ||||
| # external includes | ||||
| include_directories(${OPENGL_INCLUDE_DIR}) | ||||
|      | ||||
| # internal includes | ||||
| include_directories(src) | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										47
									
								
								externals/cmake-modules/FindGLEW.cmake
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								externals/cmake-modules/FindGLEW.cmake
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | ||||
| # | ||||
| # Try to find GLEW library and include path. | ||||
| # Once done this will define | ||||
| # | ||||
| # GLEW_FOUND | ||||
| # GLEW_INCLUDE_PATH | ||||
| # GLEW_LIBRARY | ||||
| # | ||||
| 
 | ||||
| IF (WIN32) | ||||
|     FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h | ||||
|         $ENV{PROGRAMFILES}/GLEW/include | ||||
|         ${PROJECT_SOURCE_DIR}/src/nvgl/glew/include | ||||
|         DOC "The directory where GL/glew.h resides") | ||||
|     FIND_LIBRARY( GLEW_LIBRARY | ||||
|         NAMES glew GLEW glew32 glew32s | ||||
|         PATHS | ||||
|         $ENV{PROGRAMFILES}/GLEW/lib | ||||
|         ${PROJECT_SOURCE_DIR}/src/nvgl/glew/bin | ||||
|         ${PROJECT_SOURCE_DIR}/src/nvgl/glew/lib | ||||
|         DOC "The GLEW library") | ||||
| ELSE (WIN32) | ||||
|     FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h | ||||
|         /usr/include | ||||
|         /usr/local/include | ||||
|         /sw/include | ||||
|         /opt/local/include | ||||
|         DOC "The directory where GL/glew.h resides") | ||||
|     FIND_LIBRARY( GLEW_LIBRARY | ||||
|         NAMES GLEW glew | ||||
|         PATHS | ||||
|         /usr/lib64 | ||||
|         /usr/lib | ||||
|         /usr/local/lib64 | ||||
|         /usr/local/lib | ||||
|         /sw/lib | ||||
|         /opt/local/lib | ||||
|         DOC "The GLEW library") | ||||
| ENDIF (WIN32) | ||||
| 
 | ||||
| IF (GLEW_INCLUDE_PATH) | ||||
|     SET( GLEW_FOUND 1 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise") | ||||
| ELSE (GLEW_INCLUDE_PATH) | ||||
|     SET( GLEW_FOUND 0 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise") | ||||
| ENDIF (GLEW_INCLUDE_PATH) | ||||
| 
 | ||||
| MARK_AS_ADVANCED( GLEW_FOUND ) | ||||
| @ -1,12 +1,19 @@ | ||||
| set(SRCS    citra.cpp | ||||
|             emu_window/emu_window_glfw.cpp) | ||||
| set(HEADERS citra.h | ||||
|             resource.h) | ||||
| 
 | ||||
| # NOTE: This is a workaround for CMake bug 0006976 (missing X11_xf86vmode_LIB variable) | ||||
| if (NOT X11_xf86vmode_LIB) | ||||
|     set(X11_xv86vmode_LIB Xxf86vm) | ||||
| endif() | ||||
| 
 | ||||
| add_executable(citra ${SRCS}) | ||||
| target_link_libraries(citra core common video_core GLEW pthread X11 Xxf86vm Xi Xcursor ${OPENGL_LIBRARIES} ${GLFW_LIBRARIES} rt ${X11_Xrandr_LIB} ${X11_xv86vmode_LIB}) | ||||
| add_executable(citra ${SRCS} ${HEADERS}) | ||||
| 
 | ||||
| if (APPLE) | ||||
|     target_link_libraries(citra core common video_core iconv pthread ${COREFOUNDATION_LIBRARY} ${OPENGL_LIBRARIES} ${GLEW_LIBRARY} ${GLFW_LIBRARIES}) | ||||
| else() | ||||
|     target_link_libraries(citra core common video_core GLEW pthread X11 Xxf86vm Xi Xcursor ${OPENGL_LIBRARIES} ${GLFW_LIBRARIES} rt ${X11_Xrandr_LIB} ${X11_xv86vmode_LIB}) | ||||
| endif() | ||||
| 
 | ||||
| #install(TARGETS citra RUNTIME DESTINATION ${bindir}) | ||||
|  | ||||
| @ -27,11 +27,18 @@ EmuWindow_GLFW::EmuWindow_GLFW() { | ||||
|         exit(1); | ||||
|     } | ||||
|     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); | ||||
|     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); | ||||
|     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); | ||||
|     glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); | ||||
|     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | ||||
|     m_render_window = glfwCreateWindow(VideoCore::kScreenTopWidth,  | ||||
|         (VideoCore::kScreenTopHeight + VideoCore::kScreenBottomHeight),  | ||||
|         m_window_title.c_str(), NULL, NULL); | ||||
| 
 | ||||
|     if (m_render_window == NULL) { | ||||
|         printf("Failed to create GLFW window! Exiting..."); | ||||
|         exit(1); | ||||
|     } | ||||
|      | ||||
|     // Setup callbacks
 | ||||
|     glfwSetWindowUserPointer(m_render_window, this); | ||||
|     //glfwSetKeyCallback(m_render_window, OnKeyEvent);
 | ||||
|  | ||||
| @ -8,6 +8,23 @@ set(SRCS | ||||
|             main.cpp | ||||
|             config/controller_config.cpp | ||||
|             config/controller_config_util.cpp) | ||||
| set (HEADERS | ||||
|             bootmanager.hxx | ||||
|             debugger/callstack.hxx | ||||
|             debugger/disassembler.hxx | ||||
|             debugger/ramview.hxx | ||||
|             debugger/registers.hxx | ||||
|             hotkeys.hxx | ||||
|             main.hxx | ||||
|             ui_callstack.h | ||||
|             ui_controller_config.h | ||||
|             ui_disassembler.h | ||||
|             ui_hotkeys.h | ||||
|             ui_main.h | ||||
|             ui_registers.h | ||||
|             version.h | ||||
|             config/controller_config.hxx | ||||
|             config/controller_config_util.hxx) | ||||
| 
 | ||||
| qt4_wrap_ui(UI_HDRS | ||||
|                     debugger/callstack.ui | ||||
| @ -32,7 +49,11 @@ qt4_wrap_cpp(MOC_SRCS | ||||
| include_directories(${CMAKE_CURRENT_BINARY_DIR}) | ||||
| include_directories(./) | ||||
| 
 | ||||
| add_executable(citra-qt ${SRCS} ${MOC_SRCS} ${UI_HDRS}) | ||||
| target_link_libraries(citra-qt core common video_core qhexedit ${QT_LIBRARIES} ${OPENGL_LIBRARIES} ${SDL2_LIBRARY} rt GLEW ${GLFW_LIBRARIES}) | ||||
| add_executable(citra-qt ${SRCS} ${HEADERS} ${MOC_SRCS} ${UI_HDRS}) | ||||
| if (APPLE) | ||||
|     target_link_libraries(citra-qt core common video_core qhexedit iconv ${COREFOUNDATION_LIBRARY} ${QT_LIBRARIES} ${GLEW_LIBRARY} ${OPENGL_LIBRARIES}) | ||||
| else() | ||||
|     target_link_libraries(citra-qt core common video_core qhexedit ${QT_LIBRARIES} ${OPENGL_LIBRARIES} ${SDL2_LIBRARY} rt GLEW ${GLFW_LIBRARIES}) | ||||
| endif() | ||||
| 
 | ||||
| #install(TARGETS citra-qt RUNTIME DESTINATION ${bindir}) | ||||
|  | ||||
| @ -50,7 +50,7 @@ void EmuThread::run() | ||||
| 
 | ||||
| void EmuThread::Stop() | ||||
| { | ||||
| 	if (!isRunning()) | ||||
|     if (!isRunning()) | ||||
|     { | ||||
|         INFO_LOG(MASTER_LOG, "EmuThread::Stop called while emu thread wasn't running, returning..."); | ||||
|         return; | ||||
| @ -65,7 +65,7 @@ void EmuThread::Stop() | ||||
|         terminate(); | ||||
|         wait(1000); | ||||
|         if (isRunning()) | ||||
| 			WARN_LOG(MASTER_LOG, "EmuThread STILL running, something is wrong here..."); | ||||
|             WARN_LOG(MASTER_LOG, "EmuThread STILL running, something is wrong here..."); | ||||
|     } | ||||
|     INFO_LOG(MASTER_LOG, "EmuThread stopped"); | ||||
| } | ||||
| @ -76,9 +76,8 @@ void EmuThread::Stop() | ||||
| class GGLWidgetInternal : public QGLWidget | ||||
| { | ||||
| public: | ||||
|     GGLWidgetInternal(GRenderWindow* parent) : QGLWidget(parent) | ||||
|     GGLWidgetInternal(QGLFormat fmt, GRenderWindow* parent) : QGLWidget(parent) | ||||
|     { | ||||
|         setAutoBufferSwap(false); | ||||
|         doneCurrent(); | ||||
|         parent_ = parent; | ||||
|     } | ||||
| @ -106,8 +105,13 @@ EmuThread& GRenderWindow::GetEmuThread() | ||||
| GRenderWindow::GRenderWindow(QWidget* parent) : QWidget(parent), emu_thread(this) | ||||
| { | ||||
|     // TODO: One of these flags might be interesting: WA_OpaquePaintEvent, WA_NoBackground, WA_DontShowOnScreen, WA_DeleteOnClose
 | ||||
|     QGLFormat fmt; | ||||
|     fmt.setProfile(QGLFormat::CoreProfile); | ||||
|     fmt.setVersion(3,2); | ||||
|     fmt.setSampleBuffers(true); | ||||
|     fmt.setSamples(4); | ||||
|      | ||||
|     child = new GGLWidgetInternal(this); | ||||
|     child = new GGLWidgetInternal(fmt, this); | ||||
|     QBoxLayout* layout = new QHBoxLayout(this); | ||||
|     resize(VideoCore::kScreenTopWidth, VideoCore::kScreenTopHeight + VideoCore::kScreenBottomHeight); | ||||
|     layout->addWidget(child); | ||||
| @ -147,12 +151,12 @@ void GRenderWindow::DoneCurrent() | ||||
| void GRenderWindow::PollEvents() { | ||||
|     // TODO(ShizZy): Does this belong here? This is a reasonable place to update the window title
 | ||||
|     //  from the main thread, but this should probably be in an event handler...
 | ||||
| 	/*
 | ||||
| 	static char title[128]; | ||||
|     /*
 | ||||
|     static char title[128]; | ||||
|     sprintf(title, "%s (FPS: %02.02f)", window_title_.c_str(),  | ||||
|         video_core::g_renderer->current_fps()); | ||||
|     setWindowTitle(title); | ||||
| 	*/ | ||||
|     */ | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::BackupGeometry() | ||||
| @ -185,26 +189,26 @@ QByteArray GRenderWindow::saveGeometry() | ||||
| 
 | ||||
| void GRenderWindow::keyPressEvent(QKeyEvent* event) | ||||
| { | ||||
| 	/*
 | ||||
| 	bool key_processed = false; | ||||
|     /*
 | ||||
|     bool key_processed = false; | ||||
|     for (unsigned int channel = 0; channel < 4 && controller_interface(); ++channel) | ||||
|         if (controller_interface()->SetControllerStatus(channel, event->key(), input_common::GCController::PRESSED)) | ||||
|             key_processed = true; | ||||
| 
 | ||||
|     if (!key_processed) | ||||
|         QWidget::keyPressEvent(event); | ||||
| 	*/ | ||||
|     */ | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::keyReleaseEvent(QKeyEvent* event) | ||||
| { | ||||
| 	/*
 | ||||
| 	bool key_processed = false; | ||||
|     /*
 | ||||
|     bool key_processed = false; | ||||
|     for (unsigned int channel = 0; channel < 4 && controller_interface(); ++channel) | ||||
|         if (controller_interface()->SetControllerStatus(channel, event->key(), input_common::GCController::RELEASED)) | ||||
|             key_processed = true; | ||||
| 
 | ||||
|     if (!key_processed) | ||||
|         QWidget::keyPressEvent(event); | ||||
| 	*/ | ||||
|     */ | ||||
| } | ||||
| @ -19,4 +19,43 @@ set(SRCS    break_points.cpp | ||||
|             timer.cpp | ||||
|             utf8.cpp) | ||||
| 
 | ||||
| add_library(common STATIC ${SRCS}) | ||||
| set(HEADERS atomic.h | ||||
|             atomic_gcc.h | ||||
|             atomic_win32.h | ||||
|             bit_field.h | ||||
|             break_points.h | ||||
|             chunk_file.h | ||||
|             common_funcs.h | ||||
|             common_paths.h | ||||
|             common_types.h | ||||
|             common.h | ||||
|             console_listener.h | ||||
|             cpu_detect.h | ||||
|             debug_interface.h | ||||
|             emu_window.h | ||||
|             extended_trace.h | ||||
|             fifo_queue.h | ||||
|             file_search.h | ||||
|             file_util.h | ||||
|             hash.h | ||||
|             linear_disk_cache.h | ||||
|             log_manager.h | ||||
|             log.h | ||||
|             math_util.h | ||||
|             mem_arena.h | ||||
|             memory_util.h | ||||
|             msg_handler.h | ||||
|             platform.h | ||||
|             scm_rev.h | ||||
|             std_condition_variable.h | ||||
|             std_mutex.h | ||||
|             std_thread.h | ||||
|             string_util.h | ||||
|             swap.h | ||||
|             symbols.h | ||||
|             thread.h | ||||
|             thunk.h | ||||
|             timer.h | ||||
|             utf8.h) | ||||
| 
 | ||||
| add_library(common STATIC ${SRCS} ${HEADERS}) | ||||
|  | ||||
| @ -654,7 +654,8 @@ inline PointerWrapSection::~PointerWrapSection() { | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| class CChunkFileReader | ||||
| // Commented out because it is currently unused, and breaks builds on OSX
 | ||||
| /*class CChunkFileReader
 | ||||
| { | ||||
| public: | ||||
|     enum Error { | ||||
| @ -869,6 +870,6 @@ private: | ||||
|         int UncompressedSize; | ||||
|         char GitVersion[32]; | ||||
|     }; | ||||
| }; | ||||
| }; */ | ||||
| 
 | ||||
| #endif  // _POINTERWRAP_H_
 | ||||
|  | ||||
| @ -21,7 +21,7 @@ | ||||
| 
 | ||||
| #define STACKALIGN | ||||
| 
 | ||||
| #if __cplusplus >= 201103 || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__) | ||||
| #if __cplusplus >= 201103L || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__) | ||||
| #define HAVE_CXX11_SYNTAX 1 | ||||
| #endif | ||||
| 
 | ||||
| @ -159,4 +159,48 @@ enum EMUSTATE_CHANGE | ||||
|     EMUSTATE_CHANGE_STOP | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| #ifdef _MSC_VER | ||||
| #ifndef _XBOX | ||||
| inline unsigned long long bswap64(unsigned long long x) { return _byteswap_uint64(x); } | ||||
| inline unsigned int bswap32(unsigned int x) { return _byteswap_ulong(x); } | ||||
| inline unsigned short bswap16(unsigned short x) { return _byteswap_ushort(x); } | ||||
| #else | ||||
| inline unsigned long long bswap64(unsigned long long x) { return __loaddoublewordbytereverse(0, &x); } | ||||
| inline unsigned int bswap32(unsigned int x) { return __loadwordbytereverse(0, &x); } | ||||
| inline unsigned short bswap16(unsigned short x) { return __loadshortbytereverse(0, &x); } | ||||
| #endif | ||||
| #else | ||||
| // TODO: speedup
 | ||||
| inline unsigned short bswap16(unsigned short x) { return (x << 8) | (x >> 8); } | ||||
| inline unsigned int bswap32(unsigned int x) { return (x >> 24) | ((x & 0xFF0000) >> 8) | ((x & 0xFF00) << 8) | (x << 24);} | ||||
| inline unsigned long long bswap64(unsigned long long x) {return ((unsigned long long)bswap32(x) << 32) | bswap32(x >> 32); } | ||||
| #endif | ||||
| 
 | ||||
| inline float bswapf(float f) { | ||||
|     union { | ||||
|         float f; | ||||
|         unsigned int u32; | ||||
|     } dat1, dat2; | ||||
| 
 | ||||
|     dat1.f = f; | ||||
|     dat2.u32 = bswap32(dat1.u32); | ||||
| 
 | ||||
|     return dat2.f; | ||||
| } | ||||
| 
 | ||||
| inline double bswapd(double f) { | ||||
|     union  { | ||||
|         double f; | ||||
|         unsigned long long u64; | ||||
|     } dat1, dat2; | ||||
| 
 | ||||
|     dat1.f = f; | ||||
|     dat2.u64 = bswap64(dat1.u64); | ||||
| 
 | ||||
|     return dat2.f; | ||||
| } | ||||
| 
 | ||||
| #include "swap.h" | ||||
| 
 | ||||
| #endif // _COMMON_H_
 | ||||
|  | ||||
| @ -62,7 +62,7 @@ typedef signed long long    s64;    ///< 64-bit signed int | ||||
| typedef float   f32;    ///< 32-bit floating point
 | ||||
| typedef double  f64;    ///< 64-bit floating point
 | ||||
| 
 | ||||
| #include "common/swap.h" | ||||
| #include "common/common.h" | ||||
| 
 | ||||
| /// Union for fast 16-bit type casting
 | ||||
| union t16 { | ||||
| @ -100,6 +100,7 @@ union t128 { | ||||
|     __m128  a;              ///< 128-bit floating point (__m128 maps to the XMM[0-7] registers)
 | ||||
| }; | ||||
| 
 | ||||
| namespace common { | ||||
| /// Rectangle data structure
 | ||||
| class Rect { | ||||
| public: | ||||
| @ -123,3 +124,4 @@ public: | ||||
|         return (x0_ == val.x0_ && y0_ == val.y0_ && x1_ == val.x1_ && y1_ == val.y1_); | ||||
|     } | ||||
| }; | ||||
| } | ||||
|  | ||||
| @ -43,4 +43,47 @@ set(SRCS    core.cpp | ||||
|             hw/lcd.cpp | ||||
|             hw/ndma.cpp) | ||||
| 
 | ||||
| add_library(core STATIC ${SRCS}) | ||||
| set(HEADERS core.h | ||||
|             core_timing.h | ||||
|             loader.h | ||||
|             mem_map.h | ||||
|             system.h | ||||
|             arm/disassembler/arm_disasm.h | ||||
|             arm/disassembler/load_symbol_map.h | ||||
|             arm/interpreter/arm_interpreter.h | ||||
|             arm/interpreter/arm_regformat.h | ||||
|             arm/interpreter/armcpu.h | ||||
|             arm/interpreter/armdefs.h | ||||
|             arm/interpreter/armemu.h | ||||
|             arm/interpreter/armmmu.h | ||||
|             arm/interpreter/armos.h | ||||
|             arm/interpreter/skyeye_defs.h | ||||
|             arm/interpreter/mmu/arm1176jzf_s_mmu.h | ||||
|             arm/interpreter/mmu/cache.h | ||||
|             arm/interpreter/mmu/rb.h | ||||
|             arm/interpreter/mmu/sa_mmu.h | ||||
|             arm/interpreter/mmu/tlb.h | ||||
|             arm/interpreter/mmu/wb.h | ||||
|             arm/interpreter/vfp/asm_vfp.h | ||||
|             arm/interpreter/vfp/vfp.h | ||||
|             arm/interpreter/vfp/vfp_helper.h | ||||
|             elf/elf_reader.h | ||||
|             elf/elf_types.h | ||||
|             file_sys/directory_file_system.h | ||||
|             file_sys/file_sys.h | ||||
|             file_sys/meta_file_system.h | ||||
|             hle/config_mem.h | ||||
|             hle/coprocessor.h | ||||
|             hle/hle.h | ||||
|             hle/syscall.h | ||||
|             hle/function_wrappers.h | ||||
|             hle/service/apt.h | ||||
|             hle/service/gsp.h | ||||
|             hle/service/hid.h | ||||
|             hle/service/service.h | ||||
|             hle/service/srv.h | ||||
|             hw/hw.h | ||||
|             hw/lcd.h | ||||
|             hw/ndma.h) | ||||
| 
 | ||||
| add_library(core STATIC ${SRCS} ${HEADERS}) | ||||
|  | ||||
| @ -86,12 +86,12 @@ static union | ||||
| } reg_conv; | ||||
| 
 | ||||
| static void | ||||
| printf_nothing (void *foo, ...) | ||||
| printf_nothing (const char *foo, ...) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| cirrus_not_implemented (char *insn) | ||||
| cirrus_not_implemented (const char *insn) | ||||
| { | ||||
| 	fprintf (stderr, "Cirrus instruction '%s' not implemented.\n", insn); | ||||
| 	fprintf (stderr, "aborting!\n"); | ||||
|  | ||||
| @ -50,7 +50,7 @@ | ||||
| #define pr_info //printf
 | ||||
| #define pr_debug //printf
 | ||||
| 
 | ||||
| static u32 fls(int x); | ||||
| static u32 vfp_fls(int x); | ||||
| #define do_div(n, base) {n/=base;} | ||||
| 
 | ||||
| /* From vfpinstr.h */ | ||||
| @ -508,7 +508,7 @@ struct op { | ||||
| 	u32 flags; | ||||
| }; | ||||
| 
 | ||||
| static inline u32 fls(int x) | ||||
| static u32 vfp_fls(int x) | ||||
| { | ||||
| 	int r = 32; | ||||
| 
 | ||||
|  | ||||
| @ -69,9 +69,9 @@ static void vfp_double_dump(const char *str, struct vfp_double *d) | ||||
| 
 | ||||
| static void vfp_double_normalise_denormal(struct vfp_double *vd) | ||||
| { | ||||
| 	int bits = 31 - fls(vd->significand >> 32); | ||||
| 	int bits = 31 - vfp_fls(vd->significand >> 32); | ||||
| 	if (bits == 31) | ||||
| 		bits = 63 - fls(vd->significand); | ||||
| 		bits = 63 - vfp_fls(vd->significand); | ||||
| 
 | ||||
| 	vfp_double_dump("normalise_denormal: in", vd); | ||||
| 
 | ||||
| @ -108,9 +108,9 @@ u32 vfp_double_normaliseround(ARMul_State* state, int dd, struct vfp_double *vd, | ||||
| 	exponent = vd->exponent; | ||||
| 	significand = vd->significand; | ||||
| 
 | ||||
| 	shift = 32 - fls(significand >> 32); | ||||
| 	shift = 32 - vfp_fls(significand >> 32); | ||||
| 	if (shift == 32) | ||||
| 		shift = 64 - fls(significand); | ||||
| 		shift = 64 - vfp_fls(significand); | ||||
| 	if (shift) { | ||||
| 		exponent -= shift; | ||||
| 		significand <<= shift; | ||||
|  | ||||
| @ -69,7 +69,7 @@ static void vfp_single_dump(const char *str, struct vfp_single *s) | ||||
| 
 | ||||
| static void vfp_single_normalise_denormal(struct vfp_single *vs) | ||||
| { | ||||
| 	int bits = 31 - fls(vs->significand); | ||||
| 	int bits = 31 - vfp_fls(vs->significand); | ||||
| 
 | ||||
| 	vfp_single_dump("normalise_denormal: in", vs); | ||||
| 
 | ||||
| @ -111,7 +111,7 @@ u32 vfp_single_normaliseround(ARMul_State* state, int sd, struct vfp_single *vs, | ||||
| 	 * bit 31, so we have VFP_SINGLE_LOW_BITS + 1 below the least | ||||
| 	 * significant bit. | ||||
| 	 */ | ||||
| 	shift = 32 - fls(significand); | ||||
| 	shift = 32 - vfp_fls(significand); | ||||
| 	if (shift < 32 && shift) { | ||||
| 		exponent -= shift; | ||||
| 		significand <<= shift; | ||||
|  | ||||
| @ -83,15 +83,6 @@ template<u32 func(int, void *)> void WrapU_IV() { | ||||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
| template<float func()> void WrapF_V() { | ||||
|     RETURNF(func()); | ||||
| } | ||||
| 
 | ||||
| // TODO: Not sure about the floating point parameter passing
 | ||||
| template<float func(int, float, u32)> void WrapF_IFU() { | ||||
|     RETURNF(func(PARAM(0), PARAMF(0), PARAM(1))); | ||||
| } | ||||
| 
 | ||||
| template<u32 func(u32)> void WrapU_U() { | ||||
|     u32 retval = func(PARAM(0)); | ||||
|     RETURN(retval); | ||||
| @ -127,12 +118,6 @@ template<int func(u32, u32)> void WrapI_UU() { | ||||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
| template<int func(u32, float, float)> void WrapI_UFF() { | ||||
|     // Not sure about the float arguments.
 | ||||
|     int retval = func(PARAM(0), PARAMF(0), PARAMF(1)); | ||||
|     RETURN(retval); | ||||
| } | ||||
| 
 | ||||
| template<int func(u32, u32, u32)> void WrapI_UUU() { | ||||
|     int retval = func(PARAM(0), PARAM(1), PARAM(2)); | ||||
|     RETURN(retval); | ||||
|  | ||||
| @ -2,4 +2,9 @@ set(SRCS    video_core.cpp | ||||
|             utils.cpp | ||||
|             renderer_opengl/renderer_opengl.cpp) | ||||
| 
 | ||||
| add_library(video_core STATIC ${SRCS}) | ||||
| set(HEADERS video_core.h | ||||
|             utils.h | ||||
|             renderer_base.h | ||||
|             renderer_opengl/renderer_opengl.h) | ||||
| 
 | ||||
| add_library(video_core STATIC ${SRCS} ${HEADERS}) | ||||
|  | ||||
| @ -37,7 +37,7 @@ void RendererOpenGL::SwapBuffers() { | ||||
|     // EFB->XFB copy
 | ||||
|     // TODO(bunnei): This is a hack and does not belong here. The copy should be triggered by some 
 | ||||
|     // register write We're also treating both framebuffers as a single one in OpenGL.
 | ||||
|     Rect framebuffer_size(0, 0, m_resolution_width, m_resolution_height); | ||||
|     common::Rect framebuffer_size(0, 0, m_resolution_width, m_resolution_height); | ||||
|     RenderXFB(framebuffer_size, framebuffer_size); | ||||
| 
 | ||||
|     // XFB->Window copy
 | ||||
| @ -75,7 +75,7 @@ void RendererOpenGL::FlipFramebuffer(const u8* in, u8* out) { | ||||
|  * @param src_rect Source rectangle in XFB to copy | ||||
|  * @param dst_rect Destination rectangle in output framebuffer to copy to | ||||
|  */ | ||||
| void RendererOpenGL::RenderXFB(const Rect& src_rect, const Rect& dst_rect) { | ||||
| void RendererOpenGL::RenderXFB(const common::Rect& src_rect, const common::Rect& dst_rect) { | ||||
| 
 | ||||
|     FlipFramebuffer(LCD::GetFramebufferPointer(LCD::g_regs.framebuffer_top_left_1), m_xfb_top_flipped); | ||||
|     FlipFramebuffer(LCD::GetFramebufferPointer(LCD::g_regs.framebuffer_sub_left_1), m_xfb_bottom_flipped); | ||||
|  | ||||
| @ -28,7 +28,7 @@ public: | ||||
|      * @param src_rect Source rectangle in XFB to copy | ||||
|      * @param dst_rect Destination rectangle in output framebuffer to copy to | ||||
|      */ | ||||
|     void RenderXFB(const Rect& src_rect, const Rect& dst_rect); | ||||
|     void RenderXFB(const common::Rect& src_rect, const common::Rect& dst_rect); | ||||
| 
 | ||||
|     /** 
 | ||||
|      * Set the emulator window to use for renderer | ||||
| @ -59,7 +59,7 @@ private: | ||||
|      * @param out Pointer to output buffer with flipped framebuffer | ||||
|      * @todo Early on hack... I'd like to find a more efficient way of doing this /bunnei | ||||
|      */ | ||||
|     void RendererOpenGL::FlipFramebuffer(const u8* in, u8* out); | ||||
|     void FlipFramebuffer(const u8* in, u8* out); | ||||
| 
 | ||||
| 
 | ||||
|     EmuWindow*  m_render_window;                    ///< Handle to render window
 | ||||
|  | ||||
| @ -8,7 +8,6 @@ | ||||
| #include "video_core/utils.h" | ||||
| 
 | ||||
| namespace VideoCore { | ||||
| 
 | ||||
| /**
 | ||||
|  * Dumps a texture to TGA | ||||
|  * @param filename String filename to dump texture to | ||||
| @ -32,9 +31,9 @@ void DumpTGA(std::string filename, int width, int height, u8* raw_data) { | ||||
|     fwrite(&hdr, sizeof(TGAHeader), 1, fout); | ||||
|     for (int i = 0; i < height; i++) { | ||||
|         for (int j = 0; j < width; j++) { | ||||
|             r = raw_data[(4 * (i * width)) + (4 * j) + 0]; | ||||
|             g = raw_data[(4 * (i * width)) + (4 * j) + 1]; | ||||
|             b = raw_data[(4 * (i * width)) + (4 * j) + 2]; | ||||
|             b = raw_data[(3 * (i * width)) + (3 * j) + 0]; | ||||
|             g = raw_data[(3 * (i * width)) + (3 * j) + 1]; | ||||
|             r = raw_data[(3 * (i * width)) + (3 * j) + 2]; | ||||
|             putc(b, fout); | ||||
|             putc(g, fout); | ||||
|             putc(r, fout); | ||||
| @ -42,5 +41,4 @@ void DumpTGA(std::string filename, int width, int height, u8* raw_data) { | ||||
|     } | ||||
|     fclose(fout); | ||||
| } | ||||
| 
 | ||||
| } // namespace
 | ||||
|  | ||||
| @ -30,6 +30,9 @@ void Start() { | ||||
| 
 | ||||
| /// Initialize the video core
 | ||||
| void Init(EmuWindow* emu_window) { | ||||
|     // Known problem with GLEW prevents contexts above 2.x on OSX unless glewExperimental is enabled.
 | ||||
|     glewExperimental = GL_TRUE; | ||||
| 
 | ||||
|     g_emu_window = emu_window; | ||||
|     g_emu_window->MakeCurrent(); | ||||
|     g_renderer = new RendererOpenGL(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei