1------------------------------------------------------------------------- 2drawElements Quality Program Test Specification 3----------------------------------------------- 4 5Copyright 2014 The Android Open Source Project 6 7Licensed under the Apache License, Version 2.0 (the "License"); 8you may not use this file except in compliance with the License. 9You may obtain a copy of the License at 10 11 http://www.apache.org/licenses/LICENSE-2.0 12 13Unless required by applicable law or agreed to in writing, software 14distributed under the License is distributed on an "AS IS" BASIS, 15WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16See the License for the specific language governing permissions and 17limitations under the License. 18------------------------------------------------------------------------- 19 Multisample interpolation tests 20 21Tests: 22 + dEQP-GLES31.functional.shaders.multisample_interpolation.* 23 + dEQP-GLES31.functional.state_query.multisample_interpolation.* 24 25Includes: 26 + Sample qualifier 27 + interpolateAtSample 28 + interpolateAtCentroid 29 + interpolateAtOffset 30 + Rendering to the default framebuffer, multi- and single sample 31 textures and renderbuffers 32 + Implementation limit queries for 33 - MIN_FRAGMENT_INTERPOLATION_OFFSET 34 - MAX_FRAGMENT_INTERPOLATION_OFFSET 35 - FRAGMENT_INTERPOLATION_OFFSET_BITS 36 37Excludes: 38 + interpolateAtSample() with non dynamically uniform sample index. 39 + Rendering to every supported render buffer sample count / format 40 + Rendering to every supported multisample texture sample count / format 41 42Description: 43 44sample_qualifier.* cases test sample qualifier by rendering a high frequency 45test pattern with a sample-qualified varying. Using the same reasoning as in 46sample shading test specification, the result image should contain numSamples + 471 different shades of gray, e.g. single sampled render target should contain two 48shades (black and white) and 2x sampled three shades. 49 50interpolate_at_sample.* cases test interpolateAtSample() function with different 51inputs and render target configurations. 52 53interpolate_at_sample.static_sample_number and 54interpolate_at_sample.dynamic_sample_number cases sample a high frequency 55function with at every sample position and average the result. static cases use 56integer literals at which samples values are interpolated, in dynamic cases the 57sample index "depends" (all samples are sampled anyway) on uniform values. 58 59interpolate_at_sample.non_multisample_buffer cases test that using 60interpolateAtSample() with a non-multisample render target with any sample index 61will result in a value interpolated at the center of the pixel. Value is 62verified by interpolating a varying containing screen-space location in pixels. 63 64interpolate_at_sample.centroid_qualifier cases interpolate a centroid-qualified 65varying with interpolateAtSample(). The tests render narrow triangles and 66compare results of interpolateAtSample of two identical varyings, but with 67different centroid-qualification. The centroid qualifier should not have any 68effect on the values returned by interpolateAtSample(). 69 70interpolate_at_sample.at_sample_id cases test that sample index used by 71interpolateAtSample is the same as in gl_SampleID. Tests compare value 72per-sample qualified varying and the value returned by 73interpolateAtSample(v_varying, gl_SampleID). Values should be equal. 74 75interpolate_at_centroid.* cases test interpolateAtCentroid() function with 76different inputs and render target configurations. 77 78interpolate_at_centroid.consistency cases test that values returned by 79interpolateAtCentroid are equal to the values of a centroid qualified varying. 80Tests render multiple narrow triangles, assign the same value to a 81centroid-qualified and non-centroid-qualified varying and then compares the 82values of centroid-qualified varying and interpolateAtCentroid function return 83value when given the non-centroid-qualified varying as an input. 84 85interpolate_at_centroid.array_element cases test interpolateAtCentroid function 86when given a varying array element as an input. Tests render multiple narrow 87triangles, and the frament shader verifies that values returned by 88interpolateAtCentroid() were interpolated within the primitive area. 89 90interpolate_at_offset.* cases test interpolateAtOffset() function with different 91inputs and render target configurations. 92 93interpolate_at_offset.no_qualifiers, .centroid_qualifier, and .sample_qualifier 94cases test interpolateAtOffset() function targeting a varying without 95qualifiers, with centroid qualifier and with per-sample qualifier. 96.array_element cases test interpolateAtOffset targeting an array element. Tests 97render a quad and in the fragment shader use interpolateAtOffset to a 98screen-space location (in pixels) varying. The fractional part of the returned 99value should be equal to the interpolation offset. 100 101interpolate_at_offset.at_sample_position cases test that using 102interpolateAtOffset to interpolate a value at the sample location returns the 103same value as a per-sample interpolated varying. 104