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.
82 lines
2.9 KiB
82 lines
2.9 KiB
Specialization Constants tests
|
|
|
|
Tests:
|
|
+ dEQP-VK.pipeline.spec_constant.*
|
|
|
|
Includes:
|
|
+ Uses extended GLSL (KHR_vulkan_glsl) to specify shaders
|
|
(dependency on glslang)
|
|
+ Basic specialization constants (OpSpecConstant, OpSpecConstantTrue,
|
|
OpSpecConstantFalse instructions)
|
|
- No specialization info (default values)
|
|
- Partial and full specialization
|
|
- 32 bit boolean, integer and float types
|
|
- (optional) 16 and 64 bit types, where supported
|
|
+ Specialization constants in composites (OpSpecConstantComposite instruction)
|
|
- struct members
|
|
- array elements
|
|
- vector components
|
|
- matrix columns
|
|
+ Specialization constants in expressions (OpSpecConstantOp instruction)
|
|
- Array size
|
|
- (optional) Various instructions as listed in the spec
|
|
+ Compute shader work group size specialization
|
|
+ Built-in constant specialization (override the default value)
|
|
+ All of the above should be exercised with all applicable shader stages in
|
|
both pipeline types (compute and graphics).
|
|
|
|
Excludes:
|
|
+ SPIR-V assembly code
|
|
+ OpSpecConstantOp instructions are covered by assembly tests in
|
|
external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmInstructionTests.cpp
|
|
|
|
Notes:
|
|
+ SPIR-V generated from GLSL should be inspected for instruction coverage
|
|
and overall correctness before accepting the tests.
|
|
|
|
Description:
|
|
|
|
The tests will run various shader stages with some specialization constants.
|
|
Constant values are read in the shader, written to a SSBO, and read back from
|
|
a host-visible buffer. Depending on the test, none, some, or all specialization
|
|
constants are defined through VkSpecializationInfo. The test passes if the value
|
|
written by the shader matches the expected reference value (either the default
|
|
or a set specialized value).
|
|
|
|
For expression tests result of an operation is written to the output SSBO and
|
|
then compared to a reference operation result.
|
|
|
|
A test with no specialization info verifies that the default values defined in
|
|
the shader are used correctly. Specialization with one or more specialization
|
|
constants check if Vulkan structure is consumed correctly by the API.
|
|
|
|
Different types and type widths are tested to see if provided value is passed
|
|
correctly to the shader. The tests will use types and expressions similar to the
|
|
following (examples are not exhaustive):
|
|
|
|
// Basic specialization constants and const expressions
|
|
|
|
layout(constant_id = 7) const int foo = 3;
|
|
layout(constant_id = 9) const float bar = 6.5;
|
|
|
|
int data[foo];
|
|
int data2[foo + 2];
|
|
|
|
// Specialization constant expressions
|
|
|
|
const float expr_fadd = bar + 3.5; // OpFAdd
|
|
|
|
// Specialization constant composites
|
|
|
|
const vec3 sc_vec = vec3(1.0, bar, 3.0);
|
|
const int sc_array[4] = int[](foo, 2, 3, 4);
|
|
|
|
// Override work group size
|
|
|
|
layout(local_size_y_id = 19) in; // y=? (id=19)
|
|
layout(local_size_x_id = 20, local_size_z_id = 21) in; // x=? z=?
|
|
|
|
// Override Built-in constant
|
|
|
|
layout(constant_id = 13) gl_MaxImageUnits;
|