{"action":"created","issue":{"url":"https://api.github.com/repos/Ryujinx/Ryujinx/issues/533","repository_url":"https://api.github.com/repos/Ryujinx/Ryujinx","labels_url":"https://api.github.com/repos/Ryujinx/Ryujinx/issues/533/labels{/name}","comments_url":"https://api.github.com/repos/Ryujinx/Ryujinx/issues/533/comments","events_url":"https://api.github.com/repos/Ryujinx/Ryujinx/issues/533/events","html_url":"https://github.com/Ryujinx/Ryujinx/pull/533","id":388989248,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM3MTA5ODE0","number":533,"title":"[WIP] Small optimizations on GPU emulation","user":{"login":"gdkchan","id":5624669,"node_id":"MDQ6VXNlcjU2MjQ2Njk=","avatar_url":"https://avatars0.githubusercontent.com/u/5624669?v=4","gravatar_id":"","url":"https://api.github.com/users/gdkchan","html_url":"https://github.com/gdkchan","followers_url":"https://api.github.com/users/gdkchan/followers","following_url":"https://api.github.com/users/gdkchan/following{/other_user}","gists_url":"https://api.github.com/users/gdkchan/gists{/gist_id}","starred_url":"https://api.github.com/users/gdkchan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gdkchan/subscriptions","organizations_url":"https://api.github.com/users/gdkchan/orgs","repos_url":"https://api.github.com/users/gdkchan/repos","events_url":"https://api.github.com/users/gdkchan/events{/privacy}","received_events_url":"https://api.github.com/users/gdkchan/received_events","type":"User","site_admin":false},"labels":[{"id":826894435,"node_id":"MDU6TGFiZWw4MjY4OTQ0MzU=","url":"https://api.github.com/repos/Ryujinx/Ryujinx/labels/gpu","name":"gpu","color":"d876e3","default":false},{"id":826894434,"node_id":"MDU6TGFiZWw4MjY4OTQ0MzQ=","url":"https://api.github.com/repos/Ryujinx/Ryujinx/labels/work-in-progress","name":"work-in-progress","color":"FFA500","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2018-12-09T05:30:20Z","updated_at":"2018-12-11T01:54:42Z","closed_at":null,"author_association":"MEMBER","pull_request":{"url":"https://api.github.com/repos/Ryujinx/Ryujinx/pulls/533","html_url":"https://github.com/Ryujinx/Ryujinx/pull/533","diff_url":"https://github.com/Ryujinx/Ryujinx/pull/533.diff","patch_url":"https://github.com/Ryujinx/Ryujinx/pull/533.patch"},"body":"This is mostly some small optimizations I was working on, I can only test on my Intel integrated GPU, so I don't know how much it affects others, if at all.\r\nList of attempted optimizations:\r\n- Change resource cache to allow resources to be re-used, by adding a resource pool.\r\n- Allow framebuffers, zeta buffers, const buffers, vertex buffers and index buffers to be re-used.\r\n- VAO (Vertex Array Object) caching - No noticeable improvement, should save a few OpenGL calls though.\r\n- Added a PBO (Pixel Buffer Object) cache.\r\n- Use dirty flags to update the pipeline state, triggered by writes to the respective registers. The old solution was comparing the entire state and only calling GL functions when it changed, which obviously doesn't scale very well (performance can only get worse as more state is implemented due to all those comparisons).\r\n- Use an accurate vertex count on most cases, to reduce the amount of vertex data sent to the GPU.\r\n- Optimized memory modified check method (on some cases just checking was more expensive than sending the data, now its not anymore).\r\n- Remove only the respective key from the fast cache when a const buffer is modified with `CbData`.\r\n- (TODO) 2d software copy is currently commented out, because it was slowing down some games. I still need to think in a better way to do that."},"comment":{"url":"https://api.github.com/repos/Ryujinx/Ryujinx/issues/comments/446043340","html_url":"https://github.com/Ryujinx/Ryujinx/pull/533#issuecomment-446043340","issue_url":"https://api.github.com/repos/Ryujinx/Ryujinx/issues/533","id":446043340,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0NjA0MzM0MA==","user":{"login":"RyadaProductions","id":24586388,"node_id":"MDQ6VXNlcjI0NTg2Mzg4","avatar_url":"https://avatars3.githubusercontent.com/u/24586388?v=4","gravatar_id":"","url":"https://api.github.com/users/RyadaProductions","html_url":"https://github.com/RyadaProductions","followers_url":"https://api.github.com/users/RyadaProductions/followers","following_url":"https://api.github.com/users/RyadaProductions/following{/other_user}","gists_url":"https://api.github.com/users/RyadaProductions/gists{/gist_id}","starred_url":"https://api.github.com/users/RyadaProductions/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RyadaProductions/subscriptions","organizations_url":"https://api.github.com/users/RyadaProductions/orgs","repos_url":"https://api.github.com/users/RyadaProductions/repos","events_url":"https://api.github.com/users/RyadaProductions/events{/privacy}","received_events_url":"https://api.github.com/users/RyadaProductions/received_events","type":"User","site_admin":false},"created_at":"2018-12-11T01:54:42Z","updated_at":"2018-12-11T01:54:42Z","author_association":"NONE","body":"I am currently working on splitting this PR up in multiple smaller PRs. \r\nCrossreferencing the PRs I create in this reaction for clarity:\r\n#538 "}}
{"actor":{"display_login":"RyadaProductions"}}