    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;
