diff options
author | Plamena Manolova <[email protected]> | 2018-04-27 14:12:30 +0100 |
---|---|---|
committer | Plamena Manolova <[email protected]> | 2018-06-01 16:36:36 +0100 |
commit | 60e843c4d5a5688196d13611a357cdc5b1b1141d (patch) | |
tree | d8df5f37248c6b7f8622b0e8bf1fa643b9f147f5 /src/compiler/glsl/glsl_parser_extras.cpp | |
parent | 53719f818cf320add55dc7ed3612725c2f6128ce (diff) |
mesa: Add GL/GLSL plumbing for ARB_fragment_shader_interlock.
This extension provides new GLSL built-in functions
beginInvocationInterlockARB() and endInvocationInterlockARB()
that delimit a critical section of fragment shader code. For
pairs of shader invocations with "overlapping" coverage in a
given pixel, the OpenGL implementation will guarantee that the
critical section of the fragment shader will be executed for
only one fragment at a time.
Signed-off-by: Plamena Manolova <[email protected]>
Reviewed-by: Francisco Jerez <[email protected]>
Diffstat (limited to 'src/compiler/glsl/glsl_parser_extras.cpp')
-rw-r--r-- | src/compiler/glsl/glsl_parser_extras.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index 25003eeccce..04eba980e0e 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -299,6 +299,10 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx, this->fs_early_fragment_tests = false; this->fs_inner_coverage = false; this->fs_post_depth_coverage = false; + this->fs_pixel_interlock_ordered = false; + this->fs_pixel_interlock_unordered = false; + this->fs_sample_interlock_ordered = false; + this->fs_sample_interlock_unordered = false; this->fs_blend_support = 0; memset(this->atomic_counter_offsets, 0, sizeof(this->atomic_counter_offsets)); @@ -630,6 +634,7 @@ static const _mesa_glsl_extension _mesa_glsl_supported_extensions[] = { EXT(ARB_explicit_uniform_location), EXT(ARB_fragment_coord_conventions), EXT(ARB_fragment_layer_viewport), + EXT(ARB_fragment_shader_interlock), EXT(ARB_gpu_shader5), EXT(ARB_gpu_shader_fp64), EXT(ARB_gpu_shader_int64), @@ -1721,6 +1726,10 @@ set_shader_inout_layout(struct gl_shader *shader, assert(!state->fs_early_fragment_tests); assert(!state->fs_inner_coverage); assert(!state->fs_post_depth_coverage); + assert(!state->fs_pixel_interlock_ordered); + assert(!state->fs_pixel_interlock_unordered); + assert(!state->fs_sample_interlock_ordered); + assert(!state->fs_sample_interlock_unordered); } for (unsigned i = 0; i < MAX_FEEDBACK_BUFFERS; i++) { @@ -1842,6 +1851,10 @@ set_shader_inout_layout(struct gl_shader *shader, shader->EarlyFragmentTests = state->fs_early_fragment_tests; shader->InnerCoverage = state->fs_inner_coverage; shader->PostDepthCoverage = state->fs_post_depth_coverage; + shader->PixelInterlockOrdered = state->fs_pixel_interlock_ordered; + shader->PixelInterlockUnordered = state->fs_pixel_interlock_unordered; + shader->SampleInterlockOrdered = state->fs_sample_interlock_ordered; + shader->SampleInterlockUnordered = state->fs_sample_interlock_unordered; shader->BlendSupport = state->fs_blend_support; break; |