Home | History | Annotate | Download | only in SPIRV
      1 //
      2 // Copyright (C) 2014-2016 LunarG, Inc.
      3 // Copyright (C) 2018 Google, Inc.
      4 //
      5 // All rights reserved.
      6 //
      7 // Redistribution and use in source and binary forms, with or without
      8 // modification, are permitted provided that the following conditions
      9 // are met:
     10 //
     11 //    Redistributions of source code must retain the above copyright
     12 //    notice, this list of conditions and the following disclaimer.
     13 //
     14 //    Redistributions in binary form must reproduce the above
     15 //    copyright notice, this list of conditions and the following
     16 //    disclaimer in the documentation and/or other materials provided
     17 //    with the distribution.
     18 //
     19 //    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
     20 //    contributors may be used to endorse or promote products derived
     21 //    from this software without specific prior written permission.
     22 //
     23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     24 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     25 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     26 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     27 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     28 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     29 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     30 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     31 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     32 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     33 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     34 // POSSIBILITY OF SUCH DAMAGE.
     35 
     36 //
     37 // Call into SPIRV-Tools to disassemble, validate, and optimize.
     38 //
     39 
     40 #pragma once
     41 #ifndef GLSLANG_SPV_TOOLS_H
     42 #define GLSLANG_SPV_TOOLS_H
     43 
     44 #include <vector>
     45 #include <ostream>
     46 
     47 #include "../glslang/MachineIndependent/localintermediate.h"
     48 #include "Logger.h"
     49 
     50 namespace glslang {
     51 
     52 struct SpvOptions {
     53     SpvOptions() : generateDebugInfo(false), disableOptimizer(true),
     54         optimizeSize(false), disassemble(false), validate(false) { }
     55     bool generateDebugInfo;
     56     bool disableOptimizer;
     57     bool optimizeSize;
     58     bool disassemble;
     59     bool validate;
     60 };
     61 
     62 #if ENABLE_OPT
     63 
     64 // Use the SPIRV-Tools disassembler to print SPIR-V.
     65 void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
     66 
     67 // Apply the SPIRV-Tools validator to generated SPIR-V.
     68 void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
     69                         spv::SpvBuildLogger*);
     70 
     71 // Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of
     72 // legalizing HLSL SPIR-V.
     73 void SpirvToolsLegalize(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
     74                         spv::SpvBuildLogger*, const SpvOptions*);
     75 
     76 #endif
     77 
     78 }; // end namespace glslang
     79 
     80 #endif // GLSLANG_SPV_TOOLS_H