You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.5 KiB
85 lines
3.5 KiB
-------------------------------------------------------------------------
|
|
drawElements Quality Program Test Specification
|
|
-----------------------------------------------
|
|
|
|
Copyright 2014 The Android Open Source Project
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-------------------------------------------------------------------------
|
|
Shader compiler performance tests
|
|
|
|
Tests:
|
|
+ dEQP-GLES2.performance.compiler.*
|
|
|
|
Includes:
|
|
+ Shader compile, link and specialization (draw call -time) time measurements
|
|
+ Tests for impact of cache hits on compilation time (note: in release 2012.4)
|
|
+ Front-end time estimation with invalid shaders
|
|
+ Typical use cases
|
|
- Vertex and fragment lighting
|
|
- Mandelbrot viewer
|
|
- Normal mapping, parallax and relief mapping (note: in release 2012.4)
|
|
+ Synthetic cases
|
|
- A number of texture lookups blended together in fragment shader
|
|
- Single or nested loops
|
|
- Single expression consisting of a variable number of vec4 multiplications
|
|
+ Shaders designed to stress compiler (note: in release 2012.4)
|
|
- High register pressure
|
|
- Lots of control flow
|
|
|
|
Excludes:
|
|
+ Shader functional testing
|
|
|
|
Description:
|
|
|
|
Shader compiler performance tests measure the time to compile GLSL shader programs.
|
|
The tests will take into account implementations that postpone final compilation
|
|
until execution of a draw call.
|
|
|
|
Separate cases are made for testing compilation time when avoiding cache hits and
|
|
when allowing them (note that tests that allow cache will be in release 2012.4).
|
|
Cache-avoiding cases use a different shader for different iterations of the same
|
|
test case, whereas cache-allowing cases use the same shader for all iterations.
|
|
Cache hits are however only ever allowed between the iterations of a case and not
|
|
across separate cases.
|
|
|
|
The method for defeating the shader cache is to append a postfix to all uniform,
|
|
attribute and varying names. The postfix depends on the current time as well as
|
|
the case that is in question. In case of cache-avoiding cases, the postfix also
|
|
depends on the current iteration. This method forces at least re-linking.
|
|
|
|
Front-end time is estimated by compiling invalid shaders with either an invalid
|
|
character at the end of the shader or an invalid statement at the end of the main()
|
|
block.
|
|
|
|
The result value is the average number of milliseconds used per test case
|
|
iteration. In cases that allow cache hits the average excludes the first
|
|
compilation.
|
|
|
|
Before any measurements are done, each test case first draws with a simple dummy
|
|
shader for warm-up.
|
|
|
|
Overview for valid shader cases:
|
|
- 1. Create program and shaders; compile and link
|
|
- 2. Set inputs and draw a small quad
|
|
- 3. Flush
|
|
- 4. Repeat without step 1
|
|
- 5. Compute difference of times measured for 1-3 and 4 and record it as
|
|
compilation time
|
|
- Repeat the above steps several times and compute average
|
|
|
|
Overview for invalid shader cases (front-end time estimation):
|
|
- 1. Create program and invalid shaders; compile (expect failure)
|
|
- 2. Record time measured for step 1
|
|
- Repeat the above steps several times and compute average
|