Conformance Test GL_ARB_fragment_shader_interlock Contributors Adam Czupryna, Mobica Contacts Adam Czupryna, Mobica (adam.czupryna 'at' mobica.com) Status In review Version January 31, 2017 (version 1) Dependencies OpenGL 4.5 is required. ARB_fragment_shader_interlock extension is required. This specification is written against: - OpenGL 4.5 Core Profile Specification, - version 4.50 (revision 5) Shading Language Specification, - ARB_fragment_shader_interlock extension Specification. Overview This test verifies if new GLSL built-in functions beginInvocationInterlockARB() and endInvocationInterlockARB() provides functionality for pairs of shader invocations with "overlapping" coverage in a given pixel, which guarantee that the critical section of the fragment shader will be executed for only one fragment at a time. Test verifies also two ordered interlock modes supported by this extension because testing unordered interlock modes would be undeterministic. Tests Shader Extension Test * Create shader that require GL_ARB_fragment_shader_interlock extension and check if GL_ARB_fragment_shader_interlock is defined and equal 1. Check if shader compiles with no error. Shader Execution Ordering Test * Create 8x8 R8 texture and clear it. * Create fragment shader for ordered layout qualifiers added by this extension. Shader should read pixel value from the texture at current position and compare it with gl_PrimitiveID value. If value read from texture is lower then gl_PrimitiveID write (1, 1, 1, 1) into renderbuffer and store gl_PrimitiveID in the texture at current position, otherwise write (0, 0, 0, 0) into renderbuffer and value 255 into texture at current position. All operations should be executed between beginInvocationInterlockARB and endInvocationInterlockARB functions calls. * Iterate through the fragment shaders, clear texture and for each shader draw three triangles at once in the same position. Expected result for ordered layout qualifires is renderbuffer filled with (1, 1, 1, 1) if test passed. In case of sample_interlock_* qualifier multisampled texture has to be used. There is no method to test if unordered qualifiers works correctly because for those qualifiers fragment shader invocations are generally executed in undefined order, which means that it could be either ordered or unordered. Tests for unordered qualifiers would be undeterministic. Shader Critical Section Execution Test * Create 1x1 R8UI texture. * Create two fragment shaders for all layout qualifiers added by this extension. Shader should read pixel value from the texture, increase it and store. In first fragment shader all operations should be executed between beginInvocationInterlockARB and endInvocationInterlockARB functions calls, in second one those calls should be missed. * Clear texture and draw 8x8 pixel sized polygon to the renderbuffer. The expected result is value 64 stored in the texture if beginInvocationInterlockARB and endInvocationInterlockARB functions were used. In case of sample_interlock_* qualifier multisampled texture has to be used. Revision History Revision 1, 31 January, 2016 (Adam Czupryna) - Initial version.