
git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@30038 e7fa87d3-cd2b-0410-9028-fcbf551c1848
165 lines
5.1 KiB
C++
165 lines
5.1 KiB
C++
//
|
|
//Copyright (C) 2014 LunarG, Inc.
|
|
//
|
|
//All rights reserved.
|
|
//
|
|
//Redistribution and use in source and binary forms, with or without
|
|
//modification, are permitted provided that the following conditions
|
|
//are met:
|
|
//
|
|
// Redistributions of source code must retain the above copyright
|
|
// notice, this list of conditions and the following disclaimer.
|
|
//
|
|
// Redistributions in binary form must reproduce the above
|
|
// copyright notice, this list of conditions and the following
|
|
// disclaimer in the documentation and/or other materials provided
|
|
// with the distribution.
|
|
//
|
|
// Neither the name of 3Dlabs Inc. Ltd. nor the names of its
|
|
// contributors may be used to endorse or promote products derived
|
|
// from this software without specific prior written permission.
|
|
//
|
|
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
//FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
//COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
//BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
//LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
//LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
//POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
//
|
|
// Author: John Kessenich, LunarG
|
|
//
|
|
|
|
//
|
|
// Return English versions of instruction/operand information.
|
|
// This can be used for disassembly, printing documentation, etc.
|
|
//
|
|
|
|
#include "spirv.h"
|
|
|
|
#include <vector>
|
|
|
|
namespace spv {
|
|
|
|
// Fill in all the parameters of the instruction set
|
|
void Parameterize();
|
|
|
|
// Return the English names of all the enums.
|
|
const char* SourceString(int);
|
|
const char* AddressingString(int);
|
|
const char* MemoryString(int);
|
|
const char* ExecutionModelString(int);
|
|
const char* ExecutionModeString(int);
|
|
const char* StorageClassString(int);
|
|
const char* DecorationString(int);
|
|
const char* BuiltInString(int);
|
|
const char* DimensionString(int);
|
|
const char* SelectControlString(int);
|
|
const char* LoopControlString(int);
|
|
const char* FunctionControlString(int);
|
|
const char* SamplerAddressingModeString(int);
|
|
const char* SamplerFilterModeString(int);
|
|
const char* FPFastMathString(int);
|
|
const char* FPRoundingModeString(int);
|
|
const char* LinkageTypeString(int);
|
|
const char* FuncParamAttrString(int);
|
|
const char* AccessQualifierString(int);
|
|
const char* MemorySemanticsString(int);
|
|
const char* MemoryAccessString(int);
|
|
const char* ExecutionScopeString(int);
|
|
const char* GroupOperationString(int);
|
|
const char* KernelEnqueueFlagsString(int);
|
|
const char* KernelProfilingInfoString(int);
|
|
|
|
// For parameterizing operands.
|
|
enum OperandClass {
|
|
OperandNone,
|
|
OperandId,
|
|
OperandOptionalId,
|
|
OperandVariableIds,
|
|
OperandVariableLiterals,
|
|
OperandVariableLiteralId,
|
|
OperandLiteralNumber,
|
|
OperandLiteralString,
|
|
OperandSource,
|
|
OperandExecutionModel,
|
|
OperandAddressing,
|
|
OperandMemory,
|
|
OperandExecutionMode,
|
|
OperandStorage,
|
|
OperandDimensionality,
|
|
OperandSamplerAddressingMode,
|
|
OperandSamplerFilterMode,
|
|
OperandFPFastMath,
|
|
OperandFPRoundingMode,
|
|
OperandLinkageType,
|
|
OperandFuncParamAttr,
|
|
OperandDecoration,
|
|
OperandBuiltIn,
|
|
OperandSelect,
|
|
OperandLoop,
|
|
OperandFunction,
|
|
OperandAccessQualifier,
|
|
OperandMemorySemantics,
|
|
OperandMemoryAccess,
|
|
OperandExecutionScope,
|
|
OperandGroupOperation,
|
|
OperandKernelEnqueueFlags,
|
|
OperandKernelProfilingInfo,
|
|
OperandCount
|
|
};
|
|
|
|
// Parameterize a set of operands with their OperandClass(es) and descriptions.
|
|
class OperandParameters {
|
|
public:
|
|
OperandParameters() { }
|
|
void push(OperandClass oc)
|
|
{
|
|
opClass.push_back(oc);
|
|
}
|
|
OperandClass getClass(int op) const { return opClass[op]; }
|
|
int getNum() const { return (int)opClass.size(); }
|
|
|
|
protected:
|
|
std::vector<OperandClass> opClass;
|
|
};
|
|
|
|
// Parameterize an instruction's logical format, including its known set of operands,
|
|
// per OperandParameters above.
|
|
class InstructionParameters {
|
|
public:
|
|
InstructionParameters() :
|
|
typePresent(true), // most normal, only exceptions have to be spelled out
|
|
resultPresent(true), // most normal, only exceptions have to be spelled out
|
|
opName(0)
|
|
{ }
|
|
|
|
void setResultAndType(bool r, bool t)
|
|
{
|
|
resultPresent = r;
|
|
typePresent = t;
|
|
}
|
|
|
|
bool hasResult() const { return resultPresent != 0; }
|
|
bool hasType() const { return typePresent != 0; }
|
|
|
|
const char* opName;
|
|
OperandParameters operands;
|
|
|
|
protected:
|
|
int typePresent : 1;
|
|
int resultPresent : 1;
|
|
};
|
|
|
|
// The set of objects that hold all the instruction/operand
|
|
// parameterization information.
|
|
extern InstructionParameters InstructionDesc[spv::OpCount];
|
|
|
|
}; // end namespace spv
|