gl_shader_cache: Fixes for async shaders
This commit is contained in:
		| @@ -328,11 +328,32 @@ GraphicsPipeline* ShaderCache::CurrentGraphicsPipelineSlowPath() { | ||||
|     if (is_new) { | ||||
|         pipeline = CreateGraphicsPipeline(); | ||||
|     } | ||||
|     current_pipeline = pipeline.get(); | ||||
|     if (!pipeline || !pipeline->IsBuilt()) { | ||||
|     if (!pipeline) { | ||||
|         return nullptr; | ||||
|     } | ||||
|     return pipeline.get(); | ||||
|     current_pipeline = pipeline.get(); | ||||
|     return BuiltPipeline(current_pipeline); | ||||
| } | ||||
|  | ||||
| GraphicsPipeline* ShaderCache::BuiltPipeline(GraphicsPipeline* pipeline) const noexcept { | ||||
|     if (pipeline->IsBuilt()) { | ||||
|         return pipeline; | ||||
|     } | ||||
|     if (!use_asynchronous_shaders) { | ||||
|         return pipeline; | ||||
|     } | ||||
|     // If something is using depth, we can assume that games are not rendering anything which | ||||
|     // will be used one time. | ||||
|     if (maxwell3d.regs.zeta_enable) { | ||||
|         return nullptr; | ||||
|     } | ||||
|     // If games are using a small index count, we can assume these are full screen quads. | ||||
|     // Usually these shaders are only used once for building textures so we can assume they | ||||
|     // can't be built async | ||||
|     if (maxwell3d.regs.index_array.count <= 6 || maxwell3d.regs.vertex_buffer.count <= 6) { | ||||
|         return pipeline; | ||||
|     } | ||||
|     return nullptr; | ||||
| } | ||||
|  | ||||
| ComputePipeline* ShaderCache::CurrentComputePipeline() { | ||||
|   | ||||
| @@ -54,6 +54,8 @@ public: | ||||
| private: | ||||
|     GraphicsPipeline* CurrentGraphicsPipelineSlowPath(); | ||||
|  | ||||
|     [[nodiscard]] GraphicsPipeline* BuiltPipeline(GraphicsPipeline* pipeline) const noexcept; | ||||
|  | ||||
|     std::unique_ptr<GraphicsPipeline> CreateGraphicsPipeline(); | ||||
|  | ||||
|     std::unique_ptr<GraphicsPipeline> CreateGraphicsPipeline( | ||||
|   | ||||
		Reference in New Issue
	
	Block a user