| Conformance Test |
| |
| CTS_ARB_sparse_texture2 |
| |
| Contributors |
| |
| Adam Czupryna, Mobica |
| |
| Contacts |
| |
| Adam Czupryna, Mobica (adam.czupryna 'at' mobica.com) |
| |
| Status |
| |
| In review |
| |
| Version |
| |
| October 4, 2016 (version 1) |
| |
| Dependencies |
| |
| OpenGL 4.5 is required. |
| |
| ARB_sparse_texture extension is required. |
| |
| ARB_sparse_texture2 extension is required. |
| |
| This specification is written against: |
| - ARB_sparse_texture2 specification, |
| - OpenGL 4.5 (core) specification. |
| |
| Overview |
| |
| This tests verifies if functionality provided by ARB_sparse_texture2 |
| works as expected: |
| |
| * Checks if new built-in GLSL texture lookup and image load functions |
| return information on whether the texels accessed for the texture |
| lookup accessed uncommitted texture memory. |
| |
| * Checks if reads of uncommitted texture memory will act as though such |
| memory were filled with zeroes; previously, the values returned by |
| reads were undefined. |
| |
| * Standard implementation-independent virtual page sizes for internal |
| formats required to be supported with sparse textures. Checks if these |
| standard sizes can be requested by leaving VIRTUAL_PAGE_SIZE_INDEX_ARB |
| at its initial value (0). |
| |
| * Checks if support for creating sparse multisample and multisample array |
| textures is added and the virtual page sizes for such textures remain |
| fully implementation-dependent. |
| |
| CTS_ARB_sparse_texture Changes |
| |
| Sparse Allocation Test |
| |
| * No more INVALID_VALUE error is generated by TexStorage* function if |
| TEXTURE_SPARSE_ARB parameter is TRUE and <width>, <height> or |
| <depth> is not an integer multiple of the page size in the |
| corresponding dimension. |
| |
| New Tests |
| |
| Sparse Allocation Test |
| |
| * Extend CTS_ARB_sparse_texture SparseAllocationTestCase with targets |
| TEXTURE_2D_MULTISAMPLE and TEXTURE_2D_MULTISAMPLE_ARRAY. |
| |
| * Test if SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB parameter is always |
| TRUE for targets: TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, TEXTURE_CUBE_MAP, |
| TEXTURE_CUBE_MAP_ARRAY or TEXTURE_2D_MULTISAMPLE_ARRAY. |
| |
| Sparse Texture Commitment Test |
| |
| * Extend CTS_ARB_sparse_texture SparseTextureCommitmentTestCase with targets |
| TEXTURE_2D_MULTISAMPLE and TEXTURE_2D_MULTISAMPLE_ARRAY. |
| |
| * Test if for levels of a sparse texture where each dimension is greater than or |
| equal to of the virtual page size, the residency of individual page-size |
| regions may be controlled by TexPageCommitmentARB and such levels may be |
| partially populated. |
| |
| Standard Virtual Page Sizes Test |
| |
| * Test GetInternalformativ query for formats from Table 8.X, Standard |
| Virtual Page Sizes for Sparse Textures and <pname>: |
| |
| - VIRTUAL_PAGE_SIZE_X_ARB, |
| - VIRTUAL_PAGE_SIZE_Y_ARB, |
| - VIRTUAL_PAGE_SIZE_Z_ARB |
| |
| Check if values returned by query matches Standard Virtual Page Sizes. |
| Uncommitted Regions Access Test |
| |
| * Verify if reads from such regions produce zeros for all components |
| present in the texture format. This includes samples required for the |
| implementation of texture filtering, image loads, mipmap generation, |
| and so on. |
| |
| Test it for different texture formats and different read functions. |
| |
| * Verify if atomic operations on such regions will not generate |
| exceptions but will always return zero and the result of the atomic |
| operation, which is normally written to memory, will instead be |
| discarded. |
| |
| Test it for different atomic operations. |
| |
| * Verify if performing the stencil test (section 17.3.5), depth buffer test |
| (section 17.3.6), or depth bounds test (if supported) on pixels in |
| uncommitted regions, the results of the test will be consistent with |
| reading a value of zero from the framebuffer. No value is written to the |
| depth buffer. |
| |
| Shader Extension Test |
| |
| * Create shader that require ARB_sparse_texture2 extension |
| and check if ARB_sparse_texture2 is defined and equal 1. |
| Check if shader compiles with no error. |
| |
| Shader Sparse Texture Lookup Tests |
| |
| * Iterate through all sparse supported targets. |
| Allocate sparse texture for current <target> with committed and |
| uncommitted regions. |
| Create multiple shaders that enables ARB_sparse_texture2 extension |
| and each use one of the function from list below |
| (if supported by <target>): |
| |
| - sparseTextureARB |
| - sparseTextureLodARB |
| - sparseTextureOffsetARB |
| - sparseTexelFetchARB |
| - sparseTexelFetchOffsetARB |
| - sparseTextureLodOffsetARB |
| - sparseTextureGradARB |
| - sparseTextureGradOffsetARB |
| - sparseTextureGatherARB |
| - sparseTextureGatherOffsetARB |
| - sparseTextureGatherOffsetsARB |
| - sparseImageLoadARB |
| |
| Shaders should check texture access residency information using |
| sparseTexelsResidentARB function and pass vec4(1, 1, 1, 1) to the output |
| if access committed region and vec4(0, 0, 0, 1) otherwise. |
| Iterate through shaders, create and use program for current iteration |
| and draw a prepared texture. |
| Verify if shader pass test by reading pixels from framebuffer and |
| checking if their values are as expected. |
| |
| Revision History |
| |
| Revision 1, 4 October, 2016 (Adam Czupryna) |
| - Intial version; |
| |