Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC - support KHR_parallel_shader_compile #16662

Closed
wants to merge 32 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
573eee7
WIP demo parallel compile
aardgoose May 24, 2019
2d30ed5
WIP
aardgoose May 25, 2019
16b5607
Merge commit '2d30ed58772302420cd9a8bcb8cb3e16706168f4' of https://gi…
aardgoose May 25, 2019
cf97d60
update to latest paralle1
aardgoose May 30, 2019
e4d71a4
update to lhash
aardgoose May 30, 2019
bc79134
adjust to lhash
aardgoose May 30, 2019
85962cd
Merge branch 'lhash' into parallel2
aardgoose May 30, 2019
756ab02
make material specific
aardgoose May 30, 2019
4359c68
WIP shared programs etc
aardgoose May 30, 2019
60bce20
default to no parallel compile
aardgoose May 30, 2019
adff022
testing
aardgoose May 31, 2019
eb9c7fe
Merge branch 'dev' into parallel2
aardgoose Jun 1, 2019
e7e2d26
Merge branch 'dev' into parallel2
aardgoose Jun 2, 2019
eb44c9a
remove testing parts
aardgoose Jun 3, 2019
368e91b
add sync mode to preserve .compile() behaviour
aardgoose Jun 3, 2019
2a88ce0
limit simultaneous compiles
aardgoose Jun 4, 2019
447638f
Merge branch 'dev' into parallel2
aardgoose Jun 9, 2019
1e493fb
Merge branch 'dev' into parallel2
aardgoose Jun 23, 2019
7f462f4
merge dev
aardgoose Sep 12, 2019
6676ae3
Merge branch 'dev' into parallel2
aardgoose Sep 16, 2019
774b5c8
document capability
aardgoose Sep 16, 2019
b2f5822
doc update
aardgoose Sep 16, 2019
715f6f3
use getContext()
aardgoose Sep 16, 2019
c04a231
remove Material.parallelCompile
aardgoose Sep 16, 2019
810c9c2
move switch back to material
aardgoose Sep 16, 2019
9ac963f
fix race on destruction and tidy
aardgoose Sep 16, 2019
d23cab2
Merge branch 'dev' into parallel2
aardgoose Sep 17, 2019
25d3707
Add global default
aardgoose Sep 17, 2019
afa66ae
Merge branch 'dev' into parallel2
aardgoose Sep 20, 2019
e8ddd76
pass extension in parameters
aardgoose Sep 20, 2019
f2385ce
merge
aardgoose Sep 25, 2019
38a7aad
merge dev
aardgoose Oct 5, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/api/en/renderers/WebGLRenderer.html
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ <h3>[property:Object capabilities]</h3>
The number of textures that can be used in a vertex shader.<br />
- [page:Integer maxVertexUniforms]: The value of *gl.MAX_VERTEX_UNIFORM_VECTORS*.
The maximum number of uniforms that can be used in a vertex shader.<br />
- [page:Boolean parallelShaderCompile]: whether the context supports the [link:https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/ KHR_parallel_shader_compile] extension..<br />
- [page:String precision]: The shader precision currently being used by the renderer.<br />
- [page:Boolean vertexTextures]: *true* if [property:Integer maxVertexTextures] is greater than 0 (i.e. vertext textures can be used).<br />
</p>
Expand Down
1 change: 1 addition & 0 deletions docs/api/zh/renderers/WebGLRenderer.html
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ <h3>[property:Object capabilities]</h3>
- [page:Integer maxVaryings]: *gl.MAX_VARYING_VECTORS*的值,着色器可使用矢量的数量<br />
- [page:Integer maxVertexTextures]: *gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS*的值,顶点着色器可使用的纹理数量。<br />
- [page:Integer maxVertexUniforms]: *gl.MAX_VERTEX_UNIFORM_VECTORS*的值,顶点着色器可使用的全局变量(uniforms)数量<br />
- [page:Boolean parallelShaderCompile]: whether the context supports the [link:https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/ KHR_parallel_shader_compile] extension..<br />
- [page:String precision]: 渲染器当前使用的着色器的精度<br />
- [page:Boolean vertexTextures]: 如果[property:Integer maxVertexTextures]大于0,此值为*true* (即可以使用顶点纹理)<br />
</p>
Expand Down
3 changes: 3 additions & 0 deletions src/materials/Material.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ function Material() {
this.alphaTest = 0;
this.premultipliedAlpha = false;

this.parallelCompile = Material.DefaultParallelCompile;
this.visible = true;

this.toneMapped = true;
Expand All @@ -78,6 +79,8 @@ function Material() {

}

Material.DefaultParallelCompile = false;

Material.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {

constructor: Material,
Expand Down
34 changes: 25 additions & 9 deletions src/renderers/WebGLRenderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,8 @@ function WebGLRenderer( parameters ) {

var program = setProgram( camera, fog, material, object );

if ( ! program.ready ) return;

var updateBuffers = false;

if ( _currentGeometryProgram.geometry !== geometry.id ||
Expand Down Expand Up @@ -1059,13 +1061,13 @@ function WebGLRenderer( parameters ) {

for ( var i = 0; i < object.material.length; i ++ ) {

initMaterial( object.material[ i ], scene.fog, object );
initMaterial( object.material[ i ], scene.fog, object, true );

}

} else {

initMaterial( object.material, scene.fog, object );
initMaterial( object.material, scene.fog, object, true );

}

Expand Down Expand Up @@ -1468,6 +1470,8 @@ function WebGLRenderer( parameters ) {

var program = setProgram( camera, scene.fog, material, object );

if ( ! program.ready ) return;

_currentGeometryProgram.geometry = null;
_currentGeometryProgram.program = null;
_currentGeometryProgram.wireframe = false;
Expand All @@ -1485,7 +1489,7 @@ function WebGLRenderer( parameters ) {

}

function initMaterial( material, fog, object ) {
function initMaterial( material, fog, object, sync ) {

var materialProperties = properties.get( material );

Expand All @@ -1512,13 +1516,13 @@ function WebGLRenderer( parameters ) {
// changed glsl or parameters
releaseMaterialProgramReference( material );

} else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) {
} else if ( program.ready && materialProperties.lightsStateVersion !== lightsStateVersion ) {

materialProperties.lightsStateVersion = lightsStateVersion;

programChange = false;

} else if ( parameters.shaderID !== undefined ) {
} else if ( program.ready && parameters.shaderID !== undefined ) {

// same glsl and uniform list
return;
Expand Down Expand Up @@ -1566,6 +1570,15 @@ function WebGLRenderer( parameters ) {

}

if ( ! program.ready && ! program.isLinked( _this, material, sync ) ) {

materialProperties.retry = true;
return;

}

materialProperties.retry = false;

var programAttributes = program.getAttributes();

if ( material.morphTargets ) {
Expand Down Expand Up @@ -1699,9 +1712,9 @@ function WebGLRenderer( parameters ) {

}

if ( material.needsUpdate ) {
if ( material.needsUpdate || materialProperties.retry ) {

initMaterial( material, fog, object );
initMaterial( material, fog, object, false );
material.needsUpdate = false;

}
Expand All @@ -1710,8 +1723,11 @@ function WebGLRenderer( parameters ) {
var refreshMaterial = false;
var refreshLights = false;

var program = materialProperties.program,
p_uniforms = program.getUniforms(),
var program = materialProperties.program;

if ( ! program.ready ) return false;

var p_uniforms = program.getUniforms(),
m_uniforms = materialProperties.shader.uniforms;

if ( state.useProgram( program.program ) ) {
Expand Down
5 changes: 4 additions & 1 deletion src/renderers/webgl/WebGLCapabilities.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ function WebGLCapabilities( gl, extensions, parameters ) {
var floatVertexTextures = vertexTextures && floatFragmentTextures;

var maxSamples = isWebGL2 ? gl.getParameter( gl.MAX_SAMPLES ) : 0;
var parallelShaderCompile = extensions.get( 'KHR_parallel_shader_compile' );

return {

Expand All @@ -110,7 +111,9 @@ function WebGLCapabilities( gl, extensions, parameters ) {
floatFragmentTextures: floatFragmentTextures,
floatVertexTextures: floatVertexTextures,

maxSamples: maxSamples
maxSamples: maxSamples,

parallelShaderCompile: parallelShaderCompile

};

Expand Down
Loading