{"action":"created","comment":{"url":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/48098925","id":48098925,"diff_hunk":"@@ -0,0 +1,882 @@\n+// Copyright 2010 Dolphin Emulator Project\r\n+// Licensed under GPLv2+\n+// Refer to the license.txt file included.\n+\n+#include <cctype>\n+#include <list>\n+#include <string>\n+\n+#include \"VideoBackends/D3D12/D3DBase.h\"\n+#include \"VideoBackends/D3D12/D3DCommandListManager.h\"\n+#include \"VideoBackends/D3D12/D3DDescriptorHeapManager.h\"\n+#include \"VideoBackends/D3D12/D3DShader.h\"\n+#include \"VideoBackends/D3D12/D3DState.h\"\n+#include \"VideoBackends/D3D12/D3DTexture.h\"\n+#include \"VideoBackends/D3D12/D3DUtil.h\"\n+#include \"VideoBackends/D3D12/GeometryShaderCache.h\"\n+#include \"VideoBackends/D3D12/PixelShaderCache.h\"\n+#include \"VideoBackends/D3D12/VertexShaderCache.h\"\n+#include \"VideoBackends/D3D12/Render.h\"\n+\n+namespace DX12\n+{\n+\n+extern D3D12_BLEND_DESC clearblendstates12[4];\n+extern D3D12_DEPTH_STENCIL_DESC cleardepthstates12[3];\n+extern D3D12_BLEND_DESC resetblendstate12;\n+extern D3D12_DEPTH_STENCIL_DESC resetdepthstate12;\n+extern D3D12_RASTERIZER_DESC resetraststate12;\n+\n+namespace D3D\n+{\n+\tinline void ResourceBarrier(ID3D12GraphicsCommandList* commandList, ID3D12Resource* resource, D3D12_RESOURCE_STATES stateBefore, D3D12_RESOURCE_STATES stateAfter, UINT subresource)\n+\t{\n+\t\tif (stateBefore == stateAfter) return;\n+\n+\t\tCHECK(resource, \"NULL resource passed to ResourceBarrier.\");\n+\n+\t\tD3D12_RESOURCE_BARRIER resourceBarrierDesc = {\n+\t\t\tD3D12_RESOURCE_BARRIER_TYPE_TRANSITION, // D3D12_RESOURCE_TRANSITION_BARRIER_DESC Transition\n+\t\t\tD3D12_RESOURCE_BARRIER_FLAG_NONE,       // D3D12_RESOURCE_BARRIER_FLAGS Flags\n+\n+\t\t\t// D3D12_RESOURCE_TRANSITION_BARRIER_DESC Transition\n+\t\t\t{\n+\t\t\t\tresource,    // ID3D12Resource *pResource;\n+\t\t\t\tsubresource, // UINT Subresource;\n+\t\t\t\tstateBefore, // UINT StateBefore;\n+\t\t\t\tstateAfter   // UINT StateAfter;\n+\t\t\t}\n+\t\t};\n+\n+\t\tcommandList->ResourceBarrier(1, &resourceBarrierDesc);\n+\t}\n+\n+// Ring buffer class, shared between the draw* functions\n+class UtilVertexBuffer\n+{\n+public:\n+\tUtilVertexBuffer(int size) : buf(nullptr), offset(0), max_size(size)\n+\t{\n+\t\tCheckHR(\n+\t\t\tdevice12->CreateCommittedResource(\n+\t\t\t\t&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_UPLOAD),\n+\t\t\t\tD3D12_HEAP_FLAG_NONE,\n+\t\t\t\t&CD3DX12_RESOURCE_DESC::Buffer(max_size),\n+\t\t\t\tD3D12_RESOURCE_STATE_GENERIC_READ,\n+\t\t\t\tnullptr,\n+\t\t\t\tIID_PPV_ARGS(&buf12)\n+\t\t\t\t)\n+\t\t\t);\n+\n+\t\t// Map buffer for CPU access upon creation.\n+\t\t// On D3D12, CPU-visible resources are persistently mapped.\n+\n+\t\tCheckHR(buf12->Map(0, nullptr, &buf12data));\n+\t}\n+\t~UtilVertexBuffer()\n+\t{\n+\t\tD3D::commandListMgr->DestroyResourceAfterCurrentCommandListExecuted(buf12);\n+\t}\n+\n+\t// returns vertex offset to the new data\n+\tint AppendData(void* data, int size, int vertex_size)\n+\t{\n+\t\tif (offset + size >= max_size)\n+\t\t{\n+\t\t\t// wrap buffer around and notify observers\n+\t\t\toffset = 0;\n+\t\t}\n+\n+\t\toffset = ((offset+vertex_size-1)/vertex_size)*vertex_size; // align offset to vertex_size bytes\n+\n+\t\tmemcpy((u8*)buf12data + offset, data, size);\n+\n+\t\toffset += size;\n+\t\treturn (offset - size) / vertex_size;\n+\t}\n+\n+\tinline ID3D11Buffer* &GetBuffer() { return buf; }\n+\tinline ID3D12Resource* &GetBuffer12() { return buf12; }\n+\n+private:\n+\tID3D11Buffer* buf;\n+\tID3D12Resource* buf12;\n+\tvoid* buf12data;\n+\n+\tint offset;\n+\tint max_size;\n+};\n+\n+CD3DFont font;\n+UtilVertexBuffer* util_vbuf_stq = nullptr;\n+UtilVertexBuffer* util_vbuf_cq = nullptr;\n+UtilVertexBuffer* util_vbuf_clearq = nullptr;\n+\n+#define MAX_NUM_VERTICES 8000*6\n+struct FONT2DVERTEX {\n+\tfloat x,y,z;\n+\tfloat col[4];\n+\tfloat tu, tv;\n+};\n+\n+inline FONT2DVERTEX InitFont2DVertex(float x, float y, u32 color, float tu, float tv)\n+{\n+\tFONT2DVERTEX v;   v.x=x; v.y=y; v.z=0;  v.tu = tu; v.tv = tv;\n+\tv.col[0] = ((float)((color >> 16) & 0xFF)) / 255.f;\n+\tv.col[1] = ((float)((color >>  8) & 0xFF)) / 255.f;\n+\tv.col[2] = ((float)((color >>  0) & 0xFF)) / 255.f;\n+\tv.col[3] = ((float)((color >> 24) & 0xFF)) / 255.f;\n+\treturn v;\n+}\n+\n+CD3DFont::CD3DFont() : m_dwTexWidth(512), m_dwTexHeight(512)\n+{\n+\tm_pTexture12 = nullptr;\n+\tm_pTexture12cpu = {};\n+\tm_pTexture12gpu = {};\n+\n+\tm_pVB12 = nullptr;\n+\tm_pVB12data = nullptr;\n+\tm_pVB12offset = 0;\n+\tm_pVB12vertexbuffer = {};\n+\tm_pVB12view = {};\n+\n+\tm_InputLayout12 = {};\n+\tm_pshader12 = {};\n+\tm_vshader12 = {};\n+}\n+\n+const char fontpixshader[] = {\n+\t\"Texture2D tex2D;\\n\"\n+\t\"SamplerState linearSampler\\n\"\n+\t\"{\\n\"\n+\t\"\tFilter = MIN_MAG_MIP_LINEAR;\\n\"\n+\t\"\tAddressU = D3D11_TEXTURE_ADDRESS_BORDER;\\n\"\n+\t\"\tAddressV = D3D11_TEXTURE_ADDRESS_BORDER;\\n\"\n+\t\"\tBorderColor = float4(0.f, 0.f, 0.f, 0.f);\\n\"\n+\t\"};\\n\"\n+\t\"struct PS_INPUT\\n\"\n+\t\"{\\n\"\n+\t\"\tfloat4 pos : SV_POSITION;\\n\"\n+\t\"\tfloat4 col : COLOR;\\n\"\n+\t\"\tfloat2 tex : TEXCOORD;\\n\"\n+\t\"};\\n\"\n+\t\"float4 main( PS_INPUT input ) : SV_Target\\n\"\n+\t\"{\\n\"\n+\t\"\treturn tex2D.Sample( linearSampler, input.tex ) * input.col;\\n\"\n+\t\"};\\n\"\n+};\n+\n+const char fontvertshader[] = {\n+\t\"struct VS_INPUT\\n\"\n+\t\"{\\n\"\n+\t\"\tfloat4 pos : POSITION;\\n\"\n+\t\"\tfloat4 col : COLOR;\\n\"\n+\t\"\tfloat2 tex : TEXCOORD;\\n\"\n+\t\"};\\n\"\n+\t\"struct PS_INPUT\\n\"\n+\t\"{\\n\"\n+\t\"\tfloat4 pos : SV_POSITION;\\n\"\n+\t\"\tfloat4 col : COLOR;\\n\"\n+\t\"\tfloat2 tex : TEXCOORD;\\n\"\n+\t\"};\\n\"\n+\t\"PS_INPUT main( VS_INPUT input )\\n\"\n+\t\"{\\n\"\n+\t\"\tPS_INPUT output;\\n\"\n+\t\"\toutput.pos = input.pos;\\n\"\n+\t\"\toutput.col = input.col;\\n\"\n+\t\"\toutput.tex = input.tex;\\n\"\n+\t\"\treturn output;\\n\"\n+\t\"};\\n\"\n+};\n+\n+int CD3DFont::Init()\n+{\n+\t// Create vertex buffer for the letters\n+\n+\t// Prepare to create a bitmap\n+\tunsigned int* pBitmapBits;\n+\tBITMAPINFO bmi;\n+\tZeroMemory(&bmi.bmiHeader, sizeof(BITMAPINFOHEADER));\n+\tbmi.bmiHeader.biSize        = sizeof(BITMAPINFOHEADER);\n+\tbmi.bmiHeader.biWidth       =  (int)m_dwTexWidth;\n+\tbmi.bmiHeader.biHeight      = -(int)m_dwTexHeight;\n+\tbmi.bmiHeader.biPlanes      = 1;\n+\tbmi.bmiHeader.biCompression = BI_RGB;\n+\tbmi.bmiHeader.biBitCount    = 32;\n+\n+\t// Create a DC and a bitmap for the font\n+\tHDC hDC = CreateCompatibleDC(nullptr);\n+\tHBITMAP hbmBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, (void**)&pBitmapBits, nullptr, 0);\n+\tSetMapMode(hDC, MM_TEXT);\n+\n+\t// create a GDI font\n+\tHFONT hFont = CreateFont(24, 0, 0, 0, FW_NORMAL, FALSE,\n+\t\t\t\t\t\t\tFALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,\n+\t\t\t\t\t\t\tCLIP_DEFAULT_PRECIS, PROOF_QUALITY,\n+\t\t\t\t\t\t\tVARIABLE_PITCH, _T(\"Tahoma\"));\n+\tif (nullptr == hFont) return E_FAIL;","path":"Source/Core/VideoBackends/D3D12/D3DUtil.cpp","position":218,"original_position":218,"commit_id":"e0b0387d3c4e8d2943eb4d663304d08205406f33","original_commit_id":"e0b0387d3c4e8d2943eb4d663304d08205406f33","user":{"login":"lioncash","id":712067,"avatar_url":"https://avatars.githubusercontent.com/u/712067?v=3","gravatar_id":"","url":"https://api.github.com/users/lioncash","html_url":"https://github.com/lioncash","followers_url":"https://api.github.com/users/lioncash/followers","following_url":"https://api.github.com/users/lioncash/following{/other_user}","gists_url":"https://api.github.com/users/lioncash/gists{/gist_id}","starred_url":"https://api.github.com/users/lioncash/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lioncash/subscriptions","organizations_url":"https://api.github.com/users/lioncash/orgs","repos_url":"https://api.github.com/users/lioncash/repos","events_url":"https://api.github.com/users/lioncash/events{/privacy}","received_events_url":"https://api.github.com/users/lioncash/received_events","type":"User","site_admin":false},"body":"Body on new line","created_at":"2015-12-20T02:22:07Z","updated_at":"2015-12-20T02:22:07Z","html_url":"https://github.com/dolphin-emu/dolphin/pull/3364#discussion_r48098925","pull_request_url":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/3364","_links":{"self":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments/48098925"},"html":{"href":"https://github.com/dolphin-emu/dolphin/pull/3364#discussion_r48098925"},"pull_request":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/3364"}}},"pull_request":{"url":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/3364","id":54190469,"html_url":"https://github.com/dolphin-emu/dolphin/pull/3364","diff_url":"https://github.com/dolphin-emu/dolphin/pull/3364.diff","patch_url":"https://github.com/dolphin-emu/dolphin/pull/3364.patch","issue_url":"https://api.github.com/repos/dolphin-emu/dolphin/issues/3364","number":3364,"state":"open","locked":false,"title":"RFC: DX12 video backend","user":{"login":"hdcmeta","id":15706555,"avatar_url":"https://avatars.githubusercontent.com/u/15706555?v=3","gravatar_id":"","url":"https://api.github.com/users/hdcmeta","html_url":"https://github.com/hdcmeta","followers_url":"https://api.github.com/users/hdcmeta/followers","following_url":"https://api.github.com/users/hdcmeta/following{/other_user}","gists_url":"https://api.github.com/users/hdcmeta/gists{/gist_id}","starred_url":"https://api.github.com/users/hdcmeta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hdcmeta/subscriptions","organizations_url":"https://api.github.com/users/hdcmeta/orgs","repos_url":"https://api.github.com/users/hdcmeta/repos","events_url":"https://api.github.com/users/hdcmeta/events{/privacy}","received_events_url":"https://api.github.com/users/hdcmeta/received_events","type":"User","site_admin":false},"body":"This pull request contains a new DX12 video backend, as well as two minor additions to the shared Render interfaces that were needed for performance/cleanliness reasons.\r\n\r\nThis backend provides decent performance gains on graphics-intensive titles, and is fairly conformant to the existing D3D11 backend (no known issues). Performance results from various people are posted here: https://forums.dolphin-emu.org/Thread-unofficial-dolphin-dx12-backend\r\n\r\nThis does not yet implement the GPU bounding box, XFB rendering, or performance query features. The only known correctness issue is with multisampling on AMD hardware, this doesn't repro on other hardware or the software Basic Display Driver.\r\n\r\nThis backend is based off the existing D3D11 backend, and porting changes between them is fairly trivial (this pull request contains all of the recent changes to the D3D11 backend). The main areas of divergence are resource binding and state management. All shaders are identical, maybe these could be factored into D3DCommon?\r\n\r\nThe backend also contains its own background thread to perform graphics processing. This is actually done automatically by the D3D11 and OpenGL graphics drivers, but is needed to be done manually on D3D12. This is done by writing a class that implements the ID3D12GraphicsCommandList interface (the equivalent of ID3D11DeviceContext in D3D12), so it doesn't 'pollute' any of the renderer code - its use can be disabled via a #define in d3d12base.h.\r\n\r\nInterested in any feedback on the code or architecture, thanks. Also please let me know if the pull request should be factored any differently.","created_at":"2015-12-20T01:11:40Z","updated_at":"2015-12-20T02:22:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e608751fa10d8cc2133039bbc6c01ecd105cd989","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/3364/commits","review_comments_url":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/3364/comments","review_comment_url":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dolphin-emu/dolphin/issues/3364/comments","statuses_url":"https://api.github.com/repos/dolphin-emu/dolphin/statuses/e0b0387d3c4e8d2943eb4d663304d08205406f33","head":{"label":"hdcmeta:d3d12merge","ref":"d3d12merge","sha":"e0b0387d3c4e8d2943eb4d663304d08205406f33","user":{"login":"hdcmeta","id":15706555,"avatar_url":"https://avatars.githubusercontent.com/u/15706555?v=3","gravatar_id":"","url":"https://api.github.com/users/hdcmeta","html_url":"https://github.com/hdcmeta","followers_url":"https://api.github.com/users/hdcmeta/followers","following_url":"https://api.github.com/users/hdcmeta/following{/other_user}","gists_url":"https://api.github.com/users/hdcmeta/gists{/gist_id}","starred_url":"https://api.github.com/users/hdcmeta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hdcmeta/subscriptions","organizations_url":"https://api.github.com/users/hdcmeta/orgs","repos_url":"https://api.github.com/users/hdcmeta/repos","events_url":"https://api.github.com/users/hdcmeta/events{/privacy}","received_events_url":"https://api.github.com/users/hdcmeta/received_events","type":"User","site_admin":false},"repo":{"id":45886522,"name":"dolphin","full_name":"hdcmeta/dolphin","owner":{"login":"hdcmeta","id":15706555,"avatar_url":"https://avatars.githubusercontent.com/u/15706555?v=3","gravatar_id":"","url":"https://api.github.com/users/hdcmeta","html_url":"https://github.com/hdcmeta","followers_url":"https://api.github.com/users/hdcmeta/followers","following_url":"https://api.github.com/users/hdcmeta/following{/other_user}","gists_url":"https://api.github.com/users/hdcmeta/gists{/gist_id}","starred_url":"https://api.github.com/users/hdcmeta/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hdcmeta/subscriptions","organizations_url":"https://api.github.com/users/hdcmeta/orgs","repos_url":"https://api.github.com/users/hdcmeta/repos","events_url":"https://api.github.com/users/hdcmeta/events{/privacy}","received_events_url":"https://api.github.com/users/hdcmeta/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/hdcmeta/dolphin","description":"Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.","fork":true,"url":"https://api.github.com/repos/hdcmeta/dolphin","forks_url":"https://api.github.com/repos/hdcmeta/dolphin/forks","keys_url":"https://api.github.com/repos/hdcmeta/dolphin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hdcmeta/dolphin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hdcmeta/dolphin/teams","hooks_url":"https://api.github.com/repos/hdcmeta/dolphin/hooks","issue_events_url":"https://api.github.com/repos/hdcmeta/dolphin/issues/events{/number}","events_url":"https://api.github.com/repos/hdcmeta/dolphin/events","assignees_url":"https://api.github.com/repos/hdcmeta/dolphin/assignees{/user}","branches_url":"https://api.github.com/repos/hdcmeta/dolphin/branches{/branch}","tags_url":"https://api.github.com/repos/hdcmeta/dolphin/tags","blobs_url":"https://api.github.com/repos/hdcmeta/dolphin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hdcmeta/dolphin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hdcmeta/dolphin/git/refs{/sha}","trees_url":"https://api.github.com/repos/hdcmeta/dolphin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hdcmeta/dolphin/statuses/{sha}","languages_url":"https://api.github.com/repos/hdcmeta/dolphin/languages","stargazers_url":"https://api.github.com/repos/hdcmeta/dolphin/stargazers","contributors_url":"https://api.github.com/repos/hdcmeta/dolphin/contributors","subscribers_url":"https://api.github.com/repos/hdcmeta/dolphin/subscribers","subscription_url":"https://api.github.com/repos/hdcmeta/dolphin/subscription","commits_url":"https://api.github.com/repos/hdcmeta/dolphin/commits{/sha}","git_commits_url":"https://api.github.com/repos/hdcmeta/dolphin/git/commits{/sha}","comments_url":"https://api.github.com/repos/hdcmeta/dolphin/comments{/number}","issue_comment_url":"https://api.github.com/repos/hdcmeta/dolphin/issues/comments{/number}","contents_url":"https://api.github.com/repos/hdcmeta/dolphin/contents/{+path}","compare_url":"https://api.github.com/repos/hdcmeta/dolphin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hdcmeta/dolphin/merges","archive_url":"https://api.github.com/repos/hdcmeta/dolphin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hdcmeta/dolphin/downloads","issues_url":"https://api.github.com/repos/hdcmeta/dolphin/issues{/number}","pulls_url":"https://api.github.com/repos/hdcmeta/dolphin/pulls{/number}","milestones_url":"https://api.github.com/repos/hdcmeta/dolphin/milestones{/number}","notifications_url":"https://api.github.com/repos/hdcmeta/dolphin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hdcmeta/dolphin/labels{/name}","releases_url":"https://api.github.com/repos/hdcmeta/dolphin/releases{/id}","created_at":"2015-11-10T04:07:05Z","updated_at":"2015-11-10T04:07:44Z","pushed_at":"2015-12-20T01:06:37Z","git_url":"git://github.com/hdcmeta/dolphin.git","ssh_url":"git@github.com:hdcmeta/dolphin.git","clone_url":"https://github.com/hdcmeta/dolphin.git","svn_url":"https://github.com/hdcmeta/dolphin","homepage":"https://dolphin-emu.org/","size":228434,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dolphin-emu:master","ref":"master","sha":"c683b549217c067e2f7997025dc8f201de0f1f0a","user":{"login":"dolphin-emu","id":5050316,"avatar_url":"https://avatars.githubusercontent.com/u/5050316?v=3","gravatar_id":"","url":"https://api.github.com/users/dolphin-emu","html_url":"https://github.com/dolphin-emu","followers_url":"https://api.github.com/users/dolphin-emu/followers","following_url":"https://api.github.com/users/dolphin-emu/following{/other_user}","gists_url":"https://api.github.com/users/dolphin-emu/gists{/gist_id}","starred_url":"https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dolphin-emu/subscriptions","organizations_url":"https://api.github.com/users/dolphin-emu/orgs","repos_url":"https://api.github.com/users/dolphin-emu/repos","events_url":"https://api.github.com/users/dolphin-emu/events{/privacy}","received_events_url":"https://api.github.com/users/dolphin-emu/received_events","type":"Organization","site_admin":false},"repo":{"id":11577304,"name":"dolphin","full_name":"dolphin-emu/dolphin","owner":{"login":"dolphin-emu","id":5050316,"avatar_url":"https://avatars.githubusercontent.com/u/5050316?v=3","gravatar_id":"","url":"https://api.github.com/users/dolphin-emu","html_url":"https://github.com/dolphin-emu","followers_url":"https://api.github.com/users/dolphin-emu/followers","following_url":"https://api.github.com/users/dolphin-emu/following{/other_user}","gists_url":"https://api.github.com/users/dolphin-emu/gists{/gist_id}","starred_url":"https://api.github.com/users/dolphin-emu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dolphin-emu/subscriptions","organizations_url":"https://api.github.com/users/dolphin-emu/orgs","repos_url":"https://api.github.com/users/dolphin-emu/repos","events_url":"https://api.github.com/users/dolphin-emu/events{/privacy}","received_events_url":"https://api.github.com/users/dolphin-emu/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dolphin-emu/dolphin","description":"Dolphin is a GameCube / Wii emulator, allowing you to play games for these two platforms on PC with improvements.","fork":false,"url":"https://api.github.com/repos/dolphin-emu/dolphin","forks_url":"https://api.github.com/repos/dolphin-emu/dolphin/forks","keys_url":"https://api.github.com/repos/dolphin-emu/dolphin/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dolphin-emu/dolphin/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dolphin-emu/dolphin/teams","hooks_url":"https://api.github.com/repos/dolphin-emu/dolphin/hooks","issue_events_url":"https://api.github.com/repos/dolphin-emu/dolphin/issues/events{/number}","events_url":"https://api.github.com/repos/dolphin-emu/dolphin/events","assignees_url":"https://api.github.com/repos/dolphin-emu/dolphin/assignees{/user}","branches_url":"https://api.github.com/repos/dolphin-emu/dolphin/branches{/branch}","tags_url":"https://api.github.com/repos/dolphin-emu/dolphin/tags","blobs_url":"https://api.github.com/repos/dolphin-emu/dolphin/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dolphin-emu/dolphin/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dolphin-emu/dolphin/git/refs{/sha}","trees_url":"https://api.github.com/repos/dolphin-emu/dolphin/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dolphin-emu/dolphin/statuses/{sha}","languages_url":"https://api.github.com/repos/dolphin-emu/dolphin/languages","stargazers_url":"https://api.github.com/repos/dolphin-emu/dolphin/stargazers","contributors_url":"https://api.github.com/repos/dolphin-emu/dolphin/contributors","subscribers_url":"https://api.github.com/repos/dolphin-emu/dolphin/subscribers","subscription_url":"https://api.github.com/repos/dolphin-emu/dolphin/subscription","commits_url":"https://api.github.com/repos/dolphin-emu/dolphin/commits{/sha}","git_commits_url":"https://api.github.com/repos/dolphin-emu/dolphin/git/commits{/sha}","comments_url":"https://api.github.com/repos/dolphin-emu/dolphin/comments{/number}","issue_comment_url":"https://api.github.com/repos/dolphin-emu/dolphin/issues/comments{/number}","contents_url":"https://api.github.com/repos/dolphin-emu/dolphin/contents/{+path}","compare_url":"https://api.github.com/repos/dolphin-emu/dolphin/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dolphin-emu/dolphin/merges","archive_url":"https://api.github.com/repos/dolphin-emu/dolphin/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dolphin-emu/dolphin/downloads","issues_url":"https://api.github.com/repos/dolphin-emu/dolphin/issues{/number}","pulls_url":"https://api.github.com/repos/dolphin-emu/dolphin/pulls{/number}","milestones_url":"https://api.github.com/repos/dolphin-emu/dolphin/milestones{/number}","notifications_url":"https://api.github.com/repos/dolphin-emu/dolphin/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dolphin-emu/dolphin/labels{/name}","releases_url":"https://api.github.com/repos/dolphin-emu/dolphin/releases{/id}","created_at":"2013-07-22T09:07:57Z","updated_at":"2015-12-20T00:13:32Z","pushed_at":"2015-12-20T01:11:40Z","git_url":"git://github.com/dolphin-emu/dolphin.git","ssh_url":"git@github.com:dolphin-emu/dolphin.git","clone_url":"https://github.com/dolphin-emu/dolphin.git","svn_url":"https://github.com/dolphin-emu/dolphin","homepage":"https://dolphin-emu.org/","size":250271,"stargazers_count":1869,"watchers_count":1869,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":573,"mirror_url":null,"open_issues_count":76,"forks":573,"open_issues":76,"watchers":1869,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/3364"},"html":{"href":"https://github.com/dolphin-emu/dolphin/pull/3364"},"issue":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/issues/3364"},"comments":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/issues/3364/comments"},"review_comments":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/3364/comments"},"review_comment":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/pulls/3364/commits"},"statuses":{"href":"https://api.github.com/repos/dolphin-emu/dolphin/statuses/e0b0387d3c4e8d2943eb4d663304d08205406f33"}}}}