mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Merge pull request #818 from linkmauve/no-trailing-whitespace
Ban trailing whitespace from the entire project, forever
This commit is contained in:
		
						commit
						a489a84656
					
				
					 65 changed files with 218 additions and 212 deletions
				
			
		|  | @ -3,10 +3,16 @@ | |||
| set -e | ||||
| set -x | ||||
| 
 | ||||
| if grep -r '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .travis* dist/*.desktop \ | ||||
|                  dist/*.svg dist/*.xml; then | ||||
|     echo Trailing whitespace found, aborting | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| #if OS is linux or is not set | ||||
| if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then | ||||
|     mkdir build && cd build | ||||
|     cmake -DUSE_QT5=OFF ..  | ||||
|     cmake -DUSE_QT5=OFF .. | ||||
|     make -j4 | ||||
| elif [ "$TRAVIS_OS_NAME" = "osx" ]; then | ||||
|     export Qt5_DIR=$(brew --prefix)/opt/qt5 | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ if [ "$TRAVIS_BRANCH" = "master" ]; then | |||
|         REV_NAME="citra-${GITDATE}-${GITREV}-linux-amd64" | ||||
|         UPLOAD_DIR="/citra/nightly/linux-amd64" | ||||
|         mkdir "$REV_NAME" | ||||
|          | ||||
| 
 | ||||
|         sudo apt-get -qq install lftp | ||||
|         cp build/src/citra/citra "$REV_NAME" | ||||
|         cp build/src/citra_qt/citra-qt "$REV_NAME" | ||||
|  | @ -14,7 +14,7 @@ if [ "$TRAVIS_BRANCH" = "master" ]; then | |||
|         REV_NAME="citra-${GITDATE}-${GITREV}-osx-amd64" | ||||
|         UPLOAD_DIR="/citra/nightly/osx-amd64" | ||||
|         mkdir "$REV_NAME" | ||||
|          | ||||
| 
 | ||||
|         brew install lftp | ||||
|         cp build/src/citra/Release/citra "$REV_NAME" | ||||
|         cp -r build/src/citra_qt/Release/citra-qt.app "$REV_NAME" | ||||
|  | @ -22,7 +22,7 @@ if [ "$TRAVIS_BRANCH" = "master" ]; then | |||
|         # move qt libs into app bundle for deployment | ||||
|         $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" | ||||
|     fi | ||||
|      | ||||
| 
 | ||||
|     ARCHIVE_NAME="${REV_NAME}.tar.xz" | ||||
|     tar -cJvf "$ARCHIVE_NAME" "$REV_NAME" | ||||
|     lftp -c "open -u citra-builds,$BUILD_PASSWORD sftp://builds.citra-emu.org; put -O '$UPLOAD_DIR' '$ARCHIVE_NAME'" | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ language: cpp | |||
| 
 | ||||
| env: | ||||
|   global: | ||||
|     - secure: "AXHFIafTmbGDsHD3mUVj5a4I397DQjti/WoqAJGUp2PglxTcc04BwxZ9Z+xLuf5N2Hs5r9ojAJLT8OGxJCLBDXzneQTNSqXbFuYSLbqrEAiIRlA9eRIotWCg+wYcO+5e8MKX+cHVKwiIWasUB21AtCdq6msh6Y3pUshZp212VPg="  | ||||
|     - secure: "AXHFIafTmbGDsHD3mUVj5a4I397DQjti/WoqAJGUp2PglxTcc04BwxZ9Z+xLuf5N2Hs5r9ojAJLT8OGxJCLBDXzneQTNSqXbFuYSLbqrEAiIRlA9eRIotWCg+wYcO+5e8MKX+cHVKwiIWasUB21AtCdq6msh6Y3pUshZp212VPg=" | ||||
| 
 | ||||
| before_install: | ||||
|  - sh .travis-deps.sh | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ else() | |||
|     set(CMAKE_CXX_FLAGS_RELEASE "${optimization_flags} /MP /MD" CACHE STRING "" FORCE) | ||||
|     set(CMAKE_C_FLAGS_RELWITHDEBINFO   "${optimization_flags} /MP /MD /Zi /Zo" CACHE STRING "" FORCE) | ||||
|     set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${optimization_flags} /MP /MD /Zi /Zo" CACHE STRING "" FORCE) | ||||
|      | ||||
| 
 | ||||
|     set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "" FORCE) | ||||
|     set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG" CACHE STRING "" FORCE) | ||||
| endif() | ||||
|  | @ -130,7 +130,7 @@ IF (APPLE) | |||
|     FIND_LIBRARY(IOKIT_LIBRARY IOKit)           # GLFW dependency | ||||
|     FIND_LIBRARY(COREVIDEO_LIBRARY CoreVideo)   # GLFW dependency | ||||
|     set(PLATFORM_LIBRARIES iconv ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY}) | ||||
|      | ||||
| 
 | ||||
|     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") | ||||
|     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") | ||||
| ELSEIF(MINGW) | ||||
|  |  | |||
							
								
								
									
										124
									
								
								Doxyfile
									
										
									
									
									
								
							
							
						
						
									
										124
									
								
								Doxyfile
									
										
									
									
									
								
							|  | @ -38,7 +38,7 @@ PROJECT_NAME           = Citra | |||
| # could be handy for archiving the generated documentation or if some version | ||||
| # control system is used. | ||||
| 
 | ||||
| PROJECT_NUMBER         =  | ||||
| PROJECT_NUMBER         = | ||||
| 
 | ||||
| # Using the PROJECT_BRIEF tag one can provide an optional one line description | ||||
| # for a project that appears at the top of each page and should give viewer a | ||||
|  | @ -162,7 +162,7 @@ FULL_PATH_NAMES        = YES | |||
| # will be relative from the directory where doxygen is started. | ||||
| # This tag requires that the tag FULL_PATH_NAMES is set to YES. | ||||
| 
 | ||||
| STRIP_FROM_PATH        =  | ||||
| STRIP_FROM_PATH        = | ||||
| 
 | ||||
| # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the | ||||
| # path mentioned in the documentation of a class, which tells the reader which | ||||
|  | @ -171,7 +171,7 @@ STRIP_FROM_PATH        = | |||
| # specify the list of include paths that are normally passed to the compiler | ||||
| # using the -I flag. | ||||
| 
 | ||||
| STRIP_FROM_INC_PATH    =  | ||||
| STRIP_FROM_INC_PATH    = | ||||
| 
 | ||||
| # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but | ||||
| # less readable) file names. This can be useful is your file systems doesn't | ||||
|  | @ -238,13 +238,13 @@ TAB_SIZE               = 4 | |||
| # "Side Effects:". You can put \n's in the value part of an alias to insert | ||||
| # newlines. | ||||
| 
 | ||||
| ALIASES                =  | ||||
| ALIASES                = | ||||
| 
 | ||||
| # This tag can be used to specify a number of word-keyword mappings (TCL only). | ||||
| # A mapping has the form "name=value". For example adding "class=itcl::class" | ||||
| # will allow you to use the command class in the itcl::class meaning. | ||||
| 
 | ||||
| TCL_SUBST              =  | ||||
| TCL_SUBST              = | ||||
| 
 | ||||
| # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources | ||||
| # only. Doxygen will then generate output that is more tailored for C. For | ||||
|  | @ -291,7 +291,7 @@ OPTIMIZE_OUTPUT_VHDL   = NO | |||
| # Note that for custom extensions you also need to set FILE_PATTERNS otherwise | ||||
| # the files are not read by doxygen. | ||||
| 
 | ||||
| EXTENSION_MAPPING      =  | ||||
| EXTENSION_MAPPING      = | ||||
| 
 | ||||
| # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments | ||||
| # according to the Markdown format, which allows for more readable | ||||
|  | @ -627,7 +627,7 @@ GENERATE_DEPRECATEDLIST= YES | |||
| # sections, marked by \if <section_label> ... \endif and \cond <section_label> | ||||
| # ... \endcond blocks. | ||||
| 
 | ||||
| ENABLED_SECTIONS       =  | ||||
| ENABLED_SECTIONS       = | ||||
| 
 | ||||
| # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the | ||||
| # initial value of a variable or macro / define can have for it to appear in the | ||||
|  | @ -669,7 +669,7 @@ SHOW_NAMESPACES        = YES | |||
| # by doxygen. Whatever the program writes to standard output is used as the file | ||||
| # version. For an example see the documentation. | ||||
| 
 | ||||
| FILE_VERSION_FILTER    =  | ||||
| FILE_VERSION_FILTER    = | ||||
| 
 | ||||
| # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed | ||||
| # by doxygen. The layout file controls the global structure of the generated | ||||
|  | @ -682,7 +682,7 @@ FILE_VERSION_FILTER    = | |||
| # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE | ||||
| # tag is left empty. | ||||
| 
 | ||||
| LAYOUT_FILE            =  | ||||
| LAYOUT_FILE            = | ||||
| 
 | ||||
| # The CITE_BIB_FILES tag can be used to specify one or more bib files containing | ||||
| # the reference definitions. This must be a list of .bib files. The .bib | ||||
|  | @ -692,7 +692,7 @@ LAYOUT_FILE            = | |||
| # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the | ||||
| # search path. See also \cite for info how to create references. | ||||
| 
 | ||||
| CITE_BIB_FILES         =  | ||||
| CITE_BIB_FILES         = | ||||
| 
 | ||||
| #--------------------------------------------------------------------------- | ||||
| # Configuration options related to warning and progress messages | ||||
|  | @ -751,7 +751,7 @@ WARN_FORMAT            = "$file:$line: $text" | |||
| # messages should be written. If left blank the output is written to standard | ||||
| # error (stderr). | ||||
| 
 | ||||
| WARN_LOGFILE           =  | ||||
| WARN_LOGFILE           = | ||||
| 
 | ||||
| #--------------------------------------------------------------------------- | ||||
| # Configuration options related to the input files | ||||
|  | @ -807,7 +807,7 @@ RECURSIVE              = YES | |||
| # Note that relative paths are relative to the directory from which doxygen is | ||||
| # run. | ||||
| 
 | ||||
| EXCLUDE                =  | ||||
| EXCLUDE                = | ||||
| 
 | ||||
| # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or | ||||
| # directories that are symbolic links (a Unix file system feature) are excluded | ||||
|  | @ -823,7 +823,7 @@ EXCLUDE_SYMLINKS       = NO | |||
| # Note that the wildcards are matched against the file with absolute path, so to | ||||
| # exclude all test directories for example use the pattern */test/* | ||||
| 
 | ||||
| EXCLUDE_PATTERNS       =  | ||||
| EXCLUDE_PATTERNS       = | ||||
| 
 | ||||
| # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names | ||||
| # (namespaces, classes, functions, etc.) that should be excluded from the | ||||
|  | @ -834,13 +834,13 @@ EXCLUDE_PATTERNS       = | |||
| # Note that the wildcards are matched against the file with absolute path, so to | ||||
| # exclude all test directories use the pattern */test/* | ||||
| 
 | ||||
| EXCLUDE_SYMBOLS        =  | ||||
| EXCLUDE_SYMBOLS        = | ||||
| 
 | ||||
| # The EXAMPLE_PATH tag can be used to specify one or more files or directories | ||||
| # that contain example code fragments that are included (see the \include | ||||
| # command). | ||||
| 
 | ||||
| EXAMPLE_PATH           =  | ||||
| EXAMPLE_PATH           = | ||||
| 
 | ||||
| # If the value of the EXAMPLE_PATH tag contains directories, you can use the | ||||
| # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and | ||||
|  | @ -860,7 +860,7 @@ EXAMPLE_RECURSIVE      = NO | |||
| # that contain images that are to be included in the documentation (see the | ||||
| # \image command). | ||||
| 
 | ||||
| IMAGE_PATH             =  | ||||
| IMAGE_PATH             = | ||||
| 
 | ||||
| # The INPUT_FILTER tag can be used to specify a program that doxygen should | ||||
| # invoke to filter for each input file. Doxygen will invoke the filter program | ||||
|  | @ -877,7 +877,7 @@ IMAGE_PATH             = | |||
| # code is scanned, but not when the output code is generated. If lines are added | ||||
| # or removed, the anchors will not be placed correctly. | ||||
| 
 | ||||
| INPUT_FILTER           =  | ||||
| INPUT_FILTER           = | ||||
| 
 | ||||
| # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern | ||||
| # basis. Doxygen will compare the file name with each pattern and apply the | ||||
|  | @ -886,7 +886,7 @@ INPUT_FILTER           = | |||
| # filters are used. If the FILTER_PATTERNS tag is empty or if none of the | ||||
| # patterns match the file name, INPUT_FILTER is applied. | ||||
| 
 | ||||
| FILTER_PATTERNS        =  | ||||
| FILTER_PATTERNS        = | ||||
| 
 | ||||
| # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using | ||||
| # INPUT_FILTER ) will also be used to filter the input files that are used for | ||||
|  | @ -901,14 +901,14 @@ FILTER_SOURCE_FILES    = NO | |||
| # *.ext= (so without naming a filter). | ||||
| # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. | ||||
| 
 | ||||
| FILTER_SOURCE_PATTERNS =  | ||||
| FILTER_SOURCE_PATTERNS = | ||||
| 
 | ||||
| # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that | ||||
| # is part of the input, its contents will be placed on the main page | ||||
| # (index.html). This can be useful if you have a project on for instance GitHub | ||||
| # and want to reuse the introduction page also for the doxygen output. | ||||
| 
 | ||||
| USE_MDFILE_AS_MAINPAGE =  | ||||
| USE_MDFILE_AS_MAINPAGE = | ||||
| 
 | ||||
| #--------------------------------------------------------------------------- | ||||
| # Configuration options related to source browsing | ||||
|  | @ -1013,7 +1013,7 @@ CLANG_ASSISTED_PARSING = NO | |||
| # specified with INPUT and INCLUDE_PATH. | ||||
| # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. | ||||
| 
 | ||||
| CLANG_OPTIONS          =  | ||||
| CLANG_OPTIONS          = | ||||
| 
 | ||||
| #--------------------------------------------------------------------------- | ||||
| # Configuration options related to the alphabetical class index | ||||
|  | @ -1039,7 +1039,7 @@ COLS_IN_ALPHA_INDEX    = 5 | |||
| # while generating the index headers. | ||||
| # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. | ||||
| 
 | ||||
| IGNORE_PREFIX          =  | ||||
| IGNORE_PREFIX          = | ||||
| 
 | ||||
| #--------------------------------------------------------------------------- | ||||
| # Configuration options related to the HTML output | ||||
|  | @ -1083,7 +1083,7 @@ HTML_FILE_EXTENSION    = .html | |||
| # of the possible markers and block names see the documentation. | ||||
| # This tag requires that the tag GENERATE_HTML is set to YES. | ||||
| 
 | ||||
| HTML_HEADER            =  | ||||
| HTML_HEADER            = | ||||
| 
 | ||||
| # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each | ||||
| # generated HTML page. If the tag is left blank doxygen will generate a standard | ||||
|  | @ -1093,7 +1093,7 @@ HTML_HEADER            = | |||
| # that doxygen normally uses. | ||||
| # This tag requires that the tag GENERATE_HTML is set to YES. | ||||
| 
 | ||||
| HTML_FOOTER            =  | ||||
| HTML_FOOTER            = | ||||
| 
 | ||||
| # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style | ||||
| # sheet that is used by each HTML page. It can be used to fine-tune the look of | ||||
|  | @ -1105,7 +1105,7 @@ HTML_FOOTER            = | |||
| # obsolete. | ||||
| # This tag requires that the tag GENERATE_HTML is set to YES. | ||||
| 
 | ||||
| HTML_STYLESHEET        =  | ||||
| HTML_STYLESHEET        = | ||||
| 
 | ||||
| # The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined | ||||
| # cascading style sheets that are included after the standard style sheets | ||||
|  | @ -1118,7 +1118,7 @@ HTML_STYLESHEET        = | |||
| # list). For an example see the documentation. | ||||
| # This tag requires that the tag GENERATE_HTML is set to YES. | ||||
| 
 | ||||
| HTML_EXTRA_STYLESHEET  =  | ||||
| HTML_EXTRA_STYLESHEET  = | ||||
| 
 | ||||
| # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or | ||||
| # other source files which should be copied to the HTML output directory. Note | ||||
|  | @ -1128,7 +1128,7 @@ HTML_EXTRA_STYLESHEET  = | |||
| # files will be copied as-is; there are no commands or markers available. | ||||
| # This tag requires that the tag GENERATE_HTML is set to YES. | ||||
| 
 | ||||
| HTML_EXTRA_FILES       =  | ||||
| HTML_EXTRA_FILES       = | ||||
| 
 | ||||
| # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen | ||||
| # will adjust the colors in the stylesheet and background images according to | ||||
|  | @ -1256,7 +1256,7 @@ GENERATE_HTMLHELP      = NO | |||
| # written to the html output directory. | ||||
| # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | ||||
| 
 | ||||
| CHM_FILE               =  | ||||
| CHM_FILE               = | ||||
| 
 | ||||
| # The HHC_LOCATION tag can be used to specify the location (absolute path | ||||
| # including file name) of the HTML help compiler ( hhc.exe). If non-empty | ||||
|  | @ -1264,7 +1264,7 @@ CHM_FILE               = | |||
| # The file has to be specified with full path. | ||||
| # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | ||||
| 
 | ||||
| HHC_LOCATION           =  | ||||
| HHC_LOCATION           = | ||||
| 
 | ||||
| # The GENERATE_CHI flag controls if a separate .chi index file is generated ( | ||||
| # YES) or that it should be included in the master .chm file ( NO). | ||||
|  | @ -1277,7 +1277,7 @@ GENERATE_CHI           = NO | |||
| # and project file content. | ||||
| # This tag requires that the tag GENERATE_HTMLHELP is set to YES. | ||||
| 
 | ||||
| CHM_INDEX_ENCODING     =  | ||||
| CHM_INDEX_ENCODING     = | ||||
| 
 | ||||
| # The BINARY_TOC flag controls whether a binary table of contents is generated ( | ||||
| # YES) or a normal table of contents ( NO) in the .chm file. Furthermore it | ||||
|  | @ -1308,7 +1308,7 @@ GENERATE_QHP           = NO | |||
| # the HTML output folder. | ||||
| # This tag requires that the tag GENERATE_QHP is set to YES. | ||||
| 
 | ||||
| QCH_FILE               =  | ||||
| QCH_FILE               = | ||||
| 
 | ||||
| # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help | ||||
| # Project output. For more information please see Qt Help Project / Namespace | ||||
|  | @ -1333,7 +1333,7 @@ QHP_VIRTUAL_FOLDER     = doc | |||
| # filters). | ||||
| # This tag requires that the tag GENERATE_QHP is set to YES. | ||||
| 
 | ||||
| QHP_CUST_FILTER_NAME   =  | ||||
| QHP_CUST_FILTER_NAME   = | ||||
| 
 | ||||
| # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the | ||||
| # custom filter to add. For more information please see Qt Help Project / Custom | ||||
|  | @ -1341,21 +1341,21 @@ QHP_CUST_FILTER_NAME   = | |||
| # filters). | ||||
| # This tag requires that the tag GENERATE_QHP is set to YES. | ||||
| 
 | ||||
| QHP_CUST_FILTER_ATTRS  =  | ||||
| QHP_CUST_FILTER_ATTRS  = | ||||
| 
 | ||||
| # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this | ||||
| # project's filter section matches. Qt Help Project / Filter Attributes (see: | ||||
| # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). | ||||
| # This tag requires that the tag GENERATE_QHP is set to YES. | ||||
| 
 | ||||
| QHP_SECT_FILTER_ATTRS  =  | ||||
| QHP_SECT_FILTER_ATTRS  = | ||||
| 
 | ||||
| # The QHG_LOCATION tag can be used to specify the location of Qt's | ||||
| # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the | ||||
| # generated .qhp file. | ||||
| # This tag requires that the tag GENERATE_QHP is set to YES. | ||||
| 
 | ||||
| QHG_LOCATION           =  | ||||
| QHG_LOCATION           = | ||||
| 
 | ||||
| # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be | ||||
| # generated, together with the HTML files, they form an Eclipse help plugin. To | ||||
|  | @ -1488,7 +1488,7 @@ MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest | |||
| # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols | ||||
| # This tag requires that the tag USE_MATHJAX is set to YES. | ||||
| 
 | ||||
| MATHJAX_EXTENSIONS     =  | ||||
| MATHJAX_EXTENSIONS     = | ||||
| 
 | ||||
| # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces | ||||
| # of code that will be used on startup of the MathJax code. See the MathJax site | ||||
|  | @ -1496,7 +1496,7 @@ MATHJAX_EXTENSIONS     = | |||
| # example see the documentation. | ||||
| # This tag requires that the tag USE_MATHJAX is set to YES. | ||||
| 
 | ||||
| MATHJAX_CODEFILE       =  | ||||
| MATHJAX_CODEFILE       = | ||||
| 
 | ||||
| # When the SEARCHENGINE tag is enabled doxygen will generate a search box for | ||||
| # the HTML output. The underlying search engine uses javascript and DHTML and | ||||
|  | @ -1556,7 +1556,7 @@ EXTERNAL_SEARCH        = NO | |||
| # Searching" for details. | ||||
| # This tag requires that the tag SEARCHENGINE is set to YES. | ||||
| 
 | ||||
| SEARCHENGINE_URL       =  | ||||
| SEARCHENGINE_URL       = | ||||
| 
 | ||||
| # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed | ||||
| # search data is written to a file for indexing by an external tool. With the | ||||
|  | @ -1572,7 +1572,7 @@ SEARCHDATA_FILE        = searchdata.xml | |||
| # projects and redirect the results back to the right project. | ||||
| # This tag requires that the tag SEARCHENGINE is set to YES. | ||||
| 
 | ||||
| EXTERNAL_SEARCH_ID     =  | ||||
| EXTERNAL_SEARCH_ID     = | ||||
| 
 | ||||
| # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen | ||||
| # projects other than the one defined by this configuration file, but that are | ||||
|  | @ -1582,7 +1582,7 @@ EXTERNAL_SEARCH_ID     = | |||
| # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... | ||||
| # This tag requires that the tag SEARCHENGINE is set to YES. | ||||
| 
 | ||||
| EXTRA_SEARCH_MAPPINGS  =  | ||||
| EXTRA_SEARCH_MAPPINGS  = | ||||
| 
 | ||||
| #--------------------------------------------------------------------------- | ||||
| # Configuration options related to the LaTeX output | ||||
|  | @ -1643,7 +1643,7 @@ PAPER_TYPE             = a4 | |||
| # If left blank no extra packages will be included. | ||||
| # This tag requires that the tag GENERATE_LATEX is set to YES. | ||||
| 
 | ||||
| EXTRA_PACKAGES         =  | ||||
| EXTRA_PACKAGES         = | ||||
| 
 | ||||
| # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the | ||||
| # generated LaTeX document. The header should contain everything until the first | ||||
|  | @ -1659,7 +1659,7 @@ EXTRA_PACKAGES         = | |||
| # HTML_HEADER. | ||||
| # This tag requires that the tag GENERATE_LATEX is set to YES. | ||||
| 
 | ||||
| LATEX_HEADER           =  | ||||
| LATEX_HEADER           = | ||||
| 
 | ||||
| # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the | ||||
| # generated LaTeX document. The footer should contain everything after the last | ||||
|  | @ -1670,7 +1670,7 @@ LATEX_HEADER           = | |||
| # Note: Only use a user-defined footer if you know what you are doing! | ||||
| # This tag requires that the tag GENERATE_LATEX is set to YES. | ||||
| 
 | ||||
| LATEX_FOOTER           =  | ||||
| LATEX_FOOTER           = | ||||
| 
 | ||||
| # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or | ||||
| # other source files which should be copied to the LATEX_OUTPUT output | ||||
|  | @ -1678,7 +1678,7 @@ LATEX_FOOTER           = | |||
| # markers available. | ||||
| # This tag requires that the tag GENERATE_LATEX is set to YES. | ||||
| 
 | ||||
| LATEX_EXTRA_FILES      =  | ||||
| LATEX_EXTRA_FILES      = | ||||
| 
 | ||||
| # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is | ||||
| # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will | ||||
|  | @ -1778,14 +1778,14 @@ RTF_HYPERLINKS         = NO | |||
| # default style sheet that doxygen normally uses. | ||||
| # This tag requires that the tag GENERATE_RTF is set to YES. | ||||
| 
 | ||||
| RTF_STYLESHEET_FILE    =  | ||||
| RTF_STYLESHEET_FILE    = | ||||
| 
 | ||||
| # Set optional variables used in the generation of an RTF document. Syntax is | ||||
| # similar to doxygen's config file. A template extensions file can be generated | ||||
| # using doxygen -e rtf extensionFile. | ||||
| # This tag requires that the tag GENERATE_RTF is set to YES. | ||||
| 
 | ||||
| RTF_EXTENSIONS_FILE    =  | ||||
| RTF_EXTENSIONS_FILE    = | ||||
| 
 | ||||
| #--------------------------------------------------------------------------- | ||||
| # Configuration options related to the man page output | ||||
|  | @ -1820,7 +1820,7 @@ MAN_EXTENSION          = .3 | |||
| # MAN_EXTENSION with the initial . removed. | ||||
| # This tag requires that the tag GENERATE_MAN is set to YES. | ||||
| 
 | ||||
| MAN_SUBDIR             =  | ||||
| MAN_SUBDIR             = | ||||
| 
 | ||||
| # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it | ||||
| # will generate one additional man file for each entity documented in the real | ||||
|  | @ -1933,7 +1933,7 @@ PERLMOD_PRETTY         = YES | |||
| # overwrite each other's variables. | ||||
| # This tag requires that the tag GENERATE_PERLMOD is set to YES. | ||||
| 
 | ||||
| PERLMOD_MAKEVAR_PREFIX =  | ||||
| PERLMOD_MAKEVAR_PREFIX = | ||||
| 
 | ||||
| #--------------------------------------------------------------------------- | ||||
| # Configuration options related to the preprocessor | ||||
|  | @ -1974,7 +1974,7 @@ SEARCH_INCLUDES        = YES | |||
| # preprocessor. | ||||
| # This tag requires that the tag SEARCH_INCLUDES is set to YES. | ||||
| 
 | ||||
| INCLUDE_PATH           =  | ||||
| INCLUDE_PATH           = | ||||
| 
 | ||||
| # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard | ||||
| # patterns (like *.h and *.hpp) to filter out the header-files in the | ||||
|  | @ -1982,7 +1982,7 @@ INCLUDE_PATH           = | |||
| # used. | ||||
| # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | ||||
| 
 | ||||
| INCLUDE_FILE_PATTERNS  =  | ||||
| INCLUDE_FILE_PATTERNS  = | ||||
| 
 | ||||
| # The PREDEFINED tag can be used to specify one or more macro names that are | ||||
| # defined before the preprocessor is started (similar to the -D option of e.g. | ||||
|  | @ -1992,7 +1992,7 @@ INCLUDE_FILE_PATTERNS  = | |||
| # recursively expanded use the := operator instead of the = operator. | ||||
| # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | ||||
| 
 | ||||
| PREDEFINED             =  | ||||
| PREDEFINED             = | ||||
| 
 | ||||
| # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this | ||||
| # tag can be used to specify a list of macro names that should be expanded. The | ||||
|  | @ -2001,7 +2001,7 @@ PREDEFINED             = | |||
| # definition found in the source code. | ||||
| # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. | ||||
| 
 | ||||
| EXPAND_AS_DEFINED      =  | ||||
| EXPAND_AS_DEFINED      = | ||||
| 
 | ||||
| # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will | ||||
| # remove all references to function-like macros that are alone on a line, have | ||||
|  | @ -2030,13 +2030,13 @@ SKIP_FUNCTION_MACROS   = YES | |||
| # the path). If a tag file is not located in the directory in which doxygen is | ||||
| # run, you must also specify the path to the tagfile here. | ||||
| 
 | ||||
| TAGFILES               =  | ||||
| TAGFILES               = | ||||
| 
 | ||||
| # When a file name is specified after GENERATE_TAGFILE, doxygen will create a | ||||
| # tag file that is based on the input files it reads. See section "Linking to | ||||
| # external documentation" for more information about the usage of tag files. | ||||
| 
 | ||||
| GENERATE_TAGFILE       =  | ||||
| GENERATE_TAGFILE       = | ||||
| 
 | ||||
| # If the ALLEXTERNALS tag is set to YES all external class will be listed in the | ||||
| # class index. If set to NO only the inherited external classes will be listed. | ||||
|  | @ -2084,14 +2084,14 @@ CLASS_DIAGRAMS         = YES | |||
| # the mscgen tool resides. If left empty the tool is assumed to be found in the | ||||
| # default search path. | ||||
| 
 | ||||
| MSCGEN_PATH            =  | ||||
| MSCGEN_PATH            = | ||||
| 
 | ||||
| # You can include diagrams made with dia in doxygen documentation. Doxygen will | ||||
| # then run dia to produce the diagram and insert it in the documentation. The | ||||
| # DIA_PATH tag allows you to specify the directory where the dia binary resides. | ||||
| # If left empty dia is assumed to be found in the default search path. | ||||
| 
 | ||||
| DIA_PATH               =  | ||||
| DIA_PATH               = | ||||
| 
 | ||||
| # If set to YES, the inheritance and collaboration graphs will hide inheritance | ||||
| # and usage relations if the target is undocumented or is not a class. | ||||
|  | @ -2140,7 +2140,7 @@ DOT_FONTSIZE           = 10 | |||
| # the path where dot can find it using this tag. | ||||
| # This tag requires that the tag HAVE_DOT is set to YES. | ||||
| 
 | ||||
| DOT_FONTPATH           =  | ||||
| DOT_FONTPATH           = | ||||
| 
 | ||||
| # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for | ||||
| # each documented class showing the direct and indirect inheritance relations. | ||||
|  | @ -2278,26 +2278,26 @@ INTERACTIVE_SVG        = NO | |||
| # found. If left blank, it is assumed the dot tool can be found in the path. | ||||
| # This tag requires that the tag HAVE_DOT is set to YES. | ||||
| 
 | ||||
| DOT_PATH               =  | ||||
| DOT_PATH               = | ||||
| 
 | ||||
| # The DOTFILE_DIRS tag can be used to specify one or more directories that | ||||
| # contain dot files that are included in the documentation (see the \dotfile | ||||
| # command). | ||||
| # This tag requires that the tag HAVE_DOT is set to YES. | ||||
| 
 | ||||
| DOTFILE_DIRS           =  | ||||
| DOTFILE_DIRS           = | ||||
| 
 | ||||
| # The MSCFILE_DIRS tag can be used to specify one or more directories that | ||||
| # contain msc files that are included in the documentation (see the \mscfile | ||||
| # command). | ||||
| 
 | ||||
| MSCFILE_DIRS           =  | ||||
| MSCFILE_DIRS           = | ||||
| 
 | ||||
| # The DIAFILE_DIRS tag can be used to specify one or more directories that | ||||
| # contain dia files that are included in the documentation (see the \diafile | ||||
| # command). | ||||
| 
 | ||||
| DIAFILE_DIRS           =  | ||||
| DIAFILE_DIRS           = | ||||
| 
 | ||||
| # When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the | ||||
| # path where java can find the plantuml.jar file. If left blank, it is assumed | ||||
|  | @ -2306,7 +2306,7 @@ DIAFILE_DIRS           = | |||
| # will not generate output for the diagram. | ||||
| # This tag requires that the tag HAVE_DOT is set to YES. | ||||
| 
 | ||||
| PLANTUML_JAR_PATH      =  | ||||
| PLANTUML_JAR_PATH      = | ||||
| 
 | ||||
| # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes | ||||
| # that will be shown in the graph. If the number of nodes in a graph becomes | ||||
|  |  | |||
|  | @ -28,5 +28,5 @@ If you like, you can [donate by PayPal](https://www.paypal.com/cgi-bin/webscr?cm | |||
| * Infrastructure setup | ||||
| * Eventually 3D displays to get proper 3D output working | ||||
| * ... etc ... | ||||
|   | ||||
| 
 | ||||
| We also more than gladly accept used 3DS consoles, preferrably ones with firmware 4.5 or lower! If you would like to give yours away, don't hesitate to join our IRC channel #citra on [Freenode](http://webchat.freenode.net/?channels=citra) and talk to neobrain or bunnei. Mind you, IRC is slow-paced, so it might be a while until people reply. If you're in a hurry you can just leave contact details in the channel or via private message and we'll get back to you. | ||||
|  |  | |||
|  | @ -35,11 +35,11 @@ after_build: | |||
|             $BUILD_NAME = "citra-${GITDATE}-${GITREV}-windows-amd64.7z" -replace " ","" | ||||
|             # Zip up the build folder | ||||
|             7z a $BUILD_NAME .\build\bin\release\* | ||||
|              | ||||
| 
 | ||||
|             # Download winscp | ||||
|             Invoke-WebRequest "http://hivelocity.dl.sourceforge.net/project/winscp/WinSCP/5.7/winscp570.zip" -OutFile "winscp570.zip" | ||||
|             7z e -y winscp570.zip | ||||
|              | ||||
| 
 | ||||
|             # Upload to server | ||||
|             .\WinSCP.com /command ` | ||||
|                 "option batch abort" ` | ||||
|  |  | |||
										
											Binary file not shown.
										
									
								
							|  | @ -89,15 +89,15 @@ if (Qt5_FOUND AND MSVC) | |||
|     ) | ||||
|     set(DLL_DEST "${CMAKE_BINARY_DIR}/bin/$<CONFIG>/") | ||||
|     set(PLATFORMS ${DLL_DEST}platforms/) | ||||
|      | ||||
| 
 | ||||
|     # windows commandline expects the / to be \ so switch them | ||||
|     string(REPLACE "/" "\\" Qt5_DLL_DIR ${Qt5_DLL_DIR}) | ||||
|     string(REPLACE "/" "\\" Qt5_PLATFORMS_DIR ${Qt5_PLATFORMS_DIR}) | ||||
|     string(REPLACE "/" "\\" DLL_DEST ${DLL_DEST}) | ||||
|     string(REPLACE "/" "\\" PLATFORMS ${PLATFORMS}) | ||||
|      | ||||
| 
 | ||||
|     # /NJH /NJS /NDL /NFL /NC /NS /NP - Silence any output | ||||
|     # cmake adds an extra check for command success which doesn't work too well with robocopy  | ||||
|     # cmake adds an extra check for command success which doesn't work too well with robocopy | ||||
|     # so trick it into thinking the command was successful with the || cmd /c "exit /b 0" | ||||
|     add_custom_command(TARGET citra-qt POST_BUILD | ||||
|         COMMAND robocopy ${Qt5_DLL_DIR} ${DLL_DEST} ${Qt5_DLLS} /NJH /NJS /NDL /NFL /NC /NS /NP || cmd /c "exit /b 0" | ||||
|  |  | |||
|  | @ -57,7 +57,7 @@ void EmuThread::run() { | |||
|             Core::SingleStep(); | ||||
|             emit DebugModeEntered(); | ||||
|             yieldCurrentThread(); | ||||
|              | ||||
| 
 | ||||
|             was_active = false; | ||||
|         } else { | ||||
|             std::unique_lock<std::mutex> lock(running_mutex); | ||||
|  |  | |||
|  | @ -80,7 +80,7 @@ signals: | |||
|      * @warning When connecting to this signal from other threads, make sure to specify either Qt::QueuedConnection (invoke slot within the destination object's message thread) or even Qt::BlockingQueuedConnection (additionally block source thread until slot returns) | ||||
|      */ | ||||
|     void DebugModeEntered(); | ||||
|      | ||||
| 
 | ||||
|     /**
 | ||||
|      * Emitted right before the CPU continues execution | ||||
|      * | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ void CallstackWidget::OnDebugModeEntered() | |||
|     { | ||||
|         ret_addr = Memory::Read32(addr); | ||||
|         call_addr = ret_addr - 4; //get call address???
 | ||||
|          | ||||
| 
 | ||||
|         if (Memory::GetPointer(call_addr) == nullptr) | ||||
|             break; | ||||
| 
 | ||||
|  |  | |||
|  | @ -127,7 +127,7 @@ GMainWindow::GMainWindow() : emu_thread(nullptr) | |||
| 
 | ||||
|     ui.action_Use_Hardware_Renderer->setChecked(Settings::values.use_hw_renderer); | ||||
|     SetHardwareRendererEnabled(ui.action_Use_Hardware_Renderer->isChecked()); | ||||
|      | ||||
| 
 | ||||
|     ui.action_Single_Window_Mode->setChecked(settings.value("singleWindowMode", true).toBool()); | ||||
|     ToggleWindowMode(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ std::tuple<unsigned,unsigned> EmuWindow::ClipToTouchScreen(unsigned new_x, unsig | |||
| 
 | ||||
|     new_x = std::max(new_x, framebuffer_layout.bottom_screen.left); | ||||
|     new_x = std::min(new_x, framebuffer_layout.bottom_screen.right-1); | ||||
|      | ||||
| 
 | ||||
|     new_y = std::max(new_y, framebuffer_layout.bottom_screen.top); | ||||
|     new_y = std::min(new_y, framebuffer_layout.bottom_screen.bottom-1); | ||||
| 
 | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ | |||
|     #include <io.h> | ||||
|     #include <direct.h> // getcwd
 | ||||
|     #include <tchar.h> | ||||
|      | ||||
| 
 | ||||
|     // 64 bit offsets for windows
 | ||||
|     #define fseeko _fseeki64 | ||||
|     #define ftello _ftelli64 | ||||
|  |  | |||
|  | @ -135,7 +135,7 @@ template <> | |||
| inline void swap<8>(u8* data) { | ||||
|     *reinterpret_cast<u64*>(data) = swap64(data); | ||||
| } | ||||
|      | ||||
| 
 | ||||
| }  // Namespace Common
 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -813,7 +813,7 @@ Opcode ARM_Disasm::Decode11(uint32_t insn) { | |||
|         // SWI
 | ||||
|         return OP_SWI; | ||||
|     } | ||||
|    | ||||
| 
 | ||||
|     uint8_t bit4 = (insn >> 4) & 0x1; | ||||
|     uint8_t cpnum = (insn >> 8) & 0xf; | ||||
| 
 | ||||
|  |  | |||
|  | @ -134,7 +134,7 @@ static unsigned int DPO(Immediate)(ARMul_State* cpu, unsigned int sht_oper) { | |||
|     unsigned int immed_8 = BITS(sht_oper, 0, 7); | ||||
|     unsigned int rotate_imm = BITS(sht_oper, 8, 11); | ||||
|     unsigned int shifter_operand = ROTATE_RIGHT_32(immed_8, rotate_imm * 2); | ||||
|     if (rotate_imm == 0)  | ||||
|     if (rotate_imm == 0) | ||||
|         cpu->shifter_carry_out = cpu->CFlag; | ||||
|     else | ||||
|         cpu->shifter_carry_out = BIT(shifter_operand, 31); | ||||
|  | @ -521,7 +521,7 @@ static void MLnS(ImmediateOffset)(ARMul_State* cpu, unsigned int inst, unsigned | |||
|         addr = CHECK_READ_REG15_WA(cpu, Rn) + offset_8; | ||||
|     else | ||||
|         addr = CHECK_READ_REG15_WA(cpu, Rn) - offset_8; | ||||
|      | ||||
| 
 | ||||
|     virt_addr = addr; | ||||
| } | ||||
| 
 | ||||
|  | @ -550,7 +550,7 @@ static void MLnS(ImmediatePreIndexed)(ARMul_State* cpu, unsigned int inst, unsig | |||
| 
 | ||||
|     if (U_BIT) | ||||
|         addr = rn + offset_8; | ||||
|     else  | ||||
|     else | ||||
|         addr = rn - offset_8; | ||||
| 
 | ||||
|     virt_addr = addr; | ||||
|  | @ -1306,8 +1306,8 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(and)(unsigned int inst, int index) | |||
|     inst_cream->Rd = BITS(inst, 12, 15); | ||||
|     inst_cream->shifter_operand = BITS(inst, 0, 11); | ||||
|     inst_cream->shtop_func = get_shtop(inst); | ||||
| 	 | ||||
|     if (inst_cream->Rd == 15)  | ||||
| 
 | ||||
|     if (inst_cream->Rd == 15) | ||||
|         inst_base->br = INDIRECT_BRANCH; | ||||
| 
 | ||||
|     return inst_base; | ||||
|  | @ -1350,7 +1350,7 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(bic)(unsigned int inst, int index) | |||
|     inst_cream->shifter_operand = BITS(inst, 0, 11); | ||||
|     inst_cream->shtop_func = get_shtop(inst); | ||||
| 
 | ||||
|     if (inst_cream->Rd == 15)  | ||||
|     if (inst_cream->Rd == 15) | ||||
|         inst_base->br = INDIRECT_BRANCH; | ||||
|     return inst_base; | ||||
| } | ||||
|  | @ -3269,7 +3269,7 @@ static ARM_INST_PTR INTERPRETER_TRANSLATE(yield)(unsigned int inst, int index) | |||
| #define VFP_INTERPRETER_STRUCT | ||||
| #include "core/arm/skyeye_common/vfp/vfpinstr.cpp" | ||||
| #undef VFP_INTERPRETER_STRUCT | ||||
|   | ||||
| 
 | ||||
| #define VFP_INTERPRETER_TRANS | ||||
| #include "core/arm/skyeye_common/vfp/vfpinstr.cpp" | ||||
| #undef VFP_INTERPRETER_TRANS | ||||
|  | @ -3478,9 +3478,9 @@ const transop_fp_t arm_instruction_trans[] = { | |||
|     INTERPRETER_TRANSLATE(bbl), | ||||
| 
 | ||||
|     // All the thumb instructions should be placed the end of table
 | ||||
|     INTERPRETER_TRANSLATE(b_2_thumb),  | ||||
|     INTERPRETER_TRANSLATE(b_cond_thumb),  | ||||
|     INTERPRETER_TRANSLATE(bl_1_thumb),  | ||||
|     INTERPRETER_TRANSLATE(b_2_thumb), | ||||
|     INTERPRETER_TRANSLATE(b_cond_thumb), | ||||
|     INTERPRETER_TRANSLATE(bl_1_thumb), | ||||
|     INTERPRETER_TRANSLATE(bl_2_thumb), | ||||
|     INTERPRETER_TRANSLATE(blx_1_thumb) | ||||
| }; | ||||
|  | @ -4338,7 +4338,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | |||
|                     } | ||||
|                 } | ||||
|                 if (BIT(inst, 13)) { | ||||
|                     if (cpu->Mode == USER32MODE)  | ||||
|                     if (cpu->Mode == USER32MODE) | ||||
|                         cpu->Reg[13] = ReadMemory32(cpu, addr); | ||||
|                     else | ||||
|                         cpu->Reg_usr[0] = ReadMemory32(cpu, addr); | ||||
|  | @ -4346,7 +4346,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | |||
|                     addr += 4; | ||||
|                 } | ||||
|                 if (BIT(inst, 14)) { | ||||
|                     if (cpu->Mode == USER32MODE)  | ||||
|                     if (cpu->Mode == USER32MODE) | ||||
|                         cpu->Reg[14] = ReadMemory32(cpu, addr); | ||||
|                     else | ||||
|                         cpu->Reg_usr[1] = ReadMemory32(cpu, addr); | ||||
|  | @ -5148,7 +5148,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | |||
|     REV16_INST: | ||||
|     REVSH_INST: | ||||
|     { | ||||
|          | ||||
| 
 | ||||
|         if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) { | ||||
|             rev_inst* const inst_cream = (rev_inst*)inst_base->component; | ||||
| 
 | ||||
|  | @ -5721,7 +5721,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | |||
| 
 | ||||
|             if (do_swap) | ||||
|                 rm_val = (((rm_val & 0xFFFF) << 16) | (rm_val >> 16)); | ||||
|              | ||||
| 
 | ||||
|             const s32 product1 = (s16)(rn_val & 0xFFFF) * (s16)(rm_val & 0xFFFF); | ||||
|             const s32 product2 = (s16)((rn_val >> 16) & 0xFFFF) * (s16)((rm_val >> 16) & 0xFFFF); | ||||
|             s64 result; | ||||
|  | @ -6583,7 +6583,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | |||
|             { | ||||
|                 u32 lo_val = 0; | ||||
|                 u32 hi_val = 0; | ||||
|                  | ||||
| 
 | ||||
|                 // UHADD16
 | ||||
|                 if (op2 == 0x00) { | ||||
|                     lo_val = (rn_val & 0xFFFF) + (rm_val & 0xFFFF); | ||||
|  | @ -6772,7 +6772,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | |||
| 
 | ||||
|             u16 lo_val = 0; | ||||
|             u16 hi_val = 0; | ||||
|              | ||||
| 
 | ||||
|             // UQADD16
 | ||||
|             if (op2 == 0x00) { | ||||
|                 lo_val = ARMul_UnsignedSaturatedAdd16(rn_val & 0xFFFF, rm_val & 0xFFFF); | ||||
|  |  | |||
|  | @ -184,7 +184,7 @@ tdstate thumb_translate(u32 addr, u32 instr, u32* ainstr, u32* inst_size) { | |||
|     case 9: // LDR Rd,[PC,#imm8]
 | ||||
|         *ainstr = 0xE59F0000                    // base
 | ||||
|             | ((tinstr & 0x0700) << (12 - 8))   // Rd
 | ||||
|             |((tinstr & 0x00FF) << (2 - 0));    // off8 
 | ||||
|             |((tinstr & 0x00FF) << (2 - 0));    // off8
 | ||||
|         break; | ||||
| 
 | ||||
|     case 10: | ||||
|  |  | |||
|  | @ -628,7 +628,7 @@ void WriteCP15Register(ARMul_State* cpu, u32 value, u32 crn, u32 opcode_1, u32 c | |||
|            cpu->CP15[CP15_DATA_SYNC_BARRIER] = value; | ||||
|        else if (opcode_2 == 5) | ||||
|            cpu->CP15[CP15_DATA_MEMORY_BARRIER] = value; | ||||
|             | ||||
| 
 | ||||
|     } | ||||
|     else if (crn == 13 && opcode_1 == 0 && crm == 0 && opcode_2 == 2) | ||||
|     { | ||||
|  |  | |||
|  | @ -1,16 +1,16 @@ | |||
| /*  armdefs.h -- ARMulator common definitions:  ARM6 Instruction Emulator.
 | ||||
|     Copyright (C) 1994 Advanced RISC Machines Ltd. | ||||
|   | ||||
| 
 | ||||
|     This program is free software; you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation; either version 2 of the License, or | ||||
|     (at your option) any later version. | ||||
|   | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
|   | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program; if not, write to the Free Software | ||||
|     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | ||||
|  |  | |||
|  | @ -18,10 +18,10 @@ | |||
|     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | ||||
| */ | ||||
| 
 | ||||
| /* 
 | ||||
| /*
 | ||||
|  *  The following code is derivative from Linux Android kernel vfp | ||||
|  *  floating point support. | ||||
|  *  | ||||
|  * | ||||
|  *  Copyright (C) 2004 ARM Limited. | ||||
|  *  Written by Deep Blue Solutions Limited. | ||||
|  * | ||||
|  |  | |||
|  | @ -549,7 +549,7 @@ std::string GetScheduledEventsSummary() { | |||
|         const char* name = event_types[event->type].name; | ||||
|         if (!name) | ||||
|             name = "[unknown]"; | ||||
|         text += Common::StringFromFormat("%s : %i %08x%08x\n", name, (int)event->time,  | ||||
|         text += Common::StringFromFormat("%s : %i %08x%08x\n", name, (int)event->time, | ||||
|                 (u32)(event->userdata >> 32), (u32)(event->userdata)); | ||||
|         event = event->next; | ||||
|     } | ||||
|  |  | |||
|  | @ -87,7 +87,7 @@ void UnregisterAllEvents(); | |||
| /// userdata MAY NOT CONTAIN POINTERS. userdata might get written and reloaded from disk,
 | ||||
| /// when we implement state saves.
 | ||||
| /**
 | ||||
|  * Schedules an event to run after the specified number of cycles,  | ||||
|  * Schedules an event to run after the specified number of cycles, | ||||
|  * with an optional parameter to be passed to the callback handler. | ||||
|  * This must be run ONLY from within the cpu thread. | ||||
|  * @param cycles_into_future The number of cycles after which this event will be fired | ||||
|  |  | |||
|  | @ -30,8 +30,8 @@ std::string GetExtSaveDataPath(const std::string& mount_point, const Path& path) | |||
| std::string GetExtDataContainerPath(const std::string& mount_point, bool shared) { | ||||
|     if (shared) | ||||
|         return Common::StringFromFormat("%sdata/%s/extdata/", mount_point.c_str(), SYSTEM_ID.c_str()); | ||||
|      | ||||
|     return Common::StringFromFormat("%sNintendo 3DS/%s/%s/extdata/", mount_point.c_str(),  | ||||
| 
 | ||||
|     return Common::StringFromFormat("%sNintendo 3DS/%s/%s/extdata/", mount_point.c_str(), | ||||
|             SYSTEM_ID.c_str(), SDCARD_ID.c_str()); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -35,14 +35,14 @@ public: | |||
| private: | ||||
|     /**
 | ||||
|      * This holds the full directory path for this archive, it is only set after a successful call | ||||
|      * to Open, this is formed as <base extsavedatapath>/<type>/<high>/<low>.  | ||||
|      * to Open, this is formed as <base extsavedatapath>/<type>/<high>/<low>. | ||||
|      * See GetExtSaveDataPath for the code that extracts this data from an archive path. | ||||
|      */ | ||||
|     std::string mount_point; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * Constructs a path to the concrete ExtData archive in the host filesystem based on the  | ||||
|  * Constructs a path to the concrete ExtData archive in the host filesystem based on the | ||||
|  * input Path and base mount point. | ||||
|  * @param mount_point The base mount point of the ExtSaveData archives. | ||||
|  * @param path The path that identifies the requested concrete ExtSaveData archive. | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ | |||
| namespace FileSys { | ||||
| 
 | ||||
| static std::string GetSaveDataContainerPath(const std::string& sdmc_directory) { | ||||
|     return Common::StringFromFormat("%sNintendo 3DS/%s/%s/title/", sdmc_directory.c_str(),  | ||||
|     return Common::StringFromFormat("%sNintendo 3DS/%s/%s/title/", sdmc_directory.c_str(), | ||||
|             SYSTEM_ID.c_str(), SDCARD_ID.c_str()); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -81,13 +81,13 @@ public: | |||
|     s32 max_timers = 0; | ||||
|     s32 max_shared_mems = 0; | ||||
|     s32 max_address_arbiters = 0; | ||||
|      | ||||
| 
 | ||||
|     /// Max CPU time that the processes in this category can utilize
 | ||||
|     s32 max_cpu_time = 0; | ||||
| 
 | ||||
|     // TODO(Subv): Increment these in their respective Kernel::T::Create functions, keeping in mind that 
 | ||||
|     // APPLICATION resource limits should not be affected by the objects created by service modules. 
 | ||||
|     // Currently we have no way of distinguishing if a Create was called by the running application, 
 | ||||
|     // TODO(Subv): Increment these in their respective Kernel::T::Create functions, keeping in mind that
 | ||||
|     // APPLICATION resource limits should not be affected by the objects created by service modules.
 | ||||
|     // Currently we have no way of distinguishing if a Create was called by the running application,
 | ||||
|     // or by a service module. Approach this once we have separated the service modules into their own processes
 | ||||
| 
 | ||||
|     /// Current memory that the processes in this category are using
 | ||||
|  |  | |||
|  | @ -42,7 +42,7 @@ void Semaphore::Acquire() { | |||
| 
 | ||||
| ResultVal<s32> Semaphore::Release(s32 release_count) { | ||||
|     if (max_count - available_count < release_count) | ||||
|         return ResultCode(ErrorDescription::OutOfRange, ErrorModule::Kernel,  | ||||
|         return ResultCode(ErrorDescription::OutOfRange, ErrorModule::Kernel, | ||||
|                           ErrorSummary::InvalidArgument, ErrorLevel::Permanent); | ||||
| 
 | ||||
|     s32 previous_count = available_count; | ||||
|  |  | |||
|  | @ -100,7 +100,7 @@ void Thread::Stop() { | |||
|     } | ||||
| 
 | ||||
|     status = THREADSTATUS_DEAD; | ||||
|      | ||||
| 
 | ||||
|     WakeupAllWaitingThreads(); | ||||
| 
 | ||||
|     // Clean up any dangling references in objects that this thread was waiting for
 | ||||
|  | @ -169,7 +169,7 @@ static void PriorityBoostStarvedThreads() { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| /** 
 | ||||
| /**
 | ||||
|  * Switches the CPU's active thread context to that of the specified thread | ||||
|  * @param new_thread The thread to switch to | ||||
|  */ | ||||
|  | @ -353,7 +353,7 @@ void Thread::ResumeFromWait() { | |||
|                 GetObjectId()); | ||||
|             return; | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     ready_queue.push_back(current_priority, this); | ||||
|     status = THREADSTATUS_READY; | ||||
| } | ||||
|  | @ -504,7 +504,7 @@ void Reschedule() { | |||
|     } else if (next) { | ||||
|         LOG_TRACE(Kernel, "context switch idle -> %u", next->GetObjectId()); | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     SwitchContext(next); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -94,7 +94,7 @@ public: | |||
|      * @return The thread's ID | ||||
|      */ | ||||
|     u32 GetThreadId() const { return thread_id; } | ||||
|      | ||||
| 
 | ||||
|     /**
 | ||||
|      * Release an acquired wait object | ||||
|      * @param wait_object WaitObject to release | ||||
|  |  | |||
|  | @ -88,7 +88,7 @@ static void TimerCallback(u64 timer_handle, int cycles_late) { | |||
|     if (timer->interval_delay != 0) { | ||||
|         // Reschedule the timer with the interval delay
 | ||||
|         u64 interval_microseconds = timer->interval_delay / 1000; | ||||
|         CoreTiming::ScheduleEvent(usToCycles(interval_microseconds) - cycles_late,  | ||||
|         CoreTiming::ScheduleEvent(usToCycles(interval_microseconds) - cycles_late, | ||||
|                 timer_callback_event_type, timer_handle); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -151,7 +151,7 @@ void SendParameter(Service::Interface* self) { | |||
|     u32 handle              = cmd_buff[6]; | ||||
|     u32 size                = cmd_buff[7]; | ||||
|     u32 in_param_buffer_ptr = cmd_buff[8]; | ||||
|      | ||||
| 
 | ||||
|     cmd_buff[1] = RESULT_SUCCESS.raw; // No error
 | ||||
| 
 | ||||
|     LOG_WARNING(Service_APT, "(STUBBED) called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," | ||||
|  | @ -283,7 +283,7 @@ void Init() { | |||
|     AddService(new APT_A_Interface); | ||||
|     AddService(new APT_S_Interface); | ||||
|     AddService(new APT_U_Interface); | ||||
|      | ||||
| 
 | ||||
|     // Load the shared system font (if available).
 | ||||
|     // The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header
 | ||||
|     // generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided
 | ||||
|  |  | |||
|  | @ -63,7 +63,7 @@ void Initialize(Service::Interface* self); | |||
|  *      4 : Handle to shared font memory | ||||
|  */ | ||||
| void GetSharedFont(Service::Interface* self); | ||||
|   | ||||
| 
 | ||||
| /**
 | ||||
|  * APT::NotifyToWait service function | ||||
|  *  Inputs: | ||||
|  | @ -88,7 +88,7 @@ void Enable(Service::Interface* self); | |||
|  *      4 : Home Menu AppId | ||||
|  *      5 : AppID of currently active app | ||||
|  */ | ||||
| void GetAppletManInfo(Service::Interface* self);  | ||||
| void GetAppletManInfo(Service::Interface* self); | ||||
| 
 | ||||
| /**
 | ||||
|  * APT::IsRegistered service function. This returns whether the specified AppID is registered with NS yet. | ||||
|  | @ -100,14 +100,14 @@ void GetAppletManInfo(Service::Interface* self); | |||
|  *  Outputs: | ||||
|  *      0 : Return header | ||||
|  *      1 : Result of function, 0 on success, otherwise error code | ||||
|  *      2 : Output, 0 = not registered, 1 = registered.  | ||||
|  *      2 : Output, 0 = not registered, 1 = registered. | ||||
|  */ | ||||
| void IsRegistered(Service::Interface* self); | ||||
| 
 | ||||
| void InquireNotification(Service::Interface* self); | ||||
| 
 | ||||
| /**
 | ||||
|  * APT::SendParameter service function. This sets the parameter data state.  | ||||
|  * APT::SendParameter service function. This sets the parameter data state. | ||||
|  * Inputs: | ||||
|  *     1 : Source AppID | ||||
|  *     2 : Destination AppID | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ namespace BOSS_P { | |||
| class Interface : public Service::Interface { | ||||
| public: | ||||
|     Interface(); | ||||
|      | ||||
| 
 | ||||
|     std::string GetPortName() const override { | ||||
|         return "boss:P"; | ||||
|     } | ||||
|  |  | |||
|  | @ -14,7 +14,7 @@ namespace BOSS_U { | |||
| class Interface : public Service::Interface { | ||||
| public: | ||||
|     Interface(); | ||||
|      | ||||
| 
 | ||||
|     std::string GetPortName() const override { | ||||
|         return "boss:U"; | ||||
|     } | ||||
|  |  | |||
|  | @ -19,5 +19,5 @@ namespace CAM_U { | |||
| Interface::Interface() { | ||||
|     //Register(FunctionTable);
 | ||||
| } | ||||
|      | ||||
| 
 | ||||
| } // namespace
 | ||||
|  |  | |||
|  | @ -315,11 +315,11 @@ void Init() { | |||
|     AddService(new CFG_I_Interface); | ||||
|     AddService(new CFG_S_Interface); | ||||
|     AddService(new CFG_U_Interface); | ||||
|      | ||||
| 
 | ||||
|     // Open the SystemSaveData archive 0x00010017
 | ||||
|     FileSys::Path archive_path(cfg_system_savedata_id); | ||||
|     auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::SystemSaveData, archive_path); | ||||
|      | ||||
| 
 | ||||
|     // If the archive didn't exist, create the files inside
 | ||||
|     if (archive_result.Code().description == ErrorDescription::FS_NotFormatted) { | ||||
|         // Format the archive to create the directories
 | ||||
|  |  | |||
|  | @ -254,7 +254,7 @@ ResultVal<ArchiveHandle> OpenArchive(ArchiveIdCode id_code, FileSys::Path& archi | |||
| 
 | ||||
|     CASCADE_RESULT(std::unique_ptr<ArchiveBackend> res, itr->second->Open(archive_path)); | ||||
| 
 | ||||
|     // This should never even happen in the first place with 64-bit handles, 
 | ||||
|     // This should never even happen in the first place with 64-bit handles,
 | ||||
|     while (handle_map.count(next_handle) != 0) { | ||||
|         ++next_handle; | ||||
|     } | ||||
|  | @ -488,7 +488,7 @@ void ArchiveInit() { | |||
|         RegisterArchiveType(std::move(sdmc_factory), ArchiveIdCode::SDMC); | ||||
|     else | ||||
|         LOG_ERROR(Service_FS, "Can't instantiate SDMC archive with path %s", sdmc_directory.c_str()); | ||||
|      | ||||
| 
 | ||||
|     // Create the SaveData archive
 | ||||
|     auto savedata_factory = Common::make_unique<FileSys::ArchiveFactory_SaveData>(sdmc_directory); | ||||
|     RegisterArchiveType(std::move(savedata_factory), ArchiveIdCode::SaveData); | ||||
|  | @ -503,7 +503,7 @@ void ArchiveInit() { | |||
|     if (sharedextsavedata_factory->Initialize()) | ||||
|         RegisterArchiveType(std::move(sharedextsavedata_factory), ArchiveIdCode::SharedExtSaveData); | ||||
|     else | ||||
|         LOG_ERROR(Service_FS, "Can't instantiate SharedExtSaveData archive with path %s",  | ||||
|         LOG_ERROR(Service_FS, "Can't instantiate SharedExtSaveData archive with path %s", | ||||
|             sharedextsavedata_factory->GetMountPoint().c_str()); | ||||
| 
 | ||||
|     // Create the SaveDataCheck archive, basically a small variation of the RomFS archive
 | ||||
|  |  | |||
|  | @ -434,7 +434,7 @@ static void IsSdmcWriteable(Service::Interface* self) { | |||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * FS_User::FormatSaveData service function,  | ||||
|  * FS_User::FormatSaveData service function, | ||||
|  * formats the SaveData specified by the input path. | ||||
|  *  Inputs: | ||||
|  *      0  : 0x084C0242 | ||||
|  | @ -520,7 +520,7 @@ static void CreateExtSaveData(Service::Interface* self) { | |||
|     LOG_WARNING(Service_FS, "(STUBBED) savedata_high=%08X savedata_low=%08X cmd_buff[3]=%08X " | ||||
|             "cmd_buff[4]=%08X cmd_buff[5]=%08X cmd_buff[6]=%08X cmd_buff[7]=%08X cmd_buff[8]=%08X " | ||||
|             "cmd_buff[9]=%08X cmd_buff[10]=%08X cmd_buff[11]=%08X", save_high, save_low, | ||||
|             cmd_buff[3], cmd_buff[4], cmd_buff[5], cmd_buff[6], cmd_buff[7], cmd_buff[8], cmd_buff[9],  | ||||
|             cmd_buff[3], cmd_buff[4], cmd_buff[5], cmd_buff[6], cmd_buff[7], cmd_buff[8], cmd_buff[9], | ||||
|             cmd_buff[10], cmd_buff[11]); | ||||
| 
 | ||||
|     cmd_buff[1] = CreateExtSaveData(media_type, save_high, save_low).raw; | ||||
|  | @ -544,7 +544,7 @@ static void DeleteExtSaveData(Service::Interface* self) { | |||
|     u32 save_high = cmd_buff[3]; | ||||
|     u32 unknown = cmd_buff[4]; // TODO(Subv): Figure out what this is
 | ||||
| 
 | ||||
|     LOG_WARNING(Service_FS, "(STUBBED) save_low=%08X save_high=%08X media_type=%08X unknown=%08X",  | ||||
|     LOG_WARNING(Service_FS, "(STUBBED) save_low=%08X save_high=%08X media_type=%08X unknown=%08X", | ||||
|             save_low, save_high, cmd_buff[1] & 0xFF, unknown); | ||||
| 
 | ||||
|     cmd_buff[1] = DeleteExtSaveData(media_type, save_high, save_low).raw; | ||||
|  |  | |||
|  | @ -167,7 +167,7 @@ static void WriteHWRegsWithMask(Service::Interface* self) { | |||
|     u32* cmd_buff = Kernel::GetCommandBuffer(); | ||||
|     u32 reg_addr = cmd_buff[1]; | ||||
|     u32 size = cmd_buff[2]; | ||||
|      | ||||
| 
 | ||||
|     u32* src_data = (u32*)Memory::GetPointer(cmd_buff[4]); | ||||
|     u32* mask_data = (u32*)Memory::GetPointer(cmd_buff[6]); | ||||
| 
 | ||||
|  | @ -208,21 +208,21 @@ static void SetBufferSwap(u32 screen_id, const FrameBufferInfo& info) { | |||
|     PAddr phys_address_left = Memory::VirtualToPhysicalAddress(info.address_left); | ||||
|     PAddr phys_address_right = Memory::VirtualToPhysicalAddress(info.address_right); | ||||
|     if (info.active_fb == 0) { | ||||
|         WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_left1)), 4,  | ||||
|         WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_left1)), 4, | ||||
|                 &phys_address_left); | ||||
|         WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_right1)), 4,  | ||||
|         WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_right1)), 4, | ||||
|                 &phys_address_right); | ||||
|     } else { | ||||
|         WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_left2)), 4,  | ||||
|         WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_left2)), 4, | ||||
|                 &phys_address_left); | ||||
|         WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_right2)), 4,  | ||||
|         WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].address_right2)), 4, | ||||
|                 &phys_address_right); | ||||
|     } | ||||
|     WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].stride)), 4,  | ||||
|     WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].stride)), 4, | ||||
|             &info.stride); | ||||
|     WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].color_format)), 4,  | ||||
|     WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].color_format)), 4, | ||||
|             &info.format); | ||||
|     WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].active_fb)), 4,  | ||||
|     WriteHWRegs(base_address + 4 * static_cast<u32>(GPU_REG_INDEX(framebuffer_config[screen_id].active_fb)), 4, | ||||
|             &info.shown_fb); | ||||
| } | ||||
| 
 | ||||
|  | @ -374,7 +374,7 @@ static void ExecuteCommand(const Command& command, u32 thread_id) { | |||
|     { | ||||
|         auto& params = command.set_command_list_last; | ||||
| 
 | ||||
|         WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.address)),  | ||||
|         WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.address)), | ||||
|                 Memory::VirtualToPhysicalAddress(params.address) >> 3); | ||||
|         WriteGPURegister(static_cast<u32>(GPU_REG_INDEX(command_processor_config.size)), params.size); | ||||
| 
 | ||||
|  | @ -470,7 +470,7 @@ static void SetLcdForceBlack(Service::Interface* self) { | |||
| 
 | ||||
|     LCD::Write(HW::VADDR_LCD + 4 * LCD_REG_INDEX(color_fill_top), data.raw); // Top LCD
 | ||||
|     LCD::Write(HW::VADDR_LCD + 4 * LCD_REG_INDEX(color_fill_bottom), data.raw); // Bottom LCD
 | ||||
|      | ||||
| 
 | ||||
|     cmd_buff[1] = RESULT_SUCCESS.raw; | ||||
| } | ||||
| 
 | ||||
|  | @ -516,8 +516,8 @@ static void TriggerCmdReqQueue(Service::Interface* self) { | |||
|  */ | ||||
| static void ImportDisplayCaptureInfo(Service::Interface* self) { | ||||
|     u32* cmd_buff = Kernel::GetCommandBuffer(); | ||||
|      | ||||
|     // TODO(Subv): We're always returning the framebuffer structures for thread_id = 0, 
 | ||||
| 
 | ||||
|     // TODO(Subv): We're always returning the framebuffer structures for thread_id = 0,
 | ||||
|     // because we only support a single running application at a time.
 | ||||
|     // This should always return the framebuffer data that is currently displayed on the screen.
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -106,7 +106,7 @@ void Update() { | |||
|         mem->touch.index_reset_ticks_previous = mem->touch.index_reset_ticks; | ||||
|         mem->touch.index_reset_ticks = (s64)CoreTiming::GetTicks(); | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     // Signal both handles when there's an update to Pad or touch
 | ||||
|     event_pad_or_touch_1->Signal(); | ||||
|     event_pad_or_touch_2->Signal(); | ||||
|  |  | |||
|  | @ -25,6 +25,6 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| HID_SPVR_Interface::HID_SPVR_Interface() { | ||||
|     Register(FunctionTable); | ||||
| } | ||||
|      | ||||
| 
 | ||||
| } // namespace HID
 | ||||
| } // namespace Service
 | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ | |||
| 
 | ||||
| namespace Service { | ||||
| namespace HID { | ||||
|      | ||||
| 
 | ||||
| /**
 | ||||
|  * HID service interface. | ||||
|  */ | ||||
|  |  | |||
|  | @ -20,15 +20,15 @@ enum class ChargeLevels : u32 { | |||
|     CompletelyFull     = 5, | ||||
| }; | ||||
| 
 | ||||
| /** 
 | ||||
| /**
 | ||||
|  * Represents the gamecoin file structure in the SharedExtData archive | ||||
|  * More information in 3dbrew (http://www.3dbrew.org/wiki/Extdata#Shared_Extdata_0xf000000b_gamecoin.dat)
 | ||||
|  */ | ||||
| struct GameCoin { | ||||
|     u32 magic; ///< Magic number: 0x4F00
 | ||||
|     u16 total_coins; ///< Total Play Coins 
 | ||||
|     u16 total_coins; ///< Total Play Coins
 | ||||
|     u16 total_coins_on_date; ///< Total Play Coins obtained on the date stored below.
 | ||||
|     u32 step_count; ///< Total step count at the time a new Play Coin was obtained. 
 | ||||
|     u32 step_count; ///< Total step count at the time a new Play Coin was obtained.
 | ||||
|     u32 last_step_count; ///< Step count for the day the last Play Coin was obtained
 | ||||
|     u16 year; | ||||
|     u8 month; | ||||
|  |  | |||
|  | @ -18,6 +18,6 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| PTM_Play_Interface::PTM_Play_Interface() { | ||||
|     Register(FunctionTable); | ||||
| } | ||||
|      | ||||
| 
 | ||||
| } // namespace PTM
 | ||||
| } // namespace Service
 | ||||
|  | @ -52,7 +52,7 @@ std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_kernel_named_por | |||
| std::unordered_map<std::string, Kernel::SharedPtr<Interface>> g_srv_services; | ||||
| 
 | ||||
| /**
 | ||||
|  * Creates a function string for logging, complete with the name (or header code, depending  | ||||
|  * Creates a function string for logging, complete with the name (or header code, depending | ||||
|  * on what's passed in) the port name, and all the cmd_buff arguments. | ||||
|  */ | ||||
| static std::string MakeFunctionString(const char* name, const char* port_name, const u32* cmd_buff) { | ||||
|  |  | |||
|  | @ -139,7 +139,7 @@ static int TranslateError(int error) { | |||
|     auto found = error_map.find(error); | ||||
|     if (found != error_map.end()) | ||||
|         return -found->second; | ||||
|      | ||||
| 
 | ||||
|     return error; | ||||
| } | ||||
| 
 | ||||
|  | @ -346,7 +346,7 @@ static void Bind(Service::Interface* self) { | |||
|     sockaddr sock_addr = CTRSockAddr::ToPlatform(*ctr_sock_addr); | ||||
| 
 | ||||
|     int res = ::bind(socket_handle, &sock_addr, std::max<u32>(sizeof(sock_addr), len)); | ||||
|      | ||||
| 
 | ||||
|     int result = 0; | ||||
|     if (res != 0) | ||||
|         result = TranslateError(GET_ERRNO); | ||||
|  | @ -360,14 +360,14 @@ static void Fcntl(Service::Interface* self) { | |||
|     u32 socket_handle = cmd_buffer[1]; | ||||
|     u32 ctr_cmd = cmd_buffer[2]; | ||||
|     u32 ctr_arg = cmd_buffer[3]; | ||||
|   | ||||
| 
 | ||||
|     int result = 0; | ||||
|     u32 posix_ret = 0; // TODO: Check what hardware returns for F_SETFL (unspecified by POSIX)
 | ||||
|     SCOPE_EXIT({ | ||||
|             cmd_buffer[1] = result; | ||||
|             cmd_buffer[2] = posix_ret; | ||||
|     }); | ||||
|   | ||||
| 
 | ||||
|     if (ctr_cmd == 3) { // F_GETFL
 | ||||
| #if EMU_PLATFORM == PLATFORM_WINDOWS | ||||
|         posix_ret = 0; | ||||
|  | @ -404,11 +404,11 @@ static void Fcntl(Service::Interface* self) { | |||
|             posix_ret = -1; | ||||
|             return; | ||||
|         } | ||||
|   | ||||
| 
 | ||||
|         flags &= ~O_NONBLOCK; | ||||
|         if (ctr_arg & 4) // O_NONBLOCK
 | ||||
|             flags |= O_NONBLOCK; | ||||
|   | ||||
| 
 | ||||
|         int ret = ::fcntl(socket_handle, F_SETFL, flags); | ||||
|         if (ret == SOCKET_ERROR_VALUE) { | ||||
|             result = TranslateError(GET_ERRNO); | ||||
|  | @ -439,8 +439,8 @@ static void Listen(Service::Interface* self) { | |||
| } | ||||
| 
 | ||||
| static void Accept(Service::Interface* self) { | ||||
|     // TODO(Subv): Calling this function on a blocking socket will block the emu thread, 
 | ||||
|     // preventing graceful shutdown when closing the emulator, this can be fixed by always 
 | ||||
|     // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
 | ||||
|     // preventing graceful shutdown when closing the emulator, this can be fixed by always
 | ||||
|     // performing nonblocking operations and spinlock until the data is available
 | ||||
|     u32* cmd_buffer = Kernel::GetCommandBuffer(); | ||||
|     u32 socket_handle = cmd_buffer[1]; | ||||
|  | @ -448,7 +448,7 @@ static void Accept(Service::Interface* self) { | |||
|     sockaddr addr; | ||||
|     socklen_t addr_len = sizeof(addr); | ||||
|     u32 ret = static_cast<u32>(::accept(socket_handle, &addr, &addr_len)); | ||||
|      | ||||
| 
 | ||||
|     if ((s32)ret != SOCKET_ERROR_VALUE) | ||||
|         open_sockets[ret] = { ret, true }; | ||||
| 
 | ||||
|  | @ -525,8 +525,8 @@ static void SendTo(Service::Interface* self) { | |||
| } | ||||
| 
 | ||||
| static void RecvFrom(Service::Interface* self) { | ||||
|     // TODO(Subv): Calling this function on a blocking socket will block the emu thread, 
 | ||||
|     // preventing graceful shutdown when closing the emulator, this can be fixed by always 
 | ||||
|     // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
 | ||||
|     // preventing graceful shutdown when closing the emulator, this can be fixed by always
 | ||||
|     // performing nonblocking operations and spinlock until the data is available
 | ||||
|     u32* cmd_buffer = Kernel::GetCommandBuffer(); | ||||
|     u32 socket_handle = cmd_buffer[1]; | ||||
|  | @ -568,7 +568,7 @@ static void Poll(Service::Interface* self) { | |||
|     pollfd* platform_pollfd = new pollfd[nfds]; | ||||
|     for (unsigned current_fds = 0; current_fds < nfds; ++current_fds) | ||||
|         platform_pollfd[current_fds] = CTRPollFD::ToPlatform(input_fds[current_fds]); | ||||
|      | ||||
| 
 | ||||
|     int ret = ::poll(platform_pollfd, nfds, timeout); | ||||
| 
 | ||||
|     // Now update the output pollfd structure
 | ||||
|  | @ -630,7 +630,7 @@ static void GetPeerName(Service::Interface* self) { | |||
|     socklen_t len = cmd_buffer[2]; | ||||
| 
 | ||||
|     CTRSockAddr* ctr_dest_addr = reinterpret_cast<CTRSockAddr*>(Memory::GetPointer(cmd_buffer[0x104 >> 2])); | ||||
|      | ||||
| 
 | ||||
|     sockaddr dest_addr; | ||||
|     socklen_t dest_addr_len = sizeof(dest_addr); | ||||
|     int ret = ::getpeername(socket_handle, &dest_addr, &dest_addr_len); | ||||
|  | @ -651,8 +651,8 @@ static void GetPeerName(Service::Interface* self) { | |||
| } | ||||
| 
 | ||||
| static void Connect(Service::Interface* self) { | ||||
|     // TODO(Subv): Calling this function on a blocking socket will block the emu thread, 
 | ||||
|     // preventing graceful shutdown when closing the emulator, this can be fixed by always 
 | ||||
|     // TODO(Subv): Calling this function on a blocking socket will block the emu thread,
 | ||||
|     // preventing graceful shutdown when closing the emulator, this can be fixed by always
 | ||||
|     // performing nonblocking operations and spinlock until the data is available
 | ||||
|     u32* cmd_buffer = Kernel::GetCommandBuffer(); | ||||
|     u32 socket_handle = cmd_buffer[1]; | ||||
|  |  | |||
|  | @ -228,7 +228,7 @@ static ResultCode WaitSynchronizationN(s32* out, Handle* handles, s32 handle_cou | |||
|         // Actually wait the current thread on each object if we decided to wait...
 | ||||
|         std::vector<SharedPtr<Kernel::WaitObject>> wait_objects; | ||||
|         wait_objects.reserve(handle_count); | ||||
|          | ||||
| 
 | ||||
|         for (int i = 0; i < handle_count; ++i) { | ||||
|             auto object = Kernel::g_handle_table.GetWaitObject(handles[i]); | ||||
|             object->AddWaitingThread(Kernel::GetCurrentThread()); | ||||
|  | @ -475,7 +475,7 @@ static ResultCode GetProcessIdOfThread(u32* process_id, Handle thread_handle) { | |||
|         return ERR_INVALID_HANDLE; | ||||
| 
 | ||||
|     const SharedPtr<Kernel::Process> process = thread->owner_process; | ||||
|      | ||||
| 
 | ||||
|     ASSERT_MSG(process != nullptr, "Invalid parent process for thread=0x%08X", thread_handle); | ||||
| 
 | ||||
|     *process_id = process->process_id; | ||||
|  |  | |||
|  | @ -140,7 +140,7 @@ inline void Write(u32 addr, const T data) { | |||
|                 // Raw copies do not perform color conversion nor tiled->linear / linear->tiled conversions
 | ||||
|                 // TODO(Subv): Verify if raw copies perform scaling
 | ||||
|                 memcpy(dst_pointer, src_pointer, output_size); | ||||
|                  | ||||
| 
 | ||||
|                 LOG_TRACE(HW_GPU, "DisplayTriggerTransfer: 0x%08x bytes from 0x%08x(%ux%u)-> 0x%08x(%ux%u), output format: %x, flags 0x%08X, Raw copy", | ||||
|                     output_size, | ||||
|                     config.GetPhysicalInputAddress(), config.input_width.Value(), config.input_height.Value(), | ||||
|  | @ -159,14 +159,14 @@ inline void Write(u32 addr, const T data) { | |||
|                 for (u32 x = 0; x < output_width; ++x) { | ||||
|                     Math::Vec4<u8> src_color = { 0, 0, 0, 0 }; | ||||
| 
 | ||||
|                     // Calculate the [x,y] position of the input image 
 | ||||
|                     // Calculate the [x,y] position of the input image
 | ||||
|                     // based on the current output position and the scale
 | ||||
|                     u32 input_x = x * horizontal_scale; | ||||
|                     u32 input_y = y * vertical_scale; | ||||
| 
 | ||||
|                     if (config.flip_vertically) { | ||||
|                         // Flip the y value of the output data, 
 | ||||
|                         // we do this after calculating the [x,y] position of the input image 
 | ||||
|                         // Flip the y value of the output data,
 | ||||
|                         // we do this after calculating the [x,y] position of the input image
 | ||||
|                         // to account for the scaling options.
 | ||||
|                         y = output_height - y - 1; | ||||
|                     } | ||||
|  | @ -302,7 +302,7 @@ static void VBlankCallback(u64 userdata, int cycles_late) { | |||
|     //  - If frameskip == 0 (disabled), always swap buffers
 | ||||
|     //  - If frameskip == 1, swap buffers every other frame (starting from the first frame)
 | ||||
|     //  - If frameskip > 1, swap buffers every frameskip^n frames (starting from the second frame)
 | ||||
|     if ((((Settings::values.frame_skip != 1) ^ last_skip_frame) && last_skip_frame != g_skip_frame) ||  | ||||
|     if ((((Settings::values.frame_skip != 1) ^ last_skip_frame) && last_skip_frame != g_skip_frame) || | ||||
|             Settings::values.frame_skip == 0) { | ||||
|         VideoCore::g_renderer->SwapBuffers(); | ||||
|     } | ||||
|  |  | |||
|  | @ -66,5 +66,5 @@ void Init() { | |||
| void Shutdown() { | ||||
|     LOG_DEBUG(HW_LCD, "shutdown OK"); | ||||
| } | ||||
|      | ||||
| 
 | ||||
| } // namespace
 | ||||
|  |  | |||
|  | @ -85,5 +85,5 @@ void Init(); | |||
| 
 | ||||
| /// Shutdown hardware
 | ||||
| void Shutdown(); | ||||
|      | ||||
| 
 | ||||
| } // namespace
 | ||||
|  |  | |||
|  | @ -234,7 +234,7 @@ ResultStatus AppLoader_THREEDSX::Load() { | |||
|     Kernel::g_current_process = Kernel::Process::Create(filename, 0); | ||||
|     Kernel::g_current_process->svc_access_mask.set(); | ||||
|     Kernel::g_current_process->address_mappings = default_address_mappings; | ||||
|      | ||||
| 
 | ||||
|     // Attach the default resource limit (APPLICATION) to the process
 | ||||
|     Kernel::g_current_process->resource_limit = Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | ||||
| 
 | ||||
|  |  | |||
|  | @ -97,7 +97,7 @@ enum : VAddr { | |||
|     SHARED_PAGE_VADDR_END = SHARED_PAGE_VADDR + SHARED_PAGE_SIZE, | ||||
| 
 | ||||
|     // TODO(yuriks): The size of this area is dynamic, the kernel grows
 | ||||
|     // it as more and more threads are created. For now we'll just use a 
 | ||||
|     // it as more and more threads are created. For now we'll just use a
 | ||||
|     // hardcoded value.
 | ||||
|     /// Area where TLS (Thread-Local Storage) buffers are allocated.
 | ||||
|     TLS_AREA_VADDR     = 0x1FF82000, | ||||
|  |  | |||
|  | @ -136,7 +136,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
|                                   input.attr[i][0].ToFloat32(), input.attr[i][1].ToFloat32(), | ||||
|                                   input.attr[i][2].ToFloat32(), input.attr[i][3].ToFloat32()); | ||||
|                     } | ||||
|                      | ||||
| 
 | ||||
|                     // Load per-vertex data from the loader arrays
 | ||||
|                     for (unsigned int comp = 0; comp < vertex_attribute_elements[i]; ++comp) { | ||||
|                         const u8* srcdata = Memory::GetPhysicalPointer(vertex_attribute_sources[i] + vertex_attribute_strides[i] * vertex + comp * vertex_attribute_element_size[i]); | ||||
|  | @ -193,7 +193,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
|                                                    const Pica::VertexShader::OutputVertex& v2) { | ||||
|                         VideoCore::g_renderer->hw_rasterizer->AddTriangle(v0, v1, v2); | ||||
|                     }; | ||||
|                      | ||||
| 
 | ||||
|                     primitive_assembler.SubmitVertex(output, AddHWTriangle); | ||||
|                 } else { | ||||
|                     // Send to triangle clipper
 | ||||
|  | @ -282,7 +282,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
|             } | ||||
|             break; | ||||
|         } | ||||
|          | ||||
| 
 | ||||
|         // Load default vertex input attributes
 | ||||
|         case PICA_REG_INDEX_WORKAROUND(vs_default_attributes_setup.set_value[0], 0x233): | ||||
|         case PICA_REG_INDEX_WORKAROUND(vs_default_attributes_setup.set_value[1], 0x234): | ||||
|  | @ -306,7 +306,7 @@ static inline void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
|                 } | ||||
| 
 | ||||
|                 Math::Vec4<float24>& attribute = g_state.vs.default_attributes[setup.index]; | ||||
|                  | ||||
| 
 | ||||
|                 // NOTE: The destination component order indeed is "backwards"
 | ||||
|                 attribute.w = float24::FromRawFloat24(default_attr_write_buffer[0] >> 8); | ||||
|                 attribute.z = float24::FromRawFloat24(((default_attr_write_buffer[0] & 0xFF) << 16) | ((default_attr_write_buffer[1] >> 16) & 0xFFFF)); | ||||
|  |  | |||
|  | @ -319,7 +319,7 @@ const Math::Vec4<u8> LookupTexture(const u8* source, int x, int y, const Texture | |||
|         // TODO(neobrain): Fix code design to unify vertical block offsets!
 | ||||
|         source += coarse_y * info.stride; | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     // TODO: Assert that width/height are multiples of block dimensions
 | ||||
| 
 | ||||
|     switch (info.format) { | ||||
|  |  | |||
|  | @ -461,7 +461,7 @@ public: | |||
|     // e.g. Vec2 uv() { return Vec2(x,y); }
 | ||||
| 
 | ||||
|     // _DEFINE_SWIZZLER2 defines a single such function
 | ||||
|     // DEFINE_SWIZZLER2_COMP1 defines one-component functions for all component names (x<->r) 
 | ||||
|     // DEFINE_SWIZZLER2_COMP1 defines one-component functions for all component names (x<->r)
 | ||||
|     // DEFINE_SWIZZLER2_COMP2 defines two component functions for all component names (x<->r) and permutations (xy<->yx)
 | ||||
| #define _DEFINE_SWIZZLER2(a, b, name) const Vec2<T> name() const { return Vec2<T>(a, b); } | ||||
| #define DEFINE_SWIZZLER2_COMP1(a, a2) \ | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ | |||
| #include "common/common_types.h" | ||||
| #include "common/logging/log.h" | ||||
| 
 | ||||
| #include "math.h"  | ||||
| #include "math.h" | ||||
| 
 | ||||
| namespace Pica { | ||||
| 
 | ||||
|  | @ -337,7 +337,7 @@ struct Regs { | |||
|             return (stage_index < 4) && (update_mask_a & (1 << stage_index)); | ||||
|         } | ||||
|     } tev_combiner_buffer_input; | ||||
|      | ||||
| 
 | ||||
|     INSERT_PADDING_WORDS(0xf); | ||||
|     TevStageConfig tev_stage4; | ||||
|     INSERT_PADDING_WORDS(0x3); | ||||
|  | @ -703,11 +703,11 @@ struct Regs { | |||
|     struct { | ||||
|         // Index of the current default attribute
 | ||||
|         u32 index; | ||||
|          | ||||
| 
 | ||||
|         // Writing to these registers sets the "current" default attribute.
 | ||||
|         u32 set_value[3]; | ||||
|     } vs_default_attributes_setup; | ||||
|      | ||||
| 
 | ||||
|     INSERT_PADDING_WORDS(0x28); | ||||
| 
 | ||||
|     enum class TriangleTopology : u32 { | ||||
|  |  | |||
|  | @ -104,7 +104,7 @@ static u32 GetDepth(int x, int y) { | |||
|     u8* depth_buffer = Memory::GetPhysicalPointer(addr); | ||||
| 
 | ||||
|     y = framebuffer.height - y; | ||||
|      | ||||
| 
 | ||||
|     const u32 coarse_y = y & ~7; | ||||
|     u32 bytes_per_pixel = Regs::BytesPerDepthPixel(framebuffer.depth_format); | ||||
|     u32 stride = framebuffer.width * bytes_per_pixel; | ||||
|  |  | |||
|  | @ -62,9 +62,9 @@ static int TestPointer(const PROC pTest) | |||
| 	ptrdiff_t iTest; | ||||
| 	if(!pTest) return 0; | ||||
| 	iTest = (ptrdiff_t)pTest; | ||||
| 	 | ||||
| 
 | ||||
| 	if(iTest == 1 || iTest == 2 || iTest == 3 || iTest == -1) return 0; | ||||
| 	 | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
|  | @ -79,7 +79,7 @@ static PROC WinGetProcAddress(const char *name) | |||
| 	glMod = GetModuleHandleA("OpenGL32.dll"); | ||||
| 	return (PROC)GetProcAddress(glMod, (LPCSTR)name); | ||||
| } | ||||
| 	 | ||||
| 
 | ||||
| #define IntGetProcAddress(name) WinGetProcAddress(name) | ||||
| #else | ||||
| 	#if defined(__APPLE__) | ||||
|  | @ -1083,7 +1083,7 @@ static ogl_StrToExtMap *FindExtEntry(const char *extensionName) | |||
|   	if(strcmp(extensionName, currLoc->extensionName) == 0) | ||||
|   		return currLoc; | ||||
|   } | ||||
|    | ||||
| 
 | ||||
|   return NULL; | ||||
| } | ||||
| 
 | ||||
|  | @ -1135,15 +1135,15 @@ int ogl_LoadFunctions() | |||
| { | ||||
|   int numFailed = 0; | ||||
|   ClearExtensionVars(); | ||||
|    | ||||
| 
 | ||||
|   _ptrc_glGetIntegerv = (void (CODEGEN_FUNCPTR *)(GLenum, GLint *))IntGetProcAddress("glGetIntegerv"); | ||||
|   if(!_ptrc_glGetIntegerv) return ogl_LOAD_FAILED; | ||||
|   _ptrc_glGetStringi = (const GLubyte * (CODEGEN_FUNCPTR *)(GLenum, GLuint))IntGetProcAddress("glGetStringi"); | ||||
|   if(!_ptrc_glGetStringi) return ogl_LOAD_FAILED; | ||||
|    | ||||
| 
 | ||||
|   ProcExtsFromExtList(); | ||||
|   numFailed = Load_Version_3_2(); | ||||
|    | ||||
| 
 | ||||
|   if(numFailed == 0) | ||||
|   	return ogl_LOAD_SUCCEEDED; | ||||
|   else | ||||
|  | @ -1177,7 +1177,7 @@ int ogl_IsVersionGEQ(int majorVersion, int minorVersion) | |||
| { | ||||
| 	if(g_major_version == 0) | ||||
| 		GetGLVersion(); | ||||
| 		 | ||||
| 
 | ||||
| 	if(majorVersion > g_major_version) return 1; | ||||
| 	if(majorVersion < g_major_version) return 0; | ||||
| 	if(minorVersion >= g_minor_version) return 1; | ||||
|  |  | |||
|  | @ -350,7 +350,7 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) { | |||
|     case PICA_REG_INDEX(tev_stage5.color_scale): | ||||
|         SyncTevMultipliers(5, regs.tev_stage5); | ||||
|         break; | ||||
|      | ||||
| 
 | ||||
|     // TEV combiner buffer color
 | ||||
|     case PICA_REG_INDEX(tev_combiner_buffer_color): | ||||
|         SyncCombinerColor(); | ||||
|  |  | |||
|  | @ -82,7 +82,7 @@ void OpenGLState::Apply() { | |||
|         } else { | ||||
|             glDisable(GL_STENCIL_TEST); | ||||
|         } | ||||
|     }  | ||||
|     } | ||||
| 
 | ||||
|     if (stencil.test_func != cur_state.stencil.test_func || | ||||
|         stencil.test_ref != cur_state.stencil.test_ref || | ||||
|  |  | |||
|  | @ -61,7 +61,7 @@ public: | |||
|     static const OpenGLState& GetCurState() { | ||||
|         return cur_state; | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     /// Apply this state as the current OpenGL state
 | ||||
|     void Apply(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -157,7 +157,7 @@ void RendererOpenGL::LoadFBToActiveGLTexture(const GPU::Regs::FramebufferConfig& | |||
|     state.texture_units[0].enabled_2d = true; | ||||
|     state.texture_units[0].texture_2d = texture.handle; | ||||
|     state.Apply(); | ||||
|      | ||||
| 
 | ||||
|     glActiveTexture(GL_TEXTURE0); | ||||
|     glPixelStorei(GL_UNPACK_ROW_LENGTH, (GLint)pixel_stride); | ||||
| 
 | ||||
|  |  | |||
|  | @ -330,7 +330,7 @@ static void ProcessShaderCode(VertexShaderState& state) { | |||
| 
 | ||||
|         case OpCode::Type::MultiplyAdd: | ||||
|         { | ||||
|             if ((instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MAD) ||  | ||||
|             if ((instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MAD) || | ||||
|                 (instr.opcode.Value().EffectiveOpCode() == OpCode::Id::MADI)) { | ||||
|                 const SwizzlePattern& swizzle = *(SwizzlePattern*)&swizzle_data[instr.mad.operand_desc_id]; | ||||
| 
 | ||||
|  | @ -547,7 +547,7 @@ OutputVertex RunShader(const InputVertex& input, int num_attributes) { | |||
|     const auto& attribute_register_map = regs.vs_input_register_map; | ||||
|     float24 dummy_register; | ||||
|     boost::fill(state.input_register_table, &dummy_register); | ||||
|      | ||||
| 
 | ||||
|     if (num_attributes > 0) state.input_register_table[attribute_register_map.attribute0_register] = &input.attr[0].x; | ||||
|     if (num_attributes > 1) state.input_register_table[attribute_register_map.attribute1_register] = &input.attr[1].x; | ||||
|     if (num_attributes > 2) state.input_register_table[attribute_register_map.attribute2_register] = &input.attr[2].x; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue