hi,
这边看代码,似乎 GLES 的PSO不支持ComputeShader,想这边确认一下。如果支持的话,相关在代码在哪里呢
hi,
这边看代码,似乎 GLES 的PSO不支持ComputeShader,想这边确认一下。如果支持的话,相关在代码在哪里呢
Hi,
GLES本身是支持Compute Shader的,有些GlobalShader就是用Compute Shader写的。请问你是想问PSO pipeline cache是否支持Compute Shader吗?如果是的话,可以看一下r.ShaderPipelineCache.DoNotPrecompileComputePSO, 默认Android平台是False。我个人觉得是因为有很多Niagara的Compute Shader,在一些Android设备上编译会失败,不过这通常跟具体的Niagara有关系,所以可以尽量避免使用GPU simulation的Niagara,然后打开这个功能。
应该是可以Cache下来的,你可以看一下LinkComputeProgram,FOpenGLProgramBinaryCache::CheckSinglePendingGLProgramCreateRequest,和UE::OpenGL::OnGLProgramLoadedFromBinaryCache函数,应该就是这个流程。
这条调用路径是可以的
预编译流程里面不包含LinkComputeProgram,目前项目里面还是先收集PSO,启动的时候触发预编译(FShaderPipelineCacheTask::Precompile),把所有收集的pso都通过glGetProgramBinary把Binary存到本地,下次再碰到同一个shader,通过glProgramBinary结合Binary把Program创建出来,跳过编译&链接
是的,就是这个过程。