191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#!/usr/bin/bash 291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# script to generate code for LLVM/SPIR-V translator based on khronos 391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# header file spirv.hpp. 491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni###################### 891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# generate NameMap 1091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 1191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni###################### 1291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 1391585d9acd75a2bdbfd177bf56c8b9436f442152Yang NigenNameMap() { 1491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niprefix=$1 1591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niecho "template<> inline void 1691585d9acd75a2bdbfd177bf56c8b9436f442152Yang NiSPIRVMap<$prefix, std::string>::init() {" 1791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 1891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nicat $spirvHeader | sed -n -e "/^ *${prefix}[^a-z]/s:^ *${prefix}\([^= ][^= ]*\)[= ][= ]*\([0x]*[0-9][0-9]*\).*:\1 \2:p" | while read a b; do 1991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni printf " add(${prefix}%s, \"%s\");\n" $a $a 2091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nidone 2191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 2291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niecho "} 2391585d9acd75a2bdbfd177bf56c8b9436f442152Yang NiSPIRV_DEF_NAMEMAP($prefix, SPIRV${prefix}NameMap) 2491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni" 2591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 2691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 2791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 2891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni########################### 2991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 3091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# generate isValid function 3191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 3291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni########################### 3391585d9acd75a2bdbfd177bf56c8b9436f442152Yang NigenIsValid() { 3491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niprefix=$1 3591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niecho "inline bool 3691585d9acd75a2bdbfd177bf56c8b9436f442152Yang NiisValid(spv::$prefix V) { 3791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni switch(V) {" 3891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 3991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni cat $spirvHeader | sed -n -e "/^ *${prefix}[^a-z]/s:^ *${prefix}\([^= ][^= ]*\)[= ][= ]*\(.*\).*:\1 \2:p" | while read a b; do 4091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if [[ $a == CapabilityNone ]]; then 4191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni continue 4291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni fi 4391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni printf " case ${prefix}%s:\n" $a 4491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nidone 4591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 4691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niecho " return true; 4791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni default: 4891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return false; 4991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni } 5091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 5191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni" 5291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 5391585d9acd75a2bdbfd177bf56c8b9436f442152Yang NigenMaskIsValid() { 5491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niprefix=$1 5591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nisubprefix=`echo $prefix | sed -e "s:Mask::g"` 5691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niecho "inline bool 5791585d9acd75a2bdbfd177bf56c8b9436f442152Yang NiisValid$prefix(SPIRVWord Mask) { 5891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni SPIRVWord ValidMask = 0u;" 5991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 6091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni cat $spirvHeader | sed -n -e "/^ *${subprefix}[^a-z]/s:^ *${subprefix}\([^= ][^= ]*\)Mask[= ][= ]*\(.*\).*:\1 \2:p" | while read a b; do 6191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if [[ $a == None ]]; then 6291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni continue 6391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni fi 6491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni printf " ValidMask |= ${subprefix}%sMask;\n" $a 6591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nidone 6691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 6791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niecho " 6891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni return (Mask & ~ValidMask) == 0; 6991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 7091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni" 7191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 7291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 7391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni############################## 7491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 7591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# generate entries for td file 7691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 7791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni############################## 7891585d9acd75a2bdbfd177bf56c8b9436f442152Yang NigenTd() { 7991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niprefix=$1 8091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 8191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niif [[ $prefix == "Capability" ]]; then 8291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni echo "class SPIRV${prefix}_ {" 8391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nielse 8491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni echo "def SPIRV${prefix} : Operand<i32> { 8591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni let PrintMethod = \"printSPIRV${prefix}\"; 8691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni" 8791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nifi 8891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 8991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nicat $spirvHeader | sed -n -e "/^ *${prefix}[^a-z]/s:^ *${prefix}\([^= ][^= ]*\)[= ][= ]*\([0xX]*[0-9a-fA-F][0-9a-fA-F]*\).*:\1 \2:p" | while read a b; do 9091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if [[ $a == CapabilityNone ]]; then 9191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni continue 9291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni fi 9391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni printf " int %s = %s;\n" $a $b 9491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nidone 9591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 9691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niif [[ $prefix == "Capability" ]]; then 9791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni echo "} 9891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nidef SPIRV${prefix} : SPIRV${prefix}_; 9991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni" 10091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nielse 10191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni echo "} 10291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni" 10391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nifi 10491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 10591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 10691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nigen() { 10791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nitype=$1 10891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nifor prefix in SourceLanguage ExecutionModel AddressingModel MemoryModel ExecutionMode StorageClass Dim SamplerAddressingMode SamplerFilterMode ImageFormat \ 10991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni ImageChannelOrder ImageChannelDataType FPRoundingMode LinkageType AccessQualifier FunctionParameterAttribute Decoration BuiltIn Scope GroupOperation \ 11091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni KernelEnqueueFlags Capability Op; do 11191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if [[ "$type" == NameMap ]]; then 11291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni genNameMap $prefix 11391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni elif [[ "$type" == isValid ]]; then 11491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni genIsValid $prefix 11591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni elif [[ "$type" == td ]]; then 11691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni genTd $prefix 11791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni else 11891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni echo "invalid type \"$type\"." 11991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni exit 12091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni fi 12191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nidone 12291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nifor prefix in ImageOperandsMask FPFastMathModeMask SelectionControlMask LoopControlMask FunctionControlMask MemorySemanticsMask MemoryAccessMask \ 12391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni KernelProfilingInfoMask; do 12491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni if [[ "$type" == isValid ]]; then 12591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni genMaskIsValid $prefix 12691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni fi 12791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nidone 12891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni} 12991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 13091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#################### 13191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 13291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# main 13391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni# 13491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#################### 13591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 13691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niif [[ $# -ne 3 ]]; then 13791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni echo "usage: gen_spirv path_to_spirv.hpp [NameMap|isValid|td] output_file" 13891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni exit 13991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nifi 14091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 14191585d9acd75a2bdbfd177bf56c8b9436f442152Yang NispirvHeader=$1 14291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nitype=$2 14391585d9acd75a2bdbfd177bf56c8b9436f442152Yang NioutputFile=$3 14491585d9acd75a2bdbfd177bf56c8b9436f442152Yang NiincludeGuard="`echo ${outputFile} | tr '[:lower:]' '[:upper:]' | sed -e 's/\./_/g'`_" 14591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 14691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niecho "//===- ${outputFile} - SPIR-V ${type} enums ----------------*- C++ -*-===// 14791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 14891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// The LLVM/SPIRV Translator 14991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 15091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// This file is distributed under the University of Illinois Open Source 15191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// License. See LICENSE.TXT for details. 15291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 15391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// Copyright (c) 2014 Advanced Micro Devices, Inc. All rights reserved. 15491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 15591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// Permission is hereby granted, free of charge, to any person obtaining a 15691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// copy of this software and associated documentation files (the \"Software\"), 15791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// to deal with the Software without restriction, including without limitation 15891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// the rights to use, copy, modify, merge, publish, distribute, sublicense, 15991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// and/or sell copies of the Software, and to permit persons to whom the 16091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// Software is furnished to do so, subject to the following conditions: 16191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 16291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// Redistributions of source code must retain the above copyright notice, 16391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// this list of conditions and the following disclaimers. 16491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// Redistributions in binary form must reproduce the above copyright notice, 16591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// this list of conditions and the following disclaimers in the documentation 16691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// and/or other materials provided with the distribution. 16791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// Neither the names of Advanced Micro Devices, Inc., nor the names of its 16891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// contributors may be used to endorse or promote products derived from this 16991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// Software without specific prior written permission. 17091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 17591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH 17691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// THE SOFTWARE. 17791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 17891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni//===----------------------------------------------------------------------===// 17991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni/// \\file 18091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni/// 18191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni/// This file defines SPIR-V ${type} enums. 18291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni/// 18391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni//===----------------------------------------------------------------------===// 18491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// WARNING: 18591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// 18691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// This file has been generated using \`tools/spirv-tool/gen_spirv.bash\` and 18791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// should not be modified manually. If the file needs to be updated, edit the 18891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni// script and any other source file instead, before re-generating this file. 18991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni//===----------------------------------------------------------------------===// 19091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 19191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#ifndef ${includeGuard} 19291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#define ${includeGuard} 19391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 19491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#include \"spirv.hpp\" 19591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#include \"SPIRVEnum.h\" 19691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 19791585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niusing namespace spv; 19891585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 19991585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ninamespace SPIRV { 20091585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni" > ${outputFile} 20191585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 20291585d9acd75a2bdbfd177bf56c8b9436f442152Yang Nigen $type >> ${outputFile} 20391585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 20491585d9acd75a2bdbfd177bf56c8b9436f442152Yang Niecho "} /* namespace SPIRV */ 20591585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni 20691585d9acd75a2bdbfd177bf56c8b9436f442152Yang Ni#endif /* ${includeGuard} */" >> ${outputFile} 207