Merge vk-gl-cts/vulkan-cts-1.1.5 into vk-gl-cts/vulkan-cts-1.1.6
authorAlexander Galazin <alexander.galazin@arm.com>
Wed, 16 Oct 2019 13:00:14 +0000 (15:00 +0200)
committerAlexander Galazin <alexander.galazin@arm.com>
Wed, 16 Oct 2019 13:00:14 +0000 (15:00 +0200)
Change-Id: I3b96cb8cde6cbfc585d717a94f2164739887726f

1  2 
external/vulkancts/framework/vulkan/vkPrograms.cpp

@@@ -21,7 -21,9 +21,7 @@@
   * \brief Program utilities.
   *//*--------------------------------------------------------------------*/
  
 -#if defined(DEQP_HAVE_SPIRV_TOOLS)
  #include "spirv-tools/optimizer.hpp"
 -#endif
  
  #include "qpInfo.h"
  
@@@ -47,7 -49,7 +47,7 @@@ using std::string
  using std::vector;
  using std::map;
  
 -#if defined(DE_DEBUG) && defined(DEQP_HAVE_SPIRV_TOOLS)
 +#if defined(DE_DEBUG)
  #     define VALIDATE_BINARIES        true
  #else
  #     define VALIDATE_BINARIES        false
@@@ -98,6 -100,8 +98,6 @@@ bool isSaneSpirVBinary (const ProgramBi
        return true;
  }
  
 -#if defined(DEQP_HAVE_SPIRV_TOOLS)
 -
  void optimizeCompiledBinary (vector<deUint32>& binary, int optimizationRecipe, const SpirvVersion spirvVersion)
  {
        spv_target_env targetEnv = SPV_ENV_VULKAN_1_0;
                case SPIRV_VERSION_1_1:
                case SPIRV_VERSION_1_2:
                case SPIRV_VERSION_1_3: targetEnv = SPV_ENV_VULKAN_1_1; break;
 +              case SPIRV_VERSION_1_4: targetEnv = SPV_ENV_VULKAN_1_1_SPIRV_1_4;       break;
                default:
                        TCU_THROW(InternalError, "Unexpected SPIR-V version requested");
        }
@@@ -146,8 -149,12 +146,8 @@@ ProgramBinary* createProgramBinaryFromS
                TCU_THROW(InternalError, "SPIR-V endianness translation not supported");
  }
  
 -#endif // defined(DEQP_HAVE_SPIRV_TOOLS)
 -
  } // anonymous
  
 -#if defined(DEQP_HAVE_SPIRV_TOOLS)
 -
  void validateCompiledBinary(const vector<deUint32>& binary, glu::ShaderProgramInfo* buildInfo, const SpirvValidatorOptions& options)
  {
        std::ostringstream validationLog;
@@@ -251,7 -258,7 +251,7 @@@ vk::ProgramBinary* shadercacheLoad (con
        deUint8*                bin                     = 0;
        char*                   source          = 0;
        deBool                  ok                      = true;
-       deBool                  diff;
+       deBool                  diff            = true;
        cacheFileMutex.lock();
  
        if (cacheFileIndex.count(hash) == 0)
                        source = new char[sourcelength + 1];
                        ok = fread(source, 1, sourcelength, file)                               == (size_t)sourcelength;
                        source[sourcelength] = 0;
+                       diff = shaderstring != std::string(source);
                }
-               diff = shaderstring != std::string(source);
                if (!ok || diff)
                {
                        // Mismatch, but may still exist in cache if there were hash collisions
@@@ -648,6 -655,24 +648,6 @@@ ProgramBinary* assembleProgram (const S
        return res;
  }
  
 -#else // !DEQP_HAVE_SPIRV_TOOLS
 -
 -ProgramBinary* buildProgram (const GlslSource&, glu::ShaderProgramInfo*, const tcu::CommandLine&)
 -{
 -      TCU_THROW(NotSupportedError, "GLSL to SPIR-V compilation not supported (DEQP_HAVE_GLSLANG not defined)");
 -}
 -
 -ProgramBinary* buildProgram (const HlslSource&, glu::ShaderProgramInfo*, const tcu::CommandLine&)
 -{
 -      TCU_THROW(NotSupportedError, "HLSL to SPIR-V compilation not supported (DEQP_HAVE_GLSLANG not defined)");
 -}
 -
 -ProgramBinary* assembleProgram (const SpirVAsmSource&, SpirVProgramInfo*, const tcu::CommandLine&)
 -{
 -      TCU_THROW(NotSupportedError, "SPIR-V assembly not supported (DEQP_HAVE_SPIRV_TOOLS not defined)");
 -}
 -#endif
 -
  void disassembleProgram (const ProgramBinary& program, std::ostream* dst)
  {
        if (program.getFormat() == PROGRAM_FORMAT_SPIRV)
@@@ -727,13 -752,7 +727,13 @@@ VkShaderStageFlagBits getVkShaderStage 
                VK_SHADER_STAGE_GEOMETRY_BIT,
                VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
                VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
 -              VK_SHADER_STAGE_COMPUTE_BIT
 +              VK_SHADER_STAGE_COMPUTE_BIT,
 +              VK_SHADER_STAGE_RAYGEN_BIT_NV,
 +              VK_SHADER_STAGE_ANY_HIT_BIT_NV,
 +              VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV,
 +              VK_SHADER_STAGE_MISS_BIT_NV,
 +              VK_SHADER_STAGE_INTERSECTION_BIT_NV,
 +              VK_SHADER_STAGE_CALLABLE_BIT_NV,
        };
  
        return de::getSizedArrayElement<glu::SHADERTYPE_LAST>(s_shaderStages, shaderType);
@@@ -745,8 -764,8 +745,8 @@@ vk::SpirvVersion getBaselineSpirvVersio
        return vk::SPIRV_VERSION_1_0;
  }
  
 -// Max supported versions for each vulkan version
 -vk::SpirvVersion getMaxSpirvVersionForAsm (const deUint32 vulkanVersion)
 +// Max supported versions for each Vulkan version, without requiring a Vulkan extension.
 +vk::SpirvVersion getMaxSpirvVersionForVulkan (const deUint32 vulkanVersion)
  {
        vk::SpirvVersion        result                  = vk::SPIRV_VERSION_LAST;
  
        return result;
  }
  
 -vk::SpirvVersion getMaxSpirvVersionForGlsl (const deUint32 vulkanVersion)
 +vk::SpirvVersion getMaxSpirvVersionForAsm (const deUint32 vulkanVersion)
  {
 -      vk::SpirvVersion        result                  = vk::SPIRV_VERSION_LAST;
 -
 -      deUint32 vulkanVersionMajorMinor = VK_MAKE_VERSION(VK_VERSION_MAJOR(vulkanVersion), VK_VERSION_MINOR(vulkanVersion), 0);
 -      if (vulkanVersionMajorMinor == VK_API_VERSION_1_0)
 -              result = vk::SPIRV_VERSION_1_0;
 -      else if (vulkanVersionMajorMinor >= VK_API_VERSION_1_1)
 -              result = vk::SPIRV_VERSION_1_3;
 -
 -      DE_ASSERT(result < vk::SPIRV_VERSION_LAST);
 +      return getMaxSpirvVersionForVulkan(vulkanVersion);
 +}
  
 -      return result;
 +vk::SpirvVersion getMaxSpirvVersionForGlsl (const deUint32 vulkanVersion)
 +{
 +      return getMaxSpirvVersionForVulkan(vulkanVersion);
  }
  
  SpirvVersion extractSpirvVersion (const ProgramBinary& binary)
  {
 -      DE_STATIC_ASSERT(SPIRV_VERSION_1_3 + 1 == SPIRV_VERSION_LAST);
 +      DE_STATIC_ASSERT(SPIRV_VERSION_1_4 + 1 == SPIRV_VERSION_LAST);
  
        if (binary.getFormat() != PROGRAM_FORMAT_SPIRV)
                TCU_THROW(InternalError, "Binary is not in SPIR-V format");
        const deUint32                          spirvBinaryVersion11    = 0x00010100;
        const deUint32                          spirvBinaryVersion12    = 0x00010200;
        const deUint32                          spirvBinaryVersion13    = 0x00010300;
 +      const deUint32                          spirvBinaryVersion14    = 0x00010400;
        const SpirvBinaryHeader*        header                                  = reinterpret_cast<const SpirvBinaryHeader*>(binary.getBinary());
        const deUint32                          spirvVersion                    = isNativeSpirVBinaryEndianness()
                                                                                                                ? header->version
                case spirvBinaryVersion11:      result = SPIRV_VERSION_1_1; break; //!< SPIR-V 1.1
                case spirvBinaryVersion12:      result = SPIRV_VERSION_1_2; break; //!< SPIR-V 1.2
                case spirvBinaryVersion13:      result = SPIRV_VERSION_1_3; break; //!< SPIR-V 1.3
 +              case spirvBinaryVersion14:      result = SPIRV_VERSION_1_4; break; //!< SPIR-V 1.4
                default:                                        TCU_THROW(InternalError, "Unknown SPIR-V version detected in binary");
        }
  
  
  std::string getSpirvVersionName (const SpirvVersion spirvVersion)
  {
 -      DE_STATIC_ASSERT(SPIRV_VERSION_1_3 + 1 == SPIRV_VERSION_LAST);
 +      DE_STATIC_ASSERT(SPIRV_VERSION_1_4 + 1 == SPIRV_VERSION_LAST);
        DE_ASSERT(spirvVersion < SPIRV_VERSION_LAST);
  
        std::string result;
                case SPIRV_VERSION_1_1: result = "1.1"; break; //!< SPIR-V 1.1
                case SPIRV_VERSION_1_2: result = "1.2"; break; //!< SPIR-V 1.2
                case SPIRV_VERSION_1_3: result = "1.3"; break; //!< SPIR-V 1.3
 +              case SPIRV_VERSION_1_4: result = "1.4"; break; //!< SPIR-V 1.4
                default:                                result = "Unknown";
        }